""" Support for Ubee router. For more details about this platform, please refer to the documentation at https://home-assistant.io/components/device_tracker.ubee/ """ import logging import voluptuous as vol from homeassistant.components.device_tracker import ( DOMAIN, PLATFORM_SCHEMA, DeviceScanner) from homeassistant.const import ( CONF_HOST, CONF_PASSWORD, CONF_USERNAME) import homeassistant.helpers.config_validation as cv REQUIREMENTS = ['pyubee==0.2'] _LOGGER = logging.getLogger(__name__) PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Required(CONF_HOST): cv.string, vol.Required(CONF_PASSWORD): cv.string, vol.Required(CONF_USERNAME): cv.string, }) def get_scanner(hass, config): """Validate the configuration and return a Ubee scanner.""" try: return UbeeDeviceScanner(config[DOMAIN]) except ConnectionError: return None class UbeeDeviceScanner(DeviceScanner): """This class queries a wireless Ubee router.""" def __init__(self, config): """Initialize the Ubee scanner.""" from pyubee import Ubee self.host = config[CONF_HOST] self.username = config[CONF_USERNAME] self.password = config[CONF_PASSWORD] self.last_results = {} self.mac2name = {} self.ubee = Ubee(self.host, self.username, self.password) _LOGGER.info("Logging in") results = self.get_connected_devices() self.success_init = results is not None if self.success_init: self.last_results = results else: _LOGGER.error("Login failed") def scan_devices(self): """Scan for new devices and return a list with found device IDs.""" self._update_info() return self.last_results def get_device_name(self, device): """Return the name of the given device or None if we don't know.""" if device in self.mac2name: return self.mac2name.get(device) return None def _update_info(self): """Retrieve latest information from the Ubee router.""" if not self.success_init: return _LOGGER.debug("Scanning") results = self.get_connected_devices() if results is None: _LOGGER.warning("Error scanning devices") return self.last_results = results or [] def get_connected_devices(self): """List connected devices with pyubee.""" if not self.ubee.session_active(): self.ubee.login() return self.ubee.get_connected_devices()