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

Renamming

parent d26d7d2d
No related branches found
No related tags found
No related merge requests found
......@@ -10,22 +10,22 @@ import (
)
// setupDevice sets up the xAAL device with the bridge device information
func setupDevice(dev *xaal.Device, bDev *BridgeDevice) {
dev.VendorID = bDev.Definition.Vendor
dev.ProductID = bDev.Definition.Model
dev.HWID = bDev.IeeeAddress
dev.Version = bDev.SwBuildID
dev.Info = "z2m:" + bDev.Type + ":" + bDev.FriendlyName
func setupDevice(dev *xaal.Device, zDev *Z2MDevice) {
dev.VendorID = zDev.Definition.Vendor
dev.ProductID = zDev.Definition.Model
dev.HWID = zDev.IeeeAddress
dev.Version = zDev.SwBuildID
dev.Info = "z2m:" + zDev.Type + ":" + zDev.FriendlyName
}
// newDevices creates new xAAL devices from a bridge device
func newDevices(gw *gateway, bDev *BridgeDevice) {
func newDevices(gw *Gateway, zDev *Z2MDevice) {
// TODO: Handle errors
baseAddr := gw.baseAddr
ieeeAddr, _ := hexStringToInteger(bDev.IeeeAddress)
ieeeAddr, _ := hexStringToInteger(zDev.IeeeAddress)
baseAddr, _ = baseAddr.Add(int64(ieeeAddr))
for i, expose := range bDev.Definition.Exposes {
for i, expose := range zDev.Definition.Exposes {
addr, _ := baseAddr.Add(int64(i))
var dev *xaal.Device
......@@ -48,17 +48,17 @@ func newDevices(gw *gateway, bDev *BridgeDevice) {
}
if dev != nil {
setupDevice(dev, bDev)
setupDevice(dev, zDev)
// dev.Dump()
bDev.XAALDevice = append(bDev.XAALDevice, dev)
zDev.XAALDevice = append(zDev.XAALDevice, dev)
gw.engine.AddDevice(dev)
}
}
}
func updateXAALDevice(bDev *BridgeDevice, payload map[string]interface{}) {
slog.Info("Updating device:", "name", bDev.FriendlyName)
for _, dev := range bDev.XAALDevice {
func updateXAALDevice(zDev *Z2MDevice, payload map[string]interface{}) {
slog.Info("Updating device:", "name", zDev.FriendlyName)
for _, dev := range zDev.XAALDevice {
for key, value := range payload {
if key == "contact" && dev.DevType == "contact.basic" {
dev.GetAttribute("detected").SetValue(!value.(bool))
......
......@@ -7,42 +7,42 @@ import (
"gitlab.imt-atlantique.fr/xaal/code/go/core/xaal"
)
type gateway struct {
type Gateway struct {
engine *xaal.Engine
devices map[string]*BridgeDevice
devices map[string]*Z2MDevice
baseAddr uuid.UUID
}
var (
instance *gateway
instance *Gateway
once sync.Once
)
func GetGW() *gateway {
func GetGW() *Gateway {
once.Do(func() {
baseAdrr, _ := uuid.FromString("64eacb5a-8181-11ef-0000-000000000000")
instance = &gateway{baseAddr: baseAdrr, devices: make(map[string]*BridgeDevice)}
instance = &Gateway{baseAddr: baseAdrr, devices: make(map[string]*Z2MDevice)}
})
return instance
}
func NewGW() *gateway {
func NewGW() *Gateway {
return GetGW()
}
func (gw *gateway) GetDevice(name string) *BridgeDevice {
func (gw *Gateway) GetZDevice(name string) *Z2MDevice {
return gw.devices[name]
}
func (gw *gateway) AddDevice(bDev *BridgeDevice) {
gw.devices[bDev.FriendlyName] = bDev
func (gw *Gateway) AddZDevice(zDev *Z2MDevice) {
gw.devices[zDev.FriendlyName] = zDev
}
func (gw *gateway) GetDevices() map[string]*BridgeDevice {
func (gw *Gateway) GetZDevices() map[string]*Z2MDevice {
return gw.devices
}
func (gw *gateway) GetDeviceByTopic(topic string) *BridgeDevice {
func (gw *Gateway) GetZDeviceByTopic(topic string) *Z2MDevice {
name := topic[len(mqttTopic+"/"):]
return gw.GetDevice(name)
return gw.GetZDevice(name)
}
......@@ -36,7 +36,7 @@ var ignoredTopics = []string{
}
// JSON structures for the z2m device from /bridge/devices
type BridgeDevice struct {
type Z2MDevice struct {
Definition struct {
Vendor string `json:"vendor"`
Model string `json:"model"`
......@@ -67,12 +67,12 @@ type Feature struct {
Access int `json:"access,omitempty"`
}
func (bDev *BridgeDevice) GetTopic() string {
return mqttTopic + "/" + bDev.FriendlyName
func (zDev *Z2MDevice) GetTopic() string {
return mqttTopic + "/" + zDev.FriendlyName
}
func (bDev *BridgeDevice) SetTopic() string {
return bDev.GetTopic() + "/set"
func (zDev *Z2MDevice) SetTopic() string {
return zDev.GetTopic() + "/set"
}
func (l AccessLevel) String() string {
......@@ -84,22 +84,22 @@ func (l AccessLevel) EnumIndex() int {
return int(l)
}
func (bDev *BridgeDevice) dump() {
func (zDev *Z2MDevice) dump() {
tab := table.NewWriter()
tab.SetTitle("Def:" + bDev.FriendlyName)
tab.SetTitle("Def:" + zDev.FriendlyName)
tab.SetStyle(table.StyleRounded)
tab.AppendRow(table.Row{"IeeeAddr", bDev.IeeeAddress})
tab.AppendRow(table.Row{"Vendor", bDev.Definition.Vendor})
tab.AppendRow(table.Row{"Model", bDev.Definition.Model})
tab.AppendRow(table.Row{"Type", bDev.Type})
tab.AppendRow(table.Row{"IeeeAddr", zDev.IeeeAddress})
tab.AppendRow(table.Row{"Vendor", zDev.Definition.Vendor})
tab.AppendRow(table.Row{"Model", zDev.Definition.Model})
tab.AppendRow(table.Row{"Type", zDev.Type})
fmt.Println(tab.Render())
if len(bDev.Definition.Exposes) > 0 {
if len(zDev.Definition.Exposes) > 0 {
expTab := table.NewWriter()
expTab.SetTitle("Exp:" + bDev.FriendlyName)
expTab.SetTitle("Exp:" + zDev.FriendlyName)
expTab.SetStyle(table.StyleRounded)
expTab.AppendHeader(table.Row{"Name", "Type", "Acc", "Unit", "Values", "Features: Name[Type]-Acc-(Unit){Property}"})
for _, expose := range bDev.Definition.Exposes {
for _, expose := range zDev.Definition.Exposes {
values := ""
if len(expose.Values) > 0 {
values = strings.Join(expose.Values, "\n")
......@@ -120,33 +120,33 @@ func (bDev *BridgeDevice) dump() {
// jsonParseDevices parses the bridge/devices json and creates new xAAL devices
// if they don't exist
func jsonParseDevices(jsonData []byte) {
var devices []BridgeDevice
var devices []Z2MDevice
err := json.Unmarshal([]byte(jsonData), &devices)
if err != nil {
slog.Error("Error decoding JSON", "err", err)
}
gw := GetGW()
for _, bDev := range devices {
known := gw.GetDevice(bDev.FriendlyName)
for _, zDev := range devices {
known := gw.GetZDevice(zDev.FriendlyName)
if known != nil {
continue
}
bDev.dump()
newDevices(gw, &bDev)
zDev.dump()
newDevices(gw, &zDev)
// TODO: filter if device already exists
gw.AddDevice(&bDev)
gw.AddZDevice(&zDev)
}
}
// mqttDeviceHandler updates the xAAL device with the MQTT message
func mqttDeviceHandler(bDev *BridgeDevice, msg MQTT.Message) {
func mqttDeviceHandler(zDev *Z2MDevice, msg MQTT.Message) {
var data map[string]interface{}
err := json.Unmarshal(msg.Payload(), &data)
if err != nil {
slog.Error("Error decoding JSON", "err", err)
} else {
updateXAALDevice(bDev, data)
updateXAALDevice(zDev, data)
}
}
......@@ -190,7 +190,7 @@ func mqttPublishHander(client MQTT.Client, msg MQTT.Message) {
if msg.Topic() == mqttTopic+"/bridge/devices" {
jsonParseDevices(msg.Payload())
} else {
dev := GetGW().GetDeviceByTopic(msg.Topic())
dev := GetGW().GetZDeviceByTopic(msg.Topic())
mqttDumpMsg(msg)
if dev != nil {
mqttDeviceHandler(dev, msg)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment