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

PowerRelay has the same API as Lamp ;)

API migration
parent 37666654
No related branches found
No related tags found
No related merge requests found
......@@ -37,7 +37,7 @@ type Battery struct {
type PowerRelay struct {
XAALDevice
Property string
Expose Expose
Z2MDevice Z2MDevice
}
......@@ -160,8 +160,8 @@ func (dev *Battery) update(payload map[string]interface{}) {
// =============================================================================
// PowerRelay
// =============================================================================
func NewPowerRelay(addr uuid.UUID, zDev *Z2MDevice, property string) XAALDeviceInterface {
dev := &PowerRelay{XAALDevice{schemas.NewPowerrelayToggle(addr)}, property, *zDev}
func NewPowerRelay(addr uuid.UUID, zDev *Z2MDevice, exp *Expose) XAALDeviceInterface {
dev := &PowerRelay{XAALDevice{schemas.NewPowerrelayToggle(addr)}, *exp, *zDev}
dev.SetMethod("turn_on", dev.On)
dev.SetMethod("turn_off", dev.Off)
dev.SetMethod("toggle", dev.Toggle)
......@@ -170,7 +170,9 @@ func NewPowerRelay(addr uuid.UUID, zDev *Z2MDevice, property string) XAALDeviceI
}
func (dev *PowerRelay) update(payload map[string]interface{}) {
value, exists := payload[dev.Property].(string)
// TODO: Handle missing state property, this can be done in constructor
state := dev.Expose.GetFeature("state")
value, exists := payload[state.Property].(string)
if exists {
power := dev.GetAttribute("power")
switch value {
......@@ -183,7 +185,8 @@ func (dev *PowerRelay) update(payload map[string]interface{}) {
}
func (dev *PowerRelay) SetProperty(value string) {
body := fmt.Sprintf(`{"%s": "%s"}`, dev.Property, value)
state := dev.Expose.GetFeature("state")
body := fmt.Sprintf(`{"%s": "%s"}`, state.Property, value)
dev.Z2MDevice.Set(body)
}
......
......@@ -124,18 +124,8 @@ func (zDev *Z2MDevice) setupXAALDevices(gw *Gateway) {
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)
dev = NewPowerRelay(addr, zDev, &expose)
} else if expose.Type == "light" {
// type := NewLamp
// for _, exp := range expose.Features {
// }
dev = NewLamp(addr, zDev, &expose)
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment