diff --git a/homeassistant/components/tado/__init__.py b/homeassistant/components/tado/__init__.py index 228ac48bcb2..5e929548817 100644 --- a/homeassistant/components/tado/__init__.py +++ b/homeassistant/components/tado/__init__.py @@ -173,6 +173,7 @@ class TadoConnector: self.zones = None self.devices = None self.data = { + "device": {}, "zone": {}, } @@ -193,15 +194,18 @@ class TadoConnector: @Throttle(MIN_TIME_BETWEEN_UPDATES) def update(self): """Update the registered zones.""" + for device in self.devices: + self.update_sensor("device", device["shortSerialNo"]) for zone in self.zones: self.update_sensor("zone", zone["id"]) - self.devices = self.tado.getDevices() def update_sensor(self, sensor_type, sensor): """Update the internal data from Tado.""" _LOGGER.debug("Updating %s %s", sensor_type, sensor) try: - if sensor_type == "zone": + if sensor_type == "device": + data = self.tado.getDeviceInfo(sensor) + elif sensor_type == "zone": data = self.tado.getZoneState(sensor) else: _LOGGER.debug("Unknown sensor: %s", sensor_type) diff --git a/homeassistant/components/tado/binary_sensor.py b/homeassistant/components/tado/binary_sensor.py index bf958cceb5d..1acefdb4c16 100644 --- a/homeassistant/components/tado/binary_sensor.py +++ b/homeassistant/components/tado/binary_sensor.py @@ -157,10 +157,10 @@ class TadoDeviceBinarySensor(TadoDeviceEntity, BinarySensorEntity): @callback def _async_update_device_data(self): """Handle update callbacks.""" - for device in self._tado.devices: - if device["serialNo"] == self.device_id: - self._device_info = device - break + try: + self._device_info = self._tado.data["device"][self.device_id] + except KeyError: + return if self.device_variable == "battery state": self._state = self._device_info["batteryState"] == "LOW" diff --git a/homeassistant/components/tado/entity.py b/homeassistant/components/tado/entity.py index bd0c605b0eb..e9fefe2848b 100644 --- a/homeassistant/components/tado/entity.py +++ b/homeassistant/components/tado/entity.py @@ -11,8 +11,8 @@ class TadoDeviceEntity(Entity): """Initialize a Tado device.""" super().__init__() self._device_info = device_info - self.device_name = device_info["shortSerialNo"] - self.device_id = device_info["serialNo"] + self.device_name = device_info["serialNo"] + self.device_id = device_info["shortSerialNo"] @property def device_info(self): diff --git a/homeassistant/components/tado/manifest.json b/homeassistant/components/tado/manifest.json index feff03d0b81..9b166027df3 100644 --- a/homeassistant/components/tado/manifest.json +++ b/homeassistant/components/tado/manifest.json @@ -2,7 +2,7 @@ "domain": "tado", "name": "Tado", "documentation": "https://www.home-assistant.io/integrations/tado", - "requirements": ["python-tado==0.8.1"], + "requirements": ["python-tado==0.10.0"], "codeowners": ["@michaelarnauts", "@bdraco"], "config_flow": true, "homekit": { diff --git a/requirements_all.txt b/requirements_all.txt index 7d24c803a31..4736ab989bb 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -1807,7 +1807,7 @@ python-sochain-api==0.0.2 python-songpal==0.12 # homeassistant.components.tado -python-tado==0.8.1 +python-tado==0.10.0 # homeassistant.components.telegram_bot python-telegram-bot==13.1 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index b5b906a9fb6..d2099f35404 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -894,7 +894,7 @@ python-openzwave-mqtt[mqtt-client]==1.4.0 python-songpal==0.12 # homeassistant.components.tado -python-tado==0.8.1 +python-tado==0.10.0 # homeassistant.components.twitch python-twitch-client==0.6.0 diff --git a/tests/components/tado/util.py b/tests/components/tado/util.py index 7dc6a21faa7..187c0f269bf 100644 --- a/tests/components/tado/util.py +++ b/tests/components/tado/util.py @@ -20,6 +20,9 @@ async def async_init_integration( me_fixture = "tado/me.json" zones_fixture = "tado/zones.json" + # WR1 Device + device_wr1_fixture = "tado/device_wr1.json" + # Smart AC with Swing zone_5_state_fixture = "tado/smartac3.with_swing.json" zone_5_capabilities_fixture = "tado/zone_with_swing_capabilities.json" @@ -50,6 +53,10 @@ async def async_init_integration( "https://my.tado.com/api/v2/homes/1/devices", text=load_fixture(devices_fixture), ) + m.get( + "https://my.tado.com/api/v2/devices/WR1/", + text=load_fixture(device_wr1_fixture), + ) m.get( "https://my.tado.com/api/v2/homes/1/zones", text=load_fixture(zones_fixture), diff --git a/tests/fixtures/tado/device_wr1.json b/tests/fixtures/tado/device_wr1.json new file mode 100644 index 00000000000..676784aeba3 --- /dev/null +++ b/tests/fixtures/tado/device_wr1.json @@ -0,0 +1,20 @@ +{ + "deviceType" : "WR02", + "currentFwVersion" : "59.4", + "accessPointWiFi" : { + "ssid" : "tado8480" + }, + "characteristics" : { + "capabilities" : [ + "INSIDE_TEMPERATURE_MEASUREMENT", + "IDENTIFY" + ] + }, + "serialNo" : "WR1", + "commandTableUploadState" : "FINISHED", + "connectionState" : { + "timestamp" : "2020-03-23T18:30:07.377Z", + "value" : true + }, + "shortSerialNo" : "WR1" +}