"""Support for HomeMatic sensors.""" import logging from homeassistant.const import ENERGY_WATT_HOUR, POWER_WATT, STATE_UNKNOWN from . import ATTR_DISCOVER_DEVICES, HMDevice _LOGGER = logging.getLogger(__name__) HM_STATE_HA_CAST = { "RotaryHandleSensor": {0: "closed", 1: "tilted", 2: "open"}, "RotaryHandleSensorIP": {0: "closed", 1: "tilted", 2: "open"}, "WaterSensor": {0: "dry", 1: "wet", 2: "water"}, "CO2Sensor": {0: "normal", 1: "added", 2: "strong"}, "IPSmoke": {0: "off", 1: "primary", 2: "intrusion", 3: "secondary"}, "RFSiren": { 0: "disarmed", 1: "extsens_armed", 2: "allsens_armed", 3: "alarm_blocked", }, } HM_UNIT_HA_CAST = { "HUMIDITY": "%", "TEMPERATURE": "°C", "ACTUAL_TEMPERATURE": "°C", "BRIGHTNESS": "#", "POWER": POWER_WATT, "CURRENT": "mA", "VOLTAGE": "V", "ENERGY_COUNTER": ENERGY_WATT_HOUR, "GAS_POWER": "m3", "GAS_ENERGY_COUNTER": "m3", "LUX": "lx", "ILLUMINATION": "lx", "CURRENT_ILLUMINATION": "lx", "AVERAGE_ILLUMINATION": "lx", "LOWEST_ILLUMINATION": "lx", "HIGHEST_ILLUMINATION": "lx", "RAIN_COUNTER": "mm", "WIND_SPEED": "km/h", "WIND_DIRECTION": "°", "WIND_DIRECTION_RANGE": "°", "SUNSHINEDURATION": "#", "AIR_PRESSURE": "hPa", "FREQUENCY": "Hz", "VALUE": "#", } HM_ICON_HA_CAST = { "WIND_SPEED": "mdi:weather-windy", "HUMIDITY": "mdi:water-percent", "TEMPERATURE": "mdi:thermometer", "ACTUAL_TEMPERATURE": "mdi:thermometer", "LUX": "mdi:weather-sunny", "CURRENT_ILLUMINATION": "mdi:weather-sunny", "AVERAGE_ILLUMINATION": "mdi:weather-sunny", "LOWEST_ILLUMINATION": "mdi:weather-sunny", "HIGHEST_ILLUMINATION": "mdi:weather-sunny", "BRIGHTNESS": "mdi:invert-colors", "POWER": "mdi:flash-red-eye", "CURRENT": "mdi:flash-red-eye", } def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the HomeMatic sensor platform.""" if discovery_info is None: return devices = [] for conf in discovery_info[ATTR_DISCOVER_DEVICES]: new_device = HMSensor(conf) devices.append(new_device) add_entities(devices) class HMSensor(HMDevice): """Representation of a HomeMatic sensor.""" @property def state(self): """Return the state of the sensor.""" # Does a cast exist for this class? name = self._hmdevice.__class__.__name__ if name in HM_STATE_HA_CAST: return HM_STATE_HA_CAST[name].get(self._hm_get_state(), None) # No cast, return original value return self._hm_get_state() @property def unit_of_measurement(self): """Return the unit of measurement of this entity, if any.""" return HM_UNIT_HA_CAST.get(self._state, None) @property def icon(self): """Return the icon to use in the frontend, if any.""" return HM_ICON_HA_CAST.get(self._state, None) def _init_data_struct(self): """Generate a data dictionary (self._data) from metadata.""" if self._state: self._data.update({self._state: STATE_UNKNOWN}) else: _LOGGER.critical("Unable to initialize sensor: %s", self._name)