119 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Python
		
	
	
			
		
		
	
	
			119 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Python
		
	
	
"""Support for Kaiterra Air Quality Sensors."""
 | 
						|
from homeassistant.components.air_quality import AirQualityEntity
 | 
						|
from homeassistant.const import CONF_DEVICE_ID, CONF_NAME
 | 
						|
from homeassistant.helpers.dispatcher import async_dispatcher_connect
 | 
						|
 | 
						|
from .const import (
 | 
						|
    ATTR_AQI_LEVEL,
 | 
						|
    ATTR_AQI_POLLUTANT,
 | 
						|
    ATTR_VOC,
 | 
						|
    DISPATCHER_KAITERRA,
 | 
						|
    DOMAIN,
 | 
						|
)
 | 
						|
 | 
						|
 | 
						|
async def async_setup_platform(hass, config, async_add_entities, discovery_info=None):
 | 
						|
    """Set up the air_quality kaiterra sensor."""
 | 
						|
    if discovery_info is None:
 | 
						|
        return
 | 
						|
 | 
						|
    api = hass.data[DOMAIN]
 | 
						|
    name = discovery_info[CONF_NAME]
 | 
						|
    device_id = discovery_info[CONF_DEVICE_ID]
 | 
						|
 | 
						|
    async_add_entities([KaiterraAirQuality(api, name, device_id)])
 | 
						|
 | 
						|
 | 
						|
class KaiterraAirQuality(AirQualityEntity):
 | 
						|
    """Implementation of a Kaittera air quality sensor."""
 | 
						|
 | 
						|
    def __init__(self, api, name, device_id):
 | 
						|
        """Initialize the sensor."""
 | 
						|
        self._api = api
 | 
						|
        self._name = f"{name} Air Quality"
 | 
						|
        self._device_id = device_id
 | 
						|
 | 
						|
    def _data(self, key):
 | 
						|
        return self._device.get(key, {}).get("value")
 | 
						|
 | 
						|
    @property
 | 
						|
    def _device(self):
 | 
						|
        return self._api.data.get(self._device_id, {})
 | 
						|
 | 
						|
    @property
 | 
						|
    def should_poll(self):
 | 
						|
        """Return that the sensor should not be polled."""
 | 
						|
        return False
 | 
						|
 | 
						|
    @property
 | 
						|
    def available(self):
 | 
						|
        """Return the availability of the sensor."""
 | 
						|
        return self._api.data.get(self._device_id) is not None
 | 
						|
 | 
						|
    @property
 | 
						|
    def name(self):
 | 
						|
        """Return the name of the sensor."""
 | 
						|
        return self._name
 | 
						|
 | 
						|
    @property
 | 
						|
    def air_quality_index(self):
 | 
						|
        """Return the Air Quality Index (AQI)."""
 | 
						|
        return self._data("aqi")
 | 
						|
 | 
						|
    @property
 | 
						|
    def air_quality_index_level(self):
 | 
						|
        """Return the Air Quality Index level."""
 | 
						|
        return self._data("aqi_level")
 | 
						|
 | 
						|
    @property
 | 
						|
    def air_quality_index_pollutant(self):
 | 
						|
        """Return the Air Quality Index level."""
 | 
						|
        return self._data("aqi_pollutant")
 | 
						|
 | 
						|
    @property
 | 
						|
    def particulate_matter_2_5(self):
 | 
						|
        """Return the particulate matter 2.5 level."""
 | 
						|
        return self._data("rpm25c")
 | 
						|
 | 
						|
    @property
 | 
						|
    def particulate_matter_10(self):
 | 
						|
        """Return the particulate matter 10 level."""
 | 
						|
        return self._data("rpm10c")
 | 
						|
 | 
						|
    @property
 | 
						|
    def carbon_dioxide(self):
 | 
						|
        """Return the CO2 (carbon dioxide) level."""
 | 
						|
        return self._data("rco2")
 | 
						|
 | 
						|
    @property
 | 
						|
    def volatile_organic_compounds(self):
 | 
						|
        """Return the VOC (Volatile Organic Compounds) level."""
 | 
						|
        return self._data("rtvoc")
 | 
						|
 | 
						|
    @property
 | 
						|
    def unique_id(self):
 | 
						|
        """Return the sensor's unique id."""
 | 
						|
        return f"{self._device_id}_air_quality"
 | 
						|
 | 
						|
    @property
 | 
						|
    def device_state_attributes(self):
 | 
						|
        """Return the device state attributes."""
 | 
						|
        data = {}
 | 
						|
        attributes = [
 | 
						|
            (ATTR_VOC, self.volatile_organic_compounds),
 | 
						|
            (ATTR_AQI_LEVEL, self.air_quality_index_level),
 | 
						|
            (ATTR_AQI_POLLUTANT, self.air_quality_index_pollutant),
 | 
						|
        ]
 | 
						|
 | 
						|
        for attr, value in attributes:
 | 
						|
            if value is not None:
 | 
						|
                data[attr] = value
 | 
						|
 | 
						|
        return data
 | 
						|
 | 
						|
    async def async_added_to_hass(self):
 | 
						|
        """Register callback."""
 | 
						|
        async_dispatcher_connect(
 | 
						|
            self.hass, DISPATCHER_KAITERRA, self.async_write_ha_state
 | 
						|
        )
 |