From 419315d9cf6741928b03a483df4835a307079df2 Mon Sep 17 00:00:00 2001 From: Joost Lekkerkerker Date: Mon, 18 Aug 2025 09:47:02 +0200 Subject: [PATCH] Clean up freebox entity (#150695) --- .../components/freebox/alarm_control_panel.py | 8 +++---- .../components/freebox/binary_sensor.py | 15 +++++------- homeassistant/components/freebox/camera.py | 2 +- homeassistant/components/freebox/entity.py | 23 +++---------------- homeassistant/components/freebox/sensor.py | 21 +++++++++-------- 5 files changed, 24 insertions(+), 45 deletions(-) diff --git a/homeassistant/components/freebox/alarm_control_panel.py b/homeassistant/components/freebox/alarm_control_panel.py index b0242a1b054..968f3dc16a6 100644 --- a/homeassistant/components/freebox/alarm_control_panel.py +++ b/homeassistant/components/freebox/alarm_control_panel.py @@ -36,7 +36,7 @@ async def async_setup_entry( async_add_entities( ( - FreeboxAlarm(hass, router, node) + FreeboxAlarm(router, node) for node in router.home_devices.values() if node["category"] == FreeboxHomeCategory.ALARM ), @@ -49,11 +49,9 @@ class FreeboxAlarm(FreeboxHomeEntity, AlarmControlPanelEntity): _attr_code_arm_required = False - def __init__( - self, hass: HomeAssistant, router: FreeboxRouter, node: dict[str, Any] - ) -> None: + def __init__(self, router: FreeboxRouter, node: dict[str, Any]) -> None: """Initialize an alarm.""" - super().__init__(hass, router, node) + super().__init__(router, node) # Commands self._command_trigger = self.get_command_id( diff --git a/homeassistant/components/freebox/binary_sensor.py b/homeassistant/components/freebox/binary_sensor.py index 75b7dded36a..3b262309361 100644 --- a/homeassistant/components/freebox/binary_sensor.py +++ b/homeassistant/components/freebox/binary_sensor.py @@ -50,12 +50,12 @@ async def async_setup_entry( for node in router.home_devices.values(): if node["category"] == FreeboxHomeCategory.PIR: - binary_entities.append(FreeboxPirSensor(hass, router, node)) + binary_entities.append(FreeboxPirSensor(router, node)) elif node["category"] == FreeboxHomeCategory.DWS: - binary_entities.append(FreeboxDwsSensor(hass, router, node)) + binary_entities.append(FreeboxDwsSensor(router, node)) binary_entities.extend( - FreeboxCoverSensor(hass, router, node) + FreeboxCoverSensor(router, node) for endpoint in node["show_endpoints"] if ( endpoint["name"] == "cover" @@ -74,13 +74,12 @@ class FreeboxHomeBinarySensor(FreeboxHomeEntity, BinarySensorEntity): def __init__( self, - hass: HomeAssistant, router: FreeboxRouter, node: dict[str, Any], sub_node: dict[str, Any] | None = None, ) -> None: """Initialize a Freebox binary sensor.""" - super().__init__(hass, router, node, sub_node) + super().__init__(router, node, sub_node) self._command_id = self.get_command_id( node["type"]["endpoints"], "signal", self._sensor_name ) @@ -123,9 +122,7 @@ class FreeboxCoverSensor(FreeboxHomeBinarySensor): _sensor_name = "cover" - def __init__( - self, hass: HomeAssistant, router: FreeboxRouter, node: dict[str, Any] - ) -> None: + def __init__(self, router: FreeboxRouter, node: dict[str, Any]) -> None: """Initialize a cover for another device.""" cover_node = next( filter( @@ -134,7 +131,7 @@ class FreeboxCoverSensor(FreeboxHomeBinarySensor): ), None, ) - super().__init__(hass, router, node, cover_node) + super().__init__(router, node, cover_node) class FreeboxRaidDegradedSensor(BinarySensorEntity): diff --git a/homeassistant/components/freebox/camera.py b/homeassistant/components/freebox/camera.py index d997908dd06..f7e078f0736 100644 --- a/homeassistant/components/freebox/camera.py +++ b/homeassistant/components/freebox/camera.py @@ -74,7 +74,7 @@ class FreeboxCamera(FreeboxHomeEntity, FFmpegCamera): ) -> None: """Initialize a camera.""" - super().__init__(hass, router, node) + super().__init__(router, node) device_info = { CONF_NAME: node["label"].strip(), CONF_INPUT: node["props"]["Stream"], diff --git a/homeassistant/components/freebox/entity.py b/homeassistant/components/freebox/entity.py index 129186fd50b..17cd30f40ea 100644 --- a/homeassistant/components/freebox/entity.py +++ b/homeassistant/components/freebox/entity.py @@ -2,11 +2,9 @@ from __future__ import annotations -from collections.abc import Callable import logging from typing import Any -from homeassistant.core import HomeAssistant from homeassistant.helpers.device_registry import DeviceInfo from homeassistant.helpers.dispatcher import async_dispatcher_connect from homeassistant.helpers.entity import Entity @@ -22,13 +20,11 @@ class FreeboxHomeEntity(Entity): def __init__( self, - hass: HomeAssistant, router: FreeboxRouter, node: dict[str, Any], sub_node: dict[str, Any] | None = None, ) -> None: """Initialize a Freebox Home entity.""" - self._hass = hass self._router = router self._node = node self._sub_node = sub_node @@ -44,7 +40,6 @@ class FreeboxHomeEntity(Entity): self._available = True self._firmware = node["props"].get("FwVersion") self._manufacturer = "Freebox SAS" - self._remove_signal_update: Callable[[], None] | None = None self._model = CATEGORY_TO_MODEL.get(node["category"]) if self._model is None: @@ -61,10 +56,7 @@ class FreeboxHomeEntity(Entity): model=self._model, name=self._device_name, sw_version=self._firmware, - via_device=( - DOMAIN, - router.mac, - ), + via_device=(DOMAIN, router.mac), ) async def async_update_signal(self) -> None: @@ -116,23 +108,14 @@ class FreeboxHomeEntity(Entity): async def async_added_to_hass(self) -> None: """Register state update callback.""" - self.remove_signal_update( + self.async_on_remove( async_dispatcher_connect( - self._hass, + self.hass, self._router.signal_home_device_update, self.async_update_signal, ) ) - async def async_will_remove_from_hass(self) -> None: - """When entity will be removed from hass.""" - if self._remove_signal_update is not None: - self._remove_signal_update() - - def remove_signal_update(self, dispatcher: Callable[[], None]) -> None: - """Register state update callback.""" - self._remove_signal_update = dispatcher - def get_value(self, ep_type: str, name: str): """Get the value.""" node = next( diff --git a/homeassistant/components/freebox/sensor.py b/homeassistant/components/freebox/sensor.py index 45fe18db95a..53314549f57 100644 --- a/homeassistant/components/freebox/sensor.py +++ b/homeassistant/components/freebox/sensor.py @@ -68,7 +68,6 @@ async def async_setup_entry( ) -> None: """Set up the sensors.""" router = entry.runtime_data - entities: list[SensorEntity] = [] _LOGGER.debug( "%s - %s - %s temperature sensors", @@ -76,7 +75,7 @@ async def async_setup_entry( router.mac, len(router.sensors_temperature), ) - entities = [ + entities: list[SensorEntity] = [ FreeboxSensor( router, SensorEntityDescription( @@ -105,14 +104,16 @@ async def async_setup_entry( for description in DISK_PARTITION_SENSORS ) - for node in router.home_devices.values(): - for endpoint in node["show_endpoints"]: - if ( - endpoint["name"] == "battery" - and endpoint["ep_type"] == "signal" - and endpoint.get("value") is not None - ): - entities.append(FreeboxBatterySensor(hass, router, node, endpoint)) + entities.extend( + FreeboxBatterySensor(router, node, endpoint) + for node in router.home_devices.values() + for endpoint in node["show_endpoints"] + if ( + endpoint["name"] == "battery" + and endpoint["ep_type"] == "signal" + and endpoint.get("value") is not None + ) + ) if entities: async_add_entities(entities, True)