From c4d237d8fc08cd759d74a3101c67f188f3244cf7 Mon Sep 17 00:00:00 2001 From: Michael Hess Date: Mon, 18 Nov 2024 09:51:29 +0100 Subject: [PATCH 1/6] PhaseGetter returns configured (not used) phases --- charger/easee.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/charger/easee.go b/charger/easee.go index 2d4ffb4c9f..ca4ff0d820 100644 --- a/charger/easee.go +++ b/charger/easee.go @@ -814,7 +814,11 @@ var _ api.PhaseGetter = (*Easee)(nil) func (c *Easee) GetPhases() (int, error) { c.mux.RLock() defer c.mux.RUnlock() - return c.outputPhase, nil + phaseMode := c.phaseMode + if phaseMode == 2 { // map automatic to 3p + phaseMode = 3 + } + return phaseMode, nil } var _ api.Identifier = (*Easee)(nil) From c4abc48023e14b50bfd1e31cc60c4bed786d0c15 Mon Sep 17 00:00:00 2001 From: Michael Hess Date: Mon, 18 Nov 2024 21:42:33 +0100 Subject: [PATCH 2/6] Add PhaseGetter support for circuit controlled chargers --- charger/easee.go | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/charger/easee.go b/charger/easee.go index ca4ff0d820..31f2be0a23 100644 --- a/charger/easee.go +++ b/charger/easee.go @@ -52,6 +52,7 @@ type Easee struct { lastEnergyPollMux sync.Mutex maxChargerCurrent float64 dynamicChargerCurrent float64 + dynamicCircuitCurrent [3]float64 current float64 chargerEnabled bool smartCharging bool @@ -315,6 +316,12 @@ func (c *Easee) ProductUpdate(i json.RawMessage) { c.phaseMode = value.(int) case easee.OUTPUT_PHASE: c.outputPhase = value.(int) / 10 // API gives 0,10,30 for 0,1,3p + case easee.DYNAMIC_CIRCUIT_CURRENT_P1: + c.dynamicCircuitCurrent[0] = value.(float64) + case easee.DYNAMIC_CIRCUIT_CURRENT_P2: + c.dynamicCircuitCurrent[1] = value.(float64) + case easee.DYNAMIC_CIRCUIT_CURRENT_P3: + c.dynamicCircuitCurrent[2] = value.(float64) case easee.MAX_CHARGER_CURRENT: c.maxChargerCurrent = value.(float64) case easee.DYNAMIC_CHARGER_CURRENT: @@ -814,11 +821,22 @@ var _ api.PhaseGetter = (*Easee)(nil) func (c *Easee) GetPhases() (int, error) { c.mux.RLock() defer c.mux.RUnlock() - phaseMode := c.phaseMode - if phaseMode == 2 { // map automatic to 3p - phaseMode = 3 + var phases = 0 + if c.circuit != 0 { + // circuit level controlled charger + for dcc := range c.dynamicCircuitCurrent { + if dcc > 0 { + phases++ + } + } + } else { + // charger level + phases := c.phaseMode + if phases == 2 { // map automatic to 3p + phases = 3 + } } - return phaseMode, nil + return phases, nil } var _ api.Identifier = (*Easee)(nil) From f0abbd040d7b777de633784fa4e044953ea236bb Mon Sep 17 00:00:00 2001 From: Michael Hess Date: Mon, 18 Nov 2024 21:48:25 +0100 Subject: [PATCH 3/6] fix ineffective assignment (thank you linter :) ) --- charger/easee.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/charger/easee.go b/charger/easee.go index 31f2be0a23..5d5caa40af 100644 --- a/charger/easee.go +++ b/charger/easee.go @@ -831,7 +831,7 @@ func (c *Easee) GetPhases() (int, error) { } } else { // charger level - phases := c.phaseMode + phases = c.phaseMode if phases == 2 { // map automatic to 3p phases = 3 } From 34a92f83ccc255acf901171ba4e39fd58d337646 Mon Sep 17 00:00:00 2001 From: Michael Hess Date: Mon, 18 Nov 2024 21:50:48 +0100 Subject: [PATCH 4/6] remove superflous default initialization --- charger/easee.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/charger/easee.go b/charger/easee.go index 5d5caa40af..5f7ca88bb4 100644 --- a/charger/easee.go +++ b/charger/easee.go @@ -821,7 +821,7 @@ var _ api.PhaseGetter = (*Easee)(nil) func (c *Easee) GetPhases() (int, error) { c.mux.RLock() defer c.mux.RUnlock() - var phases = 0 + var phases int if c.circuit != 0 { // circuit level controlled charger for dcc := range c.dynamicCircuitCurrent { From 84eaffb5885b7de2a4d15561aa09ccedeca87267 Mon Sep 17 00:00:00 2001 From: Michael Hess Date: Mon, 18 Nov 2024 22:17:25 +0100 Subject: [PATCH 5/6] fix improper use of range when iterating --- charger/easee.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/charger/easee.go b/charger/easee.go index 5f7ca88bb4..35dbe3a938 100644 --- a/charger/easee.go +++ b/charger/easee.go @@ -824,7 +824,7 @@ func (c *Easee) GetPhases() (int, error) { var phases int if c.circuit != 0 { // circuit level controlled charger - for dcc := range c.dynamicCircuitCurrent { + for _, dcc := range c.dynamicCircuitCurrent { if dcc > 0 { phases++ } From 5e844289c6b342ecf4c99271d3dd9cba2bf1f969 Mon Sep 17 00:00:00 2001 From: Michael Hess Date: Mon, 18 Nov 2024 22:49:26 +0100 Subject: [PATCH 6/6] remove now superflous outputPhase member --- charger/easee.go | 3 --- 1 file changed, 3 deletions(-) diff --git a/charger/easee.go b/charger/easee.go index 35dbe3a938..ab5c519ba0 100644 --- a/charger/easee.go +++ b/charger/easee.go @@ -62,7 +62,6 @@ type Easee struct { pilotMode string reasonForNoCurrent int phaseMode int - outputPhase int sessionStartEnergy *float64 currentPower, sessionEnergy, totalEnergy, currentL1, currentL2, currentL3 float64 @@ -314,8 +313,6 @@ func (c *Easee) ProductUpdate(i json.RawMessage) { c.currentL3 = value.(float64) case easee.PHASE_MODE: c.phaseMode = value.(int) - case easee.OUTPUT_PHASE: - c.outputPhase = value.(int) / 10 // API gives 0,10,30 for 0,1,3p case easee.DYNAMIC_CIRCUIT_CURRENT_P1: c.dynamicCircuitCurrent[0] = value.(float64) case easee.DYNAMIC_CIRCUIT_CURRENT_P2: