chore: drop generated code, add phase powers (#26852)
This commit is contained in:
parent
c20b562d61
commit
20ce7493dd
2 changed files with 27 additions and 7264 deletions
|
|
@ -1,7 +1,5 @@
|
|||
package meter
|
||||
|
||||
//go:generate go tool decorate -f decorateHomeAssistant -b *HomeAssistant -r api.Meter -t "api.MeterEnergy,TotalEnergy,func() (float64, error)" -t "api.PhaseCurrents,Currents,func() (float64, float64, float64, error)" -t "api.PhaseVoltages,Voltages,func() (float64, float64, float64, error)" -t "api.Battery,Soc,func() (float64, error)" -t "api.BatteryCapacity,Capacity,func() float64" -t "api.BatterySocLimiter,GetSocLimits,func() (float64, float64)" -t "api.BatteryPowerLimiter,GetPowerLimits,func() (float64, float64)" -t "api.BatteryController,SetBatteryMode,func(api.BatteryMode) error" -t "api.MaxACPowerGetter,MaxACPower,func() float64"
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
|
|
@ -11,12 +9,6 @@ import (
|
|||
"github.com/evcc-io/evcc/util/homeassistant"
|
||||
)
|
||||
|
||||
// HomeAssistant meter implementation
|
||||
type HomeAssistant struct {
|
||||
conn *homeassistant.Connection
|
||||
power string
|
||||
}
|
||||
|
||||
func init() {
|
||||
registry.Add("homeassistant", NewHomeAssistantFromConfig)
|
||||
}
|
||||
|
|
@ -31,6 +23,7 @@ func NewHomeAssistantFromConfig(other map[string]any) (api.Meter, error) {
|
|||
Energy string
|
||||
Currents []string
|
||||
Voltages []string
|
||||
Powers []string
|
||||
Soc string
|
||||
|
||||
// pv
|
||||
|
|
@ -62,48 +55,51 @@ func NewHomeAssistantFromConfig(other map[string]any) (api.Meter, error) {
|
|||
return nil, err
|
||||
}
|
||||
|
||||
m := &HomeAssistant{
|
||||
conn: conn,
|
||||
power: cc.Power,
|
||||
}
|
||||
m, _ := NewConfigurable(func() (float64, error) {
|
||||
return conn.GetFloatState(cc.Power)
|
||||
})
|
||||
|
||||
// decorators for optional interfaces
|
||||
var energy func() (float64, error)
|
||||
var currents, voltages func() (float64, float64, float64, error)
|
||||
var soc func() (float64, error)
|
||||
var energyG func() (float64, error)
|
||||
var currentsG, voltagesG, powersG func() (float64, float64, float64, error)
|
||||
|
||||
if cc.Energy != "" {
|
||||
energy = func() (float64, error) { return conn.GetFloatState(cc.Energy) }
|
||||
energyG = func() (float64, error) { return conn.GetFloatState(cc.Energy) }
|
||||
}
|
||||
|
||||
// phase currents (optional)
|
||||
if phases, err := homeassistant.ValidatePhaseEntities(cc.Currents); len(phases) > 0 {
|
||||
currents = func() (float64, float64, float64, error) { return conn.GetPhaseFloatStates(phases) }
|
||||
currentsG = func() (float64, float64, float64, error) { return conn.GetPhaseFloatStates(phases) }
|
||||
} else if err != nil {
|
||||
return nil, fmt.Errorf("currents: %w", err)
|
||||
}
|
||||
|
||||
// phase voltages (optional)
|
||||
if phases, err := homeassistant.ValidatePhaseEntities(cc.Voltages); len(phases) > 0 {
|
||||
voltages = func() (float64, float64, float64, error) { return conn.GetPhaseFloatStates(phases) }
|
||||
voltagesG = func() (float64, float64, float64, error) { return conn.GetPhaseFloatStates(phases) }
|
||||
} else if err != nil {
|
||||
return nil, fmt.Errorf("voltages: %w", err)
|
||||
}
|
||||
|
||||
if cc.Soc != "" {
|
||||
soc = func() (float64, error) { return conn.GetFloatState(cc.Soc) }
|
||||
// phase powers (optional)
|
||||
if phases, err := homeassistant.ValidatePhaseEntities(cc.Powers); len(phases) > 0 {
|
||||
powersG = func() (float64, float64, float64, error) { return conn.GetPhaseFloatStates(phases) }
|
||||
} else if err != nil {
|
||||
return nil, fmt.Errorf("powers: %w", err)
|
||||
}
|
||||
|
||||
return decorateHomeAssistant(m,
|
||||
energy, currents, voltages, soc,
|
||||
cc.batteryCapacity.Decorator(), cc.batterySocLimits.Decorator(), cc.batteryPowerLimits.Decorator(), nil,
|
||||
cc.pvMaxACPower.Decorator(),
|
||||
if cc.Soc != "" {
|
||||
socG := func() (float64, error) { return conn.GetFloatState(cc.Soc) }
|
||||
|
||||
return m.DecorateBattery(
|
||||
energyG,
|
||||
socG, cc.batteryCapacity.Decorator(),
|
||||
cc.batterySocLimits.Decorator(), cc.batteryPowerLimits.Decorator(),
|
||||
nil,
|
||||
), nil
|
||||
}
|
||||
|
||||
return m.Decorate(
|
||||
energyG, currentsG, voltagesG, powersG, cc.pvMaxACPower.Decorator(),
|
||||
), nil
|
||||
}
|
||||
|
||||
var _ api.Meter = (*HomeAssistant)(nil)
|
||||
|
||||
// CurrentPower implements the api.Meter interface
|
||||
func (m *HomeAssistant) CurrentPower() (float64, error) {
|
||||
return m.conn.GetFloatState(m.power)
|
||||
}
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
Loading…
Add table
Add a link
Reference in a new issue