Add AsusWRT load average sensors (#52230)
This commit is contained in:
parent
f538e07902
commit
c6efdedd3c
4 changed files with 39 additions and 1 deletions
|
@ -23,4 +23,5 @@ PROTOCOL_TELNET = "telnet"
|
||||||
# Sensors
|
# Sensors
|
||||||
SENSORS_BYTES = ["sensor_rx_bytes", "sensor_tx_bytes"]
|
SENSORS_BYTES = ["sensor_rx_bytes", "sensor_tx_bytes"]
|
||||||
SENSORS_CONNECTED_DEVICE = ["sensor_connected_device"]
|
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"]
|
SENSORS_RATES = ["sensor_rx_rates", "sensor_tx_rates"]
|
||||||
|
|
|
@ -42,6 +42,7 @@ from .const import (
|
||||||
PROTOCOL_TELNET,
|
PROTOCOL_TELNET,
|
||||||
SENSORS_BYTES,
|
SENSORS_BYTES,
|
||||||
SENSORS_CONNECTED_DEVICE,
|
SENSORS_CONNECTED_DEVICE,
|
||||||
|
SENSORS_LOAD_AVG,
|
||||||
SENSORS_RATES,
|
SENSORS_RATES,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -54,6 +55,7 @@ SCAN_INTERVAL = timedelta(seconds=30)
|
||||||
|
|
||||||
SENSORS_TYPE_BYTES = "sensors_bytes"
|
SENSORS_TYPE_BYTES = "sensors_bytes"
|
||||||
SENSORS_TYPE_COUNT = "sensors_count"
|
SENSORS_TYPE_COUNT = "sensors_count"
|
||||||
|
SENSORS_TYPE_LOAD_AVG = "sensors_load_avg"
|
||||||
SENSORS_TYPE_RATES = "sensors_rates"
|
SENSORS_TYPE_RATES = "sensors_rates"
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
@ -100,6 +102,15 @@ class AsusWrtSensorDataHandler:
|
||||||
|
|
||||||
return _get_dict(SENSORS_RATES, rates)
|
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):
|
def update_device_count(self, conn_devices: int):
|
||||||
"""Update connected devices attribute."""
|
"""Update connected devices attribute."""
|
||||||
if self._connected_devices == conn_devices:
|
if self._connected_devices == conn_devices:
|
||||||
|
@ -113,6 +124,8 @@ class AsusWrtSensorDataHandler:
|
||||||
method = self._get_connected_devices
|
method = self._get_connected_devices
|
||||||
elif sensor_type == SENSORS_TYPE_BYTES:
|
elif sensor_type == SENSORS_TYPE_BYTES:
|
||||||
method = self._get_bytes
|
method = self._get_bytes
|
||||||
|
elif sensor_type == SENSORS_TYPE_LOAD_AVG:
|
||||||
|
method = self._get_load_avg
|
||||||
elif sensor_type == SENSORS_TYPE_RATES:
|
elif sensor_type == SENSORS_TYPE_RATES:
|
||||||
method = self._get_rates
|
method = self._get_rates
|
||||||
else:
|
else:
|
||||||
|
@ -316,8 +329,9 @@ class AsusWrtRouter:
|
||||||
self._sensors_data_handler.update_device_count(self._connected_devices)
|
self._sensors_data_handler.update_device_count(self._connected_devices)
|
||||||
|
|
||||||
sensors_types = {
|
sensors_types = {
|
||||||
SENSORS_TYPE_COUNT: SENSORS_CONNECTED_DEVICE,
|
|
||||||
SENSORS_TYPE_BYTES: SENSORS_BYTES,
|
SENSORS_TYPE_BYTES: SENSORS_BYTES,
|
||||||
|
SENSORS_TYPE_COUNT: SENSORS_CONNECTED_DEVICE,
|
||||||
|
SENSORS_TYPE_LOAD_AVG: SENSORS_LOAD_AVG,
|
||||||
SENSORS_TYPE_RATES: SENSORS_RATES,
|
SENSORS_TYPE_RATES: SENSORS_RATES,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -20,6 +20,7 @@ from .const import (
|
||||||
DOMAIN,
|
DOMAIN,
|
||||||
SENSORS_BYTES,
|
SENSORS_BYTES,
|
||||||
SENSORS_CONNECTED_DEVICE,
|
SENSORS_CONNECTED_DEVICE,
|
||||||
|
SENSORS_LOAD_AVG,
|
||||||
SENSORS_RATES,
|
SENSORS_RATES,
|
||||||
)
|
)
|
||||||
from .router import KEY_COORDINATOR, KEY_SENSORS, AsusWrtRouter
|
from .router import KEY_COORDINATOR, KEY_SENSORS, AsusWrtRouter
|
||||||
|
@ -67,6 +68,18 @@ CONNECTION_SENSORS = {
|
||||||
SENSOR_FACTOR: 1000000000,
|
SENSOR_FACTOR: 1000000000,
|
||||||
SENSOR_ICON: "mdi:upload",
|
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__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
|
@ -39,6 +39,7 @@ CONFIG_DATA = {
|
||||||
|
|
||||||
MOCK_BYTES_TOTAL = [60000000000, 50000000000]
|
MOCK_BYTES_TOTAL = [60000000000, 50000000000]
|
||||||
MOCK_CURRENT_TRANSFER_RATES = [20000000, 10000000]
|
MOCK_CURRENT_TRANSFER_RATES = [20000000, 10000000]
|
||||||
|
MOCK_LOAD_AVG = [1.1, 1.2, 1.3]
|
||||||
|
|
||||||
SENSOR_NAMES = [
|
SENSOR_NAMES = [
|
||||||
"Devices Connected",
|
"Devices Connected",
|
||||||
|
@ -46,6 +47,9 @@ SENSOR_NAMES = [
|
||||||
"Download",
|
"Download",
|
||||||
"Upload Speed",
|
"Upload Speed",
|
||||||
"Upload",
|
"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(
|
service_mock.return_value.async_get_current_transfer_rates = AsyncMock(
|
||||||
return_value=MOCK_CURRENT_TRANSFER_RATES
|
return_value=MOCK_CURRENT_TRANSFER_RATES
|
||||||
)
|
)
|
||||||
|
service_mock.return_value.async_get_loadavg = AsyncMock(
|
||||||
|
return_value=MOCK_LOAD_AVG
|
||||||
|
)
|
||||||
yield service_mock
|
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}_download").state == "60.0"
|
||||||
assert hass.states.get(f"{sensor_prefix}_upload_speed").state == "80.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}_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"
|
assert hass.states.get(f"{sensor_prefix}_devices_connected").state == "2"
|
||||||
|
|
||||||
# add one device and remove another
|
# add one device and remove another
|
||||||
|
|
Loading…
Add table
Reference in a new issue