def __init__(self, hass, config): """Initialize the Tellus data object.""" from tellduslive import Client public_key = config[DOMAIN].get(CONF_PUBLIC_KEY) private_key = config[DOMAIN].get(CONF_PRIVATE_KEY) token = config[DOMAIN].get(CONF_TOKEN) token_secret = config[DOMAIN].get(CONF_TOKEN_SECRET) self.entities = [] self._hass = hass self._config = config self._interval = config[DOMAIN].get(CONF_UPDATE_INTERVAL) _LOGGER.debug('Update interval %s', self._interval) self._client = Client(public_key, private_key, token, token_secret)
class TelldusLiveClient(object): """Get the latest data and update the states.""" def __init__(self, hass, config): """Initialize the Tellus data object.""" from tellduslive import Client public_key = config[DOMAIN].get(CONF_PUBLIC_KEY) private_key = config[DOMAIN].get(CONF_PRIVATE_KEY) token = config[DOMAIN].get(CONF_TOKEN) token_secret = config[DOMAIN].get(CONF_TOKEN_SECRET) self.entities = [] self._hass = hass self._config = config self._interval = config[DOMAIN].get(CONF_UPDATE_INTERVAL) _LOGGER.debug('Update interval %s', self._interval) self._client = Client(public_key, private_key, token, token_secret) def validate_session(self): """Make a request to see if the session is valid.""" response = self._client.request_user() return response and 'email' in response def update(self, *args): """Periodically poll the servers for current state.""" _LOGGER.debug("Updating") try: self._sync() finally: track_point_in_utc_time( self._hass, self.update, utcnow() + self._interval) def _sync(self): """Update local list of devices.""" if not self._client.update(): _LOGGER.warning("Failed request") def identify_device(device): """Find out what type of HA component to create.""" from tellduslive import (DIM, UP, TURNON) if device.methods & DIM: return 'light' elif device.methods & UP: return 'cover' elif device.methods & TURNON: return 'switch' _LOGGER.warning( "Unidentified device type (methods: %d)", device.methods) return 'switch' def discover(device_id, component): """Discover the component.""" discovery.load_platform( self._hass, component, DOMAIN, [device_id], self._config) known_ids = {entity.device_id for entity in self.entities} for device in self._client.devices: if device.device_id in known_ids: continue if device.is_sensor: for item in device.items: discover((device.device_id, item.name, item.scale), 'sensor') else: discover(device.device_id, identify_device(device)) for entity in self.entities: entity.changed() def device(self, device_id): """Return device representation.""" return self._client.device(device_id) def is_available(self, device_id): """Return device availability.""" return device_id in self._client.device_ids