mirror of
https://github.com/home-assistant/core.git
synced 2025-04-23 08:47:57 +00:00
Add AsusWRT load average sensors (#52230)
This commit is contained in:
parent
f538e07902
commit
c6efdedd3c
@ -23,4 +23,5 @@ PROTOCOL_TELNET = "telnet"
|
||||
# Sensors
|
||||
SENSORS_BYTES = ["sensor_rx_bytes", "sensor_tx_bytes"]
|
||||
SENSORS_CONNECTED_DEVICE = ["sensor_connected_device"]
|
||||
SENSORS_LOAD_AVG = ["sensor_load_avg1", "sensor_load_avg5", "sensor_load_avg15"]
|
||||
SENSORS_RATES = ["sensor_rx_rates", "sensor_tx_rates"]
|
||||
|
@ -42,6 +42,7 @@ from .const import (
|
||||
PROTOCOL_TELNET,
|
||||
SENSORS_BYTES,
|
||||
SENSORS_CONNECTED_DEVICE,
|
||||
SENSORS_LOAD_AVG,
|
||||
SENSORS_RATES,
|
||||
)
|
||||
|
||||
@ -54,6 +55,7 @@ SCAN_INTERVAL = timedelta(seconds=30)
|
||||
|
||||
SENSORS_TYPE_BYTES = "sensors_bytes"
|
||||
SENSORS_TYPE_COUNT = "sensors_count"
|
||||
SENSORS_TYPE_LOAD_AVG = "sensors_load_avg"
|
||||
SENSORS_TYPE_RATES = "sensors_rates"
|
||||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
@ -100,6 +102,15 @@ class AsusWrtSensorDataHandler:
|
||||
|
||||
return _get_dict(SENSORS_RATES, rates)
|
||||
|
||||
async def _get_load_avg(self):
|
||||
"""Fetch load average information from the router."""
|
||||
try:
|
||||
avg = await self._api.async_get_loadavg()
|
||||
except (OSError, ValueError) as exc:
|
||||
raise UpdateFailed(exc) from exc
|
||||
|
||||
return _get_dict(SENSORS_LOAD_AVG, avg)
|
||||
|
||||
def update_device_count(self, conn_devices: int):
|
||||
"""Update connected devices attribute."""
|
||||
if self._connected_devices == conn_devices:
|
||||
@ -113,6 +124,8 @@ class AsusWrtSensorDataHandler:
|
||||
method = self._get_connected_devices
|
||||
elif sensor_type == SENSORS_TYPE_BYTES:
|
||||
method = self._get_bytes
|
||||
elif sensor_type == SENSORS_TYPE_LOAD_AVG:
|
||||
method = self._get_load_avg
|
||||
elif sensor_type == SENSORS_TYPE_RATES:
|
||||
method = self._get_rates
|
||||
else:
|
||||
@ -316,8 +329,9 @@ class AsusWrtRouter:
|
||||
self._sensors_data_handler.update_device_count(self._connected_devices)
|
||||
|
||||
sensors_types = {
|
||||
SENSORS_TYPE_COUNT: SENSORS_CONNECTED_DEVICE,
|
||||
SENSORS_TYPE_BYTES: SENSORS_BYTES,
|
||||
SENSORS_TYPE_COUNT: SENSORS_CONNECTED_DEVICE,
|
||||
SENSORS_TYPE_LOAD_AVG: SENSORS_LOAD_AVG,
|
||||
SENSORS_TYPE_RATES: SENSORS_RATES,
|
||||
}
|
||||
|
||||
|
@ -20,6 +20,7 @@ from .const import (
|
||||
DOMAIN,
|
||||
SENSORS_BYTES,
|
||||
SENSORS_CONNECTED_DEVICE,
|
||||
SENSORS_LOAD_AVG,
|
||||
SENSORS_RATES,
|
||||
)
|
||||
from .router import KEY_COORDINATOR, KEY_SENSORS, AsusWrtRouter
|
||||
@ -67,6 +68,18 @@ CONNECTION_SENSORS = {
|
||||
SENSOR_FACTOR: 1000000000,
|
||||
SENSOR_ICON: "mdi:upload",
|
||||
},
|
||||
SENSORS_LOAD_AVG[0]: {
|
||||
SENSOR_NAME: "Load Avg (1m)",
|
||||
SENSOR_ICON: "mdi:cpu-32-bit",
|
||||
},
|
||||
SENSORS_LOAD_AVG[1]: {
|
||||
SENSOR_NAME: "Load Avg (5m)",
|
||||
SENSOR_ICON: "mdi:cpu-32-bit",
|
||||
},
|
||||
SENSORS_LOAD_AVG[2]: {
|
||||
SENSOR_NAME: "Load Avg (15m)",
|
||||
SENSOR_ICON: "mdi:cpu-32-bit",
|
||||
},
|
||||
}
|
||||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
|
@ -39,6 +39,7 @@ CONFIG_DATA = {
|
||||
|
||||
MOCK_BYTES_TOTAL = [60000000000, 50000000000]
|
||||
MOCK_CURRENT_TRANSFER_RATES = [20000000, 10000000]
|
||||
MOCK_LOAD_AVG = [1.1, 1.2, 1.3]
|
||||
|
||||
SENSOR_NAMES = [
|
||||
"Devices Connected",
|
||||
@ -46,6 +47,9 @@ SENSOR_NAMES = [
|
||||
"Download",
|
||||
"Upload Speed",
|
||||
"Upload",
|
||||
"Load Avg (1m)",
|
||||
"Load Avg (5m)",
|
||||
"Load Avg (15m)",
|
||||
]
|
||||
|
||||
|
||||
@ -81,6 +85,9 @@ def mock_controller_connect(mock_devices):
|
||||
service_mock.return_value.async_get_current_transfer_rates = AsyncMock(
|
||||
return_value=MOCK_CURRENT_TRANSFER_RATES
|
||||
)
|
||||
service_mock.return_value.async_get_loadavg = AsyncMock(
|
||||
return_value=MOCK_LOAD_AVG
|
||||
)
|
||||
yield service_mock
|
||||
|
||||
|
||||
@ -125,6 +132,9 @@ async def test_sensors(hass, connect, mock_devices):
|
||||
assert hass.states.get(f"{sensor_prefix}_download").state == "60.0"
|
||||
assert hass.states.get(f"{sensor_prefix}_upload_speed").state == "80.0"
|
||||
assert hass.states.get(f"{sensor_prefix}_upload").state == "50.0"
|
||||
assert hass.states.get(f"{sensor_prefix}_load_avg_1m").state == "1.1"
|
||||
assert hass.states.get(f"{sensor_prefix}_load_avg_5m").state == "1.2"
|
||||
assert hass.states.get(f"{sensor_prefix}_load_avg_15m").state == "1.3"
|
||||
assert hass.states.get(f"{sensor_prefix}_devices_connected").state == "2"
|
||||
|
||||
# add one device and remove another
|
||||
|
Loading…
x
Reference in New Issue
Block a user