zigbee-steward

所属分类:编程语言基础
开发工具:GO
文件大小:0KB
下载次数:0
上传日期:2020-01-21 19:28:23
上 传 者sh-1993
说明:  ZigBee中心,
(ZigBee hub,)

文件列表:
.drone.yml (90, 2020-01-21)
LICENSE (1070, 2020-01-21)
channels.go (693, 2020-01-21)
configuration/ (0, 2020-01-21)
configuration/configuration.go (617, 2020-01-21)
coordinator/ (0, 2020-01-21)
coordinator/coordinator.go (15546, 2020-01-21)
coordinator/types.go (436, 2020-01-21)
db/ (0, 2020-01-21)
db/db.go (2334, 2020-01-21)
example/ (0, 2020-01-21)
example/example.go (2760, 2020-01-21)
functions/ (0, 2020-01-21)
functions/functions.go (756, 2020-01-21)
functions/functions_cluster.go (276, 2020-01-21)
functions/functions_cluster_global.go (1978, 2020-01-21)
functions/functions_cluster_local.go (2114, 2020-01-21)
functions/functions_cluster_local_level_control.go (1747, 2020-01-21)
functions/functions_cluster_local_onoff.go (1215, 2020-01-21)
functions/functions_generic.go (912, 2020-01-21)
go.mod (540, 2020-01-21)
logger/ (0, 2020-01-21)
logger/logger.go (1678, 2020-01-21)
model/ (0, 2020-01-21)
model/cluster.go (91, 2020-01-21)
model/device.go (1546, 2020-01-21)
model/device_incoming_message.go (154, 2020-01-21)
model/endpoint.go (184, 2020-01-21)
steward.go (7749, 2020-01-21)

# ZigBee-Steward [![Build Status](https://cloud.drone.io/api/badges/dyrkin/zigbee-steward/status.svg??branch=master)](https://cloud.drone.io/dyrkin/zigbee-steward) ## Overview Bla bla bla ## Example In this example, we are going to send **toggle** command to IKEA TRDFRI bulb using Xiaomi Aqara Wireless Remote Switch. To prepare, follow the steps: 1. Connect ZigBee stick cc2531 to USB; 2. Flash it using instruction: https://www.zigbee2mqtt.io/getting_started/flashing_the_cc2531.html; 3. Run the example; 4. Pair IKEA TRDFRI bulb by repeating 6 ONs and 5 OFFs one by one (ON -> OFF, ON -> OFF, ON -> OFF, ON -> OFF, ON -> OFF, ON); 5. Pair Xiaomi Aqara Wireless Remote Switch by holding the button for ~10 seconds until blue LEDs start blinking. Now you can toggle the bulb using the remote switch. Just click on it. ```go import ( "fmt" "github.com/davecgh/go-spew/spew" "github.com/dyrkin/zcl-go/cluster" "github.com/dyrkin/zigbee-steward" "github.com/dyrkin/zigbee-steward/configuration" "github.com/dyrkin/zigbee-steward/model" "sync" ) //simple device database var devices = map[string]*model.Device{} func main() { conf := configuration.Default() conf.PermitJoin = true stewie := steward.New(conf) eventListener := func() { for { select { case device := <-stewie.Channels().OnDeviceRegistered(): saveDevice(device) case device := <-stewie.Channels().OnDeviceUnregistered(): deleteDevice(device) case device := <-stewie.Channels().OnDeviceBecameAvailable(): saveDevice(device) case deviceIncomingMessage := <-stewie.Channels().OnDeviceIncomingMessage(): fmt.Printf("Device received incoming message:\n%s", spew.Sdump(deviceIncomingMessage)) toggleIkeaBulb(stewie, deviceIncomingMessage) } } } go eventListener() stewie.Start() infiniteWait() } func toggleIkeaBulb(stewie *steward.Steward, message *model.DeviceIncomingMessage) { if isXiaomiButtonSingleClick(message) { if ikeaBulb, registered := devices["TRADFRI bulb E27 W opal 1000lm"]; registered { toggleTarget(stewie, ikeaBulb.NetworkAddress) } else { fmt.Println("IKEA bulb is not available") } } } func toggleTarget(stewie *steward.Steward, networkAddress string) { go func() { stewie.Functions().Cluster().Local().OnOff().Toggle(networkAddress, 0xFF) }() } func isXiaomiButtonSingleClick(message *model.DeviceIncomingMessage) bool { command, ok := message.IncomingMessage.Data.Command.(*cluster.ReportAttributesCommand) return ok && message.Device.Manufacturer == "LUMI" && message.Device.Model == "lumi.remote.b186acn01\x00\x00\x00" && isSingleClick(command) } func isSingleClick(command *cluster.ReportAttributesCommand) bool { click, ok := command.AttributeReports[0].Attribute.Value.(uint64) return ok && click == uint64(1) } func saveDevice(device *model.Device) { fmt.Printf("Registering device:\n%s", spew.Sdump(device)) devices[device.Model] = device } func deleteDevice(device *model.Device) { fmt.Printf("Unregistering device:\n%s", spew.Sdump(device)) delete(devices, device.Model) } func infiniteWait() { wg := &sync.WaitGroup{} wg.Add(1) wg.Wait() } ``` Full [examples](example/example.go)

近期下载者

相关文件


收藏者