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

Added support for more than one switche (state_l1, state_l2 ..)

parent 4e0799e6
No related branches found
No related tags found
No related merge requests found
...@@ -2,6 +2,7 @@ package main ...@@ -2,6 +2,7 @@ package main
import ( import (
"log/slog" "log/slog"
"strings"
"gitlab.imt-atlantique.fr/xaal/code/go/core/uuid" "gitlab.imt-atlantique.fr/xaal/code/go/core/uuid"
) )
...@@ -31,7 +32,14 @@ func newDevices(gw *Gateway, zDev *Z2MDevice) { ...@@ -31,7 +32,14 @@ func newDevices(gw *Gateway, zDev *Z2MDevice) {
if createFunc, ok := deviceMap[expose.Name]; ok { if createFunc, ok := deviceMap[expose.Name]; ok {
dev = createFunc(addr, zDev) dev = createFunc(addr, zDev)
} else if expose.Type == "switch" { } else if expose.Type == "switch" {
dev = NewPowerRelay(addr, zDev) 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" { } else if expose.Type == "light" {
dev = NewLamp(addr, zDev) dev = NewLamp(addr, zDev)
} }
......
package main package main
import ( import (
"fmt"
"math" "math"
"gitlab.imt-atlantique.fr/xaal/code/go/core/schemas" "gitlab.imt-atlantique.fr/xaal/code/go/core/schemas"
...@@ -35,6 +36,7 @@ type Battery struct { ...@@ -35,6 +36,7 @@ type Battery struct {
type PowerRelay struct { type PowerRelay struct {
XAALDevice XAALDevice
Z2MDevice Z2MDevice
Property string
} }
type Lamp struct { type Lamp struct {
...@@ -133,8 +135,8 @@ func (dev *Battery) update(payload map[string]interface{}) { ...@@ -133,8 +135,8 @@ func (dev *Battery) update(payload map[string]interface{}) {
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// PowerRelay // PowerRelay
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
func NewPowerRelay(addr uuid.UUID, zDev *Z2MDevice) XAALDeviceInterface { func NewPowerRelay(addr uuid.UUID, zDev *Z2MDevice, property string) XAALDeviceInterface {
dev := &PowerRelay{XAALDevice{schemas.NewPowerrelayToggle(addr)}, *zDev} dev := &PowerRelay{XAALDevice{schemas.NewPowerrelayToggle(addr)}, *zDev, property}
dev.SetMethod("turn_on", dev.On) dev.SetMethod("turn_on", dev.On)
dev.SetMethod("turn_off", dev.Off) dev.SetMethod("turn_off", dev.Off)
dev.SetMethod("toggle", dev.Toggle) dev.SetMethod("toggle", dev.Toggle)
...@@ -143,7 +145,7 @@ func NewPowerRelay(addr uuid.UUID, zDev *Z2MDevice) XAALDeviceInterface { ...@@ -143,7 +145,7 @@ func NewPowerRelay(addr uuid.UUID, zDev *Z2MDevice) XAALDeviceInterface {
} }
func (dev *PowerRelay) update(payload map[string]interface{}) { func (dev *PowerRelay) update(payload map[string]interface{}) {
value := payload["state"].(string) value := payload[dev.Property].(string)
power := dev.GetAttribute("power") power := dev.GetAttribute("power")
if value == "ON" { if value == "ON" {
power.SetValue(true) power.SetValue(true)
...@@ -152,18 +154,23 @@ func (dev *PowerRelay) update(payload map[string]interface{}) { ...@@ -152,18 +154,23 @@ func (dev *PowerRelay) update(payload map[string]interface{}) {
} }
} }
func (dev *PowerRelay) SetProperty(value string) {
body := fmt.Sprintf(`{"%s": "%s"}`, dev.Property, value)
dev.Z2MDevice.Send(body)
}
func (dev *PowerRelay) On(xaal.MessageBody) *xaal.MessageBody { func (dev *PowerRelay) On(xaal.MessageBody) *xaal.MessageBody {
dev.Z2MDevice.Send(`{"state": "ON"}`) dev.SetProperty("ON")
return nil return nil
} }
func (dev *PowerRelay) Off(xaal.MessageBody) *xaal.MessageBody { func (dev *PowerRelay) Off(xaal.MessageBody) *xaal.MessageBody {
dev.Z2MDevice.Send(`{"state": "OFF"}`) dev.SetProperty("OFF")
return nil return nil
} }
func (dev *PowerRelay) Toggle(xaal.MessageBody) *xaal.MessageBody { func (dev *PowerRelay) Toggle(xaal.MessageBody) *xaal.MessageBody {
dev.Z2MDevice.Send(`{"state": "TOGGLE"}`) dev.SetProperty("TOGGLE")
return nil return nil
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment