1 """Support for Freebox devices (Freebox v6 and Freebox mini 4K)."""
3 from __future__
import annotations
5 from datetime
import datetime
14 from .const
import DEFAULT_DEVICE_NAME, DEVICE_ICONS, DOMAIN
15 from .router
import FreeboxRouter
19 hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
21 """Set up device tracker for Freebox component."""
22 router: FreeboxRouter = hass.data[DOMAIN][entry.unique_id]
23 tracked: set[str] = set()
26 def update_router() -> None:
27 """Update the values of the router."""
30 entry.async_on_unload(
39 router: FreeboxRouter, async_add_entities: AddEntitiesCallback, tracked: set[str]
41 """Add new tracker entities from the router."""
44 for mac, device
in router.devices.items():
55 """Representation of a Freebox device."""
57 _attr_should_poll =
False
59 def __init__(self, router: FreeboxRouter, device: dict[str, Any]) ->
None:
60 """Initialize a Freebox device."""
62 self.
_name_name = device[
"primary_name"].strip()
or DEFAULT_DEVICE_NAME
63 self.
_mac_mac = device[
"l2ident"][
"id"]
71 """Update the Freebox device."""
73 self.
_active_active = device[
"active"]
74 if device.get(
"attrs")
is None:
77 "last_time_reachable": datetime.fromtimestamp(
78 device[
"last_time_reachable"]
80 "last_time_activity": datetime.fromtimestamp(device[
"last_activity"]),
88 """Return a unique ID."""
93 """Return the name."""
94 return self.
_name_name
98 """Return true if the device is connected to the network."""
105 self.async_write_ha_state()
108 """Register state update callback."""
110 self.async_on_remove(
113 self.
_router_router.signal_device_update,
120 """Return a device icon from its type."""
121 return DEVICE_ICONS.get(device[
"host_type"],
"mdi:help-network")
None async_update_state(self)
None __init__(self, FreeboxRouter router, dict[str, Any] device)
_attr_extra_state_attributes
None async_on_demand_update(self)
None async_added_to_hass(self)
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)
None add_entities(FreeboxRouter router, AddEntitiesCallback async_add_entities, set[str] tracked)
str icon_for_freebox_device(dict[str, Any] device)
Callable[[], None] async_dispatcher_connect(HomeAssistant hass, str signal, Callable[..., Any] target)