forked from home-assistant/core
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Tado: add full list of devices (home-assistant#44475)
Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
- Loading branch information
Showing
9 changed files
with
190 additions
and
141 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,127 @@ | ||
"""Support for Tado sensors for each zone.""" | ||
import logging | ||
|
||
from homeassistant.components.binary_sensor import ( | ||
DEVICE_CLASS_BATTERY, | ||
DEVICE_CLASS_CONNECTIVITY, | ||
BinarySensorEntity, | ||
) | ||
from homeassistant.config_entries import ConfigEntry | ||
from homeassistant.core import HomeAssistant, callback | ||
from homeassistant.helpers.dispatcher import async_dispatcher_connect | ||
|
||
from .const import DATA, DOMAIN, SIGNAL_TADO_UPDATE_RECEIVED, TYPE_BATTERY, TYPE_POWER | ||
from .entity import TadoDeviceEntity | ||
|
||
_LOGGER = logging.getLogger(__name__) | ||
|
||
DEVICE_SENSORS = { | ||
TYPE_BATTERY: [ | ||
"battery state", | ||
"connection state", | ||
], | ||
TYPE_POWER: [ | ||
"connection state", | ||
], | ||
} | ||
|
||
|
||
async def async_setup_entry( | ||
hass: HomeAssistant, entry: ConfigEntry, async_add_entities | ||
): | ||
"""Set up the Tado sensor platform.""" | ||
|
||
tado = hass.data[DOMAIN][entry.entry_id][DATA] | ||
devices = tado.devices | ||
entities = [] | ||
|
||
# Create device sensors | ||
for device in devices: | ||
if "batteryState" in device: | ||
device_type = TYPE_BATTERY | ||
else: | ||
device_type = TYPE_POWER | ||
|
||
entities.extend( | ||
[ | ||
TadoDeviceSensor(tado, device, variable) | ||
for variable in DEVICE_SENSORS[device_type] | ||
] | ||
) | ||
|
||
if entities: | ||
async_add_entities(entities, True) | ||
|
||
|
||
class TadoDeviceSensor(TadoDeviceEntity, BinarySensorEntity): | ||
"""Representation of a tado Sensor.""" | ||
|
||
def __init__(self, tado, device_info, device_variable): | ||
"""Initialize of the Tado Sensor.""" | ||
self._tado = tado | ||
super().__init__(device_info) | ||
|
||
self.device_variable = device_variable | ||
|
||
self._unique_id = f"{device_variable} {self.device_id} {tado.device_id}" | ||
|
||
self._state = None | ||
|
||
async def async_added_to_hass(self): | ||
"""Register for sensor updates.""" | ||
|
||
self.async_on_remove( | ||
async_dispatcher_connect( | ||
self.hass, | ||
SIGNAL_TADO_UPDATE_RECEIVED.format( | ||
self._tado.device_id, "device", self.device_id | ||
), | ||
self._async_update_callback, | ||
) | ||
) | ||
self._async_update_device_data() | ||
|
||
@property | ||
def unique_id(self): | ||
"""Return the unique id.""" | ||
return self._unique_id | ||
|
||
@property | ||
def name(self): | ||
"""Return the name of the sensor.""" | ||
return f"{self.device_name} {self.device_variable}" | ||
|
||
@property | ||
def is_on(self): | ||
"""Return true if sensor is on.""" | ||
return self._state | ||
|
||
@property | ||
def device_class(self): | ||
"""Return the class of this sensor.""" | ||
if self.device_variable == "battery state": | ||
return DEVICE_CLASS_BATTERY | ||
if self.device_variable == "connection state": | ||
return DEVICE_CLASS_CONNECTIVITY | ||
return None | ||
|
||
@callback | ||
def _async_update_callback(self): | ||
"""Update and write state.""" | ||
self._async_update_device_data() | ||
self.async_write_ha_state() | ||
|
||
@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 | ||
|
||
if self.device_variable == "battery state": | ||
self._state = self._device_info["batteryState"] == "LOW" | ||
elif self.device_variable == "connection state": | ||
self._state = self._device_info.get("connectionState", {}).get( | ||
"value", False | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.