From 053578f6a78c8711dde19f7e679b656a40d92979 Mon Sep 17 00:00:00 2001 From: jkerdreux-imt <jerome.kerdreux@imt-atlantique.fr> Date: Fri, 22 Nov 2024 01:20:20 +0100 Subject: [PATCH] Add support for current / volt Unlike other gateway, I didn't hack the power-meter to embbed current and voltage.. not really sure about this. Chris doesn't like the embbed stuff.. that's why this time, I will ask him an volt/amp-meter schema. ;) --- xaal.go | 44 ++++++++++++++++++++++++++++++++++++++++++++ z2m.go | 3 ++- 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/xaal.go b/xaal.go index 7a5c914..953336b 100644 --- a/xaal.go +++ b/xaal.go @@ -61,6 +61,14 @@ type LuxMeter struct { XAALDevice } +type VoltMeter struct { + XAALDevice +} + +type AmpMeter struct { + XAALDevice +} + type DebugDevice struct { XAALDevice } @@ -492,6 +500,42 @@ func (dev *LuxMeter) update(payload map[string]interface{}) { } } +// ============================================================================= +// VoltMeter +// ============================================================================= +func NewVoltMeter(addr uuid.UUID, zDev *Z2MDevice, exp *Expose) XAALDeviceInterface { + dev := &VoltMeter{XAALDevice{schemas.NewBasic(addr), zDev, exp}} + dev.DevType = "voltmeter.any" + dev.AddAttribute("voltage", 0.0) + dev.setup() + return dev +} + +func (dev *VoltMeter) update(payload map[string]interface{}) { + value, err := convertToFloat64(payload[dev.Expose.Name]) + if err == nil { + dev.GetAttribute("voltage").SetValue(value) + } +} + +// ============================================================================= +// AmpMeter +// ============================================================================= +func NewAmpMeter(addr uuid.UUID, zDev *Z2MDevice, exp *Expose) XAALDeviceInterface { + dev := &AmpMeter{XAALDevice{schemas.NewBasic(addr), zDev, exp}} + dev.DevType = "ampmeter.any" + dev.AddAttribute("current", 0.0) + dev.setup() + return dev +} + +func (dev *AmpMeter) update(payload map[string]interface{}) { + value, err := convertToFloat64(payload[dev.Expose.Name]) + if err == nil { + dev.GetAttribute("current").SetValue(value) + } +} + // ============================================================================= // Debug Device // ============================================================================= diff --git a/z2m.go b/z2m.go index 68d058c..27486bc 100644 --- a/z2m.go +++ b/z2m.go @@ -113,7 +113,8 @@ func (zDev *Z2MDevice) FindXAALDevices(gw *Gateway) { "light": NewLamp, "occupancy": NewMotion, "illuminance": NewLuxMeter, - "voltage": NewDebugDevice, + "voltage": NewVoltMeter, + "current": NewAmpMeter, } // Search a matching expose name -- GitLab