Skip to content
Snippets Groups Projects
Commit ac745cb1 authored by KERDREUX Jerome's avatar KERDREUX Jerome
Browse files

We can now add or remove zigbee devices

We can now add or remove zigbee devices without restarting the app.
parent 647c8577
No related branches found
No related tags found
No related merge requests found
......@@ -30,11 +30,21 @@ func (gw *Gateway) GetZDevice(name string) *Z2MDevice {
}
func (gw *Gateway) AddZDevice(zDev *Z2MDevice) {
for _, xDev := range zDev.XAALDevices {
dev := xDev.getXAALDevice()
slog.Debug("Adding device", "dev", dev.String())
gw.Engine.AddDevice(dev)
}
gw.Devices[zDev.FriendlyName] = zDev
zDev.Gateway = gw
}
func (gw *Gateway) RemoveZDevice(zDev *Z2MDevice) {
for _, xDev := range zDev.XAALDevices {
dev := xDev.getXAALDevice()
slog.Debug("Removing device", "dev", dev.String())
gw.Engine.RemoveDevice(dev)
}
zDev.Gateway = nil
delete(gw.Devices, zDev.FriendlyName)
}
......@@ -72,20 +82,37 @@ func (gw *Gateway) mqttPublishHander(client mqtt.Client, msg mqtt.Message) {
// if they don't exist
func (gw *Gateway) jsonParseDevices(msg mqtt.Message) {
var devices []Z2MDevice
slog.Debug("Parsing devices")
err := json.Unmarshal(msg.Payload(), &devices)
if err != nil {
slog.Error("Error decoding JSON", "err", err)
}
// search for new devices
for _, zDev := range devices {
known := gw.GetZDevice(zDev.FriendlyName)
if known != nil {
continue
}
slog.Debug("Found new device", "name", zDev.FriendlyName)
zDev.Dump()
zDev.setupXAALDevices(gw)
gw.AddZDevice(&zDev)
zDev.Sync()
// zDev.Available()
}
// search for deleted devices
for _, zDev := range gw.GetZDevices() {
found := false
for _, dev := range devices {
if dev.FriendlyName == zDev.FriendlyName {
found = true
break
}
}
if !found {
slog.Debug("Device removed", "name", zDev.FriendlyName)
gw.RemoveZDevice(zDev)
}
}
}
......@@ -125,7 +125,6 @@ func (zDev *Z2MDevice) setupXAALDevices(gw *Gateway) {
zDev.XAALDevices = append(zDev.XAALDevices, dev)
xaalDev := dev.getXAALDevice()
xaalDev.GroupID = grpAdd
gw.Engine.AddDevice(xaalDev)
}
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment