From 50013cf5c7c2fc395c54f3860d9c60a25eab95c5 Mon Sep 17 00:00:00 2001 From: Maciej Bieniek Date: Sat, 23 Nov 2024 18:04:49 +0100 Subject: [PATCH] Add unit translations for NextDNS integration (#131281) * Add unit translations for NextDNS integration * Use translation keys --- homeassistant/components/nextdns/sensor.py | 15 ------- homeassistant/components/nextdns/strings.json | 45 ++++++++++++------- .../nextdns/snapshots/test_sensor.ambr | 45 +++++++------------ 3 files changed, 45 insertions(+), 60 deletions(-) diff --git a/homeassistant/components/nextdns/sensor.py b/homeassistant/components/nextdns/sensor.py index b390ac93e06..ef2b5140fa1 100644 --- a/homeassistant/components/nextdns/sensor.py +++ b/homeassistant/components/nextdns/sensor.py @@ -54,7 +54,6 @@ SENSORS: tuple[NextDnsSensorEntityDescription, ...] = ( coordinator_type=ATTR_STATUS, entity_category=EntityCategory.DIAGNOSTIC, translation_key="all_queries", - native_unit_of_measurement="queries", state_class=SensorStateClass.TOTAL, value=lambda data: data.all_queries, ), @@ -63,7 +62,6 @@ SENSORS: tuple[NextDnsSensorEntityDescription, ...] = ( coordinator_type=ATTR_STATUS, entity_category=EntityCategory.DIAGNOSTIC, translation_key="blocked_queries", - native_unit_of_measurement="queries", state_class=SensorStateClass.TOTAL, value=lambda data: data.blocked_queries, ), @@ -72,7 +70,6 @@ SENSORS: tuple[NextDnsSensorEntityDescription, ...] = ( coordinator_type=ATTR_STATUS, entity_category=EntityCategory.DIAGNOSTIC, translation_key="relayed_queries", - native_unit_of_measurement="queries", state_class=SensorStateClass.TOTAL, value=lambda data: data.relayed_queries, ), @@ -91,7 +88,6 @@ SENSORS: tuple[NextDnsSensorEntityDescription, ...] = ( entity_category=EntityCategory.DIAGNOSTIC, entity_registry_enabled_default=False, translation_key="doh_queries", - native_unit_of_measurement="queries", state_class=SensorStateClass.TOTAL, value=lambda data: data.doh_queries, ), @@ -101,7 +97,6 @@ SENSORS: tuple[NextDnsSensorEntityDescription, ...] = ( entity_category=EntityCategory.DIAGNOSTIC, entity_registry_enabled_default=False, translation_key="doh3_queries", - native_unit_of_measurement="queries", state_class=SensorStateClass.TOTAL, value=lambda data: data.doh3_queries, ), @@ -111,7 +106,6 @@ SENSORS: tuple[NextDnsSensorEntityDescription, ...] = ( entity_category=EntityCategory.DIAGNOSTIC, entity_registry_enabled_default=False, translation_key="dot_queries", - native_unit_of_measurement="queries", state_class=SensorStateClass.TOTAL, value=lambda data: data.dot_queries, ), @@ -121,7 +115,6 @@ SENSORS: tuple[NextDnsSensorEntityDescription, ...] = ( entity_category=EntityCategory.DIAGNOSTIC, entity_registry_enabled_default=False, translation_key="doq_queries", - native_unit_of_measurement="queries", state_class=SensorStateClass.TOTAL, value=lambda data: data.doq_queries, ), @@ -131,7 +124,6 @@ SENSORS: tuple[NextDnsSensorEntityDescription, ...] = ( entity_category=EntityCategory.DIAGNOSTIC, entity_registry_enabled_default=False, translation_key="tcp_queries", - native_unit_of_measurement="queries", state_class=SensorStateClass.TOTAL, value=lambda data: data.tcp_queries, ), @@ -141,7 +133,6 @@ SENSORS: tuple[NextDnsSensorEntityDescription, ...] = ( entity_category=EntityCategory.DIAGNOSTIC, entity_registry_enabled_default=False, translation_key="udp_queries", - native_unit_of_measurement="queries", state_class=SensorStateClass.TOTAL, value=lambda data: data.udp_queries, ), @@ -211,7 +202,6 @@ SENSORS: tuple[NextDnsSensorEntityDescription, ...] = ( entity_category=EntityCategory.DIAGNOSTIC, entity_registry_enabled_default=False, translation_key="encrypted_queries", - native_unit_of_measurement="queries", state_class=SensorStateClass.TOTAL, value=lambda data: data.encrypted_queries, ), @@ -221,7 +211,6 @@ SENSORS: tuple[NextDnsSensorEntityDescription, ...] = ( entity_category=EntityCategory.DIAGNOSTIC, entity_registry_enabled_default=False, translation_key="unencrypted_queries", - native_unit_of_measurement="queries", state_class=SensorStateClass.TOTAL, value=lambda data: data.unencrypted_queries, ), @@ -241,7 +230,6 @@ SENSORS: tuple[NextDnsSensorEntityDescription, ...] = ( entity_category=EntityCategory.DIAGNOSTIC, entity_registry_enabled_default=False, translation_key="ipv4_queries", - native_unit_of_measurement="queries", state_class=SensorStateClass.TOTAL, value=lambda data: data.ipv4_queries, ), @@ -251,7 +239,6 @@ SENSORS: tuple[NextDnsSensorEntityDescription, ...] = ( entity_category=EntityCategory.DIAGNOSTIC, entity_registry_enabled_default=False, translation_key="ipv6_queries", - native_unit_of_measurement="queries", state_class=SensorStateClass.TOTAL, value=lambda data: data.ipv6_queries, ), @@ -271,7 +258,6 @@ SENSORS: tuple[NextDnsSensorEntityDescription, ...] = ( entity_category=EntityCategory.DIAGNOSTIC, entity_registry_enabled_default=False, translation_key="validated_queries", - native_unit_of_measurement="queries", state_class=SensorStateClass.TOTAL, value=lambda data: data.validated_queries, ), @@ -281,7 +267,6 @@ SENSORS: tuple[NextDnsSensorEntityDescription, ...] = ( entity_category=EntityCategory.DIAGNOSTIC, entity_registry_enabled_default=False, translation_key="not_validated_queries", - native_unit_of_measurement="queries", state_class=SensorStateClass.TOTAL, value=lambda data: data.not_validated_queries, ), diff --git a/homeassistant/components/nextdns/strings.json b/homeassistant/components/nextdns/strings.json index 9dbc8061849..f2a5fa2816d 100644 --- a/homeassistant/components/nextdns/strings.json +++ b/homeassistant/components/nextdns/strings.json @@ -48,76 +48,91 @@ }, "sensor": { "all_queries": { - "name": "DNS queries" + "name": "DNS queries", + "unit_of_measurement": "queries" }, "blocked_queries": { - "name": "DNS queries blocked" + "name": "DNS queries blocked", + "unit_of_measurement": "[%key:component::nextdns::entity::sensor::all_queries::unit_of_measurement%]" }, "blocked_queries_ratio": { "name": "DNS queries blocked ratio" }, "doh3_queries": { - "name": "DNS-over-HTTP/3 queries" + "name": "DNS-over-HTTP/3 queries", + "unit_of_measurement": "[%key:component::nextdns::entity::sensor::all_queries::unit_of_measurement%]" }, "doh3_queries_ratio": { "name": "DNS-over-HTTP/3 queries ratio" }, "doh_queries": { - "name": "DNS-over-HTTPS queries" + "name": "DNS-over-HTTPS queries", + "unit_of_measurement": "[%key:component::nextdns::entity::sensor::all_queries::unit_of_measurement%]" }, "doh_queries_ratio": { "name": "DNS-over-HTTPS queries ratio" }, "doq_queries": { - "name": "DNS-over-QUIC queries" + "name": "DNS-over-QUIC queries", + "unit_of_measurement": "[%key:component::nextdns::entity::sensor::all_queries::unit_of_measurement%]" }, "doq_queries_ratio": { "name": "DNS-over-QUIC queries ratio" }, "dot_queries": { - "name": "DNS-over-TLS queries" + "name": "DNS-over-TLS queries", + "unit_of_measurement": "[%key:component::nextdns::entity::sensor::all_queries::unit_of_measurement%]" }, "dot_queries_ratio": { "name": "DNS-over-TLS queries ratio" }, "encrypted_queries": { - "name": "Encrypted queries" + "name": "Encrypted queries", + "unit_of_measurement": "[%key:component::nextdns::entity::sensor::all_queries::unit_of_measurement%]" }, "encrypted_queries_ratio": { "name": "Encrypted queries ratio" }, "ipv4_queries": { - "name": "IPv4 queries" + "name": "IPv4 queries", + "unit_of_measurement": "[%key:component::nextdns::entity::sensor::all_queries::unit_of_measurement%]" }, "ipv6_queries": { - "name": "IPv6 queries" + "name": "IPv6 queries", + "unit_of_measurement": "[%key:component::nextdns::entity::sensor::all_queries::unit_of_measurement%]" }, "ipv6_queries_ratio": { "name": "IPv6 queries ratio" }, "not_validated_queries": { - "name": "DNSSEC not validated queries" + "name": "DNSSEC not validated queries", + "unit_of_measurement": "[%key:component::nextdns::entity::sensor::all_queries::unit_of_measurement%]" }, "relayed_queries": { - "name": "DNS queries relayed" + "name": "DNS queries relayed", + "unit_of_measurement": "[%key:component::nextdns::entity::sensor::all_queries::unit_of_measurement%]" }, "tcp_queries": { - "name": "TCP queries" + "name": "TCP queries", + "unit_of_measurement": "[%key:component::nextdns::entity::sensor::all_queries::unit_of_measurement%]" }, "tcp_queries_ratio": { "name": "TCP queries ratio" }, "udp_queries": { - "name": "UDP queries" + "name": "UDP queries", + "unit_of_measurement": "[%key:component::nextdns::entity::sensor::all_queries::unit_of_measurement%]" }, "udp_queries_ratio": { "name": "UDP queries ratio" }, "unencrypted_queries": { - "name": "Unencrypted queries" + "name": "Unencrypted queries", + "unit_of_measurement": "[%key:component::nextdns::entity::sensor::all_queries::unit_of_measurement%]" }, "validated_queries": { - "name": "DNSSEC validated queries" + "name": "DNSSEC validated queries", + "unit_of_measurement": "[%key:component::nextdns::entity::sensor::all_queries::unit_of_measurement%]" }, "validated_queries_ratio": { "name": "DNSSEC validated queries ratio" diff --git a/tests/components/nextdns/snapshots/test_sensor.ambr b/tests/components/nextdns/snapshots/test_sensor.ambr index 14bebea53f8..a1ff0941e3f 100644 --- a/tests/components/nextdns/snapshots/test_sensor.ambr +++ b/tests/components/nextdns/snapshots/test_sensor.ambr @@ -31,7 +31,7 @@ 'supported_features': 0, 'translation_key': 'doh3_queries', 'unique_id': 'xyz12_doh3_queries', - 'unit_of_measurement': 'queries', + 'unit_of_measurement': None, }) # --- # name: test_sensor[sensor.fake_profile_dns_over_http_3_queries-state] @@ -39,7 +39,6 @@ 'attributes': ReadOnlyDict({ 'friendly_name': 'Fake Profile DNS-over-HTTP/3 queries', 'state_class': , - 'unit_of_measurement': 'queries', }), 'context': , 'entity_id': 'sensor.fake_profile_dns_over_http_3_queries', @@ -131,7 +130,7 @@ 'supported_features': 0, 'translation_key': 'doh_queries', 'unique_id': 'xyz12_doh_queries', - 'unit_of_measurement': 'queries', + 'unit_of_measurement': None, }) # --- # name: test_sensor[sensor.fake_profile_dns_over_https_queries-state] @@ -139,7 +138,6 @@ 'attributes': ReadOnlyDict({ 'friendly_name': 'Fake Profile DNS-over-HTTPS queries', 'state_class': , - 'unit_of_measurement': 'queries', }), 'context': , 'entity_id': 'sensor.fake_profile_dns_over_https_queries', @@ -231,7 +229,7 @@ 'supported_features': 0, 'translation_key': 'doq_queries', 'unique_id': 'xyz12_doq_queries', - 'unit_of_measurement': 'queries', + 'unit_of_measurement': None, }) # --- # name: test_sensor[sensor.fake_profile_dns_over_quic_queries-state] @@ -239,7 +237,6 @@ 'attributes': ReadOnlyDict({ 'friendly_name': 'Fake Profile DNS-over-QUIC queries', 'state_class': , - 'unit_of_measurement': 'queries', }), 'context': , 'entity_id': 'sensor.fake_profile_dns_over_quic_queries', @@ -331,7 +328,7 @@ 'supported_features': 0, 'translation_key': 'dot_queries', 'unique_id': 'xyz12_dot_queries', - 'unit_of_measurement': 'queries', + 'unit_of_measurement': None, }) # --- # name: test_sensor[sensor.fake_profile_dns_over_tls_queries-state] @@ -339,7 +336,6 @@ 'attributes': ReadOnlyDict({ 'friendly_name': 'Fake Profile DNS-over-TLS queries', 'state_class': , - 'unit_of_measurement': 'queries', }), 'context': , 'entity_id': 'sensor.fake_profile_dns_over_tls_queries', @@ -431,7 +427,7 @@ 'supported_features': 0, 'translation_key': 'all_queries', 'unique_id': 'xyz12_all_queries', - 'unit_of_measurement': 'queries', + 'unit_of_measurement': None, }) # --- # name: test_sensor[sensor.fake_profile_dns_queries-state] @@ -439,7 +435,6 @@ 'attributes': ReadOnlyDict({ 'friendly_name': 'Fake Profile DNS queries', 'state_class': , - 'unit_of_measurement': 'queries', }), 'context': , 'entity_id': 'sensor.fake_profile_dns_queries', @@ -481,7 +476,7 @@ 'supported_features': 0, 'translation_key': 'blocked_queries', 'unique_id': 'xyz12_blocked_queries', - 'unit_of_measurement': 'queries', + 'unit_of_measurement': None, }) # --- # name: test_sensor[sensor.fake_profile_dns_queries_blocked-state] @@ -489,7 +484,6 @@ 'attributes': ReadOnlyDict({ 'friendly_name': 'Fake Profile DNS queries blocked', 'state_class': , - 'unit_of_measurement': 'queries', }), 'context': , 'entity_id': 'sensor.fake_profile_dns_queries_blocked', @@ -581,7 +575,7 @@ 'supported_features': 0, 'translation_key': 'relayed_queries', 'unique_id': 'xyz12_relayed_queries', - 'unit_of_measurement': 'queries', + 'unit_of_measurement': None, }) # --- # name: test_sensor[sensor.fake_profile_dns_queries_relayed-state] @@ -589,7 +583,6 @@ 'attributes': ReadOnlyDict({ 'friendly_name': 'Fake Profile DNS queries relayed', 'state_class': , - 'unit_of_measurement': 'queries', }), 'context': , 'entity_id': 'sensor.fake_profile_dns_queries_relayed', @@ -631,7 +624,7 @@ 'supported_features': 0, 'translation_key': 'not_validated_queries', 'unique_id': 'xyz12_not_validated_queries', - 'unit_of_measurement': 'queries', + 'unit_of_measurement': None, }) # --- # name: test_sensor[sensor.fake_profile_dnssec_not_validated_queries-state] @@ -639,7 +632,6 @@ 'attributes': ReadOnlyDict({ 'friendly_name': 'Fake Profile DNSSEC not validated queries', 'state_class': , - 'unit_of_measurement': 'queries', }), 'context': , 'entity_id': 'sensor.fake_profile_dnssec_not_validated_queries', @@ -681,7 +673,7 @@ 'supported_features': 0, 'translation_key': 'validated_queries', 'unique_id': 'xyz12_validated_queries', - 'unit_of_measurement': 'queries', + 'unit_of_measurement': None, }) # --- # name: test_sensor[sensor.fake_profile_dnssec_validated_queries-state] @@ -689,7 +681,6 @@ 'attributes': ReadOnlyDict({ 'friendly_name': 'Fake Profile DNSSEC validated queries', 'state_class': , - 'unit_of_measurement': 'queries', }), 'context': , 'entity_id': 'sensor.fake_profile_dnssec_validated_queries', @@ -781,7 +772,7 @@ 'supported_features': 0, 'translation_key': 'encrypted_queries', 'unique_id': 'xyz12_encrypted_queries', - 'unit_of_measurement': 'queries', + 'unit_of_measurement': None, }) # --- # name: test_sensor[sensor.fake_profile_encrypted_queries-state] @@ -789,7 +780,6 @@ 'attributes': ReadOnlyDict({ 'friendly_name': 'Fake Profile Encrypted queries', 'state_class': , - 'unit_of_measurement': 'queries', }), 'context': , 'entity_id': 'sensor.fake_profile_encrypted_queries', @@ -881,7 +871,7 @@ 'supported_features': 0, 'translation_key': 'ipv4_queries', 'unique_id': 'xyz12_ipv4_queries', - 'unit_of_measurement': 'queries', + 'unit_of_measurement': None, }) # --- # name: test_sensor[sensor.fake_profile_ipv4_queries-state] @@ -889,7 +879,6 @@ 'attributes': ReadOnlyDict({ 'friendly_name': 'Fake Profile IPv4 queries', 'state_class': , - 'unit_of_measurement': 'queries', }), 'context': , 'entity_id': 'sensor.fake_profile_ipv4_queries', @@ -931,7 +920,7 @@ 'supported_features': 0, 'translation_key': 'ipv6_queries', 'unique_id': 'xyz12_ipv6_queries', - 'unit_of_measurement': 'queries', + 'unit_of_measurement': None, }) # --- # name: test_sensor[sensor.fake_profile_ipv6_queries-state] @@ -939,7 +928,6 @@ 'attributes': ReadOnlyDict({ 'friendly_name': 'Fake Profile IPv6 queries', 'state_class': , - 'unit_of_measurement': 'queries', }), 'context': , 'entity_id': 'sensor.fake_profile_ipv6_queries', @@ -1031,7 +1019,7 @@ 'supported_features': 0, 'translation_key': 'tcp_queries', 'unique_id': 'xyz12_tcp_queries', - 'unit_of_measurement': 'queries', + 'unit_of_measurement': None, }) # --- # name: test_sensor[sensor.fake_profile_tcp_queries-state] @@ -1039,7 +1027,6 @@ 'attributes': ReadOnlyDict({ 'friendly_name': 'Fake Profile TCP queries', 'state_class': , - 'unit_of_measurement': 'queries', }), 'context': , 'entity_id': 'sensor.fake_profile_tcp_queries', @@ -1131,7 +1118,7 @@ 'supported_features': 0, 'translation_key': 'udp_queries', 'unique_id': 'xyz12_udp_queries', - 'unit_of_measurement': 'queries', + 'unit_of_measurement': None, }) # --- # name: test_sensor[sensor.fake_profile_udp_queries-state] @@ -1139,7 +1126,6 @@ 'attributes': ReadOnlyDict({ 'friendly_name': 'Fake Profile UDP queries', 'state_class': , - 'unit_of_measurement': 'queries', }), 'context': , 'entity_id': 'sensor.fake_profile_udp_queries', @@ -1231,7 +1217,7 @@ 'supported_features': 0, 'translation_key': 'unencrypted_queries', 'unique_id': 'xyz12_unencrypted_queries', - 'unit_of_measurement': 'queries', + 'unit_of_measurement': None, }) # --- # name: test_sensor[sensor.fake_profile_unencrypted_queries-state] @@ -1239,7 +1225,6 @@ 'attributes': ReadOnlyDict({ 'friendly_name': 'Fake Profile Unencrypted queries', 'state_class': , - 'unit_of_measurement': 'queries', }), 'context': , 'entity_id': 'sensor.fake_profile_unencrypted_queries',