From 4801dcaded8d39cd2bdd533da928071ef81fcd61 Mon Sep 17 00:00:00 2001 From: Tom Matheussen <13683094+Tommatheussen@users.noreply.github.com> Date: Thu, 12 Feb 2026 22:29:59 +0100 Subject: [PATCH] Add parent device for Satel Integra (#160933) Co-authored-by: Joost Lekkerkerker --- .../components/satel_integra/__init__.py | 13 +++++++- .../components/satel_integra/entity.py | 4 ++- .../snapshots/test_alarm_control_panel.ambr | 2 +- .../snapshots/test_binary_sensor.ambr | 4 +-- .../satel_integra/snapshots/test_init.ambr | 31 +++++++++++++++++++ .../satel_integra/snapshots/test_switch.ambr | 2 +- tests/components/satel_integra/test_init.py | 18 +++++++++++ 7 files changed, 68 insertions(+), 6 deletions(-) diff --git a/homeassistant/components/satel_integra/__init__.py b/homeassistant/components/satel_integra/__init__.py index 914a663d8ac..c2fcb6fe62c 100644 --- a/homeassistant/components/satel_integra/__init__.py +++ b/homeassistant/components/satel_integra/__init__.py @@ -17,7 +17,11 @@ from homeassistant.const import ( from homeassistant.core import DOMAIN as HOMEASSISTANT_DOMAIN, HomeAssistant, callback from homeassistant.data_entry_flow import FlowResultType from homeassistant.exceptions import ConfigEntryNotReady -from homeassistant.helpers import config_validation as cv, issue_registry as ir +from homeassistant.helpers import ( + config_validation as cv, + device_registry as dr, + issue_registry as ir, +) from homeassistant.helpers.dispatcher import async_dispatcher_send from homeassistant.helpers.entity_registry import RegistryEntry, async_migrate_entries from homeassistant.helpers.typing import ConfigType @@ -201,6 +205,13 @@ async def async_setup_entry(hass: HomeAssistant, entry: SatelConfigEntry) -> boo entry.async_on_unload(entry.add_update_listener(update_listener)) entry.async_on_unload(hass.bus.async_listen_once(EVENT_HOMEASSISTANT_STOP, _close)) + device_registry = dr.async_get(hass) + device_registry.async_get_or_create( + config_entry_id=entry.entry_id, + identifiers={(DOMAIN, entry.entry_id)}, + manufacturer="Satel", + ) + await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS) @callback diff --git a/homeassistant/components/satel_integra/entity.py b/homeassistant/components/satel_integra/entity.py index 0d333c82946..0d18e634892 100644 --- a/homeassistant/components/satel_integra/entity.py +++ b/homeassistant/components/satel_integra/entity.py @@ -54,5 +54,7 @@ class SatelIntegraEntity(Entity): self._attr_unique_id = f"{config_entry_id}_{entity_type}_{device_number}" self._attr_device_info = DeviceInfo( - name=subentry.data[CONF_NAME], identifiers={(DOMAIN, self._attr_unique_id)} + name=subentry.data[CONF_NAME], + identifiers={(DOMAIN, self._attr_unique_id)}, + via_device=(DOMAIN, config_entry_id), ) diff --git a/tests/components/satel_integra/snapshots/test_alarm_control_panel.ambr b/tests/components/satel_integra/snapshots/test_alarm_control_panel.ambr index ed9f9efa702..8ed5f006906 100644 --- a/tests/components/satel_integra/snapshots/test_alarm_control_panel.ambr +++ b/tests/components/satel_integra/snapshots/test_alarm_control_panel.ambr @@ -80,6 +80,6 @@ 'primary_config_entry': , 'serial_number': None, 'sw_version': None, - 'via_device_id': None, + 'via_device_id': , }) # --- diff --git a/tests/components/satel_integra/snapshots/test_binary_sensor.ambr b/tests/components/satel_integra/snapshots/test_binary_sensor.ambr index f3cef5fb5b0..068e328f329 100644 --- a/tests/components/satel_integra/snapshots/test_binary_sensor.ambr +++ b/tests/components/satel_integra/snapshots/test_binary_sensor.ambr @@ -127,7 +127,7 @@ 'primary_config_entry': , 'serial_number': None, 'sw_version': None, - 'via_device_id': None, + 'via_device_id': , }) # --- # name: test_binary_sensors[device-zone] @@ -158,6 +158,6 @@ 'primary_config_entry': , 'serial_number': None, 'sw_version': None, - 'via_device_id': None, + 'via_device_id': , }) # --- diff --git a/tests/components/satel_integra/snapshots/test_init.ambr b/tests/components/satel_integra/snapshots/test_init.ambr index e2cac092a1f..15d0de84cf9 100644 --- a/tests/components/satel_integra/snapshots/test_init.ambr +++ b/tests/components/satel_integra/snapshots/test_init.ambr @@ -50,6 +50,37 @@ 'unique_id': 'switchable_output_1', }) # --- +# name: test_parent_device_exists[parent-device] + DeviceRegistryEntrySnapshot({ + 'area_id': None, + 'config_entries': , + 'config_entries_subentries': , + 'configuration_url': None, + 'connections': set({ + }), + 'disabled_by': None, + 'entry_type': None, + 'hw_version': None, + 'id': , + 'identifiers': set({ + tuple( + 'satel_integra', + '1234567890', + ), + }), + 'labels': set({ + }), + 'manufacturer': 'Satel', + 'model': None, + 'model_id': None, + 'name': '192.168.0.2', + 'name_by_user': None, + 'primary_config_entry': , + 'serial_number': None, + 'sw_version': None, + 'via_device_id': None, + }) +# --- # name: test_unique_id_migration_from_single_config[alarm_control_panel-satel_alarm_panel_1-1234567890_alarm_panel_1] EntityRegistryEntrySnapshot({ 'aliases': set({ diff --git a/tests/components/satel_integra/snapshots/test_switch.ambr b/tests/components/satel_integra/snapshots/test_switch.ambr index b716650f5bb..f2c1ccf9181 100644 --- a/tests/components/satel_integra/snapshots/test_switch.ambr +++ b/tests/components/satel_integra/snapshots/test_switch.ambr @@ -27,7 +27,7 @@ 'primary_config_entry': , 'serial_number': None, 'sw_version': None, - 'via_device_id': None, + 'via_device_id': , }) # --- # name: test_switches[switch.switchable_output-entry] diff --git a/tests/components/satel_integra/test_init.py b/tests/components/satel_integra/test_init.py index 0d38507857c..66fe8945874 100644 --- a/tests/components/satel_integra/test_init.py +++ b/tests/components/satel_integra/test_init.py @@ -12,6 +12,7 @@ from homeassistant.components.satel_integra.const import DOMAIN from homeassistant.components.switch import DOMAIN as SWITCH_DOMAIN from homeassistant.config_entries import ConfigSubentry from homeassistant.core import HomeAssistant +from homeassistant.helpers.device_registry import DeviceRegistry from homeassistant.helpers.entity_registry import EntityRegistry from . import ( @@ -120,3 +121,20 @@ async def test_unique_id_migration_from_single_config( assert entity.unique_id == new_id assert entity == snapshot + + +async def test_parent_device_exists( + hass: HomeAssistant, + snapshot: SnapshotAssertion, + mock_satel: AsyncMock, + device_registry: DeviceRegistry, + mock_config_entry: MockConfigEntry, +) -> None: + """Test that a parent device is created for the alarm panel.""" + + await setup_integration(hass, mock_config_entry) + + device_entry = device_registry.async_get_device( + identifiers={(DOMAIN, MOCK_ENTRY_ID)} + ) + assert device_entry == snapshot(name="parent-device")