chore: move phase setters to separate file (#5634)

This commit is contained in:
andig 2022-12-31 15:13:33 +01:00 • committed by GitHub
parent 05d371e774
commit 91be66cc34
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 40 additions and 33 deletions

View file

@ -1300,36 +1300,6 @@ func (lp *Loadpoint) scalePhasesIfAvailable(phases int) error {
return nil
}
// setConfiguredPhases sets the default phase configuration
func (lp *Loadpoint) setConfiguredPhases(phases int) {
lp.Lock()
defer lp.Unlock()
lp.ConfiguredPhases = phases
// publish 1p3p capability and phase configuration
if _, ok := lp.charger.(api.PhaseSwitcher); ok {
lp.publish(phasesConfigured, lp.ConfiguredPhases)
} else {
lp.publish(phasesConfigured, nil)
}
}
// setPhases sets the number of enabled phases without modifying the charger
func (lp *Loadpoint) setPhases(phases int) {
if lp.GetPhases() != phases {
lp.Lock()
lp.phases = phases
lp.Unlock()
// reset timer to disabled state
lp.resetPhaseTimer()
// measure phases after switching
lp.resetMeasuredPhases()
}
}
// scalePhases adjusts the number of active phases and returns the appropriate charging current.
// Returns api.ErrNotAvailable if api.PhaseSwitcher is not available.
func (lp *Loadpoint) scalePhases(phases int) error {
@ -1639,7 +1609,7 @@ func (lp *Loadpoint) updateChargeCurrents() {
lp.measuredPhases = phases
lp.Unlock()
lp.log.DEBUG.Printf("detected phases: %dp", phases)
lp.log.DEBUG.Printf("detected active phases: %dp", phases)
lp.publish(phasesActive, phases)
}
}
@ -1676,7 +1646,7 @@ func (lp *Loadpoint) updateChargeVoltages() {
}
if phases >= 1 {
lp.log.DEBUG.Printf("detected phases: %dp", phases)
lp.log.DEBUG.Printf("detected connected phases: %dp", phases)
lp.setPhases(phases)
}
}

View file

@ -6,6 +6,36 @@ import (
"github.com/evcc-io/evcc/api"
)
// setConfiguredPhases sets the default phase configuration
func (lp *Loadpoint) setConfiguredPhases(phases int) {
lp.Lock()
defer lp.Unlock()
lp.ConfiguredPhases = phases
// publish 1p3p capability and phase configuration
if _, ok := lp.charger.(api.PhaseSwitcher); ok {
lp.publish(phasesConfigured, lp.ConfiguredPhases)
} else {
lp.publish(phasesConfigured, nil)
}
}
// setPhases sets the number of enabled phases without modifying the charger
func (lp *Loadpoint) setPhases(phases int) {
if lp.GetPhases() != phases {
lp.Lock()
lp.phases = phases
lp.Unlock()
// reset timer to disabled state
lp.resetPhaseTimer()
// measure phases after switching
lp.resetMeasuredPhases()
}
}
// resetMeasuredPhases resets measured phases to unknown on vehicle disconnect, phase switch or phase api call
func (lp *Loadpoint) resetMeasuredPhases() {
lp.Lock()
@ -49,7 +79,14 @@ func (lp *Loadpoint) activePhases() int {
vehicle := lp.getVehiclePhases()
measured := lp.getMeasuredPhases()
return min(expect(vehicle), expect(physical), expect(measured))
active := min(expect(vehicle), expect(physical), expect(measured))
// sanity check - we should not assume less active phases than actually measured
if measured > 0 && active < measured {
lp.log.WARN.Printf("phase mismatch between %dp measured for %dp vehicle and %dp charger", measured, vehicle, physical)
}
return active
}
// maxActivePhases returns the maximum number of active phases for the meter.