diff --git a/charger/fritzdect.go b/charger/fritzdect.go index cf6602d28..2f67165ed 100644 --- a/charger/fritzdect.go +++ b/charger/fritzdect.go @@ -51,42 +51,6 @@ func NewFritzDECT(uri, ain, user, password string, standbypower float64) (*Fritz return fd, err } -// Status implements the api.Charger interface -func (c *FritzDECT) Status() (api.ChargeStatus, error) { - resp, err := c.conn.ExecCmd("getswitchpresent") - - if err == nil { - var present bool - present, err = strconv.ParseBool(resp) - if err == nil && !present { - err = api.ErrNotAvailable - } - } - if err != nil { - return api.StatusNone, err - } - - res := api.StatusB - - // static mode - if c.standbypower < 0 { - on, err := c.Enabled() - if on { - res = api.StatusC - } - - return res, err - } - - // standby power mode - power, err := c.conn.CurrentPower() - if power > c.standbypower { - res = api.StatusC - } - - return res, err -} - // Enabled implements the api.Charger interface func (c *FritzDECT) Enabled() (bool, error) { resp, err := c.conn.ExecCmd("getswitchstate") @@ -127,12 +91,58 @@ func (c *FritzDECT) MaxCurrent(current int64) error { return nil } +// Status implements the api.Charger interface +func (c *FritzDECT) Status() (api.ChargeStatus, error) { + resp, err := c.conn.ExecCmd("getswitchpresent") + + if err == nil { + var present bool + present, err = strconv.ParseBool(resp) + if err == nil && !present { + err = api.ErrNotAvailable + } + } + if err != nil { + return api.StatusNone, err + } + + res := api.StatusB + on, err := c.Enabled() + if err != nil { + return res, err + } + + power, err := c.conn.CurrentPower() + if err != nil { + return res, err + } + + // static mode || standby power mode condition + if on && (c.standbypower < 0 || power > c.standbypower) { + res = api.StatusC + } + + return res, nil +} + var _ api.Meter = (*FritzDECT)(nil) // CurrentPower implements the api.Meter interface func (c *FritzDECT) CurrentPower() (float64, error) { + var power float64 + + // set fix static power in static mode + if c.standbypower < 0 { + on, err := c.Enabled() + if on { + power = -c.standbypower + } + return power, err + } + + // ignore power in standby mode power, err := c.conn.CurrentPower() - if power < c.standbypower { + if power <= c.standbypower { power = 0 } diff --git a/charger/shelly.go b/charger/shelly.go index 1b271913b..ab823e689 100644 --- a/charger/shelly.go +++ b/charger/shelly.go @@ -119,7 +119,7 @@ func (c *Shelly) CurrentPower() (float64, error) { // ignore power in standby mode power, err := c.conn.CurrentPower() - if c.standbypower >= 0 && power <= c.standbypower { + if power <= c.standbypower { power = 0 } diff --git a/charger/tapo.go b/charger/tapo.go index 13b8bcbb4..5c9d695b3 100644 --- a/charger/tapo.go +++ b/charger/tapo.go @@ -105,7 +105,7 @@ func (c *Tapo) CurrentPower() (float64, error) { // ignore power in standby mode power, err := c.conn.CurrentPower() - if c.standbypower >= 0 && power <= c.standbypower { + if power <= c.standbypower { power = 0 } diff --git a/charger/tasmota.go b/charger/tasmota.go index b5ba865af..e34d545d5 100644 --- a/charger/tasmota.go +++ b/charger/tasmota.go @@ -127,7 +127,7 @@ func (c *Tasmota) CurrentPower() (float64, error) { // ignore power in standby mode power, err := c.conn.CurrentPower() - if c.standbypower >= 0 && power <= c.standbypower { + if power <= c.standbypower { power = 0 } diff --git a/charger/tplink.go b/charger/tplink.go index 212594fd7..9ec7be5d8 100644 --- a/charger/tplink.go +++ b/charger/tplink.go @@ -134,7 +134,7 @@ func (c *TPLink) CurrentPower() (float64, error) { // ignore power in standby mode power, err := c.conn.CurrentPower() - if c.standbypower >= 0 && power <= c.standbypower { + if power <= c.standbypower { power = 0 } diff --git a/templates/definition/charger/fritzdect.yaml b/templates/definition/charger/fritzdect.yaml index f243ee93f..afdb93084 100644 --- a/templates/definition/charger/fritzdect.yaml +++ b/templates/definition/charger/fritzdect.yaml @@ -15,10 +15,10 @@ params: - name: ain required: true mask: true - example: "007788992233" + example: "307788992233" help: - en: The AIN is printed on the type label on the back of the device. - de: Die AIN ist auf dem Typenschild auf der Geräterückseite aufgedruckt. + en: The AIN is printed on the type label on the back of the device. Embed it in double quotes in case of leading zeroes. + de: Die AIN ist auf dem Typenschild auf der Geräterückseite aufgedruckt. Bei führenden Nullen bitte in doppelte Hochkommata setzen. - name: standbypower default: 15 render: | @@ -26,5 +26,5 @@ render: | uri: {{ .uri }} user: {{ .user }} password: {{ .password }} - ain: {{ .ain }} # switch actor identification number without blanks (see AIN number on switch sticker) + ain: "{{ .ain }}" # switch actor identification number without blanks (see AIN number on switch sticker) standbypower: {{ .standbypower }} diff --git a/templates/definition/meter/fritzdect.yaml b/templates/definition/meter/fritzdect.yaml index 5c14ca901..5d1760ada 100644 --- a/templates/definition/meter/fritzdect.yaml +++ b/templates/definition/meter/fritzdect.yaml @@ -17,13 +17,13 @@ params: - name: ain required: true mask: true - example: "007788992233" + example: "307788992233" help: - en: The AIN is printed on the type label on the back of the device. - de: Die AIN ist auf dem Typenschild auf der Geräterückseite aufgedruckt. + en: The AIN is printed on the type label on the back of the device. Embed it in double quotes in case of leading zeroes. + de: Die AIN ist auf dem Typenschild auf der Geräterückseite aufgedruckt. Bei führenden Nullen bitte in doppelte Hochkommata setzen. render: | type: fritzdect uri: {{ .uri }} user: {{ .user }} password: {{ .password }} - ain: {{ .ain }} # switch actor identification number without blanks (see AIN number on switch sticker) + ain: "{{ .ain }}" # switch actor identification number without blanks (see AIN number on switch sticker) diff --git a/templates/docs/charger/fritzdect_0.yaml b/templates/docs/charger/fritzdect_0.yaml index 9baf3088b..3a8c1d34b 100644 --- a/templates/docs/charger/fritzdect_0.yaml +++ b/templates/docs/charger/fritzdect_0.yaml @@ -9,5 +9,5 @@ render: uri: https://fritz.box # Optional user: # Benutzerkonto (bspw. E-Mail Adresse, User Id, etc.) password: # Passwort des Benutzerkontos (bei führenden Nullen bitte in einfache Hochkommata setzen) - ain: 007788992233 # Die AIN ist auf dem Typenschild auf der Geräterückseite aufgedruckt. + ain: 307788992233 # Die AIN ist auf dem Typenschild auf der Geräterückseite aufgedruckt. Bei führenden Nullen bitte in doppelte Hochkommata setzen. standbypower: 15 # Leistung oberhalb des angegebenen Wertes wird als Ladeleistung gewertet # Optional diff --git a/templates/docs/meter/fritzdect_0.yaml b/templates/docs/meter/fritzdect_0.yaml index 65f8d7c31..a0c294bca 100644 --- a/templates/docs/meter/fritzdect_0.yaml +++ b/templates/docs/meter/fritzdect_0.yaml @@ -11,7 +11,7 @@ render: uri: https://fritz.box # Optional user: # Benutzerkonto (bspw. E-Mail Adresse, User Id, etc.) password: # Passwort des Benutzerkontos (bei führenden Nullen bitte in einfache Hochkommata setzen) - ain: 007788992233 # Die AIN ist auf dem Typenschild auf der Geräterückseite aufgedruckt. + ain: 307788992233 # Die AIN ist auf dem Typenschild auf der Geräterückseite aufgedruckt. Bei führenden Nullen bitte in doppelte Hochkommata setzen. - usage: charge default: | type: template @@ -20,4 +20,4 @@ render: uri: https://fritz.box # Optional user: # Benutzerkonto (bspw. E-Mail Adresse, User Id, etc.) password: # Passwort des Benutzerkontos (bei führenden Nullen bitte in einfache Hochkommata setzen) - ain: 007788992233 # Die AIN ist auf dem Typenschild auf der Geräterückseite aufgedruckt. + ain: 307788992233 # Die AIN ist auf dem Typenschild auf der Geräterückseite aufgedruckt. Bei führenden Nullen bitte in doppelte Hochkommata setzen.