From 6fcdc0de17cff81ad7e7816b59e25a3fcd695898 Mon Sep 17 00:00:00 2001 From: jkerdreux-imt <jerome.kerdreux@imt-atlantique.fr> Date: Thu, 21 Nov 2024 00:28:42 +0100 Subject: [PATCH] New devices - Added motion sensors - Added Luxmeter --- xaal.go | 41 +++++++++++++++++++++++++++++++++++++++++ z2m.go | 2 ++ 2 files changed, 43 insertions(+) diff --git a/xaal.go b/xaal.go index 17f68a2..a3bc437 100644 --- a/xaal.go +++ b/xaal.go @@ -53,6 +53,14 @@ type ButtonRemote struct { XAALDevice } +type Motion struct { + XAALDevice +} + +type LuxMeter struct { + XAALDevice +} + type XAALDeviceInterface interface { update(map[string]interface{}) GetXAALDevice() *xaal.Device @@ -445,3 +453,36 @@ func (dev *ButtonRemote) getButtons(xaal.MessageBody) *xaal.MessageBody { } return &body } + +// ============================================================================= +// Motion +// ============================================================================= +func NewMotion(addr uuid.UUID, zDev *Z2MDevice, exp *Expose) XAALDeviceInterface { + dev := &Motion{XAALDevice{schemas.NewMotion(addr), zDev, exp}} + dev.setup() + return dev +} + +func (dev *Motion) update(payload map[string]interface{}) { + value, exists := payload[dev.Expose.Name].(bool) + if exists { + dev.GetAttribute("presence").SetValue(value) + } +} + +// ============================================================================= +// LuxMeter +// ============================================================================= +func NewLuxMeter(addr uuid.UUID, zDev *Z2MDevice, exp *Expose) XAALDeviceInterface { + dev := &LuxMeter{XAALDevice{schemas.NewLuxmeter(addr), zDev, exp}} + dev.GetAttribute("illuminance").Value = 0 // override + dev.setup() + return dev +} + +func (dev *LuxMeter) update(payload map[string]interface{}) { + lux, err := convertToInt(payload[dev.Expose.Name]) + if err == nil { + dev.GetAttribute("illuminance").SetValue(lux) + } +} diff --git a/z2m.go b/z2m.go index 86926fe..7fcbb3a 100644 --- a/z2m.go +++ b/z2m.go @@ -111,6 +111,8 @@ func (zDev *Z2MDevice) FindXAALDevices(gw *Gateway) { "action": NewButtonRemote, "switch": NewPowerRelay, "light": NewLamp, + "occupancy": NewMotion, + "illuminance": NewLuxMeter, } // Search a matching expose name -- GitLab