From e3a449d847fac2b8eb2af81c255d7db718220d21 Mon Sep 17 00:00:00 2001 From: Markus Thierolf <77847348+thierolm@users.noreply.github.com> Date: Thu, 12 Jan 2023 13:04:37 +0100 Subject: [PATCH] Tasmota: Eenable Power Value Lists (#5748) --- meter/tasmota/connection.go | 23 +++++++++++++++++++++-- meter/tasmota/types.go | 11 ++++++----- 2 files changed, 27 insertions(+), 7 deletions(-) diff --git a/meter/tasmota/connection.go b/meter/tasmota/connection.go index 0d3136b99..4334490d5 100644 --- a/meter/tasmota/connection.go +++ b/meter/tasmota/connection.go @@ -50,8 +50,27 @@ func (d *Connection) ExecCmd(cmd string, res interface{}) error { // CurrentPower implements the api.Meter interface func (d *Connection) CurrentPower() (float64, error) { var res StatusSNSResponse - err := d.ExecCmd("Status 8", &res) - return float64(res.StatusSNS.Energy.Power), err + var err error + var power float64 + + if err = d.ExecCmd("Status 8", &res); err == nil { + switch v := res.StatusSNS.Energy.Power.(type) { + case float64: + power = res.StatusSNS.Energy.Power.(float64) + case []interface{}: + // take first power meter value in case of a power meter list + for i, vl := range v { + switch vv := vl.(type) { + case float64: + if i == 0 { + power = vv + } + } + } + } + } + + return power, err } // TotalEnergy implements the api.MeterEnergy interface diff --git a/meter/tasmota/types.go b/meter/tasmota/types.go index 61b4d7abf..abfd4899b 100644 --- a/meter/tasmota/types.go +++ b/meter/tasmota/types.go @@ -68,12 +68,13 @@ type StatusSNSResponse struct { Total float64 Yesterday float64 Today float64 - Power int - ApparentPower int - ReactivePower int - Factor float64 + Power interface{} + ApparentPower interface{} + ReactivePower interface{} + Factor interface{} + Frequency int Voltage int - Current float64 + Current interface{} } // SML sensor readings