""" Support for the TrackR platform. For more details about this platform, please refer to the documentation at https://home-assistant.io/components/device_tracker.trackr/ """ import logging import voluptuous as vol from homeassistant.components.device_tracker import PLATFORM_SCHEMA from homeassistant.const import CONF_USERNAME, CONF_PASSWORD import homeassistant.helpers.config_validation as cv from homeassistant.helpers.event import track_utc_time_change _LOGGER = logging.getLogger(__name__) REQUIREMENTS = ['pytrackr==0.0.5'] PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Required(CONF_USERNAME): cv.string, vol.Required(CONF_PASSWORD): cv.string }) def setup_scanner(hass, config: dict, see): """Validate the configuration and return a TrackR scanner.""" TrackRDeviceScanner(hass, config, see) return True class TrackRDeviceScanner(object): """A class representing a TrackR device.""" def __init__(self, hass, config: dict, see) -> None: """Initialize the TrackR device scanner.""" from pytrackr.api import trackrApiInterface self.hass = hass self.api = trackrApiInterface(config.get(CONF_USERNAME), config.get(CONF_PASSWORD)) self.see = see self.devices = self.api.get_trackrs() self._update_info() track_utc_time_change(self.hass, self._update_info, second=range(0, 60, 30)) def _update_info(self, now=None) -> None: """Update the device info.""" _LOGGER.debug('Updating devices %s', now) # Update self.devices to collect new devices added # to the users account. self.devices = self.api.get_trackrs() for trackr in self.devices: trackr.update_state() trackr_id = trackr.tracker_id() trackr_device_id = trackr.id() lost = trackr.lost() dev_id = trackr.name().replace(" ", "_") if dev_id is None: dev_id = trackr_id location = trackr.last_known_location() lat = location['latitude'] lon = location['longitude'] attrs = { 'last_updated': trackr.last_updated(), 'last_seen': trackr.last_time_seen(), 'trackr_id': trackr_id, 'id': trackr_device_id, 'lost': lost, 'battery_level': trackr.battery_level() } self.see( dev_id=dev_id, gps=(lat, lon), attributes=attrs )