Fix mikrotik detecting capsman support (#31819)

* fix detecting capsman support

* fix isort

* moved support_capsman to update_devices()

* moved support-checks to setup method

* moved setup method to get_hub_details

* implement suggestion for device lists

* fix black formatting

* remove not needed variable wireless_devices

* fix usage of force_dhcp to seperate wireless devs

* fix black fmt
pull/31911/head
Marco 2020-02-16 09:49:13 +01:00 committed by GitHub
parent a6eb776768
commit 20d7c84b22
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 16 additions and 12 deletions

View File

@ -24,6 +24,7 @@ CAPSMAN = "capsman"
DHCP = "dhcp" DHCP = "dhcp"
WIRELESS = "wireless" WIRELESS = "wireless"
IS_WIRELESS = "is_wireless" IS_WIRELESS = "is_wireless"
IS_CAPSMAN = "is_capsman"
MIKROTIK_SERVICES = { MIKROTIK_SERVICES = {
ARP: "/ip/arp/getall", ARP: "/ip/arp/getall",
@ -33,6 +34,7 @@ MIKROTIK_SERVICES = {
INFO: "/system/routerboard/getall", INFO: "/system/routerboard/getall",
WIRELESS: "/interface/wireless/registration-table/getall", WIRELESS: "/interface/wireless/registration-table/getall",
IS_WIRELESS: "/interface/wireless/print", IS_WIRELESS: "/interface/wireless/print",
IS_CAPSMAN: "/caps-man/interface/print",
} }
ATTR_DEVICE_TRACKER = [ ATTR_DEVICE_TRACKER = [

View File

@ -27,6 +27,7 @@ from .const import (
DHCP, DHCP,
IDENTITY, IDENTITY,
INFO, INFO,
IS_CAPSMAN,
IS_WIRELESS, IS_WIRELESS,
MIKROTIK_SERVICES, MIKROTIK_SERVICES,
NAME, NAME,
@ -95,7 +96,8 @@ class MikrotikData:
self.all_devices = {} self.all_devices = {}
self.devices = {} self.devices = {}
self.available = True self.available = True
self.support_wireless = bool(self.command(MIKROTIK_SERVICES[IS_WIRELESS])) self.support_capsman = False
self.support_wireless = False
self.hostname = None self.hostname = None
self.model = None self.model = None
self.firmware = None self.firmware = None
@ -135,6 +137,8 @@ class MikrotikData:
self.model = self.get_info(ATTR_MODEL) self.model = self.get_info(ATTR_MODEL)
self.firmware = self.get_info(ATTR_FIRMWARE) self.firmware = self.get_info(ATTR_FIRMWARE)
self.serial_number = self.get_info(ATTR_SERIAL_NUMBER) self.serial_number = self.get_info(ATTR_SERIAL_NUMBER)
self.support_capsman = bool(self.command(MIKROTIK_SERVICES[IS_CAPSMAN]))
self.support_wireless = bool(self.command(MIKROTIK_SERVICES[IS_WIRELESS]))
def connect_to_hub(self): def connect_to_hub(self):
"""Connect to hub.""" """Connect to hub."""
@ -158,25 +162,23 @@ class MikrotikData:
def update_devices(self): def update_devices(self):
"""Get list of devices with latest status.""" """Get list of devices with latest status."""
arp_devices = {} arp_devices = {}
wireless_devices = {}
device_list = {} device_list = {}
wireless_devices = {}
try: try:
self.all_devices = self.get_list_from_interface(DHCP) self.all_devices = self.get_list_from_interface(DHCP)
if self.support_wireless: if self.support_capsman:
_LOGGER.debug("wireless is supported") _LOGGER.debug("Hub is a CAPSman manager")
for interface in [CAPSMAN, WIRELESS]: device_list = wireless_devices = self.get_list_from_interface(CAPSMAN)
wireless_devices = self.get_list_from_interface(interface) elif self.support_wireless:
if wireless_devices: _LOGGER.debug("Hub supports wireless Interface")
_LOGGER.debug("Scanning wireless devices using %s", interface) device_list = wireless_devices = self.get_list_from_interface(WIRELESS)
break
if self.support_wireless and not self.force_dhcp: if not device_list or self.force_dhcp:
device_list = wireless_devices
else:
device_list = self.all_devices device_list = self.all_devices
_LOGGER.debug("Falling back to DHCP for scanning devices") _LOGGER.debug("Falling back to DHCP for scanning devices")
if self.arp_enabled: if self.arp_enabled:
_LOGGER.debug("Using arp-ping to check devices")
arp_devices = self.get_list_from_interface(ARP) arp_devices = self.get_list_from_interface(ARP)
# get new hub firmware version if updated # get new hub firmware version if updated