diff --git a/xaal.go b/xaal.go index 7a5c91490f4702dea6bf04c0e5c455ba27a67bad..953336bd67cd5bc8df43df54f881e32ed12ec18a 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 68d058c035457754f096e7b007aa8f4194832803..27486bcb637ea13f5971b4aa2370c4420c081c29 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