"""Platform for beewi_smartclim integration.""" from beewi_smartclim import BeewiSmartClimPoller # pylint: disable=import-error import voluptuous as vol from homeassistant.components.sensor import PLATFORM_SCHEMA, SensorEntity from homeassistant.const import ( CONF_MAC, CONF_NAME, DEVICE_CLASS_BATTERY, DEVICE_CLASS_HUMIDITY, DEVICE_CLASS_TEMPERATURE, PERCENTAGE, TEMP_CELSIUS, ) import homeassistant.helpers.config_validation as cv # Default values DEFAULT_NAME = "BeeWi SmartClim" # Sensor config SENSOR_TYPES = [ [DEVICE_CLASS_TEMPERATURE, "Temperature", TEMP_CELSIUS], [DEVICE_CLASS_HUMIDITY, "Humidity", PERCENTAGE], [DEVICE_CLASS_BATTERY, "Battery", 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(SensorEntity): """Representation of a Sensor.""" def __init__(self, poller, name, mac, device, unit): """Initialize the sensor.""" self._poller = poller self._attr_name = name self._device = device self._attr_native_unit_of_measurement = unit self._attr_device_class = self._device self._attr_unique_id = f"{mac}_{device}" def update(self): """Fetch new state data from the poller.""" self._poller.update_sensor() self._attr_native_value = None if self._device == DEVICE_CLASS_TEMPERATURE: self._attr_native_value = self._poller.get_temperature() if self._device == DEVICE_CLASS_HUMIDITY: self._attr_native_value = self._poller.get_humidity() if self._device == DEVICE_CLASS_BATTERY: self._attr_native_value = self._poller.get_battery()