gobot.io/x/gobot@v1.16.0/examples/batty.go (about) 1 // +build example 2 // 3 // Do not build by default. 4 5 package main 6 7 import ( 8 "fmt" 9 "time" 10 11 "gobot.io/x/gobot" 12 "gobot.io/x/gobot/api" 13 ) 14 15 func main() { 16 gbot := gobot.NewMaster() 17 18 api.NewAPI(gbot).Start() 19 20 gbot.AddCommand("echo", func(params map[string]interface{}) interface{} { 21 return params["a"] 22 }) 23 24 loopback := NewLoopbackAdaptor("/dev/null") 25 ping := NewPingDriver(loopback, "1") 26 27 work := func() { 28 gobot.Every(5*time.Second, func() { 29 fmt.Println(ping.Ping()) 30 }) 31 } 32 r := gobot.NewRobot("TestBot", 33 []gobot.Connection{loopback}, 34 []gobot.Device{ping}, 35 work, 36 ) 37 38 r.AddCommand("hello", func(params map[string]interface{}) interface{} { 39 return fmt.Sprintf("Hello, %v!", params["greeting"]) 40 }) 41 42 gbot.AddRobot(r) 43 gbot.Start() 44 } 45 46 var _ gobot.Adaptor = (*loopbackAdaptor)(nil) 47 48 type loopbackAdaptor struct { 49 name string 50 port string 51 } 52 53 func (t *loopbackAdaptor) Finalize() (err error) { return } 54 func (t *loopbackAdaptor) Connect() (err error) { return } 55 func (t *loopbackAdaptor) Name() string { return t.name } 56 func (t *loopbackAdaptor) SetName(n string) { t.name = n } 57 func (t *loopbackAdaptor) Port() string { return t.port } 58 59 func NewLoopbackAdaptor(port string) *loopbackAdaptor { 60 return &loopbackAdaptor{ 61 name: "Loopback", 62 port: port, 63 } 64 } 65 66 var _ gobot.Driver = (*pingDriver)(nil) 67 68 type pingDriver struct { 69 name string 70 pin string 71 connection gobot.Connection 72 gobot.Eventer 73 gobot.Commander 74 } 75 76 func (t *pingDriver) Start() (err error) { return } 77 func (t *pingDriver) Halt() (err error) { return } 78 func (t *pingDriver) Name() string { return t.name } 79 func (t *pingDriver) SetName(n string) { t.name = n } 80 func (t *pingDriver) Pin() string { return t.pin } 81 func (t *pingDriver) Connection() gobot.Connection { return t.connection } 82 83 func NewPingDriver(adaptor *loopbackAdaptor, pin string) *pingDriver { 84 t := &pingDriver{ 85 name: "Ping", 86 connection: adaptor, 87 pin: pin, 88 Eventer: gobot.NewEventer(), 89 Commander: gobot.NewCommander(), 90 } 91 92 t.AddEvent("ping") 93 94 t.AddCommand("ping", func(params map[string]interface{}) interface{} { 95 return t.Ping() 96 }) 97 98 return t 99 } 100 101 func (t *pingDriver) Ping() string { 102 t.Publish(t.Event("ping"), "ping") 103 return "pong" 104 }