From bf41bec14116977604c94b2acca140195f2ae13f Mon Sep 17 00:00:00 2001 From: premultiply <4681172+premultiply@users.noreply.github.com> Date: Thu, 29 Dec 2022 22:38:55 +0100 Subject: [PATCH] Vestel: Fix charger status (#5612) * fix status * add phase voltages api --- charger/vestel.go | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/charger/vestel.go b/charger/vestel.go index f9e6beed2..7ad33c106 100644 --- a/charger/vestel.go +++ b/charger/vestel.go @@ -42,9 +42,11 @@ const ( vestelRegSessionEnergy = 1502 vestelRegFailsafeTimeout = 2002 vestelRegAlive = 6000 + //vestelRegChargepointState = 1000 ) -var vestelRegCurrents = []uint16{1008, 1010, 1012} +var vestelRegCurrents = []uint16{1008, 1010, 1012} // non-continuous uint16 registers! +var vestelRegVoltages = []uint16{1014, 1016, 1018} // non-continuous uint16 registers! // Vestel is an api.Charger implementation for Vestel/Hymes wallboxes with Ethernet (SW modells). // It uses Modbus TCP to communicate with the wallbox at modbus client id 255. @@ -114,11 +116,11 @@ func (wb *Vestel) Status() (api.ChargeStatus, error) { res := api.StatusA b, err := wb.conn.ReadInputRegisters(vestelRegCableStatus, 1) - if err == nil && binary.BigEndian.Uint16(b) > 0 { + if err == nil && binary.BigEndian.Uint16(b) >= 2 { res = api.StatusB b, err = wb.conn.ReadInputRegisters(vestelRegChargeStatus, 1) - if err == nil && binary.BigEndian.Uint16(b) > 0 { + if err == nil && binary.BigEndian.Uint16(b) == 1 { res = api.StatusC } } @@ -228,6 +230,23 @@ func (wb *Vestel) Currents() (float64, float64, float64, error) { return currents[0], currents[1], currents[2], nil } +var _ api.PhaseVoltages = (*Vestel)(nil) + +// Voltages implements the api.PhaseVoltages interface +func (wb *Vestel) Voltages() (float64, float64, float64, error) { + var voltages []float64 + for _, regVoltage := range vestelRegVoltages { + b, err := wb.conn.ReadInputRegisters(regVoltage, 1) + if err != nil { + return 0, 0, 0, err + } + + voltages = append(voltages, float64(binary.BigEndian.Uint16(b))) + } + + return voltages[0], voltages[1], voltages[2], nil +} + var _ api.Diagnosis = (*Vestel)(nil) // Diagnose implements the api.Diagnosis interface