Clean up freebox entity (#150695)

This commit is contained in:
Joost Lekkerkerker
2025-08-18 09:47:02 +02:00
committed by GitHub
parent 9138930cb9
commit 419315d9cf
5 changed files with 24 additions and 45 deletions

View File

@@ -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(

View File

@@ -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):

View File

@@ -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"],

View File

@@ -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(

View File

@@ -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"]:
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
):
entities.append(FreeboxBatterySensor(hass, router, node, endpoint))
)
)
if entities:
async_add_entities(entities, True)