80 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Python
		
	
	
			
		
		
	
	
			80 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Python
		
	
	
"""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_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_state = None
 | 
						|
        if self._device == DEVICE_CLASS_TEMPERATURE:
 | 
						|
            self._attr_state = self._poller.get_temperature()
 | 
						|
        if self._device == DEVICE_CLASS_HUMIDITY:
 | 
						|
            self._attr_state = self._poller.get_humidity()
 | 
						|
        if self._device == DEVICE_CLASS_BATTERY:
 | 
						|
            self._attr_state = self._poller.get_battery()
 |