chore: drop generated code, add phase powers (#26852)

This commit is contained in:
andig 2026-01-20 17:07:08 +01:00 • committed by GitHub
parent c20b562d61
commit 20ce7493dd
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 27 additions and 7264 deletions

View file

@ -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