Add entity translations to uPnP (#96763)

This commit is contained in:
Joost Lekkerkerker 2023-07-23 20:21:57 +02:00 committed by GitHub
parent 3183ce7608
commit bfbdebd0f7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 67 additions and 25 deletions

View file

@ -28,7 +28,7 @@ class UpnpBinarySensorEntityDescription(
SENSOR_DESCRIPTIONS: tuple[UpnpBinarySensorEntityDescription, ...] = (
UpnpBinarySensorEntityDescription(
key=WAN_STATUS,
name="wan status",
translation_key="wan_status",
device_class=BinarySensorDeviceClass.CONNECTIVITY,
entity_category=EntityCategory.DIAGNOSTIC,
),

View file

@ -25,6 +25,7 @@ class UpnpEntity(CoordinatorEntity[UpnpDataUpdateCoordinator]):
"""Base class for UPnP/IGD entities."""
entity_description: UpnpEntityDescription
_attr_has_entity_name = True
def __init__(
self,
@ -35,7 +36,6 @@ class UpnpEntity(CoordinatorEntity[UpnpDataUpdateCoordinator]):
super().__init__(coordinator)
self._device = coordinator.device
self.entity_description = entity_description
self._attr_name = f"{coordinator.device.name} {entity_description.name}"
self._attr_unique_id = f"{coordinator.device.original_udn}_{entity_description.unique_id or entity_description.key}"
self._attr_device_info = DeviceInfo(
connections=coordinator.device_entry.connections,

View file

@ -49,7 +49,7 @@ class UpnpSensorEntityDescription(UpnpEntityDescription, SensorEntityDescription
SENSOR_DESCRIPTIONS: tuple[UpnpSensorEntityDescription, ...] = (
UpnpSensorEntityDescription(
key=BYTES_RECEIVED,
name=f"{UnitOfInformation.BYTES} received",
translation_key="data_received",
icon="mdi:server-network",
device_class=SensorDeviceClass.DATA_SIZE,
native_unit_of_measurement=UnitOfInformation.BYTES,
@ -59,7 +59,7 @@ SENSOR_DESCRIPTIONS: tuple[UpnpSensorEntityDescription, ...] = (
),
UpnpSensorEntityDescription(
key=BYTES_SENT,
name=f"{UnitOfInformation.BYTES} sent",
translation_key="data_sent",
icon="mdi:server-network",
device_class=SensorDeviceClass.DATA_SIZE,
native_unit_of_measurement=UnitOfInformation.BYTES,
@ -69,7 +69,7 @@ SENSOR_DESCRIPTIONS: tuple[UpnpSensorEntityDescription, ...] = (
),
UpnpSensorEntityDescription(
key=PACKETS_RECEIVED,
name=f"{DATA_PACKETS} received",
translation_key="packets_received",
icon="mdi:server-network",
native_unit_of_measurement=DATA_PACKETS,
entity_registry_enabled_default=False,
@ -78,7 +78,7 @@ SENSOR_DESCRIPTIONS: tuple[UpnpSensorEntityDescription, ...] = (
),
UpnpSensorEntityDescription(
key=PACKETS_SENT,
name=f"{DATA_PACKETS} sent",
translation_key="packets_sent",
icon="mdi:server-network",
native_unit_of_measurement=DATA_PACKETS,
entity_registry_enabled_default=False,
@ -87,13 +87,13 @@ SENSOR_DESCRIPTIONS: tuple[UpnpSensorEntityDescription, ...] = (
),
UpnpSensorEntityDescription(
key=ROUTER_IP,
name="External IP",
translation_key="external_ip",
icon="mdi:server-network",
entity_category=EntityCategory.DIAGNOSTIC,
),
UpnpSensorEntityDescription(
key=ROUTER_UPTIME,
name="Uptime",
translation_key="uptime",
icon="mdi:server-network",
native_unit_of_measurement=UnitOfTime.SECONDS,
entity_registry_enabled_default=False,
@ -102,16 +102,16 @@ SENSOR_DESCRIPTIONS: tuple[UpnpSensorEntityDescription, ...] = (
),
UpnpSensorEntityDescription(
key=WAN_STATUS,
name="wan status",
translation_key="wan_status",
icon="mdi:server-network",
entity_category=EntityCategory.DIAGNOSTIC,
entity_registry_enabled_default=False,
),
UpnpSensorEntityDescription(
key=BYTES_RECEIVED,
translation_key="download_speed",
value_key=KIBIBYTES_PER_SEC_RECEIVED,
unique_id="KiB/sec_received",
name=f"{UnitOfDataRate.KIBIBYTES_PER_SECOND} received",
icon="mdi:server-network",
device_class=SensorDeviceClass.DATA_RATE,
native_unit_of_measurement=UnitOfDataRate.KIBIBYTES_PER_SECOND,
@ -120,9 +120,9 @@ SENSOR_DESCRIPTIONS: tuple[UpnpSensorEntityDescription, ...] = (
),
UpnpSensorEntityDescription(
key=BYTES_SENT,
translation_key="upload_speed",
value_key=KIBIBYTES_PER_SEC_SENT,
unique_id="KiB/sec_sent",
name=f"{UnitOfDataRate.KIBIBYTES_PER_SECOND} sent",
icon="mdi:server-network",
device_class=SensorDeviceClass.DATA_RATE,
native_unit_of_measurement=UnitOfDataRate.KIBIBYTES_PER_SECOND,
@ -131,9 +131,9 @@ SENSOR_DESCRIPTIONS: tuple[UpnpSensorEntityDescription, ...] = (
),
UpnpSensorEntityDescription(
key=PACKETS_RECEIVED,
translation_key="packet_download_speed",
value_key=PACKETS_PER_SEC_RECEIVED,
unique_id="packets/sec_received",
name=f"{DATA_RATE_PACKETS_PER_SECOND} received",
icon="mdi:server-network",
native_unit_of_measurement=DATA_RATE_PACKETS_PER_SECOND,
entity_registry_enabled_default=False,
@ -142,9 +142,9 @@ SENSOR_DESCRIPTIONS: tuple[UpnpSensorEntityDescription, ...] = (
),
UpnpSensorEntityDescription(
key=PACKETS_SENT,
translation_key="packet_upload_speed",
value_key=PACKETS_PER_SEC_SENT,
unique_id="packets/sec_sent",
name=f"{DATA_RATE_PACKETS_PER_SECOND} sent",
icon="mdi:server-network",
native_unit_of_measurement=DATA_RATE_PACKETS_PER_SECOND,
entity_registry_enabled_default=False,

View file

@ -25,5 +25,47 @@
}
}
}
},
"entity": {
"binary_sensor": {
"wan_status": {
"name": "[%key:component::upnp::entity::sensor::wan_status::name%]"
}
},
"sensor": {
"data_received": {
"name": "Data received"
},
"data_sent": {
"name": "Data sent"
},
"packets_received": {
"name": "Packets received"
},
"packets_sent": {
"name": "Packets sent"
},
"external_ip": {
"name": "External IP"
},
"uptime": {
"name": "Uptime"
},
"packet_download_speed": {
"name": "Packet download speed"
},
"packet_upload_speed": {
"name": "Packet upload speed"
},
"download_speed": {
"name": "Download speed"
},
"upload_speed": {
"name": "Upload speed"
},
"wan_status": {
"name": "WAN status"
}
}
}
}

View file

@ -16,16 +16,16 @@ async def test_upnp_sensors(
) -> None:
"""Test sensors."""
# First poll.
assert hass.states.get("sensor.mock_name_b_received").state == "0"
assert hass.states.get("sensor.mock_name_b_sent").state == "0"
assert hass.states.get("sensor.mock_name_data_received").state == "0"
assert hass.states.get("sensor.mock_name_data_sent").state == "0"
assert hass.states.get("sensor.mock_name_packets_received").state == "0"
assert hass.states.get("sensor.mock_name_packets_sent").state == "0"
assert hass.states.get("sensor.mock_name_external_ip").state == "8.9.10.11"
assert hass.states.get("sensor.mock_name_wan_status").state == "Connected"
assert hass.states.get("sensor.mock_name_kib_s_received").state == "unknown"
assert hass.states.get("sensor.mock_name_kib_s_sent").state == "unknown"
assert hass.states.get("sensor.mock_name_packets_s_received").state == "unknown"
assert hass.states.get("sensor.mock_name_packets_s_sent").state == "unknown"
assert hass.states.get("sensor.mock_name_download_speed").state == "unknown"
assert hass.states.get("sensor.mock_name_upload_speed").state == "unknown"
assert hass.states.get("sensor.mock_name_packet_download_speed").state == "unknown"
assert hass.states.get("sensor.mock_name_packet_upload_speed").state == "unknown"
# Second poll.
mock_igd_device: IgdDevice = mock_config_entry.igd_device
@ -51,13 +51,13 @@ async def test_upnp_sensors(
async_fire_time_changed(hass, now + timedelta(seconds=DEFAULT_SCAN_INTERVAL))
await hass.async_block_till_done()
assert hass.states.get("sensor.mock_name_b_received").state == "10240"
assert hass.states.get("sensor.mock_name_b_sent").state == "20480"
assert hass.states.get("sensor.mock_name_data_received").state == "10240"
assert hass.states.get("sensor.mock_name_data_sent").state == "20480"
assert hass.states.get("sensor.mock_name_packets_received").state == "30"
assert hass.states.get("sensor.mock_name_packets_sent").state == "40"
assert hass.states.get("sensor.mock_name_external_ip").state == ""
assert hass.states.get("sensor.mock_name_wan_status").state == "Disconnected"
assert hass.states.get("sensor.mock_name_kib_s_received").state == "10.0"
assert hass.states.get("sensor.mock_name_kib_s_sent").state == "20.0"
assert hass.states.get("sensor.mock_name_packets_s_received").state == "30.0"
assert hass.states.get("sensor.mock_name_packets_s_sent").state == "40.0"
assert hass.states.get("sensor.mock_name_download_speed").state == "10.0"
assert hass.states.get("sensor.mock_name_upload_speed").state == "20.0"
assert hass.states.get("sensor.mock_name_packet_download_speed").state == "30.0"
assert hass.states.get("sensor.mock_name_packet_upload_speed").state == "40.0"