myStrom: add token support (#27047)
This commit is contained in:
parent
27e31808e3
commit
f8d09800a5
5 changed files with 28 additions and 9 deletions
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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" . }}
|
||||||
|
|
|
||||||
|
|
@ -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 }}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue