"""Support for Tellstick Net/Telstick Live sensors.""" import logging from homeassistant.components import sensor, tellduslive from homeassistant.const import ( DEVICE_CLASS_HUMIDITY, DEVICE_CLASS_ILLUMINANCE, DEVICE_CLASS_TEMPERATURE, POWER_WATT, TEMP_CELSIUS, ) from homeassistant.helpers.dispatcher import async_dispatcher_connect from .entry import TelldusLiveEntity _LOGGER = logging.getLogger(__name__) SENSOR_TYPE_TEMPERATURE = "temp" SENSOR_TYPE_HUMIDITY = "humidity" SENSOR_TYPE_RAINRATE = "rrate" SENSOR_TYPE_RAINTOTAL = "rtot" SENSOR_TYPE_WINDDIRECTION = "wdir" SENSOR_TYPE_WINDAVERAGE = "wavg" SENSOR_TYPE_WINDGUST = "wgust" SENSOR_TYPE_UV = "uv" SENSOR_TYPE_WATT = "watt" SENSOR_TYPE_LUMINANCE = "lum" SENSOR_TYPE_DEW_POINT = "dewp" SENSOR_TYPE_BAROMETRIC_PRESSURE = "barpress" SENSOR_TYPES = { SENSOR_TYPE_TEMPERATURE: [ "Temperature", TEMP_CELSIUS, None, DEVICE_CLASS_TEMPERATURE, ], SENSOR_TYPE_HUMIDITY: ["Humidity", "%", None, DEVICE_CLASS_HUMIDITY], SENSOR_TYPE_RAINRATE: ["Rain rate", "mm/h", "mdi:water", None], SENSOR_TYPE_RAINTOTAL: ["Rain total", "mm", "mdi:water", None], SENSOR_TYPE_WINDDIRECTION: ["Wind direction", "", "", None], SENSOR_TYPE_WINDAVERAGE: ["Wind average", "m/s", "", None], SENSOR_TYPE_WINDGUST: ["Wind gust", "m/s", "", None], SENSOR_TYPE_UV: ["UV", "UV", "", None], SENSOR_TYPE_WATT: ["Power", POWER_WATT, "", None], SENSOR_TYPE_LUMINANCE: ["Luminance", "lx", None, DEVICE_CLASS_ILLUMINANCE], SENSOR_TYPE_DEW_POINT: ["Dew Point", TEMP_CELSIUS, None, DEVICE_CLASS_TEMPERATURE], SENSOR_TYPE_BAROMETRIC_PRESSURE: ["Barometric Pressure", "kPa", "", None], } async def async_setup_platform(hass, config, async_add_entities, discovery_info=None): """Old way of setting up TelldusLive. Can only be called when a user accidentally mentions the platform in their config. But even in that case it would have been ignored. """ pass async def async_setup_entry(hass, config_entry, async_add_entities): """Set up tellduslive sensors dynamically.""" async def async_discover_sensor(device_id): """Discover and add a discovered sensor.""" client = hass.data[tellduslive.DOMAIN] async_add_entities([TelldusLiveSensor(client, device_id)]) async_dispatcher_connect( hass, tellduslive.TELLDUS_DISCOVERY_NEW.format(sensor.DOMAIN, tellduslive.DOMAIN), async_discover_sensor, ) class TelldusLiveSensor(TelldusLiveEntity): """Representation of a Telldus Live sensor.""" @property def device_id(self): """Return id of the device.""" return self._id[0] @property def _type(self): """Return the type of the sensor.""" return self._id[1] @property def _value(self): """Return value of the sensor.""" return self.device.value(*self._id[1:]) @property def _value_as_temperature(self): """Return the value as temperature.""" return round(float(self._value), 1) @property def _value_as_luminance(self): """Return the value as luminance.""" return round(float(self._value), 1) @property def _value_as_humidity(self): """Return the value as humidity.""" return int(round(float(self._value))) @property def name(self): """Return the name of the sensor.""" return "{} {}".format(super().name, self.quantity_name or "").strip() @property def state(self): """Return the state of the sensor.""" if not self.available: return None if self._type == SENSOR_TYPE_TEMPERATURE: return self._value_as_temperature if self._type == SENSOR_TYPE_HUMIDITY: return self._value_as_humidity if self._type == SENSOR_TYPE_LUMINANCE: return self._value_as_luminance return self._value @property def quantity_name(self): """Name of quantity.""" return SENSOR_TYPES[self._type][0] if self._type in SENSOR_TYPES else None @property def unit_of_measurement(self): """Return the unit of measurement.""" return SENSOR_TYPES[self._type][1] if self._type in SENSOR_TYPES else None @property def icon(self): """Return the icon.""" return SENSOR_TYPES[self._type][2] if self._type in SENSOR_TYPES else None @property def device_class(self): """Return the device class.""" return SENSOR_TYPES[self._type][3] if self._type in SENSOR_TYPES else None @property def unique_id(self) -> str: """Return a unique ID.""" return "{}-{}-{}".format(*self._id)