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