diff --git a/xaal.go b/xaal.go index e572fb580cb3ac51bf189db695cb0c7f8206b14c..90561a3e2fee427cb0e5484402c956c7b6fee2ca 100644 --- a/xaal.go +++ b/xaal.go @@ -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) } diff --git a/z2m.go b/z2m.go index e642c66ef9d3b0f7e7bdf3be951db3d6599e2694..5c65516b457a136fca3cfd4769a93866b365091e 100644 --- a/z2m.go +++ b/z2m.go @@ -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) }