diff --git a/charger/shelly.go b/charger/shelly.go index 443954776..6d8438b86 100644 --- a/charger/shelly.go +++ b/charger/shelly.go @@ -161,12 +161,25 @@ func (c *Shelly) MaxCurrent(current int64) error { // Status implements the api.Charger interface func (c *Shelly) Status() (api.ChargeStatus, error) { - power, err := c.CurrentPower() - if power > c.standbypower { - return api.StatusC, err + res := api.StatusB + + // static mode + if c.standbypower < 0 { + on, err := c.Enabled() + if on { + res = api.StatusC + } + + return res, err } - return api.StatusB, err + // standby power mode + power, err := c.CurrentPower() + if power > c.standbypower { + res = api.StatusC + } + + return res, err } var _ api.Meter = (*Shelly)(nil) diff --git a/charger/tasmota.go b/charger/tasmota.go index 17d6c8415..7977a3ced 100644 --- a/charger/tasmota.go +++ b/charger/tasmota.go @@ -100,14 +100,25 @@ func (c *Tasmota) MaxCurrent(current int64) error { // Status implements the api.Charger interface func (c *Tasmota) Status() (api.ChargeStatus, error) { - power, err := c.CurrentPower() + res := api.StatusB - switch { - case power > 0: - return api.StatusC, err - default: - return api.StatusB, err + // static mode + if c.standbypower < 0 { + on, err := c.Enabled() + if on { + res = api.StatusC + } + + return res, err } + + // standby power mode + power, err := c.CurrentPower() + if power > c.standbypower { + res = api.StatusC + } + + return res, err } var _ api.Meter = (*Tasmota)(nil) diff --git a/charger/tplink.go b/charger/tplink.go index 69c1b04f5..13d157340 100644 --- a/charger/tplink.go +++ b/charger/tplink.go @@ -98,14 +98,25 @@ func (c *TPLink) MaxCurrent(current int64) error { // Status implements the api.Charger interface func (c *TPLink) Status() (api.ChargeStatus, error) { - power, err := c.CurrentPower() + res := api.StatusB - switch { - case power > 0: - return api.StatusC, err - default: - return api.StatusB, err + // static mode + if c.standbypower < 0 { + on, err := c.Enabled() + if on { + res = api.StatusC + } + + return res, err } + + // standby power mode + power, err := c.CurrentPower() + if power > c.standbypower { + res = api.StatusC + } + + return res, err } var _ api.Meter = (*TPLink)(nil)