CONF_TYPE, ) from homeassistant.core import HomeAssistant, callback from homeassistant.helpers import condition, config_validation as cv, entity_registry from homeassistant.helpers.config_validation import DEVICE_CONDITION_BASE_SCHEMA from homeassistant.helpers.typing import ConfigType, TemplateVarsType from . import DOMAIN, const TOGGLE_CONDITION = toggle_entity.CONDITION_SCHEMA.extend( {vol.Required(CONF_DOMAIN): DOMAIN}) MODE_CONDITION = DEVICE_CONDITION_BASE_SCHEMA.extend({ vol.Required(CONF_ENTITY_ID): cv.entity_id, vol.Required(CONF_TYPE): "is_mode", vol.Required(const.ATTR_MODE): str, }) CONDITION_SCHEMA = vol.Any(TOGGLE_CONDITION, MODE_CONDITION) async def async_get_conditions(hass: HomeAssistant, device_id: str) -> List[Dict[str, str]]: """List device conditions for Humidifier devices.""" registry = await entity_registry.async_get_registry(hass) conditions = await toggle_entity.async_get_conditions( hass, device_id, DOMAIN) # Get all the integrations entities for this device
from . import DOMAIN # mypy: disallow-any-generics CONDITION_TYPES = { "is_locked", "is_unlocked", "is_locking", "is_unlocking", "is_jammed", } CONDITION_SCHEMA = DEVICE_CONDITION_BASE_SCHEMA.extend({ vol.Required(CONF_ENTITY_ID): cv.entity_id, vol.Required(CONF_TYPE): vol.In(CONDITION_TYPES), }) async def async_get_conditions(hass: HomeAssistant, device_id: str) -> list[dict[str, str]]: """List device conditions for Lock devices.""" registry = await entity_registry.async_get_registry(hass) conditions = [] # Get all the integrations entities for this device for entry in entity_registry.async_entries_for_device(registry, device_id): if entry.domain != DOMAIN: continue
SUPPORT_OPEN, SUPPORT_SET_POSITION, SUPPORT_SET_TILT_POSITION, ) # mypy: disallow-any-generics POSITION_CONDITION_TYPES = {"is_position", "is_tilt_position"} STATE_CONDITION_TYPES = {"is_open", "is_closed", "is_opening", "is_closing"} POSITION_CONDITION_SCHEMA = vol.All( DEVICE_CONDITION_BASE_SCHEMA.extend({ vol.Required(CONF_ENTITY_ID): cv.entity_id, vol.Required(CONF_TYPE): vol.In(POSITION_CONDITION_TYPES), vol.Optional(CONF_ABOVE): vol.All(vol.Coerce(int), vol.Range(min=0, max=100)), vol.Optional(CONF_BELOW): vol.All(vol.Coerce(int), vol.Range(min=0, max=100)), }), cv.has_at_least_one_key(CONF_BELOW, CONF_ABOVE), ) STATE_CONDITION_SCHEMA = DEVICE_CONDITION_BASE_SCHEMA.extend({ vol.Required(CONF_ENTITY_ID): cv.entity_id, vol.Required(CONF_TYPE): vol.In(STATE_CONDITION_TYPES), }) CONDITION_SCHEMA = vol.Any(POSITION_CONDITION_SCHEMA, STATE_CONDITION_SCHEMA)
CONF_ENTITY_ID, CONF_TYPE, ) from homeassistant.core import HomeAssistant from homeassistant.helpers import condition, config_validation as cv, entity_registry from homeassistant.helpers.config_validation import DEVICE_CONDITION_BASE_SCHEMA from homeassistant.helpers.typing import ConfigType, TemplateVarsType from . import DOMAIN, const CONDITION_TYPES = {"is_hvac_mode", "is_preset_mode"} HVAC_MODE_CONDITION = DEVICE_CONDITION_BASE_SCHEMA.extend({ vol.Required(CONF_ENTITY_ID): cv.entity_id, vol.Required(CONF_TYPE): "is_hvac_mode", vol.Required(const.ATTR_HVAC_MODE): vol.In(const.HVAC_MODES), }) PRESET_MODE_CONDITION = DEVICE_CONDITION_BASE_SCHEMA.extend({ vol.Required(CONF_ENTITY_ID): cv.entity_id, vol.Required(CONF_TYPE): "is_preset_mode", vol.Required(const.ATTR_PRESET_MODE): str, }) CONDITION_SCHEMA = vol.Any(HVAC_MODE_CONDITION, PRESET_MODE_CONDITION)
from homeassistant.helpers import condition, config_validation as cv, entity_registry from homeassistant.helpers.config_validation import DEVICE_CONDITION_BASE_SCHEMA from homeassistant.helpers.entity import get_capability from homeassistant.helpers.typing import ConfigType, TemplateVarsType from .const import ATTR_OPTIONS, CONF_OPTION, DOMAIN # nypy: disallow-any-generics CONDITION_TYPES = {"selected_option"} CONDITION_SCHEMA = DEVICE_CONDITION_BASE_SCHEMA.extend({ vol.Required(CONF_ENTITY_ID): cv.entity_id, vol.Required(CONF_TYPE): vol.In(CONDITION_TYPES), vol.Required(CONF_OPTION): str, vol.Optional(CONF_FOR): cv.positive_time_period_dict, }) async def async_get_conditions(hass: HomeAssistant, device_id: str) -> list[dict[str, str]]: """List device conditions for Select devices.""" registry = await entity_registry.async_get_registry(hass) return [{ CONF_CONDITION: "device", CONF_DEVICE_ID: device_id, CONF_DOMAIN: DOMAIN, CONF_ENTITY_ID: entry.entity_id,
remove_keys_with_empty_values, ) CONF_SUBTYPE = "subtype" CONF_VALUE_ID = "value_id" CONF_STATUS = "status" NODE_STATUS_TYPE = "node_status" NODE_STATUS_TYPES = ["asleep", "awake", "dead", "alive"] CONFIG_PARAMETER_TYPE = "config_parameter" VALUE_TYPE = "value" CONDITION_TYPES = {NODE_STATUS_TYPE, CONFIG_PARAMETER_TYPE, VALUE_TYPE} NODE_STATUS_CONDITION_SCHEMA = DEVICE_CONDITION_BASE_SCHEMA.extend( { vol.Required(CONF_TYPE): NODE_STATUS_TYPE, vol.Required(CONF_STATUS): vol.In(NODE_STATUS_TYPES), } ) CONFIG_PARAMETER_CONDITION_SCHEMA = DEVICE_CONDITION_BASE_SCHEMA.extend( { vol.Required(CONF_TYPE): CONFIG_PARAMETER_TYPE, vol.Required(CONF_VALUE_ID): cv.string, vol.Required(CONF_SUBTYPE): cv.string, vol.Optional(ATTR_VALUE): vol.Coerce(int), } ) VALUE_CONDITION_SCHEMA = DEVICE_CONDITION_BASE_SCHEMA.extend( { vol.Required(CONF_TYPE): VALUE_TYPE,
CONF_TYPE, CONF_PLATFORM, CONF_DEVICE_ID, CONF_ENTITY_ID, STATE_ON, ) from homeassistant.core import HomeAssistant from homeassistant.helpers import condition, entity_registry from homeassistant.helpers.typing import ConfigType, TemplateVarsType from homeassistant.helpers.config_validation import DEVICE_CONDITION_BASE_SCHEMA from . import DOMAIN # TODO specify your supported condition types. CONDITION_TYPES = {"is_on"} CONDITION_SCHEMA = DEVICE_CONDITION_BASE_SCHEMA.extend( {vol.Required(CONF_TYPE): vol.In(CONDITION_TYPES)}) async def async_get_conditions(hass: HomeAssistant, device_id: str) -> List[str]: """List device conditions for NEW_NAME devices.""" registry = await entity_registry.async_get_registry(hass) conditions = [] # Get all the integrations entities for this device for entry in entity_registry.async_entries_for_device(registry, device_id): if entry.domain != DOMAIN: continue # Add conditions for each entity that belongs to this integration # TODO add your own conditions.