feat: netwatch binary sensor

This commit is contained in:
Andrey Chalkin 2023-10-11 19:08:25 +02:00
parent 2cdd645274
commit 13e765c10a
No known key found for this signature in database
GPG key ID: 4564F1942FA13A00
9 changed files with 95 additions and 1 deletions

View file

@ -59,7 +59,7 @@ from .const import (
CONF_SENSOR_SCRIPTS,
DEFAULT_SENSOR_SCRIPTS,
CONF_SENSOR_ENVIRONMENT,
DEFAULT_SENSOR_ENVIRONMENT,
DEFAULT_SENSOR_ENVIRONMENT, CONF_SENSOR_NETWATCH_TRACKER, DEFAULT_SENSOR_NETWATCH_TRACKER,
)
from .exceptions import ApiEntryNotFound
from .apiparser import parse_api
@ -258,6 +258,7 @@ class MikrotikCoordinator(DataUpdateCoordinator[None]):
"environment": {},
"ups": {},
"gps": {},
"netwatch": {}
}
self.notified_flags = []
@ -386,6 +387,14 @@ class MikrotikCoordinator(DataUpdateCoordinator[None]):
CONF_SENSOR_KIDCONTROL, DEFAULT_SENSOR_KIDCONTROL
)
# ---------------------------
# option_sensor_netwatch
# ---------------------------
@property
def option_sensor_netwatch(self):
"""Config entry option to not track ARP."""
return self.config_entry.options.get(CONF_SENSOR_NETWATCH_TRACKER, DEFAULT_SENSOR_NETWATCH_TRACKER)
# ---------------------------
# option_sensor_ppp
# ---------------------------
@ -627,6 +636,9 @@ class MikrotikCoordinator(DataUpdateCoordinator[None]):
if self.api.connected() and self.option_sensor_filter:
await self.hass.async_add_executor_job(self.get_filter)
if self.api.connected() and self.option_sensor_netwatch:
await self.hass.async_add_executor_job(self.get_netwatch)
if self.api.connected() and self.support_ppp and self.option_sensor_ppp:
await self.hass.async_add_executor_job(self.get_ppp)
@ -1310,6 +1322,32 @@ class MikrotikCoordinator(DataUpdateCoordinator[None]):
self.ds["ppp_secret"][uid]["address"] = "not connected"
self.ds["ppp_secret"][uid]["encoding"] = "not connected"
# ---------------------------
# get_netwatch
# ---------------------------
def get_netwatch(self) -> None:
"""Get netwatch data from Mikrotik"""
self.ds["netwatch"] = parse_api(
data=self.ds["netwatch"],
source=self.api.query("/tool/netwatch"),
key="host",
vals=[
{"name": "host"},
{"name": "type"},
{"name": "interval"},
{"name": "port"},
{"name": "http-codes"},
{"name": "status", "type": "bool", "default": "unknown"},
{"name": "comment"},
{
"name": "enabled",
"source": "disabled",
"type": "bool",
"reverse": True,
},
],
)
# ---------------------------
# get_system_routerboard
# ---------------------------