myStrom: add token support (#27047)

This commit is contained in:
dreadnought 2026-01-28 18:09:03 +01:00 • committed by GitHub
parent 27e31808e3
commit f8d09800a5
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 28 additions and 9 deletions

View file

@ -28,6 +28,7 @@ func NewMyStromFromConfig(other map[string]any) (api.Charger, error) {
cc := struct {
embed `mapstructure:",squash"`
URI string
Token string
StandbyPower float64
Cache time.Duration
}{
@ -39,7 +40,7 @@ func NewMyStromFromConfig(other map[string]any) (api.Charger, error) {
}
c := &MyStrom{
conn: mystrom.NewConnection(cc.URI),
conn: mystrom.NewConnection(cc.URI, cc.Token),
}
c.switchSocket = NewSwitchSocket(&cc.embed, c.Enabled, c.conn.CurrentPower, cc.StandbyPower)

View file

@ -17,11 +17,12 @@ func init() {
func NewMyStromFromConfig(other map[string]any) (api.Meter, error) {
var cc struct {
URI string
Token string
}
if err := util.DecodeOther(other, &cc); err != nil {
return nil, err
}
return mystrom.NewConnection(cc.URI), nil
return mystrom.NewConnection(cc.URI, cc.Token), nil
}

View file

@ -18,28 +18,35 @@ type Report struct {
type Connection struct {
*request.Helper
uri string
token string
}
func NewConnection(uri string) *Connection {
func NewConnection(uri, token string) *Connection {
return &Connection{
uri: util.DefaultScheme(strings.TrimSuffix(uri, "/"), "http"),
token: token,
Helper: request.NewHelper(util.NewLogger("mystrom")),
}
}
func (c *Connection) Request(path string) error {
uri := fmt.Sprintf("%s/%s", c.uri, path)
req, err := request.New(http.MethodGet, uri, nil, nil)
if err == nil {
_, err = c.DoBody(req)
req, _ := request.New(http.MethodGet, uri, nil, nil)
if c.token != "" {
req.Header.Set("Token", c.token)
}
_, err := c.DoBody(req)
return err
}
func (c *Connection) Report() (Report, error) {
var res Report
uri := fmt.Sprintf("%s/report", c.uri)
err := c.GetJSON(uri, &res)
req, _ := request.New(http.MethodGet, uri, nil, request.AcceptJSON)
if c.token != "" {
req.Header.Set("Token", c.token)
}
err := c.DoJSON(req, &res)
return res, err
}

View file

@ -6,8 +6,13 @@ products:
group: switchsockets
params:
- name: host
- name: token
help:
en: API token, only needed if token is set on device (Advanced -> Enable REST API -> Token)
de: API-Token, nur erforderlich wenn ein Token auf Gerät dem gesetzt ist (Experte -> REST API aktivieren -> Token)
- preset: switchsocket
render: |
type: mystrom
uri: http://{{ .host }}
token: {{ .token }}
{{ include "switchsocket" . }}

View file

@ -8,6 +8,11 @@ params:
- name: usage
choice: ["pv", "charge"]
- name: host
- name: token
help:
en: API token, only needed if token is set on device (Advanced -> Enable REST API -> Token)
de: API-Token, nur erforderlich wenn ein Token auf Gerät dem gesetzt ist (Experte -> REST API aktivieren -> Token)
render: |
type: mystrom
uri: http://{{ .host }}
token: {{ .token }}