From 6c6f051bde7f367361d2d674e9af071431e0f784 Mon Sep 17 00:00:00 2001 From: andig Date: Mon, 1 Jun 2026 22:53:33 +0200 Subject: [PATCH] Tapo: drop IP-address handling, use host string throughout (#29914) --- charger/tapo.go | 8 ++++---- go.mod | 2 +- go.sum | 4 ++-- meter/tapo.go | 4 ++-- meter/tapo/connection.go | 16 ++++------------ templates/definition/charger/tapo.yaml | 2 +- templates/definition/meter/tapo.yaml | 2 +- 7 files changed, 15 insertions(+), 23 deletions(-) diff --git a/charger/tapo.go b/charger/tapo.go index 36b1e8436..26809fd40 100644 --- a/charger/tapo.go +++ b/charger/tapo.go @@ -20,7 +20,7 @@ func init() { func NewTapoFromConfig(other map[string]any) (api.Charger, error) { var cc struct { embed `mapstructure:",squash"` - URI string + Host string User string Password string StandbyPower float64 @@ -34,12 +34,12 @@ func NewTapoFromConfig(other map[string]any) (api.Charger, error) { return nil, api.ErrMissingCredentials } - return NewTapo(cc.embed, cc.URI, cc.User, cc.Password, cc.StandbyPower) + return NewTapo(cc.embed, cc.Host, cc.User, cc.Password, cc.StandbyPower) } // NewTapo creates Tapo charger -func NewTapo(embed embed, uri, user, password string, standbypower float64) (*Tapo, error) { - conn, err := tapo.NewConnection(uri, user, password) +func NewTapo(embed embed, host, user, password string, standbypower float64) (*Tapo, error) { + conn, err := tapo.NewConnection(host, user, password) if err != nil { return nil, err } diff --git a/go.mod b/go.mod index f4c272885..dc7fa7a17 100644 --- a/go.mod +++ b/go.mod @@ -58,7 +58,7 @@ require ( github.com/hasura/go-graphql-client v0.16.0 github.com/holoplot/go-evdev v0.0.0-20250804134636-ab1d56a1fe83 github.com/influxdata/influxdb-client-go/v2 v2.14.0 - github.com/insomniacslk/tapo v1.0.2 + github.com/insomniacslk/tapo v1.1.0 github.com/itchyny/gojq v0.12.19 github.com/jarcoal/httpmock v1.4.1 github.com/jeremywohl/flatten v1.0.1 diff --git a/go.sum b/go.sum index bf705488b..b05650994 100644 --- a/go.sum +++ b/go.sum @@ -409,8 +409,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.2 h1:o2Bz941/Kp3LEjO5kvBbAE9Z4z9BcQMXRols3QkTnI0= -github.com/insomniacslk/tapo v1.0.2/go.mod h1:1wuMYu0+alZ4oE4BIzxAwQNveZgbb2tRqiIUwIe7SZE= +github.com/insomniacslk/tapo v1.1.0 h1:Z1s1EjtdVi1dWheW/gWEZPvppOPneHEUZ/Naw065vnM= +github.com/insomniacslk/tapo v1.1.0/go.mod h1:1wuMYu0+alZ4oE4BIzxAwQNveZgbb2tRqiIUwIe7SZE= github.com/insomniacslk/xjson v0.0.0-20231023101448-2249e546a131 h1:bVGPuMhjgFtxVdQGfYnFq+EnCqArOAjLNciow/nArwE= github.com/insomniacslk/xjson v0.0.0-20231023101448-2249e546a131/go.mod h1:Z4EVr4bVv9LZbbje9xyZEyOLpdCOmCvr5S9BJtrdTfw= github.com/itchyny/gojq v0.12.19 h1:ttXA0XCLEMoaLOz5lSeFOZ6u6Q3QxmG46vfgI4O0DEs= diff --git a/meter/tapo.go b/meter/tapo.go index 78b7fd627..cd4e7714c 100644 --- a/meter/tapo.go +++ b/meter/tapo.go @@ -14,7 +14,7 @@ func init() { // NewTapoFromConfig creates a tapo meter from generic config func NewTapoFromConfig(other map[string]any) (api.Meter, error) { var cc struct { - URI string + Host string User string Password string } @@ -27,5 +27,5 @@ func NewTapoFromConfig(other map[string]any) (api.Meter, error) { return nil, api.ErrMissingCredentials } - return tapo.NewConnection(cc.URI, cc.User, cc.Password) + return tapo.NewConnection(cc.Host, cc.User, cc.Password) } diff --git a/meter/tapo/connection.go b/meter/tapo/connection.go index 2ade00e32..7c85a8e0d 100644 --- a/meter/tapo/connection.go +++ b/meter/tapo/connection.go @@ -2,8 +2,6 @@ package tapo import ( "fmt" - "net/netip" - "net/url" "strings" "github.com/evcc-io/evcc/api" @@ -22,15 +20,9 @@ type Connection struct { // NewConnection creates a new Tapo device connection. // User is encoded by using MessageDigest of SHA1 which is afterwards B64 encoded. // Password is directly B64 encoded. -func NewConnection(uri, user, password string) (*Connection, error) { - url, err := url.Parse(uri) - if err != nil { - return nil, fmt.Errorf("invalid url: %s", uri) - } - - addr, err := netip.ParseAddr(url.Hostname()) - if err != nil { - return nil, fmt.Errorf("invalid ip address: %s", uri) +func NewConnection(host, user, password string) (*Connection, error) { + if host == "" { + return nil, fmt.Errorf("missing host") } if user == "" || password == "" { @@ -39,7 +31,7 @@ func NewConnection(uri, user, password string) (*Connection, error) { log := util.NewLogger("tapo").Redact(user, password) - plug := tapo.NewPlug(addr, nil) + plug := tapo.NewPlug(host, nil) if err := plug.Handshake(user, password); err != nil { return nil, fmt.Errorf("login failed: %w", err) } diff --git a/templates/definition/charger/tapo.yaml b/templates/definition/charger/tapo.yaml index e51f876b6..d760d2250 100644 --- a/templates/definition/charger/tapo.yaml +++ b/templates/definition/charger/tapo.yaml @@ -18,7 +18,7 @@ params: - preset: switchsocket render: | type: tapo - uri: http://{{ .host }} + host: {{ .host }} user: {{ .user }} password: {{ .password }} {{ include "switchsocket" . }} diff --git a/templates/definition/meter/tapo.yaml b/templates/definition/meter/tapo.yaml index 613cfa332..6d6a9cbc2 100644 --- a/templates/definition/meter/tapo.yaml +++ b/templates/definition/meter/tapo.yaml @@ -18,6 +18,6 @@ params: required: true render: | type: tapo - uri: http://{{ .host }} + host: {{ .host }} user: {{ .user }} password: {{ .password }}