added GPS support #196

This commit is contained in:
Tomaae 2022-06-28 21:57:24 +02:00
parent f1c7cea7c4
commit 3ee517463b
No known key found for this signature in database
GPG key ID: 8360BBD8A381D1C0
2 changed files with 81 additions and 1 deletions

View file

@ -136,6 +136,7 @@ class MikrotikControllerData:
"client_traffic": {}, "client_traffic": {},
"environment": {}, "environment": {},
"ups": {}, "ups": {},
"gps": {},
} }
self.notified_flags = [] self.notified_flags = []
@ -175,6 +176,7 @@ class MikrotikControllerData:
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.major_fw_version = 0 self.major_fw_version = 0
@ -453,6 +455,9 @@ class MikrotikControllerData:
if "ups" in packages and packages["ups"]["enabled"]: if "ups" in packages and packages["ups"]["enabled"]:
self.support_ups = True self.support_ups = True
if "gps" in packages and packages["gps"]["enabled"]:
self.support_gps = True
# --------------------------- # ---------------------------
# async_get_host_hass # async_get_host_hass
# --------------------------- # ---------------------------
@ -665,6 +670,9 @@ class MikrotikControllerData:
if self.api.connected() and self.support_ups: if self.api.connected() and self.support_ups:
await self.hass.async_add_executor_job(self.get_ups) await self.hass.async_add_executor_job(self.get_ups)
if self.api.connected() and self.support_gps:
await self.hass.async_add_executor_job(self.get_gps)
async_dispatcher_send(self.hass, self.signal_update) async_dispatcher_send(self.hass, self.signal_update)
self.lock.release() self.lock.release()
@ -1551,7 +1559,7 @@ class MikrotikControllerData:
), ),
vals=[ vals=[
{"name": "on-line", "type": "bool"}, {"name": "on-line", "type": "bool"},
{"name": "runtime-left", "default": "unknown"}, {"name": "runtime-left", "default": 0},
{"name": "battery-charge", "default": 0}, {"name": "battery-charge", "default": 0},
{"name": "battery-voltage", "default": 0.0}, {"name": "battery-voltage", "default": 0.0},
{"name": "line-voltage", "default": 0}, {"name": "line-voltage", "default": 0},
@ -1560,6 +1568,33 @@ class MikrotikControllerData:
], ],
) )
# ---------------------------
# get_gps
# ---------------------------
def get_gps(self):
"""Get GPS data from Mikrotik"""
self.data["gps"] = parse_api(
data=self.data["gps"],
source=self.api.query(
"/system/gps",
command="monitor",
args={"once": True},
),
vals=[
{"name": "valid", "type": "bool"},
{"name": "latitude", "default": "unknown"},
{"name": "longitude", "default": "unknown"},
{"name": "altitude", "default": "unknown"},
{"name": "speed", "default": "unknown"},
{"name": "destination-bearing", "default": "unknown"},
{"name": "true-bearing", "default": "unknown"},
{"name": "magnetic-bearing", "default": "unknown"},
{"name": "satellites", "default": 0},
{"name": "fix-quality", "default": 0},
{"name": "horizontal-dilution", "default": "unknown"},
],
)
# --------------------------- # ---------------------------
# get_script # get_script
# --------------------------- # ---------------------------

View file

@ -71,6 +71,19 @@ DEVICE_ATTRIBUTES_CLIENT_TRAFFIC = [
"authorized", "authorized",
"bypassed", "bypassed",
] ]
DEVICE_ATTRIBUTES_GPS = [
"valid",
"latitude",
"longitude",
"altitude",
"speed",
"destination-bearing",
"true-bearing",
"magnetic-bearing",
"satellites",
"fix-quality",
"horizontal-dilution",
]
@dataclass @dataclass
@ -301,6 +314,38 @@ SENSOR_TYPES = {
data_uid="", data_uid="",
data_reference="", data_reference="",
), ),
"system_gps-latitude": MikrotikSensorEntityDescription(
key="system_gps-latitude",
name="latitude",
icon="mdi:latitude",
native_unit_of_measurement=None,
device_class=None,
state_class=None,
entity_category=EntityCategory.DIAGNOSTIC,
ha_group="System",
data_path="gps",
data_attribute="latitude",
data_name="",
data_uid="",
data_reference="",
data_attributes_list=DEVICE_ATTRIBUTES_GPS,
),
"system_gps-longitude": MikrotikSensorEntityDescription(
key="system_gps-longitude",
name="longitude",
icon="mdi:longitude",
native_unit_of_measurement=None,
device_class=None,
state_class=None,
entity_category=EntityCategory.DIAGNOSTIC,
ha_group="System",
data_path="gps",
data_attribute="longitude",
data_name="",
data_uid="",
data_reference="",
data_attributes_list=DEVICE_ATTRIBUTES_GPS,
),
"traffic_tx": MikrotikSensorEntityDescription( "traffic_tx": MikrotikSensorEntityDescription(
key="traffic_tx", key="traffic_tx",
name="TX", name="TX",