From 7d25405c2f792e3247a57fdf698e81adedacaf69 Mon Sep 17 00:00:00 2001 From: Matthieu Date: Sun, 11 Apr 2021 01:07:31 +0200 Subject: [PATCH] Use coordinator to imporoo reactivituy --- custom_components/georide/__init__.py | 59 ++++++++++++++++++--------- custom_components/georide/sensor.py | 10 ----- 2 files changed, 39 insertions(+), 30 deletions(-) diff --git a/custom_components/georide/__init__.py b/custom_components/georide/__init__.py index 0df6823..96ac7dd 100644 --- a/custom_components/georide/__init__.py +++ b/custom_components/georide/__init__.py @@ -1,6 +1,7 @@ """ georide custom conpennt """ from collections import defaultdict +import asyncio import logging from typing import Any, Mapping from datetime import timedelta @@ -12,10 +13,10 @@ import voluptuous as vol import jwt from aiohttp.web import json_response -from georideapilib.objects import GeorideAccount as GeoRideAccount +from georideapilib.objects import GeoRideAccount import georideapilib.api as GeoRideApi -from georideapilib.socket import GeorideSocket as GeoRideSocket +from georideapilib.socket import GeoRideSocket from homeassistant import config_entries from homeassistant.const import CONF_WEBHOOK_ID @@ -211,11 +212,12 @@ class GeoRideContext: """ here we return last tracker by id""" _LOGGER.debug("Call refresh tracker") epoch_min = math.floor(time.time()/60) + #if (epoch_min % MIN_UNTIL_REFRESH) == 0: if epoch_min != self._previous_refresh: self._previous_refresh = epoch_min await self.force_refresh_trackers() - else: - _LOGGER.debug("We wil dont refresh the tracker list") + #else: + # _LOGGER.debug("We wil dont refresh the tracker list") async def force_refresh_trackers(self): @@ -229,13 +231,13 @@ class GeoRideContext: if tracker.tracker_id == refreshed_tracker.tracker_id: tracker.update_all_data(refreshed_tracker) found = True - if not found: - self._georide_trackers.append(refreshed_tracker) - if not self._thread_started: - _LOGGER.info("Start the thread") - # We refresh the tracker list each hours - self._thread_started = True - await self.connect_socket() + if not found: + self._georide_trackers.append(refreshed_tracker) + if not self._thread_started: + _LOGGER.info("Start the thread") + # We refresh the tracker list each hours + self._thread_started = True + await self.connect_socket() @@ -278,29 +280,40 @@ class GeoRideContext: def on_lock_callback(self, data): """on lock callback""" _LOGGER.info("On lock received") - for tracker in self._georide_trackers: + for coordoned_tracker in self._georide_trackers_coordoned: + tracker = coordoned_tracker['tracker'] + coordinator = coordoned_tracker['coordinator'] if tracker.tracker_id == data['trackerId']: tracker.locked_latitude = data['lockedLatitude'] tracker.locked_longitude = data['lockedLongitude'] tracker.is_locked = data['isLocked'] + asyncio.run_coroutine_threadsafe( + coordinator.async_request_refresh(), self._hass.loop + ).result() break - self.force_refresh_trackers() @callback def on_device_callback(self, data): """on device callback""" _LOGGER.info("On device received") - for tracker in self._georide_trackers: + for coordoned_tracker in self._georide_trackers_coordoned: + tracker = coordoned_tracker['tracker'] + coordinator = coordoned_tracker['coordinator'] if tracker.tracker_id == data['trackerId']: tracker.status = data['status'] - self.force_refresh_trackers() + asyncio.run_coroutine_threadsafe( + coordinator.async_request_refresh(), self._hass.loop + ).result() + break @callback def on_alarm_callback(self, data): """on device callback""" _LOGGER.info("On alarm received") - for tracker in self._georide_trackers: + for coordoned_tracker in self._georide_trackers_coordoned: + tracker = coordoned_tracker['tracker'] + coordinator = coordoned_tracker['coordinator'] if tracker.tracker_id == data['trackerId']: if data.name == 'vibration': _LOGGER.info("Vibration detected") @@ -318,21 +331,27 @@ class GeoRideContext: _LOGGER.info("powerCut detected") else: _LOGGER.warning("Unamanged alarm: ", data.name) + asyncio.run_coroutine_threadsafe( + coordinator.async_request_refresh(), self._hass.loop + ).result() break - self.force_refresh_trackers() - @callback + @callback def on_position_callback(self, data): """on position callback""" _LOGGER.info("On position received") - for tracker in self._georide_trackers: + for coordoned_tracker in self._georide_trackers_coordoned: + tracker = coordoned_tracker['tracker'] + coordinator = coordoned_tracker['coordinator'] if tracker.tracker_id == data['trackerId']: tracker.latitude = data['latitude'] tracker.longitude = data['longitude'] tracker.moving = data['moving'] tracker.speed = data['speed'] tracker.fixtime = data['fixtime'] + asyncio.run_coroutine_threadsafe( + coordinator.async_request_refresh(), self._hass.loop + ).result() break - self.force_refresh_trackers() diff --git a/custom_components/georide/sensor.py b/custom_components/georide/sensor.py index 44369cc..4e2234a 100644 --- a/custom_components/georide/sensor.py +++ b/custom_components/georide/sensor.py @@ -76,16 +76,6 @@ class GeoRideOdometerSensorEntity(CoordinatorEntity, SwitchEntity): """unit of mesurment property""" return self._unit_of_measurement - @property - def get_token_callback(self): - """ GeoRide switch token callback method """ - return self._get_token_callback - - @property - def get_tracker_callback(self): - """ GeoRide switch token callback method """ - return self._get_tracker_callback - @property def icon(self): """icon getter"""