"""Selectors for Home Assistant.""" from __future__ import annotations from typing import Any, Callable, Dict, cast import voluptuous as vol from homeassistant.const import CONF_MODE, CONF_UNIT_OF_MEASUREMENT from homeassistant.util import decorator SELECTORS = decorator.Registry() def validate_selector(config: Any) -> dict: """Validate a selector.""" if not isinstance(config, dict): raise vol.Invalid("Expected a dictionary") if len(config) != 1: raise vol.Invalid(f"Only one type can be specified. Found {', '.join(config)}") selector_type = list(config)[0] selector_class = SELECTORS.get(selector_type) if selector_class is None: raise vol.Invalid(f"Unknown selector type {selector_type} found") # Selectors can be empty if config[selector_type] is None: return {selector_type: {}}
from homeassistant.components import mqtt import homeassistant.helpers.config_validation as cv from homeassistant.components import zone as zone_comp from homeassistant.components.device_tracker import ( PLATFORM_SCHEMA, ATTR_SOURCE_TYPE, SOURCE_TYPE_BLUETOOTH_LE, SOURCE_TYPE_GPS ) from homeassistant.const import STATE_HOME from homeassistant.core import callback from homeassistant.util import slugify, decorator REQUIREMENTS = ['libnacl==1.6.1'] _LOGGER = logging.getLogger(__name__) HANDLERS = decorator.Registry() BEACON_DEV_ID = 'beacon' CONF_MAX_GPS_ACCURACY = 'max_gps_accuracy' CONF_SECRET = 'secret' CONF_WAYPOINT_IMPORT = 'waypoints' CONF_WAYPOINT_WHITELIST = 'waypoint_whitelist' CONF_MQTT_TOPIC = 'mqtt_topic' CONF_REGION_MAPPING = 'region_mapping' CONF_EVENTS_ONLY = 'events_only' DEPENDENCIES = ['mqtt'] DEFAULT_OWNTRACKS_TOPIC = 'owntracks/#' REGION_MAPPING = {}
from collections.abc import Callable, Sequence from typing import Any, TypedDict, cast import voluptuous as vol import yaml from homeassistant.backports.enum import StrEnum from homeassistant.const import CONF_MODE, CONF_UNIT_OF_MEASUREMENT from homeassistant.core import split_entity_id, valid_entity_id from homeassistant.util import decorator from homeassistant.util.yaml.dumper import represent_odict from . import config_validation as cv SELECTORS: decorator.Registry[str, type[Selector]] = decorator.Registry() def _get_selector_class(config: Any) -> type[Selector]: """Get selector class type.""" if not isinstance(config, dict): raise vol.Invalid("Expected a dictionary") if len(config) != 1: raise vol.Invalid( f"Only one type can be specified. Found {', '.join(config)}") selector_type: str = list(config)[0] if (selector_class := SELECTORS.get(selector_type)) is None: raise vol.Invalid(f"Unknown selector type {selector_type} found")
"""Handle Konnected messages.""" import logging from homeassistant.components.sensor import SensorDeviceClass from homeassistant.const import ATTR_ENTITY_ID, ATTR_STATE from homeassistant.helpers.dispatcher import async_dispatcher_send from homeassistant.util import decorator from .const import CONF_INVERSE, SIGNAL_DS18B20_NEW _LOGGER = logging.getLogger(__name__) HANDLERS = decorator.Registry() # type: ignore[var-annotated] @HANDLERS.register("state") async def async_handle_state_update(hass, context, msg): """Handle a binary sensor or switch 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, f"konnected.{entity_id}.update", 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(
from typing import Any from mysensors import Message from homeassistant.const import Platform from homeassistant.core import HomeAssistant, callback from homeassistant.helpers.dispatcher import async_dispatcher_send from homeassistant.util import decorator from .const import CHILD_CALLBACK, NODE_CALLBACK, DevId, GatewayId from .device import get_mysensors_devices from .helpers import discover_mysensors_platform, validate_set_msg HANDLERS: decorator.Registry[ str, Callable[[HomeAssistant, GatewayId, Message], Coroutine[Any, Any, None]] ] = decorator.Registry() @HANDLERS.register("set") async def handle_set(hass: HomeAssistant, gateway_id: GatewayId, msg: Message) -> None: """Handle a mysensors set message.""" validated = validate_set_msg(gateway_id, msg) _handle_child_update(hass, gateway_id, validated) @HANDLERS.register("internal") async def handle_internal( hass: HomeAssistant, gateway_id: GatewayId, msg: Message ) -> None: """Handle a mysensors internal message.""" internal = msg.gateway.const.Internal(msg.sub_type)