Initial Commit
This commit is contained in:
@@ -0,0 +1,118 @@
|
||||
"""AsusRouter AiMesh module."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from collections.abc import Callable
|
||||
from typing import Any
|
||||
|
||||
from asusrouter.modules.aimesh import AiMeshDevice
|
||||
from homeassistant.core import callback
|
||||
from homeassistant.helpers.device_registry import format_mac
|
||||
|
||||
|
||||
class AiMeshNode:
|
||||
"""Representation of an AiMesh node."""
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
mac: str,
|
||||
) -> None:
|
||||
"""Initialize an AiMesh node."""
|
||||
|
||||
self._mac: str = mac
|
||||
self.native = AiMeshDevice()
|
||||
self.identity: dict[str, Any] = {
|
||||
"mac": None,
|
||||
"ip": None,
|
||||
"alias": None,
|
||||
"model": None,
|
||||
"type": None,
|
||||
"connected": None,
|
||||
}
|
||||
self._extra_state_attributes: dict[str, Any] = {}
|
||||
|
||||
@callback
|
||||
def update(
|
||||
self,
|
||||
node_info: AiMeshDevice | None = None,
|
||||
event_call: Callable[[str, dict[str, Any] | None], None] | None = None,
|
||||
) -> None:
|
||||
"""Update AiMesh device."""
|
||||
|
||||
if node_info:
|
||||
self.native = node_info
|
||||
self._mac = self._extra_state_attributes["mac"] = self.identity[
|
||||
"mac"
|
||||
] = format_mac(node_info.mac)
|
||||
# Online
|
||||
if node_info.status:
|
||||
# State: router / node
|
||||
self._extra_state_attributes["type"] = self.identity[
|
||||
"type"
|
||||
] = node_info.type
|
||||
# IP
|
||||
self._extra_state_attributes["ip"] = self.identity["ip"] = (
|
||||
node_info.ip
|
||||
)
|
||||
# Alias
|
||||
self._extra_state_attributes["alias"] = self.identity[
|
||||
"alias"
|
||||
] = node_info.alias
|
||||
# Model
|
||||
self._extra_state_attributes["model"] = self.identity[
|
||||
"model"
|
||||
] = node_info.model
|
||||
# Product ID
|
||||
self._extra_state_attributes["product_id"] = (
|
||||
node_info.product_id
|
||||
)
|
||||
# Node level
|
||||
self._extra_state_attributes["level"] = node_info.level
|
||||
# Node parent
|
||||
if node_info.parent == {}:
|
||||
self._extra_state_attributes["parent"] = {
|
||||
"connection": "wired",
|
||||
}
|
||||
else:
|
||||
self._extra_state_attributes["parent"] = node_info.parent
|
||||
# Node config
|
||||
# self._extra_state_attributes[CONFIG] = node_info.config
|
||||
# Access point
|
||||
# self._extra_state_attributes[ACCESS_POINT] = node_info.ap
|
||||
# Notify reconnect
|
||||
if self.identity["connected"] is False and callable(
|
||||
event_call
|
||||
):
|
||||
event_call(
|
||||
"node_reconnected",
|
||||
self.identity,
|
||||
)
|
||||
# Connection status
|
||||
self.identity["connected"] = True
|
||||
else:
|
||||
# Notify disconnect
|
||||
if self.identity["connected"] is True and callable(event_call):
|
||||
event_call(
|
||||
"node_disconnected",
|
||||
self.identity,
|
||||
)
|
||||
# Connection status
|
||||
self.identity["connected"] = False
|
||||
elif callable(event_call):
|
||||
# Notify disconnect
|
||||
event_call(
|
||||
"node_disconnected",
|
||||
self.identity,
|
||||
)
|
||||
|
||||
@property
|
||||
def mac(self):
|
||||
"""Return node mac address."""
|
||||
|
||||
return self._mac
|
||||
|
||||
@property
|
||||
def extra_state_attributes(self):
|
||||
"""Return extra state attributes."""
|
||||
|
||||
return self._extra_state_attributes
|
||||
Reference in New Issue
Block a user