From c5570b6d5ed1035a6ecaea6c5b29ad64af16e79b Mon Sep 17 00:00:00 2001 From: Tomaae <23486452+tomaae@users.noreply.github.com> Date: Sun, 21 Aug 2022 22:27:49 +0200 Subject: [PATCH] added wifi information to interfaces --- .../mikrotik_router/mikrotik_controller.py | 54 +++++++++++++++++++ custom_components/mikrotik_router/switch.py | 6 +++ .../mikrotik_router/switch_types.py | 23 ++++++++ 3 files changed, 83 insertions(+) diff --git a/custom_components/mikrotik_router/mikrotik_controller.py b/custom_components/mikrotik_router/mikrotik_controller.py index 3faaa23..02a3c30 100644 --- a/custom_components/mikrotik_router/mikrotik_controller.py +++ b/custom_components/mikrotik_router/mikrotik_controller.py @@ -130,6 +130,7 @@ class MikrotikControllerData: "dhcp-network": {}, "dhcp": {}, "capsman_hosts": {}, + "wireless": {}, "wireless_hosts": {}, "host": {}, "host_hass": {}, @@ -632,6 +633,9 @@ class MikrotikControllerData: if self.api.connected() and self.support_capsman: await self.hass.async_add_executor_job(self.get_capsman_hosts) + if self.api.connected() and self.support_wireless: + await self.hass.async_add_executor_job(self.get_wireless) + if self.api.connected() and self.support_wireless: await self.hass.async_add_executor_job(self.get_wireless_hosts) @@ -1979,6 +1983,56 @@ class MikrotikControllerData: ], ) + # --------------------------- + # get_wireless + # --------------------------- + def get_wireless(self): + """Get wireless data from Mikrotik""" + wifimodule = "wifiwave2" if self.support_wifiwave2 else "wireless" + self.data["wireless"] = parse_api( + data=self.data["wireless"], + source=self.api.query(f"/interface/{wifimodule}"), + key="name", + vals=[ + {"name": "master-interface", "default": ""}, + {"name": "mac-address", "default": "unknown"}, + {"name": "ssid", "default": "unknown"}, + {"name": "mode", "default": "unknown"}, + {"name": "radio-name", "default": "unknown"}, + {"name": "interface-type", "default": "unknown"}, + {"name": "country", "default": "unknown"}, + {"name": "installation", "default": "unknown"}, + {"name": "antenna-gain", "default": "unknown"}, + {"name": "frequency", "default": "unknown"}, + {"name": "band", "default": "unknown"}, + {"name": "channel-width", "default": "unknown"}, + {"name": "secondary-frequency", "default": "unknown"}, + {"name": "wireless-protocol", "default": "unknown"}, + {"name": "rate-set", "default": "unknown"}, + {"name": "distance", "default": "unknown"}, + {"name": "tx-power-mode", "default": "unknown"}, + {"name": "vlan-id", "default": "unknown"}, + {"name": "wds-mode", "default": "unknown"}, + {"name": "wds-default-bridge", "default": "unknown"}, + {"name": "bridge-mode", "default": "unknown"}, + {"name": "hide-ssid", "type": "bool"}, + {"name": "running", "type": "bool"}, + {"name": "disabled", "type": "bool"}, + ], + ) + + for uid in self.data["wireless"]: + if self.data["wireless"][uid]["master-interface"]: + for tmp in self.data["wireless"][uid]: + if self.data["wireless"][uid][tmp] == "unknown": + self.data["wireless"][uid][tmp] = self.data["wireless"][ + self.data["wireless"][uid]["master-interface"] + ][tmp] + + if uid in self.data["interface"]: + for tmp in self.data["wireless"][uid]: + self.data["interface"][uid][tmp] = self.data["wireless"][uid][tmp] + # --------------------------- # get_wireless_hosts # --------------------------- diff --git a/custom_components/mikrotik_router/switch.py b/custom_components/mikrotik_router/switch.py index e799551..13e9c17 100644 --- a/custom_components/mikrotik_router/switch.py +++ b/custom_components/mikrotik_router/switch.py @@ -12,6 +12,7 @@ from .switch_types import ( SENSOR_SERVICES, DEVICE_ATTRIBUTES_IFACE_ETHER, DEVICE_ATTRIBUTES_IFACE_SFP, + DEVICE_ATTRIBUTES_IFACE_WIRELESS, ) _LOGGER = logging.getLogger(__name__) @@ -114,6 +115,11 @@ class MikrotikPortSwitch(MikrotikSwitch): if variable in self._data: attributes[format_attribute(variable)] = self._data[variable] + elif self._data["type"] == "wlan": + for variable in DEVICE_ATTRIBUTES_IFACE_WIRELESS: + if variable in self._data: + attributes[format_attribute(variable)] = self._data[variable] + return attributes @property diff --git a/custom_components/mikrotik_router/switch_types.py b/custom_components/mikrotik_router/switch_types.py index 75575a9..abfa781 100644 --- a/custom_components/mikrotik_router/switch_types.py +++ b/custom_components/mikrotik_router/switch_types.py @@ -56,6 +56,29 @@ DEVICE_ATTRIBUTES_IFACE_SFP = [ "eeprom-checksum", ] +DEVICE_ATTRIBUTES_IFACE_WIRELESS = [ + "ssid", + "mode", + "radio-name", + "interface-type", + "country", + "installation", + "antenna-gain", + "frequency", + "band", + "channel-width", + "secondary-frequency", + "wireless-protocol", + "rate-set", + "distance", + "tx-power-mode", + "vlan-id", + "wds-mode", + "wds-default-bridge", + "bridge-mode", + "hide-ssid", +] + DEVICE_ATTRIBUTES_NAT = [ "protocol", "dst-port",