Detect firmware upgrade on routeros reboot, Fixes #167

This commit is contained in:
Tomaae 2022-02-18 10:42:10 +01:00
parent 63740bb6a4
commit 73d1bc29ac

View file

@ -461,15 +461,15 @@ class MikrotikControllerData:
await self.hass.async_add_executor_job(self.get_firmware_update) await self.hass.async_add_executor_job(self.get_firmware_update)
if self.api.connected():
await self.hass.async_add_executor_job(self.get_system_resource)
if self.api.connected(): if self.api.connected():
await self.hass.async_add_executor_job(self.get_capabilities) await self.hass.async_add_executor_job(self.get_capabilities)
if self.api.connected(): if self.api.connected():
await self.hass.async_add_executor_job(self.get_system_routerboard) await self.hass.async_add_executor_job(self.get_system_routerboard)
if self.api.connected():
await self.hass.async_add_executor_job(self.get_system_resource)
if self.api.connected() and self.option_sensor_scripts: if self.api.connected() and self.option_sensor_scripts:
await self.hass.async_add_executor_job(self.get_script) await self.hass.async_add_executor_job(self.get_script)
@ -576,11 +576,18 @@ class MikrotikControllerData:
except: except:
return return
await self.hass.async_add_executor_job(self.get_interface)
if self.api.connected() and "available" not in self.data["fw-update"]: if self.api.connected() and "available" not in self.data["fw-update"]:
await self.async_fwupdate_check() await self.async_fwupdate_check()
if self.api.connected():
await self.hass.async_add_executor_job(self.get_system_resource)
if self.api.connected():
await self.hass.async_add_executor_job(self.get_system_health)
if self.api.connected():
await self.hass.async_add_executor_job(self.get_interface)
if self.api.connected() and not self.data["host_hass"]: if self.api.connected() and not self.data["host_hass"]:
await self.async_get_host_hass() await self.async_get_host_hass()
@ -623,9 +630,6 @@ class MikrotikControllerData:
if self.api.connected() and self.support_ppp and self.option_sensor_ppp: if self.api.connected() and self.support_ppp and self.option_sensor_ppp:
await self.hass.async_add_executor_job(self.get_ppp) await self.hass.async_add_executor_job(self.get_ppp)
if self.api.connected():
await self.hass.async_add_executor_job(self.get_system_resource)
if self.api.connected() and self.option_sensor_client_traffic: if self.api.connected() and self.option_sensor_client_traffic:
if 0 < self.major_fw_version < 7: if 0 < self.major_fw_version < 7:
await self.hass.async_add_executor_job(self.process_accounting) await self.hass.async_add_executor_job(self.process_accounting)
@ -638,9 +642,6 @@ class MikrotikControllerData:
if self.api.connected() and self.option_sensor_environment: if self.api.connected() and self.option_sensor_environment:
await self.hass.async_add_executor_job(self.get_environment) await self.hass.async_add_executor_job(self.get_environment)
if self.api.connected():
await self.hass.async_add_executor_job(self.get_system_health)
async_dispatcher_send(self.hass, self.signal_update) async_dispatcher_send(self.hass, self.signal_update)
self.lock.release() self.lock.release()
@ -1269,6 +1270,10 @@ class MikrotikControllerData:
# --------------------------- # ---------------------------
def get_system_resource(self): def get_system_resource(self):
"""Get system resources data from Mikrotik""" """Get system resources data from Mikrotik"""
tmp_rebootcheck = 0
if "uptime_epoch" in self.data["resource"]:
tmp_rebootcheck = self.data["resource"]["uptime_epoch"]
self.data["resource"] = parse_api( self.data["resource"] = parse_api(
data=self.data["resource"], data=self.data["resource"],
source=self.api.path("/system/resource"), source=self.api.path("/system/resource"),
@ -1285,6 +1290,7 @@ class MikrotikControllerData:
], ],
ensure_vals=[ ensure_vals=[
{"name": "uptime", "default": 0}, {"name": "uptime", "default": 0},
{"name": "uptime_epoch", "default": 0},
], ],
) )
@ -1305,6 +1311,7 @@ class MikrotikControllerData:
if len(tmp) > 1: if len(tmp) > 1:
tmp_uptime += int(tmp[1]) * 604800 tmp_uptime += int(tmp[1]) * 604800
self.data["resource"]["uptime_epoch"] = tmp_uptime
now = datetime.now().replace(microsecond=0) now = datetime.now().replace(microsecond=0)
uptime_tm = datetime.timestamp(now - timedelta(seconds=tmp_uptime)) uptime_tm = datetime.timestamp(now - timedelta(seconds=tmp_uptime))
update_uptime = False update_uptime = False
@ -1350,6 +1357,10 @@ class MikrotikControllerData:
else: else:
self.data["resource"]["hdd-usage"] = "unknown" self.data["resource"]["hdd-usage"] = "unknown"
if "uptime_epoch" in self.data["resource"]:
if 0 < tmp_rebootcheck < self.data["resource"]["uptime_epoch"]:
self.get_firmware_update()
# --------------------------- # ---------------------------
# get_firmware_update # get_firmware_update
# --------------------------- # ---------------------------