Add show_as_state options to Life360 (#24725)

This commit is contained in:
Phil Bruckner 2019-06-24 10:05:34 -05:00 committed by Paulus Schoutsen
parent 98ba529ead
commit 8924d657a4
3 changed files with 29 additions and 4 deletions

View file

@ -16,7 +16,8 @@ import homeassistant.helpers.config_validation as cv
from .const import (
CONF_AUTHORIZATION, CONF_CIRCLES, CONF_DRIVING_SPEED, CONF_ERROR_THRESHOLD,
CONF_MAX_GPS_ACCURACY, CONF_MAX_UPDATE_WAIT, CONF_MEMBERS,
CONF_WARNING_THRESHOLD, DOMAIN)
CONF_SHOW_AS_STATE, CONF_WARNING_THRESHOLD, DOMAIN, SHOW_DRIVING,
SHOW_MOVING)
from .helpers import get_api
_LOGGER = logging.getLogger(__name__)
@ -25,6 +26,8 @@ DEFAULT_PREFIX = DOMAIN
CONF_ACCOUNTS = 'accounts'
SHOW_AS_STATE_OPTS = [SHOW_DRIVING, SHOW_MOVING]
def _excl_incl_list_to_filter_dict(value):
return {
@ -108,6 +111,8 @@ LIFE360_SCHEMA = vol.All(
vol.All(vol.Any(None, cv.string), _prefix),
vol.Optional(CONF_SCAN_INTERVAL, default=DEFAULT_SCAN_INTERVAL):
cv.time_period,
vol.Optional(CONF_SHOW_AS_STATE, default=[]): vol.All(
cv.ensure_list, [vol.In(SHOW_AS_STATE_OPTS)]),
vol.Optional(CONF_WARNING_THRESHOLD): _THRESHOLD,
}),
_thresholds

View file

@ -8,4 +8,8 @@ CONF_ERROR_THRESHOLD = 'error_threshold'
CONF_MAX_GPS_ACCURACY = 'max_gps_accuracy'
CONF_MAX_UPDATE_WAIT = 'max_update_wait'
CONF_MEMBERS = 'members'
CONF_SHOW_AS_STATE = 'show_as_state'
CONF_WARNING_THRESHOLD = 'warning_threshold'
SHOW_DRIVING = 'driving'
SHOW_MOVING = 'moving'

View file

@ -8,18 +8,21 @@ import voluptuous as vol
from homeassistant.components.device_tracker import CONF_SCAN_INTERVAL
from homeassistant.components.device_tracker.const import (
ENTITY_ID_FORMAT as DT_ENTITY_ID_FORMAT)
from homeassistant.components.zone import async_active_zone
from homeassistant.const import (
ATTR_BATTERY_CHARGING, ATTR_ENTITY_ID, CONF_PREFIX, LENGTH_FEET,
LENGTH_KILOMETERS, LENGTH_METERS, LENGTH_MILES, STATE_UNKNOWN)
import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.event import track_time_interval
from homeassistant.util.async_ import run_callback_threadsafe
from homeassistant.util.distance import convert
import homeassistant.util.dt as dt_util
from .const import (
CONF_CIRCLES, CONF_DRIVING_SPEED, CONF_ERROR_THRESHOLD,
CONF_MAX_GPS_ACCURACY, CONF_MAX_UPDATE_WAIT, CONF_MEMBERS,
CONF_WARNING_THRESHOLD, DOMAIN)
CONF_SHOW_AS_STATE, CONF_WARNING_THRESHOLD, DOMAIN, SHOW_DRIVING,
SHOW_MOVING)
_LOGGER = logging.getLogger(__name__)
@ -107,6 +110,7 @@ class Life360Scanner:
self._circles_filter = config.get(CONF_CIRCLES)
self._members_filter = config.get(CONF_MEMBERS)
self._driving_speed = config.get(CONF_DRIVING_SPEED)
self._show_as_state = config[CONF_SHOW_AS_STATE]
self._apis = apis
self._errs = {}
self._error_threshold = config[CONF_ERROR_THRESHOLD]
@ -266,8 +270,20 @@ class Life360Scanner:
ATTR_WIFI_ON: _bool_attr_from_int(loc.get('wifiState')),
}
self._see(dev_id=dev_id, gps=(lat, lon), gps_accuracy=gps_accuracy,
battery=battery, attributes=attrs,
# If user wants driving or moving to be shown as state, and current
# location is not in a HA zone, then set location name accordingly.
loc_name = None
active_zone = run_callback_threadsafe(
self._hass.loop, async_active_zone, self._hass, lat, lon,
gps_accuracy).result()
if not active_zone:
if SHOW_DRIVING in self._show_as_state and driving is True:
loc_name = SHOW_DRIVING
elif SHOW_MOVING in self._show_as_state and moving is True:
loc_name = SHOW_MOVING
self._see(dev_id=dev_id, location_name=loc_name, gps=(lat, lon),
gps_accuracy=gps_accuracy, battery=battery, attributes=attrs,
picture=member.get('avatar'))
def _update_members(self, members, members_updated):