1 """Platform allowing several binary sensor to be grouped into one binary sensor."""
3 from __future__
import annotations
7 import voluptuous
as vol
10 DEVICE_CLASSES_SCHEMA,
11 DOMAIN
as BINARY_SENSOR_DOMAIN,
12 PLATFORM_SCHEMA
as BINARY_SENSOR_PLATFORM_SCHEMA,
13 BinarySensorDeviceClass,
32 from .entity
import GroupEntity
34 DEFAULT_NAME =
"Binary Sensor Group"
37 REG_KEY = f
"{BINARY_SENSOR_DOMAIN}_registry"
39 PLATFORM_SCHEMA = BINARY_SENSOR_PLATFORM_SCHEMA.extend(
41 vol.Required(CONF_ENTITIES): cv.entities_domain(BINARY_SENSOR_DOMAIN),
42 vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,
43 vol.Optional(CONF_UNIQUE_ID): cv.string,
44 vol.Optional(CONF_DEVICE_CLASS): DEVICE_CLASSES_SCHEMA,
45 vol.Optional(CONF_ALL): cv.boolean,
53 async_add_entities: AddEntitiesCallback,
54 discovery_info: DiscoveryInfoType |
None =
None,
56 """Set up the Binary Sensor Group platform."""
60 config.get(CONF_UNIQUE_ID),
62 config.get(CONF_DEVICE_CLASS),
63 config[CONF_ENTITIES],
72 config_entry: ConfigEntry,
73 async_add_entities: AddEntitiesCallback,
75 """Initialize Binary Sensor Group config entry."""
76 registry = er.async_get(hass)
77 entities = er.async_validate_entity_ids(
78 registry, config_entry.options[CONF_ENTITIES]
80 mode = config_entry.options[CONF_ALL]
85 config_entry.entry_id, config_entry.title,
None, entities, mode
93 hass: HomeAssistant, name: str, validated_config: dict[str, Any]
94 ) -> BinarySensorGroup:
95 """Create a preview sensor."""
100 validated_config[CONF_ENTITIES],
101 validated_config[CONF_ALL],
106 """Representation of a BinarySensorGroup."""
108 _attr_available: bool =
False
112 unique_id: str |
None,
114 device_class: BinarySensorDeviceClass |
None,
115 entity_ids: list[str],
118 """Initialize a BinarySensorGroup entity."""
131 """Query all members and determine the binary sensor group state."""
135 if (state := self.
hasshass.states.get(entity_id))
is not None
139 self.
_attr_available_attr_available = any(state != STATE_UNAVAILABLE
for state
in states)
141 valid_state = self.
modemode(
142 state
not in (STATE_UNKNOWN, STATE_UNAVAILABLE)
for state
in states
149 self.
_attr_is_on_attr_is_on = self.
modemode(state == STATE_ON
for state
in states)
153 """Return the sensor class of the binary sensor."""
None async_update_group_state(self)
None __init__(self, str|None unique_id, str name, BinarySensorDeviceClass|None device_class, list[str] entity_ids, bool|None mode)
_attr_extra_state_attributes
BinarySensorDeviceClass|None device_class(self)
BinarySensorGroup async_create_preview_binary_sensor(HomeAssistant hass, str name, dict[str, Any] validated_config)
None async_setup_entry(HomeAssistant hass, ConfigEntry config_entry, AddEntitiesCallback async_add_entities)
None async_setup_platform(HomeAssistant hass, ConfigType config, AddEntitiesCallback async_add_entities, DiscoveryInfoType|None discovery_info=None)