Use coordinator to imporoo reactivituy
This commit is contained in:
@@ -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()
|
||||
|
||||
|
||||
|
||||
@@ -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"""
|
||||
|
||||
Reference in New Issue
Block a user