diff --git a/.coveragerc b/.coveragerc index 97f26d8adc5..4e252fb9c92 100644 --- a/.coveragerc +++ b/.coveragerc @@ -266,6 +266,7 @@ omit = homeassistant/components/eliqonline/sensor.py homeassistant/components/elkm1/__init__.py homeassistant/components/elkm1/alarm_control_panel.py + homeassistant/components/elkm1/binary_sensor.py homeassistant/components/elkm1/climate.py homeassistant/components/elkm1/discovery.py homeassistant/components/elkm1/light.py diff --git a/homeassistant/components/elkm1/__init__.py b/homeassistant/components/elkm1/__init__.py index 00fcadfe57a..472d31ccb93 100644 --- a/homeassistant/components/elkm1/__init__.py +++ b/homeassistant/components/elkm1/__init__.py @@ -74,6 +74,7 @@ _LOGGER = logging.getLogger(__name__) PLATFORMS = [ Platform.ALARM_CONTROL_PANEL, + Platform.BINARY_SENSOR, Platform.CLIMATE, Platform.LIGHT, Platform.SCENE, diff --git a/homeassistant/components/elkm1/alarm_control_panel.py b/homeassistant/components/elkm1/alarm_control_panel.py index 6b6a5b44d55..3f5163a849d 100644 --- a/homeassistant/components/elkm1/alarm_control_panel.py +++ b/homeassistant/components/elkm1/alarm_control_panel.py @@ -69,7 +69,7 @@ async def async_setup_entry( elk = elk_data["elk"] entities: list[ElkEntity] = [] create_elk_entities(elk_data, elk.areas, "area", ElkArea, entities) - async_add_entities(entities, True) + async_add_entities(entities) platform = entity_platform.async_get_current_platform() diff --git a/homeassistant/components/elkm1/binary_sensor.py b/homeassistant/components/elkm1/binary_sensor.py new file mode 100644 index 00000000000..38a72796482 --- /dev/null +++ b/homeassistant/components/elkm1/binary_sensor.py @@ -0,0 +1,57 @@ +"""Support for control of ElkM1 binary sensors.""" +from __future__ import annotations + +from typing import Any + +from elkm1_lib.const import ZoneLogicalStatus, ZoneType +from elkm1_lib.elements import Element +from elkm1_lib.zones import Zone + +from homeassistant.components.binary_sensor import BinarySensorEntity +from homeassistant.config_entries import ConfigEntry +from homeassistant.core import HomeAssistant +from homeassistant.helpers.entity_platform import AddEntitiesCallback + +from . import ElkAttachedEntity, ElkEntity +from .const import DOMAIN + + +async def async_setup_entry( + hass: HomeAssistant, + config_entry: ConfigEntry, + async_add_entities: AddEntitiesCallback, +) -> None: + """Create the Elk-M1 sensor platform.""" + + elk_data = hass.data[DOMAIN][config_entry.entry_id] + auto_configure = elk_data["auto_configure"] + elk = elk_data["elk"] + + entities: list[ElkEntity] = [] + for element in elk.zones: + # Don't create binary sensors for zones that are analog + if element.definition in {ZoneType.TEMPERATURE, ZoneType.ANALOG_ZONE}: + continue + + if auto_configure: + if not element.configured: + continue + elif not elk_data["config"]["zone"]["included"][element.index]: + continue + + entities.append(ElkBinarySensor(element, elk, elk_data)) + + async_add_entities(entities) + + +class ElkBinarySensor(ElkAttachedEntity, BinarySensorEntity): + """Representation of ElkM1 binary sensor.""" + + _element: Zone + _attr_entity_registry_enabled_default = False + + def _element_changed(self, _: Element, changeset: Any) -> None: + # Zone in NORMAL state is OFF; any other state is ON + self._attr_is_on = bool( + self._element.logical_status != ZoneLogicalStatus.NORMAL + ) diff --git a/homeassistant/components/elkm1/climate.py b/homeassistant/components/elkm1/climate.py index 9f6dc359f6f..8bbf776c475 100644 --- a/homeassistant/components/elkm1/climate.py +++ b/homeassistant/components/elkm1/climate.py @@ -68,7 +68,7 @@ async def async_setup_entry( create_elk_entities( elk_data, elk.thermostats, "thermostat", ElkThermostat, entities ) - async_add_entities(entities, True) + async_add_entities(entities) class ElkThermostat(ElkEntity, ClimateEntity): diff --git a/homeassistant/components/elkm1/light.py b/homeassistant/components/elkm1/light.py index 9e008359e8c..3db457761aa 100644 --- a/homeassistant/components/elkm1/light.py +++ b/homeassistant/components/elkm1/light.py @@ -26,7 +26,7 @@ async def async_setup_entry( entities: list[ElkEntity] = [] elk = elk_data["elk"] create_elk_entities(elk_data, elk.lights, "plc", ElkLight, entities) - async_add_entities(entities, True) + async_add_entities(entities) class ElkLight(ElkEntity, LightEntity): diff --git a/homeassistant/components/elkm1/scene.py b/homeassistant/components/elkm1/scene.py index d8100c5bcb1..1869e5ba0f3 100644 --- a/homeassistant/components/elkm1/scene.py +++ b/homeassistant/components/elkm1/scene.py @@ -24,7 +24,7 @@ async def async_setup_entry( entities: list[ElkEntity] = [] elk = elk_data["elk"] create_elk_entities(elk_data, elk.tasks, "task", ElkTask, entities) - async_add_entities(entities, True) + async_add_entities(entities) class ElkTask(ElkAttachedEntity, Scene): diff --git a/homeassistant/components/elkm1/sensor.py b/homeassistant/components/elkm1/sensor.py index 57f989d5cb5..1d84af259ee 100644 --- a/homeassistant/components/elkm1/sensor.py +++ b/homeassistant/components/elkm1/sensor.py @@ -51,7 +51,7 @@ async def async_setup_entry( create_elk_entities(elk_data, [elk.panel], "panel", ElkPanel, entities) create_elk_entities(elk_data, elk.settings, "setting", ElkSetting, entities) create_elk_entities(elk_data, elk.zones, "zone", ElkZone, entities) - async_add_entities(entities, True) + async_add_entities(entities) platform = entity_platform.async_get_current_platform() diff --git a/homeassistant/components/elkm1/switch.py b/homeassistant/components/elkm1/switch.py index 54588958e61..a17557b1507 100644 --- a/homeassistant/components/elkm1/switch.py +++ b/homeassistant/components/elkm1/switch.py @@ -24,7 +24,7 @@ async def async_setup_entry( entities: list[ElkEntity] = [] elk = elk_data["elk"] create_elk_entities(elk_data, elk.outputs, "output", ElkOutput, entities) - async_add_entities(entities, True) + async_add_entities(entities) class ElkOutput(ElkAttachedEntity, SwitchEntity):