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