Add QNAP QSW accumulated port sensors (#76514)

Co-authored-by: J. Nick Koston <nick@koston.org>
This commit is contained in:
Álvaro Fernández Rojas 2022-11-17 19:41:33 +01:00 committed by GitHub
parent e8ff3d10f7
commit 3dba9c4695
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 99 additions and 3 deletions

View File

@ -7,10 +7,20 @@ from typing import Final
from aioqsw.const import (
QSD_FAN1_SPEED,
QSD_FAN2_SPEED,
QSD_LINK,
QSD_PORT_NUM,
QSD_PORTS_STATISTICS,
QSD_PORTS_STATUS,
QSD_RX_ERRORS,
QSD_RX_OCTETS,
QSD_RX_SPEED,
QSD_SYSTEM_BOARD,
QSD_SYSTEM_SENSOR,
QSD_SYSTEM_TIME,
QSD_TEMP,
QSD_TEMP_MAX,
QSD_TX_OCTETS,
QSD_TX_SPEED,
QSD_UPTIME,
)
@ -21,7 +31,12 @@ from homeassistant.components.sensor import (
SensorStateClass,
)
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import TEMP_CELSIUS, TIME_SECONDS
from homeassistant.const import (
DATA_BYTES,
DATA_RATE_BYTES_PER_SECOND,
TEMP_CELSIUS,
TIME_SECONDS,
)
from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers.entity import EntityCategory
from homeassistant.helpers.entity_platform import AddEntitiesCallback
@ -55,6 +70,44 @@ SENSOR_TYPES: Final[tuple[QswSensorEntityDescription, ...]] = (
state_class=SensorStateClass.MEASUREMENT,
subkey=QSD_FAN2_SPEED,
),
QswSensorEntityDescription(
attributes={
ATTR_MAX: [QSD_SYSTEM_BOARD, QSD_PORT_NUM],
},
entity_registry_enabled_default=False,
icon="mdi:ethernet",
key=QSD_PORTS_STATUS,
name="Ports",
state_class=SensorStateClass.MEASUREMENT,
subkey=QSD_LINK,
),
QswSensorEntityDescription(
entity_registry_enabled_default=False,
icon="mdi:download-network",
key=QSD_PORTS_STATISTICS,
name="RX",
native_unit_of_measurement=DATA_BYTES,
state_class=SensorStateClass.TOTAL_INCREASING,
subkey=QSD_RX_OCTETS,
),
QswSensorEntityDescription(
entity_registry_enabled_default=False,
icon="mdi:close-network",
key=QSD_PORTS_STATISTICS,
entity_category=EntityCategory.DIAGNOSTIC,
name="RX Errors",
state_class=SensorStateClass.TOTAL_INCREASING,
subkey=QSD_RX_ERRORS,
),
QswSensorEntityDescription(
entity_registry_enabled_default=False,
icon="mdi:download-network",
key=QSD_PORTS_STATISTICS,
name="RX Speed",
native_unit_of_measurement=DATA_RATE_BYTES_PER_SECOND,
state_class=SensorStateClass.MEASUREMENT,
subkey=QSD_RX_SPEED,
),
QswSensorEntityDescription(
attributes={
ATTR_MAX: [QSD_SYSTEM_SENSOR, QSD_TEMP_MAX],
@ -66,6 +119,24 @@ SENSOR_TYPES: Final[tuple[QswSensorEntityDescription, ...]] = (
state_class=SensorStateClass.MEASUREMENT,
subkey=QSD_TEMP,
),
QswSensorEntityDescription(
entity_registry_enabled_default=False,
icon="mdi:upload-network",
key=QSD_PORTS_STATISTICS,
name="TX",
native_unit_of_measurement=DATA_BYTES,
state_class=SensorStateClass.TOTAL_INCREASING,
subkey=QSD_TX_OCTETS,
),
QswSensorEntityDescription(
entity_registry_enabled_default=False,
icon="mdi:upload-network",
key=QSD_PORTS_STATISTICS,
name="TX Speed",
native_unit_of_measurement=DATA_RATE_BYTES_PER_SECOND,
state_class=SensorStateClass.MEASUREMENT,
subkey=QSD_TX_SPEED,
),
QswSensorEntityDescription(
icon="mdi:timer-outline",
key=QSD_SYSTEM_TIME,
@ -116,7 +187,8 @@ class QswSensor(QswSensorEntity, SensorEntity):
@callback
def _async_update_attrs(self) -> None:
"""Update sensor attributes."""
self._attr_native_value = self.get_device_value(
value = self.get_device_value(
self.entity_description.key, self.entity_description.subkey
)
self._attr_native_value = value
super()._async_update_attrs()

View File

@ -1,12 +1,17 @@
"""The sensor tests for the QNAP QSW platform."""
from unittest.mock import AsyncMock
from homeassistant.components.qnap_qsw.const import ATTR_MAX
from homeassistant.core import HomeAssistant
from .util import async_init_integration
async def test_qnap_qsw_create_sensors(hass: HomeAssistant) -> None:
async def test_qnap_qsw_create_sensors(
hass: HomeAssistant,
entity_registry_enabled_by_default: AsyncMock,
) -> None:
"""Test creation of sensors."""
await async_init_integration(hass)
@ -17,9 +22,28 @@ async def test_qnap_qsw_create_sensors(hass: HomeAssistant) -> None:
state = hass.states.get("sensor.qsw_m408_4c_fan_2_speed")
assert state is None
state = hass.states.get("sensor.qsw_m408_4c_ports")
assert state.state == "3"
assert state.attributes.get(ATTR_MAX) == 12
state = hass.states.get("sensor.qsw_m408_4c_rx_errors")
assert state.state == "22"
state = hass.states.get("sensor.qsw_m408_4c_rx")
assert state.state == "22200"
state = hass.states.get("sensor.qsw_m408_4c_rx_speed")
assert state.state == "0"
state = hass.states.get("sensor.qsw_m408_4c_temperature")
assert state.state == "31"
assert state.attributes.get(ATTR_MAX) == 85
state = hass.states.get("sensor.qsw_m408_4c_tx")
assert state.state == "11100"
state = hass.states.get("sensor.qsw_m408_4c_tx_speed")
assert state.state == "0"
state = hass.states.get("sensor.qsw_m408_4c_uptime")
assert state.state == "91"