diff --git a/.coveragerc b/.coveragerc index 97f26d8adc5f2b5cb45ea42be6b7d4e75db0365f..4e252fb9c9204927662deb3e3ca24d01c55e1ea6 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 00fcadfe57a6e788e94330ce8fef24054198223d..472d31ccb93858ef6b17eada069a85380b68469d 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 6b6a5b44d55af39541f86b93526e78f4182d3cb0..3f5163a849dce463a125a68824a7fc5f93607134 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 0000000000000000000000000000000000000000..38a727964829340804023ef205b2324c956488f0 --- /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 9f6dc359f6fd9d1f30f1777941c95910e0fae156..8bbf776c47549e3d482776ac492b59756ea6c046 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 9e008359e8cbcd049b9b3f4cacdb8bcd262342c6..3db457761aacd650bf8b39ce3dacd797364947ae 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 d8100c5bcb1aad84c321b89d45937066ef1dc553..1869e5ba0f34461413182ebaa825f7b5307e9bb4 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 57f989d5cb5f4d64d3feaf0ba7e20b8b045c24f7..1d84af259ee3b7f67e55f59bcdbbf53b7b6e9b14 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 54588958e61431863f2123a02c5c4cd2212759f5..a17557b15077e747af5c6234d3f1bbcc1af0e002 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):