Fix for ros 7.13 wireless

This commit is contained in:
Robert Dunmire III 2023-12-08 10:30:15 -05:00
parent a61dfa5ff7
commit 1bbedfaa8b

View file

@ -284,13 +284,16 @@ class MikrotikCoordinator(DataUpdateCoordinator[None]):
self.host_tracking_initialized = False self.host_tracking_initialized = False
self.support_capsman = False self.support_capsman = False
self.support_wifi = False
self.support_wireless = False self.support_wireless = False
self.support_wifiwave2 = False self.support_wifiwave2 = False
self.support_ppp = False self.support_ppp = False
self.support_ups = False self.support_ups = False
self.support_gps = False self.support_gps = False
self._wifimodule = None
self.major_fw_version = 0 self.major_fw_version = 0
self.minor_fw_version = 0
self.async_mac_lookup = AsyncMacLookup() self.async_mac_lookup = AsyncMacLookup()
self.accessrights_reported = False self.accessrights_reported = False
@ -517,10 +520,37 @@ class MikrotikCoordinator(DataUpdateCoordinator[None]):
self.support_wireless = True self.support_wireless = True
if "wifiwave2" in packages and packages["wifiwave2"]["enabled"]: if "wifiwave2" in packages and packages["wifiwave2"]["enabled"]:
self.support_wifiwave2 = True self.support_wifiwave2 = True
self.support_wifi = False
self.support_capsman = False self.support_capsman = False
self._wifimodule = "wifiwave2"
elif "wifi" in packages and packages["wifi"]["enabled"]:
self.support_wifiwave2 = False
self.support_wifi = True
self.support_capsman = False
self._wifimodule = "wifi"
elif "wifi-qcom" in packages and packages["wifi-qcom"]["enabled"]:
self.support_wifiwave2 = False
self.support_wifi = True
self.support_capsman = False
self._wifimodule = "wifi"
elif "wifi-qcom-ac" in packages and packages["wifi-qcom-ac"]["enabled"]:
self.support_wifiwave2 = False
self.support_wifi = True
self.support_capsman = False
self._wifimodule = "wifi"
else: else:
self.support_wifiwave2 = False self.support_wifiwave2 = False
self.support_wifi = False
self.support_capsman = True self.support_capsman = True
_LOGGER.debug("Mikrotik %s wifi module=%s",
self.host,
self._wifimodule,
)
if "ups" in packages and packages["ups"]["enabled"]: if "ups" in packages and packages["ups"]["enabled"]:
self.support_ups = True self.support_ups = True
@ -1553,14 +1583,23 @@ class MikrotikCoordinator(DataUpdateCoordinator[None]):
if self.ds["fw-update"]["installed-version"] != "unknown": if self.ds["fw-update"]["installed-version"] != "unknown":
try: try:
self.major_fw_version = int( full_version = self.ds["fw-update"].get("installed-version")
self.ds["fw-update"].get("installed-version").split(".")[0] split_end = min(len(full_version),4)
version = re.sub("[^0-9\.]", "", full_version[0:split_end])
self.major_fw_version = int(version.split(".")[0])
self.minor_fw_version = int(version.split(".")[1])
_LOGGER.debug(
"Mikrotik %s FW version major=%s minor=%s (%s)",
self.host,
self.major_fw_version,
self.minor_fw_version,
full_version
) )
except Exception: except Exception:
_LOGGER.error( _LOGGER.error(
"Mikrotik %s unable to determine major FW version (%s).", "Mikrotik %s unable to determine major FW version (%s).",
self.host, self.host,
self.ds["fw-update"].get("installed-version"), full_version,
) )
# --------------------------- # ---------------------------
@ -1952,9 +1991,18 @@ class MikrotikCoordinator(DataUpdateCoordinator[None]):
# --------------------------- # ---------------------------
def get_capsman_hosts(self) -> None: def get_capsman_hosts(self) -> None:
"""Get CAPS-MAN hosts data from Mikrotik""" """Get CAPS-MAN hosts data from Mikrotik"""
if self.major_fw_version >= 7 and self.minor_fw_version > 12:
registration_path = "/interface/wifi/registration-table"
self._wifimodule = "wifi"
else:
registration_path= "/caps-man/registration-table"
self._wifimodule = "wireless"
self.ds["capsman_hosts"] = parse_api( self.ds["capsman_hosts"] = parse_api(
data={}, data={},
source=self.api.query("/caps-man/registration-table"), source=self.api.query(registration_path),
key="mac-address", key="mac-address",
vals=[ vals=[
{"name": "mac-address"}, {"name": "mac-address"},
@ -1968,10 +2016,10 @@ class MikrotikCoordinator(DataUpdateCoordinator[None]):
# --------------------------- # ---------------------------
def get_wireless(self) -> None: def get_wireless(self) -> None:
"""Get wireless data from Mikrotik""" """Get wireless data from Mikrotik"""
wifimodule = "wifiwave2" if self.support_wifiwave2 else "wireless"
self.ds["wireless"] = parse_api( self.ds["wireless"] = parse_api(
data=self.ds["wireless"], data=self.ds["wireless"],
source=self.api.query(f"/interface/{wifimodule}"), source=self.api.query(f"/interface/{self._wifimodule}"),
key="name", key="name",
vals=[ vals=[
{"name": "master-interface", "default": ""}, {"name": "master-interface", "default": ""},
@ -2018,10 +2066,9 @@ class MikrotikCoordinator(DataUpdateCoordinator[None]):
# --------------------------- # ---------------------------
def get_wireless_hosts(self) -> None: def get_wireless_hosts(self) -> None:
"""Get wireless hosts data from Mikrotik""" """Get wireless hosts data from Mikrotik"""
wifimodule = "wifiwave2" if self.support_wifiwave2 else "wireless"
self.ds["wireless_hosts"] = parse_api( self.ds["wireless_hosts"] = parse_api(
data={}, data={},
source=self.api.query(f"/interface/{wifimodule}/registration-table"), source=self.api.query(f"/interface/{self._wifimodule}/registration-table"),
key="mac-address", key="mac-address",
vals=[ vals=[
{"name": "mac-address"}, {"name": "mac-address"},