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

Refactoring in progress

parent dfe1db87
No related branches found
No related tags found
No related merge requests found
package main package main
import (
"strings"
"gitlab.imt-atlantique.fr/xaal/code/go/core/uuid"
)
// newXAALDevices creates new xAAL devices from a bridge device
func newXAALDevices(gw *Gateway, zDev *Z2MDevice) {
// TODO: Handle errors
baseAddr := gw.baseAddr
ieeeAddr, _ := hexStringToInteger(zDev.IeeeAddress)
baseAddr, _ = baseAddr.Add(int64(ieeeAddr))
for i, expose := range zDev.Definition.Exposes {
addr, _ := baseAddr.Add(int64(i))
grpAdd, _ := baseAddr.Add(int64(0xff))
var dev XAALDeviceInterface
deviceMap := map[string]func(uuid.UUID, *Z2MDevice) XAALDeviceInterface{
"contact": NewContact,
"temperature": NewThermometer,
"humidity": NewHygrometer,
"linkquality": NewLinkQuality,
"battery": NewBattery,
"power": NewPowerMeter,
"action": NewButtonRemote,
}
if createFunc, ok := deviceMap[expose.Name]; ok {
dev = createFunc(addr, zDev)
} else if expose.Type == "switch" {
property := "state"
for _, exp := range expose.Features {
if strings.Contains(exp.Property, "state") {
property = exp.Property
break
}
}
dev = NewPowerRelay(addr, zDev, property)
} else if expose.Type == "light" {
dev = NewLamp(addr, zDev)
}
if dev != nil {
zDev.XAALDevices = append(zDev.XAALDevices, dev)
xaalDev := dev.getXAALDevice()
xaalDev.GroupID = grpAdd
gw.engine.AddDevice(xaalDev)
}
}
}
...@@ -9,6 +9,7 @@ import ( ...@@ -9,6 +9,7 @@ import (
MQTT "github.com/eclipse/paho.mqtt.golang" MQTT "github.com/eclipse/paho.mqtt.golang"
"github.com/jedib0t/go-pretty/v6/table" "github.com/jedib0t/go-pretty/v6/table"
"gitlab.imt-atlantique.fr/xaal/code/go/core/uuid"
) )
const ( const (
...@@ -161,6 +162,52 @@ func (zDev *Z2MDevice) HandleMessage(msg MQTT.Message) { ...@@ -161,6 +162,52 @@ func (zDev *Z2MDevice) HandleMessage(msg MQTT.Message) {
} }
} }
// creates new xAAL devices from a bridge device
func (zDev *Z2MDevice) newXAALDevices(gw *Gateway) {
// TODO: Handle errors
baseAddr := gw.baseAddr
ieeeAddr, _ := hexStringToInteger(zDev.IeeeAddress)
baseAddr, _ = baseAddr.Add(int64(ieeeAddr))
for i, expose := range zDev.Definition.Exposes {
addr, _ := baseAddr.Add(int64(i))
grpAdd, _ := baseAddr.Add(int64(0xff))
var dev XAALDeviceInterface
deviceMap := map[string]func(uuid.UUID, *Z2MDevice) XAALDeviceInterface{
"contact": NewContact,
"temperature": NewThermometer,
"humidity": NewHygrometer,
"linkquality": NewLinkQuality,
"battery": NewBattery,
"power": NewPowerMeter,
"action": NewButtonRemote,
}
if createFunc, ok := deviceMap[expose.Name]; ok {
dev = createFunc(addr, zDev)
} else if expose.Type == "switch" {
property := "state"
for _, exp := range expose.Features {
if strings.Contains(exp.Property, "state") {
property = exp.Property
break
}
}
dev = NewPowerRelay(addr, zDev, property)
} else if expose.Type == "light" {
dev = NewLamp(addr, zDev)
}
if dev != nil {
zDev.XAALDevices = append(zDev.XAALDevices, dev)
xaalDev := dev.getXAALDevice()
xaalDev.GroupID = grpAdd
gw.engine.AddDevice(xaalDev)
}
}
}
// jsonParseDevices parses the bridge/devices json and creates new xAAL devices // jsonParseDevices parses the bridge/devices json and creates new xAAL devices
// if they don't exist // if they don't exist
func jsonParseDevices(jsonData []byte) { func jsonParseDevices(jsonData []byte) {
...@@ -177,8 +224,7 @@ func jsonParseDevices(jsonData []byte) { ...@@ -177,8 +224,7 @@ func jsonParseDevices(jsonData []byte) {
continue continue
} }
zDev.dump() zDev.dump()
newXAALDevices(gw, &zDev) zDev.newXAALDevices(gw)
// TODO: filter if device already exists
gw.AddZDevice(&zDev) gw.AddZDevice(&zDev)
zDev.Sync() zDev.Sync()
// zDev.Available() // zDev.Available()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment