Homeassistant meter: add battery parameters (#25110)

This commit is contained in:
andig 2025-11-06 20:18:53 +01:00 • committed by GitHub
parent 5bee21e106
commit 826b802ff6
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 7001 additions and 20 deletions

View file

@ -1,6 +1,6 @@
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)"
//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"
@ -23,7 +23,7 @@ func init() {
// NewHomeAssistantFromConfig creates a HomeAssistant meter from generic config
func NewHomeAssistantFromConfig(other map[string]any) (api.Meter, error) {
var cc struct {
cc := struct {
URI string
Token string
Power string
@ -31,6 +31,19 @@ func NewHomeAssistantFromConfig(other map[string]any) (api.Meter, error) {
Currents []string
Voltages []string
Soc string
// pv
pvMaxACPower `mapstructure:",squash"`
// battery
batteryCapacity `mapstructure:",squash"`
batterySocLimits `mapstructure:",squash"`
batteryPowerLimits `mapstructure:",squash"`
}{
batterySocLimits: batterySocLimits{
MinSoc: 20,
MaxSoc: 95,
},
}
if err := util.DecodeOther(other, &cc); err != nil {
@ -79,7 +92,11 @@ func NewHomeAssistantFromConfig(other map[string]any) (api.Meter, error) {
soc = func() (float64, error) { return conn.GetFloatState(cc.Soc) }
}
return decorateHomeAssistant(m, energy, currents, voltages, soc), nil
return decorateHomeAssistant(m,
energy, currents, voltages, soc,
cc.batteryCapacity.Decorator(), cc.batterySocLimits.Decorator(), cc.batteryPowerLimits.Decorator(), nil,
cc.pvMaxACPower.Decorator(),
), nil
}
var _ api.Meter = (*HomeAssistant)(nil)

File diff suppressed because it is too large Load diff

View file

@ -103,6 +103,12 @@ params:
help:
en: Entity ID for battery state of charge in percent
de: Entitäts-ID für Batterieladestand in Prozent
- name: capacity
- name: minsoc
- name: maxsoc
- name: maxchargepower
- name: maxdischargepower
- name: maxacpower
render: |
type: homeassistant
uri: {{ .uri }}
@ -117,4 +123,10 @@ render: |
- {{ .voltageL1 }}
- {{ .voltageL2 }}
- {{ .voltageL3 }}
maxacpower: {{ .maxacpower }} # W
soc: {{ .soc }}
capacity: {{ .capacity }} # kWh
maxchargepower: {{ .maxchargepower }} # W
maxdischargepower: {{ .maxdischargepower }} # W
minsoc: {{ .minsoc }} # %
maxsoc: {{ .maxsoc }} # %