Apply configured phases for all modes (#4195)
This commit is contained in:
parent
6df7168f1b
commit
a22b445aa8
2 changed files with 17 additions and 7 deletions
|
|
@ -1039,6 +1039,12 @@ func (lp *LoadPoint) resetPVTimerIfRunning(typ ...string) {
|
|||
lp.publishTimer(pvTimer, 0, timerInactive)
|
||||
}
|
||||
|
||||
// scalePhasesRequired validates if fixed phase configuration matches enabled phases
|
||||
func (lp *LoadPoint) scalePhasesRequired() bool {
|
||||
_, ok := lp.charger.(api.PhaseSwitcher)
|
||||
return ok && lp.ConfiguredPhases != 0 && lp.ConfiguredPhases != lp.GetPhases()
|
||||
}
|
||||
|
||||
// scalePhasesIfAvailable scales if api.PhaseSwitcher is available
|
||||
func (lp *LoadPoint) scalePhasesIfAvailable(phases int) error {
|
||||
if lp.ConfiguredPhases != 0 {
|
||||
|
|
@ -1058,7 +1064,6 @@ func (lp *LoadPoint) setConfiguredPhases(phases int) {
|
|||
defer lp.Unlock()
|
||||
|
||||
lp.ConfiguredPhases = phases
|
||||
lp.phaseTimer = time.Time{}
|
||||
|
||||
// publish 1p3p capability and phase configuration
|
||||
if _, ok := lp.charger.(api.PhaseSwitcher); ok {
|
||||
|
|
@ -1139,13 +1144,12 @@ func (lp *LoadPoint) pvScalePhases(availablePower, minCurrent, maxCurrent float6
|
|||
|
||||
lp.publishTimer(phaseTimer, lp.Disable.Delay, phaseScale1p)
|
||||
|
||||
elapsed := lp.clock.Since(lp.phaseTimer)
|
||||
if elapsed >= lp.Disable.Delay {
|
||||
if elapsed := lp.clock.Since(lp.phaseTimer); elapsed >= lp.Disable.Delay {
|
||||
lp.log.DEBUG.Printf("phase %s timer elapsed", phaseScale1p)
|
||||
if err := lp.scalePhases(1); err == nil {
|
||||
lp.log.DEBUG.Printf("switched phases: 1p @ %.0fW", availablePower)
|
||||
} else {
|
||||
lp.log.ERROR.Printf("switch phases: %v", err)
|
||||
lp.log.ERROR.Println(err)
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
|
@ -1168,13 +1172,12 @@ func (lp *LoadPoint) pvScalePhases(availablePower, minCurrent, maxCurrent float6
|
|||
|
||||
lp.publishTimer(phaseTimer, lp.Enable.Delay, phaseScale3p)
|
||||
|
||||
elapsed := lp.clock.Since(lp.phaseTimer)
|
||||
if elapsed >= lp.Enable.Delay {
|
||||
if elapsed := lp.clock.Since(lp.phaseTimer); elapsed >= lp.Enable.Delay {
|
||||
lp.log.DEBUG.Printf("phase %s timer elapsed", phaseScale3p)
|
||||
if err := lp.scalePhases(3); err == nil {
|
||||
lp.log.DEBUG.Printf("switched phases: 3p @ %.0fW", availablePower)
|
||||
} else {
|
||||
lp.log.ERROR.Printf("switch phases: %v", err)
|
||||
lp.log.ERROR.Println(err)
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
|
@ -1565,6 +1568,11 @@ func (lp *LoadPoint) Update(sitePower float64, cheap, batteryBuffered bool) {
|
|||
// https://github.com/evcc-io/evcc/issues/105
|
||||
err = lp.setLimit(0, false)
|
||||
|
||||
case lp.scalePhasesRequired():
|
||||
if err = lp.scalePhases(lp.ConfiguredPhases); err == nil {
|
||||
lp.log.DEBUG.Printf("switched phases: %dp", lp.ConfiguredPhases)
|
||||
}
|
||||
|
||||
case lp.targetSocReached():
|
||||
lp.log.DEBUG.Printf("targetSoC reached: %.1f > %d", lp.vehicleSoc, lp.SoC.target)
|
||||
var targetCurrent float64 // zero disables
|
||||
|
|
|
|||
|
|
@ -124,6 +124,8 @@ func (lp *LoadPoint) SetPhases(phases int) error {
|
|||
lp.setPhases(phases)
|
||||
}
|
||||
|
||||
lp.requestUpdate()
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue