Skip automatic events older than latest data (#9230)

* Skip automatic events older than latest data

* Update test
This commit is contained in:
Adam Mills 2017-08-31 10:29:18 -04:00 committed by Pascal Vizeli
parent 60342b4738
commit 7d281fd224
2 changed files with 25 additions and 8 deletions

View file

@ -205,6 +205,7 @@ class AutomaticData(object):
self.hass = hass
self.devices = devices
self.vehicle_info = {}
self.vehicle_seen = {}
self.client = client
self.session = session
self.async_see = async_see
@ -236,6 +237,14 @@ class AutomaticData(object):
return
yield from self.get_vehicle_info(vehicle)
if event.created_at < self.vehicle_seen[event.vehicle.id]:
# Skip events received out of order
_LOGGER.debug("Skipping out of order event. Event Created %s. "
"Last seen event: %s.", event.created_at,
self.vehicle_seen[event.vehicle.id])
return
self.vehicle_seen[event.vehicle.id] = event.created_at
kwargs = self.vehicle_info[event.vehicle.id]
if kwargs is None:
# Ignored device
@ -323,7 +332,7 @@ class AutomaticData(object):
if self.devices is not None and name not in self.devices:
self.vehicle_info[vehicle.id] = None
return
else:
self.vehicle_info[vehicle.id] = kwargs = {
ATTR_DEV_ID: vehicle.id,
ATTR_HOST_NAME: name,
@ -332,6 +341,8 @@ class AutomaticData(object):
ATTR_FUEL_LEVEL: vehicle.fuel_level_percent,
}
}
self.vehicle_seen[vehicle.id] = \
vehicle.updated_at or vehicle.created_at
if vehicle.latest_location is not None:
location = vehicle.latest_location
@ -352,4 +363,7 @@ class AutomaticData(object):
kwargs[ATTR_GPS] = (location.lat, location.lon)
kwargs[ATTR_GPS_ACCURACY] = location.accuracy_m
if trips[0].ended_at >= self.vehicle_seen[vehicle.id]:
self.vehicle_seen[vehicle.id] = trips[0].ended_at
return kwargs

View file

@ -1,5 +1,6 @@
"""Test the automatic device tracker platform."""
import asyncio
from datetime import datetime
import logging
from unittest.mock import patch, MagicMock
import aioautomatic
@ -71,10 +72,12 @@ def test_valid_credentials(
vehicle.display_name = 'mock_display_name'
vehicle.fuel_level_percent = 45.6
vehicle.latest_location = None
vehicle.updated_at = datetime(2017, 8, 13, 1, 2, 3)
trip.end_location.lat = 45.567
trip.end_location.lon = 34.345
trip.end_location.accuracy_m = 5.6
trip.ended_at = datetime(2017, 8, 13, 1, 2, 4)
@asyncio.coroutine
def get_session(*args, **kwargs):