FritzDect: align with other socket implementations (#3349)
This commit is contained in:
parent
6ee4b7e436
commit
a7f9f8bfda
9 changed files with 62 additions and 52 deletions
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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 }}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue