Skip to content

Instantly share code, notes, and snippets.

@MrEhbr

MrEhbr/main.go Secret

Created September 18, 2020 16:46
Show Gist options
  • Save MrEhbr/c77e606eb732c150a2ce48bcf95061a1 to your computer and use it in GitHub Desktop.
Save MrEhbr/c77e606eb732c150a2ce48bcf95061a1 to your computer and use it in GitHub Desktop.
package main
import (
"context"
"log"
"time"
"github.com/shimmeringbee/da"
"github.com/shimmeringbee/da/capabilities"
"github.com/shimmeringbee/zda"
"github.com/shimmeringbee/zigbee"
"github.com/shimmeringbee/zstack"
"go.bug.st/serial"
)
func main() {
mode := &serial.Mode{
BaudRate: 115200,
}
port, err := serial.Open("/dev/tty.usbmodem14201", mode)
if err != nil {
log.Fatal(err)
}
if err := port.SetRTS(true); err != nil {
log.Fatal(err)
}
z := zstack.New(port)
netCfg, _ := zigbee.GenerateNetworkConfiguration()
ctx, cancel := context.WithTimeout(context.Background(), 2*time.Minute)
defer cancel()
log.Println("Initialise zstack")
err = z.Initialise(ctx, netCfg)
if err != nil {
log.Fatal("failed to initialise", err)
}
log.Println("creating gate")
gate := zda.New(z)
discovery := gate.Capability(capabilities.DeviceDiscoveryFlag).(capabilities.DeviceDiscovery)
log.Println("starting discovery")
if err := discovery.Enable(context.Background(), gate.Self(), 5*time.Minute); err != nil {
log.Fatal("failed to start discovery", err)
}
log.Println("starting gate")
if err := gate.Start(); err != nil {
log.Fatal("failed to start gate", err)
}
go loop(gate)
go func(gate *zda.ZigbeeGateway) {
for range time.NewTicker(60 * time.Second).C {
for _, dev := range gate.Devices() {
if da.DeviceIsNotGatewaySelf(gate, dev) {
enum := gate.Capability(capabilities.EnumerateDeviceFlag).(capabilities.EnumerateDevice)
err := enum.Enumerate(context.Background(), dev)
if err != nil {
log.Fatal("failed to ennumerate dev info", err)
}
}
}
}
}(gate)
select {}
}
func loop(gate *zda.ZigbeeGateway) {
log.Println("Main loop")
for {
event, err := gate.ReadEvent(context.Background())
if err != nil {
log.Println("failed to read event", err)
continue
}
log.Printf("got event %T \n", event)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment