diff --git a/charger/warp.go b/charger/warp.go index bc4e72456..92074d5d4 100644 --- a/charger/warp.go +++ b/charger/warp.go @@ -59,17 +59,18 @@ func NewWarpFromConfig(other map[string]interface{}) (api.Charger, error) { util.NewLogger("warp").WARN.Println("usemeter is deprecated and will be removed in a future release") } - isPro := wb.isPro() + _ = wb.isPro() + hasMeter := wb.hasMeter() var currentPower func() (float64, error) var totalEnergy func() (float64, error) - if isPro || wb.hasMeter() { + if hasMeter { currentPower = wb.currentPower totalEnergy = wb.totalEnergy } var currents func() (float64, float64, float64, error) - if isPro { + if hasMeter && wb.hasCurrents() { currents = wb.currents } @@ -137,6 +138,19 @@ func (wb *Warp) hasMeter() bool { return false } +func (wb *Warp) hasCurrents() bool { + if state, err := provider.NewMqtt(wb.log, wb.client, + fmt.Sprintf("%s/meter/detailed_values", wb.root), 1, 0, + ).StringGetter()(); err == nil { + var res []float64 + if err := json.Unmarshal([]byte(state), &res); err == nil { + return len(res) > 5 + } + } + + return false +} + func (wb *Warp) isPro() bool { if state, err := provider.NewMqtt(wb.log, wb.client, fmt.Sprintf("%s/evse/low_level_state", wb.root), 1, 0,