Shelly: add total energy (#5371)
Co-authored-by: Markus Thierolf <m.thierolf@googlemail.com>
This commit is contained in:
parent
cfeb281b62
commit
39229896d4
3 changed files with 52 additions and 1 deletions
|
|
@ -79,3 +79,10 @@ func (c *Shelly) Enable(enable bool) error {
|
|||
func (c *Shelly) MaxCurrent(current int64) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
var _ api.MeterEnergy = (*Shelly)(nil)
|
||||
|
||||
// TotalEnergy implements the api.MeterEnergy interface
|
||||
func (c *Shelly) TotalEnergy() (float64, error) {
|
||||
return c.conn.TotalEnergy()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -170,3 +170,42 @@ func (d *Connection) execGen2Cmd(method string, enable bool, res interface{}) er
|
|||
|
||||
return d.DoJSON(req, &res)
|
||||
}
|
||||
|
||||
// TotalEnergy implements the api.Meter interface
|
||||
func (d *Connection) TotalEnergy() (float64, error) {
|
||||
var energy float64
|
||||
switch d.gen {
|
||||
case 0, 1:
|
||||
var res Gen1StatusResponse
|
||||
uri := fmt.Sprintf("%s/status", d.uri)
|
||||
if err := d.GetJSON(uri, &res); err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
switch {
|
||||
case d.channel < len(res.Meters):
|
||||
energy = float64(res.Meters[d.channel].Total) / 60
|
||||
case d.channel < len(res.EMeters):
|
||||
energy = float64(res.EMeters[d.channel].Total) / 60
|
||||
default:
|
||||
return 0, errors.New("invalid channel, missing power meter")
|
||||
}
|
||||
|
||||
default:
|
||||
var res Gen2StatusResponse
|
||||
if err := d.execGen2Cmd("Shelly.GetStatus", false, &res); err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
switch d.channel {
|
||||
case 1:
|
||||
energy = res.Switch1.Aenergy.Total
|
||||
case 2:
|
||||
energy = res.Switch2.Aenergy.Total
|
||||
default:
|
||||
energy = res.Switch0.Aenergy.Total
|
||||
}
|
||||
}
|
||||
|
||||
return energy / 1000, nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,7 +25,10 @@ type Gen2SwitchResponse struct {
|
|||
}
|
||||
|
||||
type Gen2Switch struct {
|
||||
Apower float64
|
||||
Apower float64
|
||||
Aenergy struct {
|
||||
Total float64
|
||||
}
|
||||
}
|
||||
|
||||
type Gen2StatusResponse struct {
|
||||
|
|
@ -41,9 +44,11 @@ type Gen1SwitchResponse struct {
|
|||
type Gen1StatusResponse struct {
|
||||
Meters []struct {
|
||||
Power float64
|
||||
Total int64
|
||||
}
|
||||
// Shelly EM meter JSON response
|
||||
EMeters []struct {
|
||||
Power float64
|
||||
Total int64
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue