class TadoConnector: """An object to store the Tado data.""" def __init__(self, hass, username, password, fallback): """Initialize Tado Connector.""" self.hass = hass self._username = username self._password = password self._fallback = fallback self.home_id = None self.home_name = None self.tado = None self.zones = None self.devices = None self.data = { "device": {}, "weather": {}, "zone": {}, } @property def fallback(self): """Return fallback flag to Smart Schedule.""" return self._fallback def setup(self): """Connect to Tado and fetch the zones.""" self.tado = Tado(self._username, self._password) self.tado.setDebugging(True) # Load zones and devices self.zones = self.tado.getZones() self.devices = self.tado.getDevices() tado_home = self.tado.getMe()["homes"][0] self.home_id = tado_home["id"] self.home_name = tado_home["name"] @Throttle(MIN_TIME_BETWEEN_UPDATES) def update(self): """Update the registered zones.""" self.update_devices() self.update_zones() self.data["weather"] = self.tado.getWeather() dispatcher_send( self.hass, SIGNAL_TADO_UPDATE_RECEIVED.format(self.home_id, "weather", "data"), ) def update_devices(self): """Update the device data from Tado.""" devices = self.tado.getDevices() for device in devices: device_short_serial_no = device["shortSerialNo"] _LOGGER.debug("Updating device %s", device_short_serial_no) try: if (INSIDE_TEMPERATURE_MEASUREMENT in device["characteristics"]["capabilities"]): device[TEMP_OFFSET] = self.tado.getDeviceInfo( device_short_serial_no, TEMP_OFFSET) except RuntimeError: _LOGGER.error( "Unable to connect to Tado while updating device %s", device_short_serial_no, ) return self.data["device"][device_short_serial_no] = device _LOGGER.debug( "Dispatching update to %s device %s: %s", self.home_id, device_short_serial_no, device, ) dispatcher_send( self.hass, SIGNAL_TADO_UPDATE_RECEIVED.format(self.home_id, "device", device_short_serial_no), ) def update_zones(self): """Update the zone data from Tado.""" try: zone_states = self.tado.getZoneStates()["zoneStates"] except RuntimeError: _LOGGER.error("Unable to connect to Tado while updating zones") return for zone in self.zones: zone_id = zone["id"] _LOGGER.debug("Updating zone %s", zone_id) zone_state = TadoZone(zone_states[str(zone_id)], zone_id) self.data["zone"][zone_id] = zone_state _LOGGER.debug( "Dispatching update to %s zone %s: %s", self.home_id, zone_id, zone_state, ) dispatcher_send( self.hass, SIGNAL_TADO_UPDATE_RECEIVED.format(self.home_id, "zone", zone["id"]), ) def update_zone(self, zone_id): """Update the internal data from Tado.""" _LOGGER.debug("Updating zone %s", zone_id) try: data = self.tado.getZoneState(zone_id) except RuntimeError: _LOGGER.error("Unable to connect to Tado while updating zone %s", zone_id) return self.data["zone"][zone_id] = data _LOGGER.debug( "Dispatching update to %s zone %s: %s", self.home_id, zone_id, data, ) dispatcher_send( self.hass, SIGNAL_TADO_UPDATE_RECEIVED.format(self.home_id, "zone", zone_id), ) def get_capabilities(self, zone_id): """Return the capabilities of the devices.""" return self.tado.getCapabilities(zone_id) def reset_zone_overlay(self, zone_id): """Reset the zone back to the default operation.""" self.tado.resetZoneOverlay(zone_id) self.update_zone(zone_id) def set_presence( self, presence=PRESET_HOME, ): """Set the presence to home or away.""" if presence == PRESET_AWAY: self.tado.setAway() elif presence == PRESET_HOME: self.tado.setHome() def set_zone_overlay( self, zone_id=None, overlay_mode=None, temperature=None, duration=None, device_type="HEATING", mode=None, fan_speed=None, swing=None, ): """Set a zone overlay.""" _LOGGER.debug( "Set overlay for zone %s: overlay_mode=%s, temp=%s, duration=%s, type=%s, mode=%s fan_speed=%s swing=%s", zone_id, overlay_mode, temperature, duration, device_type, mode, fan_speed, swing, ) try: self.tado.setZoneOverlay( zone_id, overlay_mode, temperature, duration, device_type, "ON", mode, fanSpeed=fan_speed, swing=swing, ) except RequestException as exc: _LOGGER.error("Could not set zone overlay: %s", exc) self.update_zone(zone_id) def set_zone_off(self, zone_id, overlay_mode, device_type="HEATING"): """Set a zone to off.""" try: self.tado.setZoneOverlay(zone_id, overlay_mode, None, None, device_type, "OFF") except RequestException as exc: _LOGGER.error("Could not set zone overlay: %s", exc) self.update_zone(zone_id) def set_temperature_offset(self, device_id, offset): """Set temperature offset of device.""" try: self.tado.setTempOffset(device_id, offset) except RequestException as exc: _LOGGER.error("Could not set temperature offset: %s", exc)
def get_states(args): t = log_in(args.email, args.password) zone = tado_client.getZoneStates(t) print(zone)