diff --git a/core/loadpoint.go b/core/loadpoint.go index 243a20bc7..181274288 100644 --- a/core/loadpoint.go +++ b/core/loadpoint.go @@ -1031,6 +1031,14 @@ func (lp *LoadPoint) scalePhasesIfAvailable(phases int) error { return nil } +// setDefaultPhases sets the default phase configuration +func (lp *LoadPoint) setDefaultPhases(phases int) { + lp.Lock() + defer lp.Unlock() + lp.DefaultPhases = phases + lp.phaseTimer = time.Time{} +} + // setPhases sets the number of enabled phases without modifying the charger func (lp *LoadPoint) setPhases(phases int) { if lp.GetPhases() != phases { diff --git a/core/loadpoint_api.go b/core/loadpoint_api.go index f59d335b5..c404fa6e5 100644 --- a/core/loadpoint_api.go +++ b/core/loadpoint_api.go @@ -116,11 +116,14 @@ func (lp *LoadPoint) SetPhases(phases int) error { return fmt.Errorf("invalid number of phases: %d", phases) } - if _, ok := lp.charger.(api.ChargePhases); ok && phases > 0 { - return lp.scalePhases(phases) + // set new default + lp.setDefaultPhases(phases) + + // apply immediately if not 1p3p + if _, ok := lp.charger.(api.ChargePhases); !ok { + lp.setPhases(phases) } - lp.setPhases(phases) return nil }