From c1e81132af5359008105a03a0bb0b46a9eb75f70 Mon Sep 17 00:00:00 2001 From: jkerdreux-imt <jerome.kerdreux@imt-atlantique.fr> Date: Sun, 17 Nov 2024 01:06:15 +0100 Subject: [PATCH] Use Expose.Name instead of hardcoded property The Lamp still use hardcoded properties names. It will need some work to fix this.. which doesn't seems to be used anyways. --- xaal.go | 49 ++++++++++++++++++++++++++++--------------------- 1 file changed, 28 insertions(+), 21 deletions(-) diff --git a/xaal.go b/xaal.go index d5e770c..62c7aa7 100644 --- a/xaal.go +++ b/xaal.go @@ -82,7 +82,7 @@ func NewContact(addr uuid.UUID, zDev *Z2MDevice, exp *Expose) XAALDeviceInterfac } func (dev *Contact) update(payload map[string]interface{}) { - value, exists := payload["contact"].(bool) + value, exists := payload[dev.Expose.Name].(bool) if exists { dev.GetAttribute("detected").SetValue(!value) } @@ -98,7 +98,7 @@ func NewThermometer(addr uuid.UUID, zDev *Z2MDevice, exp *Expose) XAALDeviceInte } func (dev *Thermometer) update(payload map[string]interface{}) { - value, exists := payload["temperature"].(float64) + value, exists := payload[dev.Expose.Name].(float64) if exists { dev.GetAttribute("temperature").SetValue(value) } @@ -114,7 +114,7 @@ func NewHygrometer(addr uuid.UUID, zDev *Z2MDevice, exp *Expose) XAALDeviceInter } func (dev *Hygrometer) update(payload map[string]interface{}) { - value, exists := payload["humidity"].(float64) + value, exists := payload[dev.Expose.Name].(float64) if exists { dev.GetAttribute("humidity").SetValue(value) } @@ -132,7 +132,7 @@ func NewLinkQuality(addr uuid.UUID, zDev *Z2MDevice, exp *Expose) XAALDeviceInte } func (dev *LinkQuality) update(payload map[string]interface{}) { - value, exists := payload["linkquality"].(float64) + value, exists := payload[dev.Expose.Name].(float64) if exists { value = math.Round(value / 255 * 100) dev.GetAttribute("level").SetValue(value) @@ -151,7 +151,7 @@ func NewBattery(addr uuid.UUID, zDev *Z2MDevice, exp *Expose) XAALDeviceInterfac } func (dev *Battery) update(payload map[string]interface{}) { - value, exists := payload["battery"].(float64) + value, exists := payload[dev.Expose.Name].(float64) if exists { dev.GetAttribute("level").SetValue(value) } @@ -162,9 +162,9 @@ func (dev *Battery) update(payload map[string]interface{}) { // ============================================================================= func NewPowerRelay(addr uuid.UUID, zDev *Z2MDevice, exp *Expose) XAALDeviceInterface { dev := &PowerRelay{XAALDevice{schemas.NewPowerrelayToggle(addr), zDev, exp}} - dev.SetMethod("turn_on", dev.On) - dev.SetMethod("turn_off", dev.Off) - dev.SetMethod("toggle", dev.Toggle) + dev.SetMethod("turn_on", dev.turnOn) + dev.SetMethod("turn_off", dev.turnOff) + dev.SetMethod("toggle", dev.toggle) dev.setup() return dev } @@ -184,24 +184,24 @@ func (dev *PowerRelay) update(payload map[string]interface{}) { } } -func (dev *PowerRelay) SetProperty(value string) { +func (dev *PowerRelay) SetState(value string) { state := dev.Expose.GetFeature("state") body := fmt.Sprintf(`{"%s": "%s"}`, state.Property, value) dev.Z2MDevice.Set(body) } -func (dev *PowerRelay) On(xaal.MessageBody) *xaal.MessageBody { - dev.SetProperty("ON") +func (dev *PowerRelay) turnOn(xaal.MessageBody) *xaal.MessageBody { + dev.SetState("ON") return nil } -func (dev *PowerRelay) Off(xaal.MessageBody) *xaal.MessageBody { - dev.SetProperty("OFF") +func (dev *PowerRelay) turnOff(xaal.MessageBody) *xaal.MessageBody { + dev.SetState("OFF") return nil } -func (dev *PowerRelay) Toggle(xaal.MessageBody) *xaal.MessageBody { - dev.SetProperty("TOGGLE") +func (dev *PowerRelay) toggle(xaal.MessageBody) *xaal.MessageBody { + dev.SetState("TOGGLE") return nil } @@ -218,7 +218,7 @@ func NewPowerMeter(addr uuid.UUID, zDev *Z2MDevice, exp *Expose) XAALDeviceInter func (dev *PowerMeter) update(payload map[string]interface{}) { // power - value, exists := payload["power"].(float64) + value, exists := payload[dev.Expose.Name].(float64) if exists { dev.GetAttribute("power").SetValue(value) } @@ -232,6 +232,8 @@ func (dev *PowerMeter) update(payload map[string]interface{}) { // ============================================================================= // Lamp // ============================================================================= +// The Lamp don't use the Expose.Names right now. Perhaps in future, if we find +// some lamps w/ different exposes. This will make the code more complex. func NewLamp(addr uuid.UUID, zDev *Z2MDevice, exp *Expose) XAALDeviceInterface { // This is the default lamp device, we will change it's devType if needed dev := &Lamp{XAALDevice{schemas.NewLamp(addr), zDev, exp}} @@ -332,18 +334,24 @@ func (dev *Lamp) update(payload map[string]interface{}) { } } +func (dev *Lamp) setState(value string) { + state := dev.Expose.GetFeature("state") + body := fmt.Sprintf(`{"%s": "%s"}`, state.Property, value) + dev.Z2MDevice.Set(body) +} + func (dev *Lamp) turnOn(xaal.MessageBody) *xaal.MessageBody { - dev.Z2MDevice.Set(`{"state": "ON"}`) + dev.setState("ON") return nil } func (dev *Lamp) turnOff(xaal.MessageBody) *xaal.MessageBody { - dev.Z2MDevice.Set(`{"state": "OFF"}`) + dev.setState("OFF") return nil } func (dev *Lamp) toggle(xaal.MessageBody) *xaal.MessageBody { - dev.Z2MDevice.Set(`{"state": "TOGGLE"}`) + dev.setState("TOGGLE") return nil } @@ -417,7 +425,7 @@ func NewButtonRemote(addr uuid.UUID, zDev *Z2MDevice, exp *Expose) XAALDeviceInt } func (dev *ButtonRemote) update(payload map[string]interface{}) { - value, exists := payload["action"].(string) + value, exists := payload[dev.Expose.Name].(string) if exists { body := make(xaal.MessageBody) body["action"] = 0 @@ -427,7 +435,6 @@ func (dev *ButtonRemote) update(payload map[string]interface{}) { } func (dev *ButtonRemote) GetButtons(xaal.MessageBody) *xaal.MessageBody { - slog.Info("defaultGetButtons method: get_buttons") body := make(xaal.MessageBody) action := dev.Z2MDevice.GetExpose("action") if action != nil { -- GitLab