mirror of
https://github.com/home-assistant/core.git
synced 2025-04-24 17:27:52 +00:00
Add QNAP QSW accumulated port sensors (#76514)
Co-authored-by: J. Nick Koston <nick@koston.org>
This commit is contained in:
parent
e8ff3d10f7
commit
3dba9c4695
@ -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()
|
||||
|
@ -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"
|
||||
|
Loading…
x
Reference in New Issue
Block a user