""" Support for Melissa climate Sensors. For more details about this platform, please refer to the documentation at https://home-assistant.io/components/sensor.melissa/ """ import logging from homeassistant.components.melissa import DATA_MELISSA from homeassistant.const import TEMP_CELSIUS from homeassistant.helpers.entity import Entity DEPENDENCIES = ['melissa'] _LOGGER = logging.getLogger(__name__) def setup_platform(hass, config, add_devices, discovery_info=None): """Setup the melissa sensor platform.""" sensors = [] api = hass.data[DATA_MELISSA] devices = api.fetch_devices().values() for device in devices: if device['type'] == 'melissa': sensors.append(MelissaTemperatureSensor(device, api)) sensors.append(MelissaHumiditySensor(device, api)) add_devices(sensors) class MelissaSensor(Entity): """Representation of a Melissa Sensor.""" _type = 'generic' def __init__(self, device, api): """Initialize the sensor.""" self._api = api self._state = None self._name = '{0} {1}'.format( device['name'], self._type ) self._serial = device['serial_number'] self._data = device['controller_log'] @property def name(self): """Return the name of the sensor.""" return self._name @property def state(self): """Return the state of the sensor.""" return self._state def update(self): """Fetch status from melissa.""" self._data = self._api.status(cached=True) class MelissaTemperatureSensor(MelissaSensor): """Representation of a Melissa temperature Sensor.""" _type = 'temperature' _unit = TEMP_CELSIUS @property def unit_of_measurement(self): """Return the unit of measurement.""" return self._unit def update(self): """Fetch new state data for the sensor.""" super().update() try: self._state = self._data[self._serial]['temp'] except KeyError: _LOGGER.warning("Unable to get temperature for %s", self.entity_id) class MelissaHumiditySensor(MelissaSensor): """Representation of a Melissa humidity Sensor.""" _type = 'humidity' _unit = '%' @property def unit_of_measurement(self): """Return the unit of measurement.""" return self._unit def update(self): """Fetch new state data for the sensor.""" super().update() try: self._state = self._data[self._serial]['humidity'] except KeyError: _LOGGER.warning("Unable to get humidity for %s", self.entity_id)