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)
近期下载者:
相关文件:
收藏者: