""" homeassistant.components.sensor.zigbee Contains functionality to use a ZigBee device as a sensor. """ import logging from homeassistant.core import JobPriority from homeassistant.const import TEMP_CELCIUS from homeassistant.helpers.entity import Entity from homeassistant.components import zigbee DEPENDENCIES = ["zigbee"] _LOGGER = logging.getLogger(__name__) def setup_platform(hass, config, add_entities, discovery_info=None): """ Uses the 'type' config value to work out which type of ZigBee sensor we're dealing with and instantiates the relevant classes to handle it. """ typ = config.get("type", "").lower() if not typ: _LOGGER.exception( "Must include 'type' when configuring a ZigBee sensor.") return try: sensor_class, config_class = TYPE_CLASSES[typ] except KeyError: _LOGGER.exception("Unknown ZigBee sensor type: %s", typ) return add_entities([sensor_class(hass, config_class(config))]) class ZigBeeTemperatureSensor(Entity): """ Allows usage of an XBee Pro as a temperature sensor. """ def __init__(self, hass, config): self._config = config self._temp = None # Get initial state hass.pool.add_job( JobPriority.EVENT_STATE, (self.update_ha_state, True)) @property def name(self): return self._config.name @property def state(self): return self._temp @property def unit_of_measurement(self): return TEMP_CELCIUS def update(self, *args): self._temp = zigbee.DEVICE.get_temperature(self._config.address) # This must be below the ZigBeeTemperatureSensor which it references. TYPE_CLASSES = { "temperature": (ZigBeeTemperatureSensor, zigbee.ZigBeeConfig), "analog": (zigbee.ZigBeeAnalogIn, zigbee.ZigBeeAnalogInConfig) }