FritzDect: align with other socket implementations (#3349)

This commit is contained in:
Markus Thierolf 2022-05-09 08:55:29 +02:00 • committed by GitHub
parent 6ee4b7e436
commit a7f9f8bfda
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 62 additions and 52 deletions

View file

@ -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
}

View file

@ -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
}

View file

@ -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
}

View file

@ -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
}

View file

@ -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
}

View file

@ -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 }}

View file

@ -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)

View file

@ -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

View file

@ -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.