TP-Link Tapo: handle concurrent handshakes (#25551)

This commit is contained in:
Markus Thierolf 2025-11-25 17:55:33 +01:00 • committed by GitHub
parent e6fe76f293
commit 8a9944a113
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 15 additions and 21 deletions

2
go.mod
View file

@ -59,7 +59,7 @@ require (
github.com/hasura/go-graphql-client v0.15.0
github.com/holoplot/go-evdev v0.0.0-20240306072622-217e18f17db1
github.com/influxdata/influxdb-client-go/v2 v2.14.0
github.com/insomniacslk/tapo v1.0.1
github.com/insomniacslk/tapo v1.0.2
github.com/itchyny/gojq v0.12.17
github.com/jarcoal/httpmock v1.4.1
github.com/jeremywohl/flatten v1.0.1

4
go.sum
View file

@ -403,8 +403,8 @@ github.com/influxdata/influxdb-client-go/v2 v2.14.0/go.mod h1:Ahpm3QXKMJslpXl3If
github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo=
github.com/influxdata/line-protocol v0.0.0-20210922203350-b1ad95c89adf h1:7JTmneyiNEwVBOHSjoMxiWAqB992atOeepeFYegn5RU=
github.com/influxdata/line-protocol v0.0.0-20210922203350-b1ad95c89adf/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo=
github.com/insomniacslk/tapo v1.0.1 h1:W7K/1SXR8fvCNqY1Qg+GB3ELUjsHAqXtBjBjes7aRQ0=
github.com/insomniacslk/tapo v1.0.1/go.mod h1:1wuMYu0+alZ4oE4BIzxAwQNveZgbb2tRqiIUwIe7SZE=
github.com/insomniacslk/tapo v1.0.2 h1:o2Bz941/Kp3LEjO5kvBbAE9Z4z9BcQMXRols3QkTnI0=
github.com/insomniacslk/tapo v1.0.2/go.mod h1:1wuMYu0+alZ4oE4BIzxAwQNveZgbb2tRqiIUwIe7SZE=
github.com/insomniacslk/xjson v0.0.0-20240821125711-1236daaf6808 h1:BVD0pRpDWgbzkPYACLLPomriAnUGVfFdFoxs7aCLJkY=
github.com/insomniacslk/xjson v0.0.0-20240821125711-1236daaf6808/go.mod h1:Z4EVr4bVv9LZbbje9xyZEyOLpdCOmCvr5S9BJtrdTfw=
github.com/itchyny/gojq v0.12.17 h1:8av8eGduDb5+rvEdaOO+zQUjA04MS0m3Ps8HiD+fceg=

View file

@ -65,24 +65,14 @@ func (c *Connection) Enable(enable bool) error {
// Enabled implements the api.Charger interface
func (c *Connection) Enabled() (bool, error) {
resp, err := c.plug.GetDeviceInfo()
if err != nil {
return false, err
}
return resp.DeviceON, nil
return c.plug.IsOn()
}
// CurrentPower provides current power consuption
func (c *Connection) CurrentPower() (float64, error) {
resp, err := c.plug.GetEnergyUsage()
if err != nil {
if strings.Contains(err.Error(), "-1001") {
c.log.DEBUG.Printf("meter not available")
return 0, nil
} else {
return 0, err
}
return 0, c.checkMeterError(err)
}
return float64(resp.CurrentPower) / 1e3, nil
@ -92,12 +82,7 @@ func (c *Connection) CurrentPower() (float64, error) {
func (c *Connection) ChargedEnergy() (float64, error) {
resp, err := c.plug.GetEnergyUsage()
if err != nil {
if strings.Contains(err.Error(), "-1001") {
c.log.DEBUG.Printf("meter not available")
return 0, nil
} else {
return 0, err
}
return 0, c.checkMeterError(err)
}
if int64(resp.TodayEnergy) > c.lasttodayenergy {
@ -107,3 +92,12 @@ func (c *Connection) ChargedEnergy() (float64, error) {
return float64(c.energy) / 1000, nil
}
// checkMeterError checks for missing meter error
func (c *Connection) checkMeterError(err error) error {
if strings.Contains(err.Error(), "-1001") {
return nil
}
return err
}