From 89cc2ee3b8bf0fc7c5aadac92be70aa2917c4099 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 Date: Fri, 20 Sep 2024 17:06:11 +0200 Subject: [PATCH 1/7] Workaround unparseable firmware versions --- dbus-goecharger.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/dbus-goecharger.py b/dbus-goecharger.py index e193f7f..8aa9ff5 100755 --- a/dbus-goecharger.py +++ b/dbus-goecharger.py @@ -50,7 +50,12 @@ class DbusGoeChargerService: self._dbusservice.add_path('/ProductName', productname) self._dbusservice.add_path('/CustomName', productname) if data: - self._dbusservice.add_path('/FirmwareVersion', int(data['fwv'].replace('.', ''))) + fwv = data['fwv'] + try: + fwv = int(data['fwv'].replace('.', '')) + except: + pass + self._dbusservice.add_path('/FirmwareVersion', fwv) self._dbusservice.add_path('/Serial', data['sse']) self._dbusservice.add_path('/HardwareVersion', hardwareVersion) self._dbusservice.add_path('/Connected', 1) From 7b905225fd9c2d2859f7e8423bffff58a7c6c595 Mon Sep 17 00:00:00 2001 From: tm-107 <41205746+tm-107@users.noreply.github.com> Date: Wed, 19 Feb 2025 00:22:58 +0100 Subject: [PATCH 2/7] remove entry from rc.local --- uninstall.sh | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/uninstall.sh b/uninstall.sh index 962352a..dbbb7e4 100644 --- a/uninstall.sh +++ b/uninstall.sh @@ -1,8 +1,14 @@ -#!/bin/bash +#!/bin/sh SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) SERVICE_NAME=$(basename $SCRIPT_DIR) rm /service/$SERVICE_NAME -kill $(pgrep -f 'supervise dbus-goecharger') +kill $(pgrep -f 'supervise $SERVICE_NAME') chmod a-x $SCRIPT_DIR/service/run ./restart.sh + +# remove entry from rc.local +filename=/data/rc.local +grep -v $SERVICE_NAME $filename > $filename.temp +mv $filename.temp $filename +chmod +x $filename From 2c8311bbe186a0b6db12defa2a2c8bbedbda5ef6 Mon Sep 17 00:00:00 2001 From: tm-107 <41205746+tm-107@users.noreply.github.com> Date: Wed, 19 Feb 2025 00:24:23 +0100 Subject: [PATCH 3/7] remove entry from rc.local --- uninstall.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uninstall.sh b/uninstall.sh index dbbb7e4..c393c7e 100644 --- a/uninstall.sh +++ b/uninstall.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) SERVICE_NAME=$(basename $SCRIPT_DIR) From d55cd595119e83d22ed6a8bfa7c26a770f7a1f1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Viktor=20Markst=C3=A4dter?= Date: Thu, 27 Feb 2025 11:40:57 +0100 Subject: [PATCH 4/7] Fixed following issues: 1. Change to RotatingFileHandler to avoid to large log file 2. Issue reading the Temperature 3. changing to V2 API 4. request only needed attributes to reduce the communication on API 5. Reduced timeout from 5s to 1s to be more responsive when charger is not available --- config.ini | 4 ++-- dbus-goecharger.py | 35 ++++++++++++++++++++--------------- 2 files changed, 22 insertions(+), 17 deletions(-) diff --git a/config.ini b/config.ini index 87fde29..ad00c04 100644 --- a/config.ini +++ b/config.ini @@ -3,7 +3,7 @@ AccessType = OnPremise SignOfLifeLog = 1 Deviceinstance = 43 # Go-e charger hardware version: 1 = v1, 2 = v2, 3 = v3 -HardwareVersion = 3 +HardwareVersion = 4 [ONPREMISE] -Host=192.168.178.97 +Host=192.168.178.51 diff --git a/dbus-goecharger.py b/dbus-goecharger.py index 8aa9ff5..dc37bff 100755 --- a/dbus-goecharger.py +++ b/dbus-goecharger.py @@ -3,6 +3,7 @@ # import normal packages import platform import logging +from logging.handlers import RotatingFileHandler import sys import os import sys @@ -26,7 +27,7 @@ class DbusGoeChargerService: deviceinstance = int(config['DEFAULT']['Deviceinstance']) hardwareVersion = int(config['DEFAULT']['HardwareVersion']) - self._dbusservice = VeDbusService("{}.http_{:02d}".format(servicename, deviceinstance)) + self._dbusservice = VeDbusService("{}.http_{:02d}".format(servicename, deviceinstance), register=False) self._paths = paths logging.debug("%s /DeviceInstance = %d" % (servicename, deviceinstance)) @@ -37,7 +38,7 @@ class DbusGoeChargerService: ] #get data from go-eCharger - data = self._getGoeChargerData() + data = self._getGoeChargerData('sse,fwv') # Create the management objects, as specified in the ccgx dbus-api document self._dbusservice.add_path('/Mgmt/ProcessName', __file__) @@ -70,6 +71,9 @@ class DbusGoeChargerService: self._dbusservice.add_path( path, settings['initial'], gettextcallback=settings['textformat'], writeable=True, onchangecallback=self._handlechangedvalue) + # register the service + self._dbusservice.register() + # last update self._lastUpdate = 0 @@ -103,7 +107,7 @@ class DbusGoeChargerService: accessType = config['DEFAULT']['AccessType'] if accessType == 'OnPremise': - URL = "http://%s/status" % (config['ONPREMISE']['Host']) + URL = "http://%s/api/status" % (config['ONPREMISE']['Host']) else: raise ValueError("AccessType %s is not supported" % (config['DEFAULT']['AccessType'])) @@ -141,10 +145,10 @@ class DbusGoeChargerService: return False - def _getGoeChargerData(self): - URL = self._getGoeChargerStatusUrl() + def _getGoeChargerData(self, filter): + URL = "%s?filter=%s" % (self._getGoeChargerStatusUrl(), filter) try: - request_data = requests.get(url = URL, timeout=5) + request_data = requests.get(url = URL, timeout=1) except Exception: return None @@ -172,14 +176,14 @@ class DbusGoeChargerService: def _update(self): try: #get data from go-eCharger - data = self._getGoeChargerData() + data = self._getGoeChargerData('nrg,eto,alw,amp,ama,car,tmp,tma') if data is not None: #send data to DBus - self._dbusservice['/Ac/L1/Power'] = int(data['nrg'][7] * 0.1 * 1000) - self._dbusservice['/Ac/L2/Power'] = int(data['nrg'][8] * 0.1 * 1000) - self._dbusservice['/Ac/L3/Power'] = int(data['nrg'][9] * 0.1 * 1000) - self._dbusservice['/Ac/Power'] = int(data['nrg'][11] * 0.01 * 1000) + self._dbusservice['/Ac/L1/Power'] = int(data['nrg'][7]) + self._dbusservice['/Ac/L2/Power'] = int(data['nrg'][8]) + self._dbusservice['/Ac/L3/Power'] = int(data['nrg'][9]) + self._dbusservice['/Ac/Power'] = int(data['nrg'][11]) self._dbusservice['/Ac/Voltage'] = int(data['nrg'][0]) self._dbusservice['/Current'] = max(data['nrg'][4] * 0.1, data['nrg'][5] * 0.1, data['nrg'][6] * 0.1) self._dbusservice['/Ac/Energy/Forward'] = int(float(data['eto']) / 10.0) @@ -200,12 +204,13 @@ class DbusGoeChargerService: config = self._getConfig() hardwareVersion = int(config['DEFAULT']['HardwareVersion']) - if hardwareVersion == 3: - self._dbusservice['/MCU/Temperature'] = int(data['tma'][0]) + if hardwareVersion >= 3: + self._dbusservice['/MCU/Temperature'] = int(data['tma'][0] if data['tma'] is not None else 0) else: self._dbusservice['/MCU/Temperature'] = int(data['tmp']) - # value 'car' 1: charging station ready, no vehicle 2: vehicle loads 3: Waiting for vehicle 4: Charge finished, vehicle still connected + # carState, null if internal error (Unknown/Error=0, Idle=1, Charging=2, WaitCar=3, Complete=4, Error=5) + # status 0=Disconnected; 1=Connected; 2=Charging; 3=Charged; 4=Waiting for sun; 5=Waiting for RFID; 6=Waiting for start; 7=Low SOC; 8=Ground fault; 9=Welded contacts; 10=CP Input shorted; 11=Residual current detected; 12=Under voltage detected; 13=Overvoltage detected; 14=Overheating detected status = 0 if int(data['car']) == 1: status = 0 @@ -259,7 +264,7 @@ def main(): datefmt='%Y-%m-%d %H:%M:%S', level=logging.INFO, handlers=[ - logging.FileHandler("%s/current.log" % (os.path.dirname(os.path.realpath(__file__)))), + RotatingFileHandler("%s/current.log" % (os.path.dirname(os.path.realpath(__file__))), maxBytes=10000), logging.StreamHandler() ]) From 6ab1882df8c0bd212f4b29a30ddc2cf2f0e9fb29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Viktor=20Markst=C3=A4dter?= Date: Thu, 27 Feb 2025 12:05:32 +0100 Subject: [PATCH 5/7] Make AC-Position configurable --- config.ini | 4 +++- dbus-goecharger.py | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/config.ini b/config.ini index ad00c04..12573e3 100644 --- a/config.ini +++ b/config.ini @@ -2,8 +2,10 @@ AccessType = OnPremise SignOfLifeLog = 1 Deviceinstance = 43 -# Go-e charger hardware version: 1 = v1, 2 = v2, 3 = v3 +# Go-e charger hardware version: 1 = v1, 2 = v2, 3 = v3, 4 = v4 HardwareVersion = 4 +# Go-e charger AC-Position: 0 = AC out, 1 = AC in +AcPosition = 0 [ONPREMISE] Host=192.168.178.51 diff --git a/dbus-goecharger.py b/dbus-goecharger.py index dc37bff..4bc65ee 100755 --- a/dbus-goecharger.py +++ b/dbus-goecharger.py @@ -26,6 +26,7 @@ class DbusGoeChargerService: config = self._getConfig() deviceinstance = int(config['DEFAULT']['Deviceinstance']) hardwareVersion = int(config['DEFAULT']['HardwareVersion']) + acPosition = int(config['DEFAULT']['AcPosition']) self._dbusservice = VeDbusService("{}.http_{:02d}".format(servicename, deviceinstance), register=False) self._paths = paths @@ -61,6 +62,7 @@ class DbusGoeChargerService: self._dbusservice.add_path('/HardwareVersion', hardwareVersion) self._dbusservice.add_path('/Connected', 1) self._dbusservice.add_path('/UpdateIndex', 0) + self._dbusservice.add_path('/Ac/Position', acPosition) # add paths without units for path in paths_wo_unit: From 8940267b55576f172ba220300b9d1d0247df4cde Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Viktor=20Markst=C3=A4dter?= Date: Thu, 27 Feb 2025 12:31:41 +0100 Subject: [PATCH 6/7] fix charge current --- dbus-goecharger.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dbus-goecharger.py b/dbus-goecharger.py index 4bc65ee..954e03a 100755 --- a/dbus-goecharger.py +++ b/dbus-goecharger.py @@ -187,7 +187,7 @@ class DbusGoeChargerService: self._dbusservice['/Ac/L3/Power'] = int(data['nrg'][9]) self._dbusservice['/Ac/Power'] = int(data['nrg'][11]) self._dbusservice['/Ac/Voltage'] = int(data['nrg'][0]) - self._dbusservice['/Current'] = max(data['nrg'][4] * 0.1, data['nrg'][5] * 0.1, data['nrg'][6] * 0.1) + self._dbusservice['/Current'] = max(data['nrg'][4], data['nrg'][5], data['nrg'][6]) self._dbusservice['/Ac/Energy/Forward'] = int(float(data['eto']) / 10.0) self._dbusservice['/StartStop'] = int(data['alw']) From 4cbded2c0398cdc5207830dcf04b5d443c186bfc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Viktor=20Markst=C3=A4dter?= Date: Thu, 27 Feb 2025 12:52:04 +0100 Subject: [PATCH 7/7] fix energy foreward to correct unit --- dbus-goecharger.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dbus-goecharger.py b/dbus-goecharger.py index 954e03a..30c45e8 100755 --- a/dbus-goecharger.py +++ b/dbus-goecharger.py @@ -188,7 +188,7 @@ class DbusGoeChargerService: self._dbusservice['/Ac/Power'] = int(data['nrg'][11]) self._dbusservice['/Ac/Voltage'] = int(data['nrg'][0]) self._dbusservice['/Current'] = max(data['nrg'][4], data['nrg'][5], data['nrg'][6]) - self._dbusservice['/Ac/Energy/Forward'] = int(float(data['eto']) / 10.0) + self._dbusservice['/Ac/Energy/Forward'] = int(float(data['eto']) / 1000.0) self._dbusservice['/StartStop'] = int(data['alw']) self._dbusservice['/SetCurrent'] = int(data['amp'])