Add entity name translations to Pi-hole (#90713)
parent
601498617d
commit
28983bca85
|
@ -77,7 +77,7 @@ BINARY_SENSOR_TYPES: tuple[PiHoleBinarySensorEntityDescription, ...] = (
|
|||
),
|
||||
PiHoleBinarySensorEntityDescription(
|
||||
key="status",
|
||||
name="Status",
|
||||
translation_key="status",
|
||||
icon="mdi:pi-hole",
|
||||
state_value=lambda api: bool(api.data.get("status") == "enabled"),
|
||||
),
|
||||
|
@ -109,6 +109,7 @@ class PiHoleBinarySensor(PiHoleEntity, BinarySensorEntity):
|
|||
"""Representation of a Pi-hole binary sensor."""
|
||||
|
||||
entity_description: PiHoleBinarySensorEntityDescription
|
||||
_attr_has_entity_name = True
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
|
@ -123,10 +124,9 @@ class PiHoleBinarySensor(PiHoleEntity, BinarySensorEntity):
|
|||
self.entity_description = description
|
||||
|
||||
if description.key == "status":
|
||||
self._attr_has_entity_name = False
|
||||
self._attr_name = f"{name}"
|
||||
else:
|
||||
self._attr_name = f"{name} {description.name}"
|
||||
self._attr_unique_id = f"{self._server_unique_id}/{description.name}"
|
||||
self._attr_unique_id = f"{self._server_unique_id}/{description.key}"
|
||||
|
||||
@property
|
||||
def is_on(self) -> bool:
|
||||
|
|
|
@ -17,55 +17,55 @@ from .const import DATA_KEY_API, DATA_KEY_COORDINATOR, DOMAIN as PIHOLE_DOMAIN
|
|||
SENSOR_TYPES: tuple[SensorEntityDescription, ...] = (
|
||||
SensorEntityDescription(
|
||||
key="ads_blocked_today",
|
||||
name="Ads Blocked Today",
|
||||
translation_key="ads_blocked_today",
|
||||
native_unit_of_measurement="ads",
|
||||
icon="mdi:close-octagon-outline",
|
||||
),
|
||||
SensorEntityDescription(
|
||||
key="ads_percentage_today",
|
||||
name="Ads Percentage Blocked Today",
|
||||
translation_key="ads_percentage_today",
|
||||
native_unit_of_measurement=PERCENTAGE,
|
||||
icon="mdi:close-octagon-outline",
|
||||
),
|
||||
SensorEntityDescription(
|
||||
key="clients_ever_seen",
|
||||
name="Seen Clients",
|
||||
translation_key="clients_ever_seen",
|
||||
native_unit_of_measurement="clients",
|
||||
icon="mdi:account-outline",
|
||||
),
|
||||
SensorEntityDescription(
|
||||
key="dns_queries_today",
|
||||
name="DNS Queries Today",
|
||||
translation_key="dns_queries_today",
|
||||
native_unit_of_measurement="queries",
|
||||
icon="mdi:comment-question-outline",
|
||||
),
|
||||
SensorEntityDescription(
|
||||
key="domains_being_blocked",
|
||||
name="Domains Blocked",
|
||||
translation_key="domains_being_blocked",
|
||||
native_unit_of_measurement="domains",
|
||||
icon="mdi:block-helper",
|
||||
),
|
||||
SensorEntityDescription(
|
||||
key="queries_cached",
|
||||
name="DNS Queries Cached",
|
||||
translation_key="queries_cached",
|
||||
native_unit_of_measurement="queries",
|
||||
icon="mdi:comment-question-outline",
|
||||
),
|
||||
SensorEntityDescription(
|
||||
key="queries_forwarded",
|
||||
name="DNS Queries Forwarded",
|
||||
translation_key="queries_forwarded",
|
||||
native_unit_of_measurement="queries",
|
||||
icon="mdi:comment-question-outline",
|
||||
),
|
||||
SensorEntityDescription(
|
||||
key="unique_clients",
|
||||
name="DNS Unique Clients",
|
||||
translation_key="unique_clients",
|
||||
native_unit_of_measurement="clients",
|
||||
icon="mdi:account-outline",
|
||||
),
|
||||
SensorEntityDescription(
|
||||
key="unique_domains",
|
||||
name="DNS Unique Domains",
|
||||
translation_key="unique_domains",
|
||||
native_unit_of_measurement="domains",
|
||||
icon="mdi:domain",
|
||||
),
|
||||
|
@ -95,6 +95,7 @@ class PiHoleSensor(PiHoleEntity, SensorEntity):
|
|||
"""Representation of a Pi-hole sensor."""
|
||||
|
||||
entity_description: SensorEntityDescription
|
||||
_attr_has_entity_name = True
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
|
@ -108,8 +109,7 @@ class PiHoleSensor(PiHoleEntity, SensorEntity):
|
|||
super().__init__(api, coordinator, name, server_unique_id)
|
||||
self.entity_description = description
|
||||
|
||||
self._attr_name = f"{name} {description.name}"
|
||||
self._attr_unique_id = f"{self._server_unique_id}/{description.name}"
|
||||
self._attr_unique_id = f"{self._server_unique_id}/{description.key}"
|
||||
|
||||
@property
|
||||
def native_value(self) -> StateType:
|
||||
|
|
|
@ -32,5 +32,26 @@
|
|||
"already_configured": "[%key:common::config_flow::abort::already_configured_service%]",
|
||||
"reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]"
|
||||
}
|
||||
},
|
||||
"entity": {
|
||||
"binary_sensor": {
|
||||
"status": { "name": "Status" }
|
||||
},
|
||||
"sensor": {
|
||||
"ads_blocked_today": { "name": "Ads blocked today" },
|
||||
"ads_percentage_today": { "name": "Ads percentage blocked today" },
|
||||
"clients_ever_seen": { "name": "Seen clients" },
|
||||
"dns_queries_today": { "name": "DNS queries today" },
|
||||
"domains_being_blocked": { "name": "Domains blocked" },
|
||||
"queries_cached": { "name": "DNS queries cached" },
|
||||
"queries_forwarded": { "name": "DNS queries forwarded" },
|
||||
"unique_clients": { "name": "DNS unique clients" },
|
||||
"unique_domains": { "name": "DNS unique domains" }
|
||||
},
|
||||
"update": {
|
||||
"core_update_available": { "name": "Core update available" },
|
||||
"ftl_update_available": { "name": "FTL update available" },
|
||||
"web_update_available": { "name": "Web update available" }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -30,7 +30,7 @@ class PiHoleUpdateEntityDescription(UpdateEntityDescription):
|
|||
UPDATE_ENTITY_TYPES: tuple[PiHoleUpdateEntityDescription, ...] = (
|
||||
PiHoleUpdateEntityDescription(
|
||||
key="core_update_available",
|
||||
name="Core Update Available",
|
||||
translation_key="core_update_available",
|
||||
title="Pi-hole Core",
|
||||
entity_category=EntityCategory.DIAGNOSTIC,
|
||||
installed_version=lambda versions: versions.get("core_current"),
|
||||
|
@ -39,7 +39,7 @@ UPDATE_ENTITY_TYPES: tuple[PiHoleUpdateEntityDescription, ...] = (
|
|||
),
|
||||
PiHoleUpdateEntityDescription(
|
||||
key="web_update_available",
|
||||
name="Web Update Available",
|
||||
translation_key="web_update_available",
|
||||
title="Pi-hole Web interface",
|
||||
entity_category=EntityCategory.DIAGNOSTIC,
|
||||
installed_version=lambda versions: versions.get("web_current"),
|
||||
|
@ -48,7 +48,7 @@ UPDATE_ENTITY_TYPES: tuple[PiHoleUpdateEntityDescription, ...] = (
|
|||
),
|
||||
PiHoleUpdateEntityDescription(
|
||||
key="ftl_update_available",
|
||||
name="FTL Update Available",
|
||||
translation_key="ftl_update_available",
|
||||
title="Pi-hole FTL DNS",
|
||||
entity_category=EntityCategory.DIAGNOSTIC,
|
||||
installed_version=lambda versions: versions.get("FTL_current"),
|
||||
|
@ -81,6 +81,7 @@ class PiHoleUpdateEntity(PiHoleEntity, UpdateEntity):
|
|||
"""Representation of a Pi-hole update entity."""
|
||||
|
||||
entity_description: PiHoleUpdateEntityDescription
|
||||
_attr_has_entity_name = True
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
|
@ -94,8 +95,7 @@ class PiHoleUpdateEntity(PiHoleEntity, UpdateEntity):
|
|||
super().__init__(api, coordinator, name, server_unique_id)
|
||||
self.entity_description = description
|
||||
|
||||
self._attr_name = f"{name} {description.name}"
|
||||
self._attr_unique_id = f"{self._server_unique_id}/{description.name}"
|
||||
self._attr_unique_id = f"{self._server_unique_id}/{description.key}"
|
||||
self._attr_title = description.title
|
||||
|
||||
@property
|
||||
|
|
|
@ -36,39 +36,39 @@ async def test_setup_with_defaults(hass: HomeAssistant) -> None:
|
|||
assert await hass.config_entries.async_setup(entry.entry_id)
|
||||
|
||||
state = hass.states.get("sensor.pi_hole_ads_blocked_today")
|
||||
assert state.name == "Pi-Hole Ads Blocked Today"
|
||||
assert state.name == "Pi-Hole Ads blocked today"
|
||||
assert state.state == "0"
|
||||
|
||||
state = hass.states.get("sensor.pi_hole_ads_percentage_blocked_today")
|
||||
assert state.name == "Pi-Hole Ads Percentage Blocked Today"
|
||||
assert state.name == "Pi-Hole Ads percentage blocked today"
|
||||
assert state.state == "0"
|
||||
|
||||
state = hass.states.get("sensor.pi_hole_dns_queries_cached")
|
||||
assert state.name == "Pi-Hole DNS Queries Cached"
|
||||
assert state.name == "Pi-Hole DNS queries cached"
|
||||
assert state.state == "0"
|
||||
|
||||
state = hass.states.get("sensor.pi_hole_dns_queries_forwarded")
|
||||
assert state.name == "Pi-Hole DNS Queries Forwarded"
|
||||
assert state.name == "Pi-Hole DNS queries forwarded"
|
||||
assert state.state == "0"
|
||||
|
||||
state = hass.states.get("sensor.pi_hole_dns_queries_today")
|
||||
assert state.name == "Pi-Hole DNS Queries Today"
|
||||
assert state.name == "Pi-Hole DNS queries today"
|
||||
assert state.state == "0"
|
||||
|
||||
state = hass.states.get("sensor.pi_hole_dns_unique_clients")
|
||||
assert state.name == "Pi-Hole DNS Unique Clients"
|
||||
assert state.name == "Pi-Hole DNS unique clients"
|
||||
assert state.state == "0"
|
||||
|
||||
state = hass.states.get("sensor.pi_hole_dns_unique_domains")
|
||||
assert state.name == "Pi-Hole DNS Unique Domains"
|
||||
assert state.name == "Pi-Hole DNS unique domains"
|
||||
assert state.state == "0"
|
||||
|
||||
state = hass.states.get("sensor.pi_hole_domains_blocked")
|
||||
assert state.name == "Pi-Hole Domains Blocked"
|
||||
assert state.name == "Pi-Hole Domains blocked"
|
||||
assert state.state == "0"
|
||||
|
||||
state = hass.states.get("sensor.pi_hole_seen_clients")
|
||||
assert state.name == "Pi-Hole Seen Clients"
|
||||
assert state.name == "Pi-Hole Seen clients"
|
||||
assert state.state == "0"
|
||||
|
||||
state = hass.states.get("binary_sensor.pi_hole")
|
||||
|
@ -90,7 +90,7 @@ async def test_setup_name_config(hass: HomeAssistant) -> None:
|
|||
|
||||
assert (
|
||||
hass.states.get("sensor.custom_ads_blocked_today").name
|
||||
== "Custom Ads Blocked Today"
|
||||
== "Custom Ads blocked today"
|
||||
)
|
||||
|
||||
|
||||
|
|
|
@ -20,7 +20,7 @@ async def test_update(hass: HomeAssistant) -> None:
|
|||
await hass.async_block_till_done()
|
||||
|
||||
state = hass.states.get("update.pi_hole_core_update_available")
|
||||
assert state.name == "Pi-Hole Core Update Available"
|
||||
assert state.name == "Pi-Hole Core update available"
|
||||
assert state.state == STATE_ON
|
||||
assert state.attributes["installed_version"] == "v5.5"
|
||||
assert state.attributes["latest_version"] == "v5.6"
|
||||
|
@ -30,7 +30,7 @@ async def test_update(hass: HomeAssistant) -> None:
|
|||
)
|
||||
|
||||
state = hass.states.get("update.pi_hole_ftl_update_available")
|
||||
assert state.name == "Pi-Hole FTL Update Available"
|
||||
assert state.name == "Pi-Hole FTL update available"
|
||||
assert state.state == STATE_ON
|
||||
assert state.attributes["installed_version"] == "v5.10"
|
||||
assert state.attributes["latest_version"] == "v5.11"
|
||||
|
@ -40,7 +40,7 @@ async def test_update(hass: HomeAssistant) -> None:
|
|||
)
|
||||
|
||||
state = hass.states.get("update.pi_hole_web_update_available")
|
||||
assert state.name == "Pi-Hole Web Update Available"
|
||||
assert state.name == "Pi-Hole Web update available"
|
||||
assert state.state == STATE_ON
|
||||
assert state.attributes["installed_version"] == "v5.7"
|
||||
assert state.attributes["latest_version"] == "v5.8"
|
||||
|
@ -61,21 +61,21 @@ async def test_update_no_versions(hass: HomeAssistant) -> None:
|
|||
await hass.async_block_till_done()
|
||||
|
||||
state = hass.states.get("update.pi_hole_core_update_available")
|
||||
assert state.name == "Pi-Hole Core Update Available"
|
||||
assert state.name == "Pi-Hole Core update available"
|
||||
assert state.state == STATE_UNKNOWN
|
||||
assert state.attributes["installed_version"] is None
|
||||
assert state.attributes["latest_version"] is None
|
||||
assert state.attributes["release_url"] is None
|
||||
|
||||
state = hass.states.get("update.pi_hole_ftl_update_available")
|
||||
assert state.name == "Pi-Hole FTL Update Available"
|
||||
assert state.name == "Pi-Hole FTL update available"
|
||||
assert state.state == STATE_UNKNOWN
|
||||
assert state.attributes["installed_version"] is None
|
||||
assert state.attributes["latest_version"] is None
|
||||
assert state.attributes["release_url"] is None
|
||||
|
||||
state = hass.states.get("update.pi_hole_web_update_available")
|
||||
assert state.name == "Pi-Hole Web Update Available"
|
||||
assert state.name == "Pi-Hole Web update available"
|
||||
assert state.state == STATE_UNKNOWN
|
||||
assert state.attributes["installed_version"] is None
|
||||
assert state.attributes["latest_version"] is None
|
||||
|
|
Loading…
Reference in New Issue