Use coordinator to imporoo reactivituy

develop
Matthieu DUVAL 4 years ago
parent dbbe1f33b9
commit 7d25405c2f

@ -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"""

Loading…
Cancel
Save