diff --git a/custom_components/mikrotik_router/mikrotik_controller.py b/custom_components/mikrotik_router/mikrotik_controller.py index 7a5db87..dc35455 100644 --- a/custom_components/mikrotik_router/mikrotik_controller.py +++ b/custom_components/mikrotik_router/mikrotik_controller.py @@ -107,6 +107,7 @@ class MikrotikControllerData: "routerboard": {}, "resource": {}, "health": {}, + "health7": {}, "interface": {}, "bridge": {}, "bridge_host": {}, @@ -1218,18 +1219,32 @@ class MikrotikControllerData: # --------------------------- def get_system_health(self): """Get routerboard data from Mikrotik""" - self.data["health"] = parse_api( - data=self.data["health"], - source=self.api.path("/system/health"), - vals=[ - {"name": "temperature", "default": "unknown"}, - {"name": "cpu-temperature", "default": "unknown"}, - {"name": "power-consumption", "default": "unknown"}, - {"name": "board-temperature1", "default": "unknown"}, - {"name": "fan1-speed", "default": "unknown"}, - {"name": "fan2-speed", "default": "unknown"}, - ], - ) + if self.major_fw_version >= 7: + self.data["health7"] = parse_api( + data=self.data["health7"], + source=self.api.path("/system/health"), + key="name", + vals=[ + {"name": "value", "default": "unknown"}, + ], + ) + for uid, vals in self.data["health7"].items(): + self.data["health"][uid] = vals["value"] + + else: + self.data["health"] = parse_api( + data=self.data["health"], + source=self.api.path("/system/health"), + vals=[ + {"name": "temperature", "default": "unknown"}, + {"name": "voltage", "default": "unknown"}, + {"name": "cpu-temperature", "default": "unknown"}, + {"name": "power-consumption", "default": "unknown"}, + {"name": "board-temperature1", "default": "unknown"}, + {"name": "fan1-speed", "default": "unknown"}, + {"name": "fan2-speed", "default": "unknown"}, + ], + ) # --------------------------- # get_system_resource diff --git a/custom_components/mikrotik_router/sensor.py b/custom_components/mikrotik_router/sensor.py index 712269e..7e4c3b3 100644 --- a/custom_components/mikrotik_router/sensor.py +++ b/custom_components/mikrotik_router/sensor.py @@ -9,6 +9,7 @@ from homeassistant.const import ( ATTR_ATTRIBUTION, ATTR_DEVICE_CLASS, TEMP_CELSIUS, + ELECTRIC_POTENTIAL_VOLT, ) from homeassistant.helpers.entity import EntityCategory @@ -65,6 +66,16 @@ SENSOR_TYPES = { ATTR_ATTR: "temperature", ATTR_CTGR: None, }, + "system_voltage": { + ATTR_DEVICE_CLASS: SensorDeviceClass.VOLTAGE, + ATTR_ICON: "mdi:lightning-bolt", + ATTR_LABEL: "Voltage", + ATTR_UNIT: ELECTRIC_POTENTIAL_VOLT, + ATTR_GROUP: "System", + ATTR_PATH: "health", + ATTR_ATTR: "voltage", + ATTR_CTGR: EntityCategory.DIAGNOSTIC, + }, "system_cpu-temperature": { ATTR_DEVICE_CLASS: SensorDeviceClass.TEMPERATURE, ATTR_ICON: "mdi:thermometer", @@ -296,7 +307,9 @@ def update_items(inst, config_entry, mikrotik_controller, async_add_entities, se for sensor in SENSOR_TYPES: if "system_" in sensor: if ( - mikrotik_controller.data[SENSOR_TYPES[sensor][ATTR_PATH]][ + SENSOR_TYPES[sensor][ATTR_ATTR] + not in mikrotik_controller.data[SENSOR_TYPES[sensor][ATTR_PATH]] + or mikrotik_controller.data[SENSOR_TYPES[sensor][ATTR_PATH]][ SENSOR_TYPES[sensor][ATTR_ATTR] ] == "unknown"