evcc-io/meter/shelly/energymeter.go
2023-04-10 12:27:18 +02:00

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
}