"""Platform for beewi_smartclim integration.""" import logging from beewi_smartclim import BeewiSmartClimPoller import voluptuous as vol from homeassistant.components.sensor import PLATFORM_SCHEMA from homeassistant.const import ( CONF_MAC, CONF_NAME, DEVICE_CLASS_BATTERY, DEVICE_CLASS_HUMIDITY, DEVICE_CLASS_TEMPERATURE, TEMP_CELSIUS, UNIT_PERCENTAGE, ) import homeassistant.helpers.config_validation as cv from homeassistant.helpers.entity import Entity _LOGGER = logging.getLogger(__name__) # Default values DEFAULT_NAME = "BeeWi SmartClim" # Sensor config SENSOR_TYPES = [ [DEVICE_CLASS_TEMPERATURE, "Temperature", TEMP_CELSIUS], [DEVICE_CLASS_HUMIDITY, "Humidity", UNIT_PERCENTAGE], [DEVICE_CLASS_BATTERY, "Battery", UNIT_PERCENTAGE], ] PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( { vol.Required(CONF_MAC): cv.string, vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, } ) def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the beewi_smartclim platform.""" mac = config[CONF_MAC] prefix = config[CONF_NAME] poller = BeewiSmartClimPoller(mac) sensors = [] for sensor_type in SENSOR_TYPES: device = sensor_type[0] name = sensor_type[1] unit = sensor_type[2] # `prefix` is the name configured by the user for the sensor, we're appending # the device type at the end of the name (garden -> garden temperature) if prefix: name = f"{prefix} {name}" sensors.append(BeewiSmartclimSensor(poller, name, mac, device, unit)) add_entities(sensors) class BeewiSmartclimSensor(Entity): """Representation of a Sensor.""" def __init__(self, poller, name, mac, device, unit): """Initialize the sensor.""" self._poller = poller self._name = name self._mac = mac self._device = device self._unit = unit self._state = None @property def name(self): """Return the name of the sensor.""" return self._name @property def state(self): """Return the state of the sensor. State is returned in Celsius.""" return self._state @property def device_class(self): """Device class of this entity.""" return self._device @property def unique_id(self): """Return a unique, Home Assistant friendly identifier for this entity.""" return f"{self._mac}_{self._device}" @property def unit_of_measurement(self): """Return the unit of measurement.""" return self._unit def update(self): """Fetch new state data from the poller.""" self._poller.update_sensor() self._state = None if self._device == DEVICE_CLASS_TEMPERATURE: self._state = self._poller.get_temperature() if self._device == DEVICE_CLASS_HUMIDITY: self._state = self._poller.get_humidity() if self._device == DEVICE_CLASS_BATTERY: self._state = self._poller.get_battery()