"""Support for Ecobee sensors.""" from homeassistant.components import ecobee from homeassistant.const import ( DEVICE_CLASS_HUMIDITY, DEVICE_CLASS_TEMPERATURE, TEMP_FAHRENHEIT, ) from homeassistant.helpers.entity import Entity ECOBEE_CONFIG_FILE = "ecobee.conf" SENSOR_TYPES = { "temperature": ["Temperature", TEMP_FAHRENHEIT], "humidity": ["Humidity", "%"], } def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the Ecobee sensors.""" if discovery_info is None: return data = ecobee.NETWORK dev = list() for index in range(len(data.ecobee.thermostats)): for sensor in data.ecobee.get_remote_sensors(index): for item in sensor["capability"]: if item["type"] not in ("temperature", "humidity"): continue dev.append(EcobeeSensor(sensor["name"], item["type"], index)) add_entities(dev, True) class EcobeeSensor(Entity): """Representation of an Ecobee sensor.""" def __init__(self, sensor_name, sensor_type, sensor_index): """Initialize the sensor.""" self._name = "{} {}".format(sensor_name, SENSOR_TYPES[sensor_type][0]) self.sensor_name = sensor_name self.type = sensor_type self.index = sensor_index self._state = None self._unit_of_measurement = SENSOR_TYPES[sensor_type][1] @property def name(self): """Return the name of the Ecobee sensor.""" return self._name @property def device_class(self): """Return the device class of the sensor.""" if self.type in (DEVICE_CLASS_HUMIDITY, DEVICE_CLASS_TEMPERATURE): return self.type return None @property def state(self): """Return the state of the sensor.""" return self._state @property def unit_of_measurement(self): """Return the unit of measurement this sensor expresses itself in.""" return self._unit_of_measurement def update(self): """Get the latest state of the sensor.""" data = ecobee.NETWORK data.update() for sensor in data.ecobee.get_remote_sensors(self.index): for item in sensor["capability"]: if item["type"] == self.type and self.sensor_name == sensor["name"]: if self.type == "temperature" and item["value"] != "unknown": self._state = float(item["value"]) / 10 else: self._state = item["value"]