From 2d4b1b8eb5298fdacdc9dbe7e3ca5b4174e4d921 Mon Sep 17 00:00:00 2001 From: Phil Date: Fri, 6 Dec 2019 09:08:04 -0600 Subject: [PATCH 1/2] Use Home location for non-GPS tracker without GPS data Also round last_seen to nearest second. --- custom_components/composite/device_tracker.py | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/custom_components/composite/device_tracker.py b/custom_components/composite/device_tracker.py index 0af7ae3..9e767ca 100644 --- a/custom_components/composite/device_tracker.py +++ b/custom_components/composite/device_tracker.py @@ -1,7 +1,7 @@ """ A Device Tracker platform that combines one or more device trackers. """ -from datetime import datetime +from datetime import datetime, timedelta import logging import threading @@ -28,7 +28,7 @@ _LOGGER = logging.getLogger(__name__) -__version__ = '1.10.1' +__version__ = '1.11.0b1' CONF_TIME_AS = 'time_as' CONF_REQ_MOVEMENT = 'require_movement' @@ -71,6 +71,12 @@ def setup_scanner(hass, config, see, discovery_info=None): return True +def nearest_second(time): + """Round time to nearest second.""" + return (time.replace(microsecond=0) + + timedelta(seconds=0 if time.microsecond < 500000 else 1)) + + class CompositeScanner: def __init__(self, hass, config, see): self._hass = hass @@ -271,6 +277,15 @@ def _update_info(self, entity_id, old_state, new_state): # use it and make source_type gps. elif gps: source_type = SOURCE_TYPE_GPS + # Otherwise, if new state is 'home' and old state is not 'home' + # and no GPS data, then use HA's configured Home location and + # make source_type gps. + elif state == STATE_HOME and cur_state.state != STATE_HOME: + gps = ( + self._hass.config.latitude, + self._hass.config.longitude) + gps_accuracy = 0 + source_type = SOURCE_TYPE_GPS # Otherwise, don't use any GPS data, but set location_name to # new state. else: @@ -311,8 +326,7 @@ def _update_info(self, entity_id, old_state, new_state): if entity[ATTR_SOURCE_TYPE] is not None), ATTR_LAST_ENTITY_ID: entity_id, ATTR_LAST_SEEN: - self._dt_attr_from_utc(last_seen.replace(microsecond=0), - tz) + self._dt_attr_from_utc(nearest_second(last_seen), tz) }) if charging is not None: attrs[ATTR_BATTERY_CHARGING] = charging From 0dd402b7574bc8811bea9c57c751bfe512652f83 Mon Sep 17 00:00:00 2001 From: Phil Bruckner Date: Thu, 26 Dec 2019 10:25:40 -0600 Subject: [PATCH 2/2] Remove beta suffix --- custom_components/composite/device_tracker.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/custom_components/composite/device_tracker.py b/custom_components/composite/device_tracker.py index 9e767ca..14fa991 100644 --- a/custom_components/composite/device_tracker.py +++ b/custom_components/composite/device_tracker.py @@ -28,7 +28,7 @@ _LOGGER = logging.getLogger(__name__) -__version__ = '1.11.0b1' +__version__ = '1.11.0' CONF_TIME_AS = 'time_as' CONF_REQ_MOVEMENT = 'require_movement'