Heatpump: move phase configuration to loadpoint (#19745)

This commit is contained in:
andig 2025-03-13 10:57:31 +01:00 • committed by GitHub
parent deb40fefd6
commit dbd9c1a5fd
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 21 additions and 20 deletions

View file

@ -22,6 +22,7 @@ import (
"github.com/evcc-io/evcc/api"
"github.com/evcc-io/evcc/charger/measurement"
"github.com/evcc-io/evcc/core/loadpoint"
"github.com/evcc-io/evcc/plugin"
"github.com/evcc-io/evcc/util"
)
@ -29,7 +30,7 @@ import (
// Heatpump charger implementation
type Heatpump struct {
*embed
phases int
lp loadpoint.API
power int64
maxPowerG func() (int64, error)
maxPowerS func(int64) error
@ -49,13 +50,11 @@ func NewHeatpumpFromConfig(ctx context.Context, other map[string]interface{}) (a
GetMaxPower *plugin.Config // optional
measurement.Temperature `mapstructure:",squash"`
measurement.Energy `mapstructure:",squash"`
Phases int
}{
embed: embed{
Icon_: "heatpump",
Features_: []api.Feature{api.Heating, api.IntegratedDevice},
},
Phases: 1,
}
if err := util.DecodeOther(other, &cc); err != nil {
@ -76,7 +75,7 @@ func NewHeatpumpFromConfig(ctx context.Context, other map[string]interface{}) (a
// return nil, api.ErrSponsorRequired
// }
res, err := NewHeatpump(ctx, &cc.embed, maxPowerS, maxPowerG, cc.Phases)
res, err := NewHeatpump(ctx, &cc.embed, maxPowerS, maxPowerG)
if err != nil {
return nil, err
}
@ -95,12 +94,11 @@ func NewHeatpumpFromConfig(ctx context.Context, other map[string]interface{}) (a
}
// NewHeatpump creates heatpump charger
func NewHeatpump(ctx context.Context, embed *embed, maxPowerS func(int64) error, maxPowerG func() (int64, error), phases int) (*Heatpump, error) {
func NewHeatpump(ctx context.Context, embed *embed, maxPowerS func(int64) error, maxPowerG func() (int64, error)) (*Heatpump, error) {
res := &Heatpump{
embed: embed,
maxPowerG: maxPowerG,
maxPowerS: maxPowerS,
phases: phases,
}
return res, nil
@ -155,5 +153,16 @@ func (wb *Heatpump) MaxCurrent(current int64) error {
// MaxCurrent implements the api.Charger interface
func (wb *Heatpump) MaxCurrentEx(current float64) error {
return wb.setMaxPower(int64(230 * current * float64(wb.phases)))
phases := 1
if wb.lp != nil {
phases = wb.lp.GetPhases()
}
return wb.setMaxPower(int64(230 * current * float64(phases)))
}
var _ loadpoint.Controller = (*Heatpump)(nil)
// LoadpointControl implements loadpoint.Controller
func (wb *Heatpump) LoadpointControl(lp loadpoint.API) {
wb.lp = lp
}

View file

@ -53,16 +53,14 @@ func NewVaillantFromConfig(ctx context.Context, other map[string]interface{}) (a
Realm string
HeatingZone int
HeatingSetpoint float32
Phases int
Cache time.Duration
}{
embed: embed{
Icon_: "heatpump",
Features_: []api.Feature{api.Heating, api.IntegratedDevice},
},
Realm: sensonet.REALM_GERMANY,
Phases: 1,
Cache: time.Minute,
Realm: sensonet.REALM_GERMANY,
Cache: time.Minute,
}
if err := util.DecodeOther(other, &cc); err != nil {

View file

@ -14,11 +14,9 @@ params:
de: "Temperaturquelle"
en: "Temperature source"
- name: phases
type: int
advanced: true
deprecated: true
render: |
type: heatpump
phases: {{ .phases }}
setmaxpower:
source: modbus
{{- include "modbus" . | indent 2 }}

View file

@ -21,11 +21,9 @@ params:
de: "Temperaturquelle"
en: "Temperature source"
- name: phases
type: int
advanced: true
deprecated: true
render: |
type: heatpump
phases: {{ .phases }}
setmaxpower:
source: modbus
{{- include "modbus" . | indent 2 }}

View file

@ -23,12 +23,10 @@ params:
de: Boost Temperatur
en: Boost temperature setpoint
- name: phases
type: int
advanced: true
deprecated: true
render: |
type: vaillant
user: {{ .user }}
password: {{ .password }}
heatingzone: {{ .zone }}
heatingsetpoint: {{ .setpoint }}
phases: {{ .phases }}