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

Refactoring in progress

parent dfe1db87
Branches
No related tags found
No related merge requests found
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 (
MQTT "github.com/eclipse/paho.mqtt.golang"
"github.com/jedib0t/go-pretty/v6/table"
"gitlab.imt-atlantique.fr/xaal/code/go/core/uuid"
)
const (
......@@ -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
// if they don't exist
func jsonParseDevices(jsonData []byte) {
......@@ -177,8 +224,7 @@ func jsonParseDevices(jsonData []byte) {
continue
}
zDev.dump()
newXAALDevices(gw, &zDev)
// TODO: filter if device already exists
zDev.newXAALDevices(gw)
gw.AddZDevice(&zDev)
zDev.Sync()
// zDev.Available()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment