Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 22 additions & 6 deletions packages/modules/vehicles/ovms/api.py
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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
Expand All @@ -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):
Expand Down Expand Up @@ -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()
Expand Down
2 changes: 1 addition & 1 deletion packages/modules/vehicles/ovms/soc.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down
Loading