diff --git a/custom_components/mikrotik_router/sensor.py b/custom_components/mikrotik_router/sensor.py index 91b54ee..2f885ee 100644 --- a/custom_components/mikrotik_router/sensor.py +++ b/custom_components/mikrotik_router/sensor.py @@ -23,6 +23,8 @@ from .const import ( from .sensor_types import ( MikrotikSensorEntityDescription, SENSOR_TYPES, + DEVICE_ATTRIBUTES_IFACE_ETHER, + DEVICE_ATTRIBUTES_IFACE_SFP, ) _LOGGER = logging.getLogger(__name__) @@ -75,8 +77,8 @@ def update_items(inst, config_entry, mikrotik_controller, async_add_entities, se # Entity function [ MikrotikControllerSensor, - MikrotikControllerSensor, - MikrotikControllerSensor, + MikrotikInterfaceTrafficSensor, + MikrotikInterfaceTrafficSensor, MikrotikClientTrafficSensor, MikrotikClientTrafficSensor, MikrotikClientTrafficSensor, @@ -293,6 +295,30 @@ class MikrotikControllerSensor(SensorEntity): _LOGGER.debug("New sensor %s (%s)", self._inst, self.unique_id) +# --------------------------- +# MikrotikInterfaceTrafficSensor +# --------------------------- +class MikrotikInterfaceTrafficSensor(MikrotikControllerSensor): + """Define an Mikrotik MikrotikInterfaceTrafficSensor sensor.""" + + @property + def extra_state_attributes(self) -> Mapping[str, Any]: + """Return the state attributes.""" + attributes = super().extra_state_attributes + + if self._data["type"] == "ether": + for variable in DEVICE_ATTRIBUTES_IFACE_ETHER: + if variable in self._data: + attributes[format_attribute(variable)] = self._data[variable] + + if "sfp-shutdown-temperature" in self._data: + for variable in DEVICE_ATTRIBUTES_IFACE_SFP: + if variable in self._data: + attributes[format_attribute(variable)] = self._data[variable] + + return attributes + + # --------------------------- # MikrotikClientTrafficSensor # --------------------------- diff --git a/custom_components/mikrotik_router/sensor_types.py b/custom_components/mikrotik_router/sensor_types.py index 3ff6d11..83c86cb 100644 --- a/custom_components/mikrotik_router/sensor_types.py +++ b/custom_components/mikrotik_router/sensor_types.py @@ -16,6 +16,52 @@ from homeassistant.const import ( ) from .const import DOMAIN +DEVICE_ATTRIBUTES_IFACE = [ + "running", + "enabled", + "comment", + "client-ip-address", + "client-mac-address", + "port-mac-address", + "last-link-down-time", + "last-link-up-time", + "link-downs", + "actual-mtu", + "type", + "name", +] + +DEVICE_ATTRIBUTES_IFACE_ETHER = [ + "status", + "auto-negotiation", + "rate", + "full-duplex", + "default-name", + "poe-out", +] + +DEVICE_ATTRIBUTES_IFACE_SFP = [ + "status", + "auto-negotiation", + "advertising", + "link-partner-advertising", + "sfp-temperature", + "sfp-supply-voltage", + "sfp-module-present", + "sfp-tx-bias-current", + "sfp-tx-power", + "sfp-rx-power", + "sfp-rx-loss", + "sfp-tx-fault", + "sfp-type", + "sfp-connector-type", + "sfp-vendor-name", + "sfp-vendor-part-number", + "sfp-vendor-revision", + "sfp-vendor-serial", + "sfp-manufacturing-date", + "eeprom-checksum", +] DEVICE_ATTRIBUTES_CLIENT_TRAFFIC = ["address", "mac-address", "host-name"] @@ -217,6 +263,7 @@ SENSOR_TYPES = { data_name="name", data_uid="", data_reference="default-name", + data_attributes_list=DEVICE_ATTRIBUTES_IFACE, ), "traffic_rx": MikrotikSensorEntityDescription( key="traffic_rx", @@ -234,6 +281,7 @@ SENSOR_TYPES = { data_name="name", data_uid="", data_reference="default-name", + data_attributes_list=DEVICE_ATTRIBUTES_IFACE, ), "client_traffic_lan_tx": MikrotikSensorEntityDescription( key="client_traffic_lan_tx",