mirror of
https://github.com/tomaae/homeassistant-mikrotik_router.git
synced 2025-07-13 10:54:33 +02:00
controller refactoring
This commit is contained in:
parent
795f4f6ab2
commit
6d394a06ef
1 changed files with 79 additions and 60 deletions
|
@ -126,6 +126,7 @@ class MikrotikControllerData():
|
||||||
await self.async_fwupdate_check()
|
await self.async_fwupdate_check()
|
||||||
|
|
||||||
await self.get_interface()
|
await self.get_interface()
|
||||||
|
await self.get_interface_traffic()
|
||||||
await self.get_interface_client()
|
await self.get_interface_client()
|
||||||
self.get_nat()
|
self.get_nat()
|
||||||
self.get_system_resource()
|
self.get_system_resource()
|
||||||
|
@ -190,20 +191,18 @@ class MikrotikControllerData():
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
await self.get_interface_traffic(interface_list)
|
|
||||||
return
|
return
|
||||||
|
|
||||||
# ---------------------------
|
# ---------------------------
|
||||||
# get_interface_traffic
|
# get_interface_traffic
|
||||||
# ---------------------------
|
# ---------------------------
|
||||||
async def get_interface_traffic(self, interface_list):
|
async def get_interface_traffic(self):
|
||||||
"""Get traffic for all interfaces from Mikrotik"""
|
"""Get traffic for all interfaces from Mikrotik"""
|
||||||
interface_list = ""
|
interface_list = ""
|
||||||
for uid in self.data['interface']:
|
for uid in self.data['interface']:
|
||||||
if interface_list:
|
interface_list += self.data['interface'][uid]['name'] + ","
|
||||||
interface_list += ","
|
|
||||||
|
|
||||||
interface_list += self.data['interface'][uid]['name']
|
interface_list = interface_list[:-1]
|
||||||
|
|
||||||
self.data['interface'] = await from_list(
|
self.data['interface'] = await from_list(
|
||||||
data=self.data['interface'],
|
data=self.data['interface'],
|
||||||
|
@ -330,7 +329,7 @@ class MikrotikControllerData():
|
||||||
uid = None
|
uid = None
|
||||||
for ifacename in self.data['interface']:
|
for ifacename in self.data['interface']:
|
||||||
if self.data['interface'][ifacename]['name'] == entry['interface']:
|
if self.data['interface'][ifacename]['name'] == entry['interface']:
|
||||||
uid = self.data['interface'][ifacename]['default-name']
|
uid = ifacename
|
||||||
break
|
break
|
||||||
|
|
||||||
return uid
|
return uid
|
||||||
|
@ -340,6 +339,26 @@ class MikrotikControllerData():
|
||||||
# ---------------------------
|
# ---------------------------
|
||||||
def get_nat(self):
|
def get_nat(self):
|
||||||
"""Get NAT data from Mikrotik"""
|
"""Get NAT data from Mikrotik"""
|
||||||
|
# self.data['nat'] = await from_list(
|
||||||
|
# data=self.data['nat'],
|
||||||
|
# source=await self.hass.async_add_executor_job(self.api.path, "/ip/firewall/nat"),
|
||||||
|
# key='.id',
|
||||||
|
# vals=[
|
||||||
|
# {'name': 'name', 'source': 'dst-port'},
|
||||||
|
# {'name': '.id'},
|
||||||
|
# {'name': 'protocol'},
|
||||||
|
# {'name': 'dst-port'},
|
||||||
|
# {'name': 'in-interface', 'default': 'any'},
|
||||||
|
# {'name': 'to-addresses'},
|
||||||
|
# {'name': 'to-ports'},
|
||||||
|
# {'name': 'comment'},
|
||||||
|
# {'name': 'enabled', 'source': 'disabled', 'type': 'bool', 'reverse': True}
|
||||||
|
# ],
|
||||||
|
# only=[
|
||||||
|
# {'key': 'action', 'value': 'dst-nat'}
|
||||||
|
# ]
|
||||||
|
# )
|
||||||
|
|
||||||
data = self.api.path("/ip/firewall/nat")
|
data = self.api.path("/ip/firewall/nat")
|
||||||
if not data:
|
if not data:
|
||||||
return
|
return
|
||||||
|
@ -369,16 +388,16 @@ class MikrotikControllerData():
|
||||||
# ---------------------------
|
# ---------------------------
|
||||||
def get_system_routerboard(self):
|
def get_system_routerboard(self):
|
||||||
"""Get routerboard data from Mikrotik"""
|
"""Get routerboard data from Mikrotik"""
|
||||||
data = self.api.path("/system/routerboard")
|
self.data['routerboard'] = await from_list(
|
||||||
if not data:
|
data=self.data['routerboard'],
|
||||||
return
|
source=await self.hass.async_add_executor_job(self.api.path, "/system/routerboard"),
|
||||||
|
vals=[
|
||||||
for entry in data:
|
{'name': 'routerboard', 'type': 'bool'},
|
||||||
self.data['routerboard']['routerboard'] = from_entry_bool(entry, 'routerboard')
|
{'name': 'model', 'default': 'unknown'},
|
||||||
self.data['routerboard']['model'] = from_entry(entry, 'model', 'unknown')
|
{'name': 'serial-number', 'default': 'unknown'},
|
||||||
self.data['routerboard']['serial-number'] = from_entry(entry, 'serial-number', 'unknown')
|
{'name': 'firmware', 'default': 'unknown'},
|
||||||
self.data['routerboard']['firmware'] = from_entry(entry, 'current-firmware', 'unknown')
|
]
|
||||||
|
)
|
||||||
return
|
return
|
||||||
|
|
||||||
# ---------------------------
|
# ---------------------------
|
||||||
|
@ -386,22 +405,29 @@ class MikrotikControllerData():
|
||||||
# ---------------------------
|
# ---------------------------
|
||||||
def get_system_resource(self):
|
def get_system_resource(self):
|
||||||
"""Get system resources data from Mikrotik"""
|
"""Get system resources data from Mikrotik"""
|
||||||
data = self.api.path("/system/resource")
|
self.data['resource'] = await from_list(
|
||||||
if not data:
|
data=self.data['resource'],
|
||||||
return
|
source=await self.hass.async_add_executor_job(self.api.path, "/system/resource"),
|
||||||
|
vals=[
|
||||||
|
{'name': 'platform', 'default': 'unknown'},
|
||||||
|
{'name': 'board-name', 'default': 'unknown'},
|
||||||
|
{'name': 'version', 'default': 'unknown'},
|
||||||
|
{'name': 'uptime', 'default': 'unknown'},
|
||||||
|
{'name': 'cpu-load', 'default': 'unknown'},
|
||||||
|
{'name': 'free-memory', 'default': 0},
|
||||||
|
{'name': 'total-memory', 'default': 0},
|
||||||
|
{'name': 'free-hdd-space', 'default': 0},
|
||||||
|
{'name': 'total-hdd-space', 'default': 0}
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
for entry in data:
|
for entry in data['resource']:
|
||||||
self.data['resource']['platform'] = from_entry(entry, 'platform', 'unknown')
|
if entry['total-memory'] > 0:
|
||||||
self.data['resource']['board-name'] = from_entry(entry, 'board-name', 'unknown')
|
|
||||||
self.data['resource']['version'] = from_entry(entry, 'version', 'unknown')
|
|
||||||
self.data['resource']['uptime'] = from_entry(entry, 'uptime', 'unknown')
|
|
||||||
self.data['resource']['cpu-load'] = from_entry(entry, 'cpu-load', 'unknown')
|
|
||||||
if 'free-memory' in entry and 'total-memory' in entry:
|
|
||||||
self.data['resource']['memory-usage'] = round(((entry['total-memory'] - entry['free-memory']) / entry['total-memory']) * 100)
|
self.data['resource']['memory-usage'] = round(((entry['total-memory'] - entry['free-memory']) / entry['total-memory']) * 100)
|
||||||
else:
|
else:
|
||||||
self.data['resource']['memory-usage'] = "unknown"
|
self.data['resource']['memory-usage'] = "unknown"
|
||||||
|
|
||||||
if 'free-hdd-space' in entry and 'total-hdd-space' in entry:
|
if entry['total-hdd-space'] > 0:
|
||||||
self.data['resource']['hdd-usage'] = round(((entry['total-hdd-space'] - entry['free-hdd-space']) / entry['total-hdd-space']) * 100)
|
self.data['resource']['hdd-usage'] = round(((entry['total-hdd-space'] - entry['free-hdd-space']) / entry['total-hdd-space']) * 100)
|
||||||
else:
|
else:
|
||||||
self.data['resource']['hdd-usage'] = "unknown"
|
self.data['resource']['hdd-usage'] = "unknown"
|
||||||
|
@ -413,18 +439,21 @@ class MikrotikControllerData():
|
||||||
# ---------------------------
|
# ---------------------------
|
||||||
def get_firmware_update(self):
|
def get_firmware_update(self):
|
||||||
"""Check for firmware update on Mikrotik"""
|
"""Check for firmware update on Mikrotik"""
|
||||||
data = self.api.path("/system/package/update")
|
self.data['fw-update'] = await from_list(
|
||||||
if not data:
|
data=self.data['fw-update'],
|
||||||
return
|
source=await self.hass.async_add_executor_job(self.api.path, "/system/package/update"),
|
||||||
|
vals=[
|
||||||
|
{'name': 'status'},
|
||||||
|
{'name': 'channel', 'default': 'unknown'},
|
||||||
|
{'name': 'installed-version', 'default': 'unknown'},
|
||||||
|
{'name': 'latest-version', 'default': 'unknown'}
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
for entry in data:
|
if status in self.data['fw-update']:
|
||||||
if 'status' in entry:
|
self.data['fw-update']['available'] = True if self.data['fw-update']['status'] == "New version is available" else False
|
||||||
self.data['fw-update']['available'] = True if entry['status'] == "New version is available" else False
|
else:
|
||||||
elif 'available' not in self.data['fw-update']:
|
|
||||||
self.data['fw-update']['available'] = False
|
self.data['fw-update']['available'] = False
|
||||||
self.data['fw-update']['channel'] = from_entry(entry, 'channel', 'unknown')
|
|
||||||
self.data['fw-update']['installed-version'] = from_entry(entry, 'installed-version', 'unknown')
|
|
||||||
self.data['fw-update']['latest-version'] = from_entry(entry, 'latest-version', 'unknown')
|
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
@ -433,24 +462,14 @@ class MikrotikControllerData():
|
||||||
# ---------------------------
|
# ---------------------------
|
||||||
def get_script(self):
|
def get_script(self):
|
||||||
"""Get list of all scripts from Mikrotik"""
|
"""Get list of all scripts from Mikrotik"""
|
||||||
data = self.api.path("/system/script")
|
self.data['script'] = await from_list(
|
||||||
if not data:
|
data=self.data['script'],
|
||||||
return
|
source=await self.hass.async_add_executor_job(self.api.path, "/system/script"),
|
||||||
|
key='name',
|
||||||
for entry in data:
|
vals=[
|
||||||
if 'name' not in entry:
|
{'name': 'name'},
|
||||||
continue
|
{'name': 'last-started', 'default': 'unknown'},
|
||||||
|
{'name': 'run-count', 'default': 'unknown'}
|
||||||
if not entry['name']:
|
]
|
||||||
_LOGGER.error("Mikrotik %s found a script without a name. It will not be available in UI.")
|
)
|
||||||
continue
|
|
||||||
|
|
||||||
uid = entry['name']
|
|
||||||
if uid not in self.data['script']:
|
|
||||||
self.data['script'][uid] = {}
|
|
||||||
|
|
||||||
self.data['script'][uid]['name'] = from_entry(entry, 'name')
|
|
||||||
self.data['script'][uid]['last-started'] = from_entry(entry, 'last-started', 'unknown')
|
|
||||||
self.data['script'][uid]['run-count'] = from_entry(entry, 'run-count', 'unknown')
|
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue