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

View file

@ -16,12 +16,13 @@ func init() {
// NewMyStromFromConfig creates a myStrom meter from generic config // NewMyStromFromConfig creates a myStrom meter from generic config
func NewMyStromFromConfig(other map[string]any) (api.Meter, error) { func NewMyStromFromConfig(other map[string]any) (api.Meter, error) {
var cc struct { var cc struct {
URI string URI string
Token string
} }
if err := util.DecodeOther(other, &cc); err != nil { if err := util.DecodeOther(other, &cc); err != nil {
return nil, err return nil, err
} }
return mystrom.NewConnection(cc.URI), nil return mystrom.NewConnection(cc.URI, cc.Token), nil
} }

View file

@ -17,29 +17,36 @@ type Report struct {
type Connection struct { type Connection struct {
*request.Helper *request.Helper
uri string uri string
token string
} }
func NewConnection(uri string) *Connection { func NewConnection(uri, token string) *Connection {
return &Connection{ return &Connection{
uri: util.DefaultScheme(strings.TrimSuffix(uri, "/"), "http"), uri: util.DefaultScheme(strings.TrimSuffix(uri, "/"), "http"),
token: token,
Helper: request.NewHelper(util.NewLogger("mystrom")), Helper: request.NewHelper(util.NewLogger("mystrom")),
} }
} }
func (c *Connection) Request(path string) error { func (c *Connection) Request(path string) error {
uri := fmt.Sprintf("%s/%s", c.uri, path) uri := fmt.Sprintf("%s/%s", c.uri, path)
req, err := request.New(http.MethodGet, uri, nil, nil) req, _ := request.New(http.MethodGet, uri, nil, nil)
if err == nil { if c.token != "" {
_, err = c.DoBody(req) req.Header.Set("Token", c.token)
} }
_, err := c.DoBody(req)
return err return err
} }
func (c *Connection) Report() (Report, error) { func (c *Connection) Report() (Report, error) {
var res Report var res Report
uri := fmt.Sprintf("%s/report", c.uri) 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 return res, err
} }

View file

@ -6,8 +6,13 @@ products:
group: switchsockets group: switchsockets
params: params:
- name: host - 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 - preset: switchsocket
render: | render: |
type: mystrom type: mystrom
uri: http://{{ .host }} uri: http://{{ .host }}
token: {{ .token }}
{{ include "switchsocket" . }} {{ include "switchsocket" . }}

View file

@ -8,6 +8,11 @@ params:
- name: usage - name: usage
choice: ["pv", "charge"] choice: ["pv", "charge"]
- name: host - 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: | render: |
type: mystrom type: mystrom
uri: http://{{ .host }} uri: http://{{ .host }}
token: {{ .token }}