Skip to content

Commit

Permalink
add last_full_update timestamp
Browse files Browse the repository at this point in the history
  • Loading branch information
blind-oracle committed Feb 6, 2025
1 parent 6a44ef1 commit 36b32a1
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 16 deletions.
45 changes: 30 additions & 15 deletions py_uconnect/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
from typing import Dict
from datetime import datetime, timedelta
from time import sleep
from psygnal import evented

from .api import API
from .brands import Brand
Expand Down Expand Up @@ -143,6 +144,7 @@ class Vehicle:

location: Location = None
supported_commands: list[str] = field(default_factory=list)
last_full_update: datetime = None

def __repr__(self):
return f'{self.vin} (nick: {self.nickname})'
Expand Down Expand Up @@ -217,6 +219,7 @@ def refresh(self):
vehicles = self.api.list_vehicles()

for x in vehicles:
full_update_done = True
vin = x['vin']

if not vin in self.vehicles:
Expand All @@ -227,6 +230,9 @@ def refresh(self):
vehicle = self.vehicles[vin]

info = self.api.get_vehicle(vin)
if not 'vehicleInfo' in info and not 'evInfo' in info:
full_update_done = False

_update_vehicle(vehicle, info)

try:
Expand All @@ -241,29 +247,35 @@ def refresh(self):
updated=datetime.fromtimestamp(loc['timeStamp'] / 1000)
)
except:
pass
full_update_done = False

try:
s = self.api.get_vehicle_status(vin)

vehicle.door_driver_locked = sg_eq(
s, 'LOCKED', 'doors', 'driver', 'status')
vehicle.door_passenger_locked = sg_eq(
s, 'LOCKED', 'doors', 'passenger', 'status')
vehicle.door_rear_left_locked = sg_eq(
s, 'LOCKED', 'doors', 'leftRear', 'status')
vehicle.door_rear_right_locked = sg_eq(
s, 'LOCKED', 'doors', 'rightRear', 'status')

vehicle.window_driver_closed = sg_eq(
s, 'CLOSED', 'windows', 'driver', 'status')
vehicle.window_passenger_closed = sg_eq(
s, 'CLOSED', 'windows', 'passenger', 'status')
# Check at least one key is present in the response
if not set('doors', 'windows', 'trunk', 'evRunning').intersection(set(s.keys())):
full_update_done = False

if 'doors' in s:
vehicle.door_driver_locked = sg_eq(
s, 'LOCKED', 'doors', 'driver', 'status')
vehicle.door_passenger_locked = sg_eq(
s, 'LOCKED', 'doors', 'passenger', 'status')
vehicle.door_rear_left_locked = sg_eq(
s, 'LOCKED', 'doors', 'leftRear', 'status')
vehicle.door_rear_right_locked = sg_eq(
s, 'LOCKED', 'doors', 'rightRear', 'status')

if 'windows' in s:
vehicle.window_driver_closed = sg_eq(
s, 'CLOSED', 'windows', 'driver', 'status')
vehicle.window_passenger_closed = sg_eq(
s, 'CLOSED', 'windows', 'passenger', 'status')

vehicle.trunk_locked = sg_eq(s, 'LOCKED', 'trunk', 'status')
vehicle.ev_running = sg_eq(s, 'ON', 'evRunning', 'status')
except:
pass
full_update_done = False

enabled_services = []
if 'services' in x:
Expand All @@ -273,6 +285,9 @@ def refresh(self):
vehicle.supported_commands = [
v for v in enabled_services if v in COMMANDS_BY_NAME]

if full_update_done:
vehicle.last_full_update = datetime.now()

def get_vehicles(self):
'''Returns all vehicles data. Must execute refresh method before.'''

Expand Down
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,6 @@
include=["py_uconnect", "py_uconnect.*"]
),
url="https://github.com/hass-uconnect/py-uconnect",
version="0.1.14",
version="0.1.15",
zip_safe=False,
)

0 comments on commit 36b32a1

Please sign in to comment.