Add Netgear ethernet link status (#72582)

This commit is contained in:
starkillerOG 2022-06-28 23:31:15 +02:00 committed by GitHub
parent 4aa8570107
commit ef76073d83
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 36 additions and 0 deletions

View file

@ -15,6 +15,7 @@ from homeassistant.helpers.update_coordinator import DataUpdateCoordinator
from .const import (
DOMAIN,
KEY_COORDINATOR,
KEY_COORDINATOR_LINK,
KEY_COORDINATOR_SPEED,
KEY_COORDINATOR_TRAFFIC,
KEY_ROUTER,
@ -83,6 +84,10 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
"""Fetch data from the router."""
return await router.async_get_speed_test()
async def async_check_link_status() -> dict[str, Any] | None:
"""Fetch data from the router."""
return await router.async_get_link_status()
# Create update coordinators
coordinator = DataUpdateCoordinator(
hass,
@ -105,16 +110,25 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
update_method=async_update_speed_test,
update_interval=SPEED_TEST_INTERVAL,
)
coordinator_link = DataUpdateCoordinator(
hass,
_LOGGER,
name=f"{router.device_name} Ethernet Link Status",
update_method=async_check_link_status,
update_interval=SCAN_INTERVAL,
)
if router.track_devices:
await coordinator.async_config_entry_first_refresh()
await coordinator_traffic_meter.async_config_entry_first_refresh()
await coordinator_link.async_config_entry_first_refresh()
hass.data[DOMAIN][entry.entry_id] = {
KEY_ROUTER: router,
KEY_COORDINATOR: coordinator,
KEY_COORDINATOR_TRAFFIC: coordinator_traffic_meter,
KEY_COORDINATOR_SPEED: coordinator_speed_test,
KEY_COORDINATOR_LINK: coordinator_link,
}
hass.config_entries.async_setup_platforms(entry, PLATFORMS)

View file

@ -13,6 +13,7 @@ KEY_ROUTER = "router"
KEY_COORDINATOR = "coordinator"
KEY_COORDINATOR_TRAFFIC = "coordinator_traffic"
KEY_COORDINATOR_SPEED = "coordinator_speed"
KEY_COORDINATOR_LINK = "coordinator_link"
DEFAULT_CONSIDER_HOME = timedelta(seconds=180)
DEFAULT_NAME = "Netgear router"

View file

@ -228,6 +228,11 @@ class NetgearRouter:
self._api.get_new_speed_test_result
)
async def async_get_link_status(self) -> dict[str, Any] | None:
"""Check the ethernet link status of the router."""
async with self._api_lock:
return await self.hass.async_add_executor_job(self._api.check_ethernet_link)
async def async_allow_block_device(self, mac: str, allow_block: str) -> None:
"""Allow or block a device connected to the router."""
async with self._api_lock:

View file

@ -29,6 +29,7 @@ from homeassistant.helpers.update_coordinator import DataUpdateCoordinator
from .const import (
DOMAIN,
KEY_COORDINATOR,
KEY_COORDINATOR_LINK,
KEY_COORDINATOR_SPEED,
KEY_COORDINATOR_TRAFFIC,
KEY_ROUTER,
@ -244,6 +245,15 @@ SENSOR_SPEED_TYPES = [
),
]
SENSOR_LINK_TYPES = [
NetgearSensorEntityDescription(
key="NewEthernetLinkStatus",
name="Ethernet Link Status",
entity_category=EntityCategory.DIAGNOSTIC,
icon="mdi:ethernet",
),
]
async def async_setup_entry(
hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
@ -253,6 +263,7 @@ async def async_setup_entry(
coordinator = hass.data[DOMAIN][entry.entry_id][KEY_COORDINATOR]
coordinator_traffic = hass.data[DOMAIN][entry.entry_id][KEY_COORDINATOR_TRAFFIC]
coordinator_speed = hass.data[DOMAIN][entry.entry_id][KEY_COORDINATOR_SPEED]
coordinator_link = hass.data[DOMAIN][entry.entry_id][KEY_COORDINATOR_LINK]
# Router entities
router_entities = []
@ -267,6 +278,11 @@ async def async_setup_entry(
NetgearRouterSensorEntity(coordinator_speed, router, description)
)
for description in SENSOR_LINK_TYPES:
router_entities.append(
NetgearRouterSensorEntity(coordinator_link, router, description)
)
async_add_entities(router_entities)
# Entities per network device