From 3bf708f9e833ab154f62c56f88ba1b236c8f63cd Mon Sep 17 00:00:00 2001 From: Markus Thierolf <77847348+thierolm@users.noreply.github.com> Date: Tue, 19 Apr 2022 09:34:45 +0200 Subject: [PATCH] Tasmota: set fix power in static mode (#3177) --- charger/tasmota.go | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/charger/tasmota.go b/charger/tasmota.go index 7977a3ced..4da7f9cce 100644 --- a/charger/tasmota.go +++ b/charger/tasmota.go @@ -66,27 +66,27 @@ func NewTasmota(uri, user, password string, standbypower float64) (*Tasmota, err // Enabled implements the api.Charger interface func (c *Tasmota) Enabled() (bool, error) { - var resp tasmota.StatusResponse - err := c.GetJSON(c.cmdUri("Status 0"), &resp) + var res tasmota.StatusResponse + err := c.GetJSON(c.cmdUri("Status 0"), &res) - return resp.Status.Power == 1, err + return res.Status.Power == 1, err } // Enable implements the api.Charger interface func (c *Tasmota) Enable(enable bool) error { - var resp tasmota.PowerResponse + var res tasmota.PowerResponse cmd := "Power off" if enable { cmd = "Power on" } - err := c.GetJSON(c.cmdUri(cmd), &resp) + err := c.GetJSON(c.cmdUri(cmd), &res) switch { case err != nil: return err - case enable && resp.Power != "ON": + case enable && res.Power != "ON": return errors.New("switchOn failed") - case !enable && resp.Power != "OFF": + case !enable && res.Power != "OFF": return errors.New("switchOff failed") default: return nil @@ -125,11 +125,23 @@ var _ api.Meter = (*Tasmota)(nil) // CurrentPower implements the api.Meter interface func (c *Tasmota) CurrentPower() (float64, error) { - var resp tasmota.StatusSNSResponse - err := c.GetJSON(c.cmdUri("Status 8"), &resp) - power := float64(resp.StatusSNS.Energy.Power) + var power float64 + + // static mode + if c.standbypower < 0 { + on, err := c.Enabled() + if on { + power = -c.standbypower + } + return power, err + } + + // standby power mode + var res tasmota.StatusSNSResponse + err := c.GetJSON(c.cmdUri("Status 8"), &res) // ignore standby power + power = float64(res.StatusSNS.Energy.Power) if power < c.standbypower { power = 0 }