From 7bb4250a293ef6751c597f8370bc4f34e4737832 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Viktor=20Markst=C3=A4dter?= Date: Tue, 5 Apr 2022 21:19:43 +0200 Subject: [PATCH] enable write settings on go-eCharger --- dbus-goecharger.py | 52 +++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 47 insertions(+), 5 deletions(-) diff --git a/dbus-goecharger.py b/dbus-goecharger.py index 3134d66..b10b826 100755 --- a/dbus-goecharger.py +++ b/dbus-goecharger.py @@ -102,6 +102,37 @@ class DbusGoeChargerService: raise ValueError("AccessType %s is not supported" % (config['DEFAULT']['AccessType'])) return URL + + def _getGoeChargerMqttPayloadUrl(self, parameter, value): + config = self._getConfig() + accessType = config['DEFAULT']['AccessType'] + + if accessType == 'OnPremise': + URL = "http://%s/mqtt?payload=%s=%s" % (config['ONPREMISE']['Host'], parameter, value) + else: + raise ValueError("AccessType %s is not supported" % (config['DEFAULT']['AccessType'])) + + return URL + + def _setGoeChargerValue(self, parameter, value): + URL = self._getGoeChargerMqttPayloadUrl(parameter, str(value)) + request_data = requests.get(url = URL) + + # check for response + if not request_data: + raise ConnectionError("No response from go-eCharger - %s" % (URL)) + + json_data = request_data.json() + + # check for Json + if not json_data: + raise ValueError("Converting response to JSON failed") + + if json_data[parameter] == str(value): + return True + else: + logging.warning("go-eCharger parameter %s not set to %s" % (parameter, str(value))) + return False def _getGoeChargerData(self): @@ -141,10 +172,12 @@ class DbusGoeChargerService: self._dbusservice['/Ac/Power'] = int(data['nrg'][11] * 0.01 * 1000) 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['/SetCurrent'] = int(data['amp']) - self._dbusservice['/MaxCurrent'] = 16 # data['vehicle_current_a'] self._dbusservice['/Ac/Energy/Forward'] = int(float(data['eto']) / 10.0) + self._dbusservice['/StartStop'] = int(data['alw']) + self._dbusservice['/SetCurrent'] = int(data['amp']) + self._dbusservice['/MaxCurrent'] = int(data['ama']) + # update startChargeTime based on state change startDetected = self._dbusservice['/Status'] != 2 and int(data['car']) == 2 stopDetected = self._dbusservice['/Status'] == 2 and int(data['car']) != 2 @@ -190,8 +223,16 @@ class DbusGoeChargerService: def _handlechangedvalue(self, path, value): logging.info("someone else updated %s to %s" % (path, value)) - return True # accept the change - + + if path == '/SetCurrent': + return self._setGoeChargerValue('amp', value) + elif path == '/StartStop': + return self._setGoeChargerValue('alw', value) + elif path == '/MaxCurrent': + return self._setGoeChargerValue('ama', value) + else: + logging.info("mapping for evcharger path %s does not exist" % (path)) + return False def main(): @@ -232,7 +273,8 @@ def main(): '/Current': {'initial': 0, 'textformat': _a}, '/SetCurrent': {'initial': 0, 'textformat': _a}, '/MaxCurrent': {'initial': 0, 'textformat': _a}, - '/MCU/Temperature': {'initial': 0, 'textformat': _degC} + '/MCU/Temperature': {'initial': 0, 'textformat': _degC}, + '/StartStop': {'initial': 0} } )