1 """Support for Mikrotik routers as device tracker."""
3 from __future__
import annotations
8 DOMAIN
as DEVICE_TRACKER,
17 from .
import MikrotikConfigEntry
18 from .coordinator
import Device, MikrotikDataUpdateCoordinator
23 config_entry: MikrotikConfigEntry,
24 async_add_entities: AddEntitiesCallback,
26 """Set up device tracker for Mikrotik component."""
27 coordinator = config_entry.runtime_data
29 tracked: dict[str, MikrotikDataUpdateCoordinatorTracker] = {}
31 registry = er.async_get(hass)
34 for entity
in registry.entities.get_entries_for_config_entry_id(
37 if entity.domain == DEVICE_TRACKER:
39 entity.unique_id
in coordinator.api.devices
40 or entity.unique_id
not in coordinator.api.all_devices
43 coordinator.api.restore_device(entity.unique_id)
46 def update_hub() -> None:
47 """Update the status of the device."""
50 config_entry.async_on_unload(coordinator.async_add_listener(update_hub))
57 coordinator: MikrotikDataUpdateCoordinator,
58 async_add_entities: AddEntitiesCallback,
59 tracked: dict[str, MikrotikDataUpdateCoordinatorTracker],
61 """Update tracked device state from the hub."""
62 new_tracked: list[MikrotikDataUpdateCoordinatorTracker] = []
63 for mac, device
in coordinator.api.devices.items():
64 if mac
not in tracked:
66 new_tracked.append(tracked[mac])
72 CoordinatorEntity[MikrotikDataUpdateCoordinator], ScannerEntity
74 """Representation of network device."""
77 self, device: Device, coordinator: MikrotikDataUpdateCoordinator
79 """Initialize the tracked device."""
87 """Return true if the client is connected to the network."""
89 self.
devicedevice.last_seen
90 and (dt_util.utcnow() - self.
devicedevice.last_seen)
91 < self.coordinator.option_detection_time
98 """Return the hostname of the client."""
99 return self.
devicedevice.name
103 """Return the mac address of the client."""
104 return self.
devicedevice.mac
108 """Return the mac address of the client."""
109 return self.
devicedevice.ip_address
113 """Return the device state attributes."""
None __init__(self, Device device, MikrotikDataUpdateCoordinator coordinator)
dict[str, Any]|None extra_state_attributes(self)
str|None ip_address(self)
None async_setup_entry(HomeAssistant hass, MikrotikConfigEntry config_entry, AddEntitiesCallback async_add_entities)
None update_items(MikrotikDataUpdateCoordinator coordinator, AddEntitiesCallback async_add_entities, dict[str, MikrotikDataUpdateCoordinatorTracker] tracked)