"""Handle Konnected messages.""" import logging from homeassistant.helpers.dispatcher import async_dispatcher_send from homeassistant.util import decorator from homeassistant.const import ( ATTR_ENTITY_ID, ATTR_STATE, DEVICE_CLASS_TEMPERATURE, DEVICE_CLASS_HUMIDITY) from .const import (CONF_INVERSE, SIGNAL_SENSOR_UPDATE, SIGNAL_DS18B20_NEW) _LOGGER = logging.getLogger(__name__) HANDLERS = decorator.Registry() @HANDLERS.register('state') async def async_handle_state_update(hass, context, msg): """Handle a binary sensor state update.""" _LOGGER.debug("[state handler] context: %s msg: %s", context, msg) entity_id = context.get(ATTR_ENTITY_ID) state = bool(int(msg.get(ATTR_STATE))) if context.get(CONF_INVERSE): state = not state async_dispatcher_send( hass, SIGNAL_SENSOR_UPDATE.format(entity_id), state) @HANDLERS.register('temp') async def async_handle_temp_update(hass, context, msg): """Handle a temperature sensor state update.""" _LOGGER.debug("[temp handler] context: %s msg: %s", context, msg) entity_id, temp = context.get(DEVICE_CLASS_TEMPERATURE), msg.get('temp') if entity_id: async_dispatcher_send( hass, SIGNAL_SENSOR_UPDATE.format(entity_id), temp) @HANDLERS.register('humi') async def async_handle_humi_update(hass, context, msg): """Handle a humidity sensor state update.""" _LOGGER.debug("[humi handler] context: %s msg: %s", context, msg) entity_id, humi = context.get(DEVICE_CLASS_HUMIDITY), msg.get('humi') if entity_id: async_dispatcher_send( hass, SIGNAL_SENSOR_UPDATE.format(entity_id), humi) @HANDLERS.register('addr') async def async_handle_addr_update(hass, context, msg): """Handle an addressable sensor update.""" _LOGGER.debug("[addr handler] context: %s msg: %s", context, msg) addr, temp = msg.get('addr'), msg.get('temp') entity_id = context.get(addr) if entity_id: async_dispatcher_send( hass, SIGNAL_SENSOR_UPDATE.format(entity_id), temp) else: msg['device_id'] = context.get('device_id') msg['temperature'] = temp msg['addr'] = addr async_dispatcher_send(hass, SIGNAL_DS18B20_NEW, msg)