diff --git a/packages/modules/vehicles/ovms/api.py b/packages/modules/vehicles/ovms/api.py index d8139a6f85..2e0b7e0caa 100755 --- a/packages/modules/vehicles/ovms/api.py +++ b/packages/modules/vehicles/ovms/api.py @@ -1,8 +1,10 @@ #!/usr/bin/env python3 -import logging +from logging import getLogger from typing import Union -import asyncio +from asyncio import new_event_loop, set_event_loop +from time import mktime +from datetime import datetime from json import loads, dumps from modules.vehicles.ovms.config import OVMS from helpermodules.pub import Pub @@ -15,8 +17,10 @@ OVMS_APPL_VALUE = "owb-ovms-2.x-vh" OVMS_PURPOSE_LABEL = "purpose" OVMS_PURPOSE_VALUE = "get soc" +date_fmt = '%Y-%m-%d %H:%M:%S' -log = logging.getLogger(__name__) + +log = getLogger(__name__) # store soc module configuration @@ -28,6 +32,12 @@ def write_config(topic: str, config: dict): log.exception('Token mqtt write exception ' + str(e)) +def utc2local(utc): + epoch = mktime(utc.timetuple()) + offset = datetime.fromtimestamp(epoch) - datetime.utcfromtimestamp(epoch) + return utc + offset + + class api: def __init__(self): @@ -180,16 +190,22 @@ async def _fetch_soc(self, self.kms = float(statusDict['odometer']) / 10 self.vehicle12v = statusDict['vehicle12v'] self.soc_ts = statusDict['m_msgtime_s'] + self.soc_tsdt = datetime.strptime(self.soc_ts, date_fmt) + self.soc_tsdtL = utc2local(self.soc_tsdt) + self.soc_tsX = datetime.timestamp(self.soc_tsdtL) + + log.info("soc=" + self.soc + ", range=" + self.range + ", soc_ts=" + str(self.soc_tsdtL)) + log.debug("statusDict=\n" + dumps(statusDict, indent=4)) - return int(float(self.soc)), float(self.range), self.soc_ts + return int(float(self.soc)), float(self.range), self.soc_tsX # sync function def fetch_soc(conf: OVMS, vehicle: int) -> Union[int, float, str]: # prepare and call async method - loop = asyncio.new_event_loop() - asyncio.set_event_loop(loop) + loop = new_event_loop() + set_event_loop(loop) # get soc, range from server a = api() diff --git a/packages/modules/vehicles/ovms/soc.py b/packages/modules/vehicles/ovms/soc.py index 33d3f64ab6..efd95708b3 100755 --- a/packages/modules/vehicles/ovms/soc.py +++ b/packages/modules/vehicles/ovms/soc.py @@ -16,7 +16,7 @@ def fetch(vehicle_update_data: VehicleUpdateData, config: OVMS, vehicle: int) -> CarState: soc, range, soc_ts = api.fetch_soc(config, vehicle) - return CarState(soc, range) + return CarState(soc=soc, range=range, soc_timestamp=soc_ts) def create_vehicle(vehicle_config: OVMS, vehicle: int):