71 lines
1.8 KiB
Go
71 lines
1.8 KiB
Go
package shelly
|
|
|
|
import "github.com/evcc-io/evcc/api"
|
|
|
|
type EnergyMeter struct {
|
|
*Connection
|
|
}
|
|
|
|
func NewEnergyMeter(conn *Connection) *EnergyMeter {
|
|
res := &EnergyMeter{
|
|
Connection: conn,
|
|
}
|
|
|
|
return res
|
|
}
|
|
|
|
// CurrentPower implements the api.Meter interface
|
|
func (sh *EnergyMeter) CurrentPower() (float64, error) {
|
|
var res Gen2EmStatusResponse
|
|
if err := sh.Connection.execGen2Cmd("EM.GetStatus", false, &res); err != nil {
|
|
return 0, err
|
|
}
|
|
|
|
return res.TotalPower, nil
|
|
}
|
|
|
|
// TotalEnergy implements the api.Meter interface
|
|
func (sh *EnergyMeter) TotalEnergy() (float64, error) {
|
|
var res Gen2EmDataStatusResponse
|
|
if err := sh.Connection.execGen2Cmd("EMData.GetStatus", false, &res); err != nil {
|
|
return 0, err
|
|
}
|
|
|
|
return res.TotalEnergy / 1000, nil
|
|
}
|
|
|
|
var _ api.PhaseCurrents = (*EnergyMeter)(nil)
|
|
|
|
// Currents implements the api.PhaseCurrents interface
|
|
func (sh *EnergyMeter) Currents() (float64, float64, float64, error) {
|
|
var res Gen2EmStatusResponse
|
|
if err := sh.Connection.execGen2Cmd("EM.GetStatus", false, &res); err != nil {
|
|
return 0, 0, 0, err
|
|
}
|
|
|
|
return res.CurrentA, res.CurrentB, res.CurrentC, nil
|
|
}
|
|
|
|
var _ api.PhaseVoltages = (*EnergyMeter)(nil)
|
|
|
|
// Voltages implements the api.PhaseVoltages interface
|
|
func (sh *EnergyMeter) Voltages() (float64, float64, float64, error) {
|
|
var res Gen2EmStatusResponse
|
|
if err := sh.Connection.execGen2Cmd("EM.GetStatus", false, &res); err != nil {
|
|
return 0, 0, 0, err
|
|
}
|
|
|
|
return res.VoltageA, res.VoltageB, res.VoltageC, nil
|
|
}
|
|
|
|
var _ api.PhasePowers = (*EnergyMeter)(nil)
|
|
|
|
// Powers implements the api.PhasePowers interface
|
|
func (sh *EnergyMeter) Powers() (float64, float64, float64, error) {
|
|
var res Gen2EmStatusResponse
|
|
if err := sh.Connection.execGen2Cmd("EM.GetStatus", false, &res); err != nil {
|
|
return 0, 0, 0, err
|
|
}
|
|
|
|
return res.PowerA, res.PowerB, res.PowerC, nil
|
|
}
|