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
This commit is contained in:
Viktor Markstädter
2025-02-27 11:40:57 +01:00
parent 05cef56bc1
commit d55cd59511
2 changed files with 22 additions and 17 deletions

View File

@@ -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

View File

@@ -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()
])