mirror of
https://github.com/vikt0rm/dbus-goecharger.git
synced 2025-08-06 05:34:27 +02:00
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:
@@ -3,7 +3,7 @@ AccessType = OnPremise
|
|||||||
SignOfLifeLog = 1
|
SignOfLifeLog = 1
|
||||||
Deviceinstance = 43
|
Deviceinstance = 43
|
||||||
# Go-e charger hardware version: 1 = v1, 2 = v2, 3 = v3
|
# Go-e charger hardware version: 1 = v1, 2 = v2, 3 = v3
|
||||||
HardwareVersion = 3
|
HardwareVersion = 4
|
||||||
|
|
||||||
[ONPREMISE]
|
[ONPREMISE]
|
||||||
Host=192.168.178.97
|
Host=192.168.178.51
|
||||||
|
@@ -3,6 +3,7 @@
|
|||||||
# import normal packages
|
# import normal packages
|
||||||
import platform
|
import platform
|
||||||
import logging
|
import logging
|
||||||
|
from logging.handlers import RotatingFileHandler
|
||||||
import sys
|
import sys
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
@@ -26,7 +27,7 @@ class DbusGoeChargerService:
|
|||||||
deviceinstance = int(config['DEFAULT']['Deviceinstance'])
|
deviceinstance = int(config['DEFAULT']['Deviceinstance'])
|
||||||
hardwareVersion = int(config['DEFAULT']['HardwareVersion'])
|
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
|
self._paths = paths
|
||||||
|
|
||||||
logging.debug("%s /DeviceInstance = %d" % (servicename, deviceinstance))
|
logging.debug("%s /DeviceInstance = %d" % (servicename, deviceinstance))
|
||||||
@@ -37,7 +38,7 @@ class DbusGoeChargerService:
|
|||||||
]
|
]
|
||||||
|
|
||||||
#get data from go-eCharger
|
#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
|
# Create the management objects, as specified in the ccgx dbus-api document
|
||||||
self._dbusservice.add_path('/Mgmt/ProcessName', __file__)
|
self._dbusservice.add_path('/Mgmt/ProcessName', __file__)
|
||||||
@@ -70,6 +71,9 @@ class DbusGoeChargerService:
|
|||||||
self._dbusservice.add_path(
|
self._dbusservice.add_path(
|
||||||
path, settings['initial'], gettextcallback=settings['textformat'], writeable=True, onchangecallback=self._handlechangedvalue)
|
path, settings['initial'], gettextcallback=settings['textformat'], writeable=True, onchangecallback=self._handlechangedvalue)
|
||||||
|
|
||||||
|
# register the service
|
||||||
|
self._dbusservice.register()
|
||||||
|
|
||||||
# last update
|
# last update
|
||||||
self._lastUpdate = 0
|
self._lastUpdate = 0
|
||||||
|
|
||||||
@@ -103,7 +107,7 @@ class DbusGoeChargerService:
|
|||||||
accessType = config['DEFAULT']['AccessType']
|
accessType = config['DEFAULT']['AccessType']
|
||||||
|
|
||||||
if accessType == 'OnPremise':
|
if accessType == 'OnPremise':
|
||||||
URL = "http://%s/status" % (config['ONPREMISE']['Host'])
|
URL = "http://%s/api/status" % (config['ONPREMISE']['Host'])
|
||||||
else:
|
else:
|
||||||
raise ValueError("AccessType %s is not supported" % (config['DEFAULT']['AccessType']))
|
raise ValueError("AccessType %s is not supported" % (config['DEFAULT']['AccessType']))
|
||||||
|
|
||||||
@@ -141,10 +145,10 @@ class DbusGoeChargerService:
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
def _getGoeChargerData(self):
|
def _getGoeChargerData(self, filter):
|
||||||
URL = self._getGoeChargerStatusUrl()
|
URL = "%s?filter=%s" % (self._getGoeChargerStatusUrl(), filter)
|
||||||
try:
|
try:
|
||||||
request_data = requests.get(url = URL, timeout=5)
|
request_data = requests.get(url = URL, timeout=1)
|
||||||
except Exception:
|
except Exception:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
@@ -172,14 +176,14 @@ class DbusGoeChargerService:
|
|||||||
def _update(self):
|
def _update(self):
|
||||||
try:
|
try:
|
||||||
#get data from go-eCharger
|
#get data from go-eCharger
|
||||||
data = self._getGoeChargerData()
|
data = self._getGoeChargerData('nrg,eto,alw,amp,ama,car,tmp,tma')
|
||||||
|
|
||||||
if data is not None:
|
if data is not None:
|
||||||
#send data to DBus
|
#send data to DBus
|
||||||
self._dbusservice['/Ac/L1/Power'] = int(data['nrg'][7] * 0.1 * 1000)
|
self._dbusservice['/Ac/L1/Power'] = int(data['nrg'][7])
|
||||||
self._dbusservice['/Ac/L2/Power'] = int(data['nrg'][8] * 0.1 * 1000)
|
self._dbusservice['/Ac/L2/Power'] = int(data['nrg'][8])
|
||||||
self._dbusservice['/Ac/L3/Power'] = int(data['nrg'][9] * 0.1 * 1000)
|
self._dbusservice['/Ac/L3/Power'] = int(data['nrg'][9])
|
||||||
self._dbusservice['/Ac/Power'] = int(data['nrg'][11] * 0.01 * 1000)
|
self._dbusservice['/Ac/Power'] = int(data['nrg'][11])
|
||||||
self._dbusservice['/Ac/Voltage'] = int(data['nrg'][0])
|
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] * 0.1, data['nrg'][5] * 0.1, data['nrg'][6] * 0.1)
|
||||||
self._dbusservice['/Ac/Energy/Forward'] = int(float(data['eto']) / 10.0)
|
self._dbusservice['/Ac/Energy/Forward'] = int(float(data['eto']) / 10.0)
|
||||||
@@ -200,12 +204,13 @@ class DbusGoeChargerService:
|
|||||||
|
|
||||||
config = self._getConfig()
|
config = self._getConfig()
|
||||||
hardwareVersion = int(config['DEFAULT']['HardwareVersion'])
|
hardwareVersion = int(config['DEFAULT']['HardwareVersion'])
|
||||||
if hardwareVersion == 3:
|
if hardwareVersion >= 3:
|
||||||
self._dbusservice['/MCU/Temperature'] = int(data['tma'][0])
|
self._dbusservice['/MCU/Temperature'] = int(data['tma'][0] if data['tma'] is not None else 0)
|
||||||
else:
|
else:
|
||||||
self._dbusservice['/MCU/Temperature'] = int(data['tmp'])
|
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
|
status = 0
|
||||||
if int(data['car']) == 1:
|
if int(data['car']) == 1:
|
||||||
status = 0
|
status = 0
|
||||||
@@ -259,7 +264,7 @@ def main():
|
|||||||
datefmt='%Y-%m-%d %H:%M:%S',
|
datefmt='%Y-%m-%d %H:%M:%S',
|
||||||
level=logging.INFO,
|
level=logging.INFO,
|
||||||
handlers=[
|
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()
|
logging.StreamHandler()
|
||||||
])
|
])
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user