Add icon translations to Tailscale (#112302)

This commit is contained in:
Joost Lekkerkerker 2024-03-06 13:38:32 +01:00 committed by GitHub
parent a23dbe4727
commit 0cdc90468e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 31 additions and 29 deletions

View File

@ -38,42 +38,36 @@ BINARY_SENSORS: tuple[TailscaleBinarySensorEntityDescription, ...] = (
TailscaleBinarySensorEntityDescription( TailscaleBinarySensorEntityDescription(
key="client_supports_hair_pinning", key="client_supports_hair_pinning",
translation_key="client_supports_hair_pinning", translation_key="client_supports_hair_pinning",
icon="mdi:wan",
entity_category=EntityCategory.DIAGNOSTIC, entity_category=EntityCategory.DIAGNOSTIC,
is_on_fn=lambda device: device.client_connectivity.client_supports.hair_pinning, is_on_fn=lambda device: device.client_connectivity.client_supports.hair_pinning,
), ),
TailscaleBinarySensorEntityDescription( TailscaleBinarySensorEntityDescription(
key="client_supports_ipv6", key="client_supports_ipv6",
translation_key="client_supports_ipv6", translation_key="client_supports_ipv6",
icon="mdi:wan",
entity_category=EntityCategory.DIAGNOSTIC, entity_category=EntityCategory.DIAGNOSTIC,
is_on_fn=lambda device: device.client_connectivity.client_supports.ipv6, is_on_fn=lambda device: device.client_connectivity.client_supports.ipv6,
), ),
TailscaleBinarySensorEntityDescription( TailscaleBinarySensorEntityDescription(
key="client_supports_pcp", key="client_supports_pcp",
translation_key="client_supports_pcp", translation_key="client_supports_pcp",
icon="mdi:wan",
entity_category=EntityCategory.DIAGNOSTIC, entity_category=EntityCategory.DIAGNOSTIC,
is_on_fn=lambda device: device.client_connectivity.client_supports.pcp, is_on_fn=lambda device: device.client_connectivity.client_supports.pcp,
), ),
TailscaleBinarySensorEntityDescription( TailscaleBinarySensorEntityDescription(
key="client_supports_pmp", key="client_supports_pmp",
translation_key="client_supports_pmp", translation_key="client_supports_pmp",
icon="mdi:wan",
entity_category=EntityCategory.DIAGNOSTIC, entity_category=EntityCategory.DIAGNOSTIC,
is_on_fn=lambda device: device.client_connectivity.client_supports.pmp, is_on_fn=lambda device: device.client_connectivity.client_supports.pmp,
), ),
TailscaleBinarySensorEntityDescription( TailscaleBinarySensorEntityDescription(
key="client_supports_udp", key="client_supports_udp",
translation_key="client_supports_udp", translation_key="client_supports_udp",
icon="mdi:wan",
entity_category=EntityCategory.DIAGNOSTIC, entity_category=EntityCategory.DIAGNOSTIC,
is_on_fn=lambda device: device.client_connectivity.client_supports.udp, is_on_fn=lambda device: device.client_connectivity.client_supports.udp,
), ),
TailscaleBinarySensorEntityDescription( TailscaleBinarySensorEntityDescription(
key="client_supports_upnp", key="client_supports_upnp",
translation_key="client_supports_upnp", translation_key="client_supports_upnp",
icon="mdi:wan",
entity_category=EntityCategory.DIAGNOSTIC, entity_category=EntityCategory.DIAGNOSTIC,
is_on_fn=lambda device: device.client_connectivity.client_supports.upnp, is_on_fn=lambda device: device.client_connectivity.client_supports.upnp,
), ),

View File

@ -0,0 +1,29 @@
{
"entity": {
"binary_sensor": {
"client_supports_hair_pinning": {
"default": "mdi:wan"
},
"client_supports_ipv6": {
"default": "mdi:wan"
},
"client_supports_pcp": {
"default": "mdi:wan"
},
"client_supports_pmp": {
"default": "mdi:wan"
},
"client_supports_udp": {
"default": "mdi:wan"
},
"client_supports_upnp": {
"default": "mdi:wan"
}
},
"sensor": {
"ip": {
"default": "mdi:ip-network"
}
}
}
}

View File

@ -39,7 +39,6 @@ SENSORS: tuple[TailscaleSensorEntityDescription, ...] = (
TailscaleSensorEntityDescription( TailscaleSensorEntityDescription(
key="ip", key="ip",
translation_key="ip", translation_key="ip",
icon="mdi:ip-network",
entity_category=EntityCategory.DIAGNOSTIC, entity_category=EntityCategory.DIAGNOSTIC,
value_fn=lambda device: device.addresses[0] if device.addresses else None, value_fn=lambda device: device.addresses[0] if device.addresses else None,
), ),

View File

@ -5,12 +5,7 @@ from homeassistant.components.binary_sensor import (
BinarySensorDeviceClass, BinarySensorDeviceClass,
) )
from homeassistant.components.tailscale.const import DOMAIN from homeassistant.components.tailscale.const import DOMAIN
from homeassistant.const import ( from homeassistant.const import ATTR_DEVICE_CLASS, ATTR_FRIENDLY_NAME, EntityCategory
ATTR_DEVICE_CLASS,
ATTR_FRIENDLY_NAME,
ATTR_ICON,
EntityCategory,
)
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.helpers import device_registry as dr, entity_registry as er from homeassistant.helpers import device_registry as dr, entity_registry as er
@ -34,7 +29,6 @@ async def test_tailscale_binary_sensors(
assert state.state == STATE_ON assert state.state == STATE_ON
assert state.attributes.get(ATTR_FRIENDLY_NAME) == "frencks-iphone Client" assert state.attributes.get(ATTR_FRIENDLY_NAME) == "frencks-iphone Client"
assert state.attributes.get(ATTR_DEVICE_CLASS) == BinarySensorDeviceClass.UPDATE assert state.attributes.get(ATTR_DEVICE_CLASS) == BinarySensorDeviceClass.UPDATE
assert ATTR_ICON not in state.attributes
state = hass.states.get("binary_sensor.frencks_iphone_supports_hairpinning") state = hass.states.get("binary_sensor.frencks_iphone_supports_hairpinning")
entry = entity_registry.async_get( entry = entity_registry.async_get(
@ -49,7 +43,6 @@ async def test_tailscale_binary_sensors(
state.attributes.get(ATTR_FRIENDLY_NAME) state.attributes.get(ATTR_FRIENDLY_NAME)
== "frencks-iphone Supports hairpinning" == "frencks-iphone Supports hairpinning"
) )
assert state.attributes.get(ATTR_ICON) == "mdi:wan"
assert ATTR_DEVICE_CLASS not in state.attributes assert ATTR_DEVICE_CLASS not in state.attributes
state = hass.states.get("binary_sensor.frencks_iphone_supports_ipv6") state = hass.states.get("binary_sensor.frencks_iphone_supports_ipv6")
@ -60,7 +53,6 @@ async def test_tailscale_binary_sensors(
assert entry.entity_category == EntityCategory.DIAGNOSTIC assert entry.entity_category == EntityCategory.DIAGNOSTIC
assert state.state == STATE_OFF assert state.state == STATE_OFF
assert state.attributes.get(ATTR_FRIENDLY_NAME) == "frencks-iphone Supports IPv6" assert state.attributes.get(ATTR_FRIENDLY_NAME) == "frencks-iphone Supports IPv6"
assert state.attributes.get(ATTR_ICON) == "mdi:wan"
assert ATTR_DEVICE_CLASS not in state.attributes assert ATTR_DEVICE_CLASS not in state.attributes
state = hass.states.get("binary_sensor.frencks_iphone_supports_pcp") state = hass.states.get("binary_sensor.frencks_iphone_supports_pcp")
@ -71,7 +63,6 @@ async def test_tailscale_binary_sensors(
assert entry.entity_category == EntityCategory.DIAGNOSTIC assert entry.entity_category == EntityCategory.DIAGNOSTIC
assert state.state == STATE_OFF assert state.state == STATE_OFF
assert state.attributes.get(ATTR_FRIENDLY_NAME) == "frencks-iphone Supports PCP" assert state.attributes.get(ATTR_FRIENDLY_NAME) == "frencks-iphone Supports PCP"
assert state.attributes.get(ATTR_ICON) == "mdi:wan"
assert ATTR_DEVICE_CLASS not in state.attributes assert ATTR_DEVICE_CLASS not in state.attributes
state = hass.states.get("binary_sensor.frencks_iphone_supports_nat_pmp") state = hass.states.get("binary_sensor.frencks_iphone_supports_nat_pmp")
@ -82,7 +73,6 @@ async def test_tailscale_binary_sensors(
assert entry.entity_category == EntityCategory.DIAGNOSTIC assert entry.entity_category == EntityCategory.DIAGNOSTIC
assert state.state == STATE_OFF assert state.state == STATE_OFF
assert state.attributes.get(ATTR_FRIENDLY_NAME) == "frencks-iphone Supports NAT-PMP" assert state.attributes.get(ATTR_FRIENDLY_NAME) == "frencks-iphone Supports NAT-PMP"
assert state.attributes.get(ATTR_ICON) == "mdi:wan"
assert ATTR_DEVICE_CLASS not in state.attributes assert ATTR_DEVICE_CLASS not in state.attributes
state = hass.states.get("binary_sensor.frencks_iphone_supports_udp") state = hass.states.get("binary_sensor.frencks_iphone_supports_udp")
@ -93,7 +83,6 @@ async def test_tailscale_binary_sensors(
assert entry.entity_category == EntityCategory.DIAGNOSTIC assert entry.entity_category == EntityCategory.DIAGNOSTIC
assert state.state == STATE_ON assert state.state == STATE_ON
assert state.attributes.get(ATTR_FRIENDLY_NAME) == "frencks-iphone Supports UDP" assert state.attributes.get(ATTR_FRIENDLY_NAME) == "frencks-iphone Supports UDP"
assert state.attributes.get(ATTR_ICON) == "mdi:wan"
assert ATTR_DEVICE_CLASS not in state.attributes assert ATTR_DEVICE_CLASS not in state.attributes
state = hass.states.get("binary_sensor.frencks_iphone_supports_upnp") state = hass.states.get("binary_sensor.frencks_iphone_supports_upnp")
@ -104,7 +93,6 @@ async def test_tailscale_binary_sensors(
assert entry.entity_category == EntityCategory.DIAGNOSTIC assert entry.entity_category == EntityCategory.DIAGNOSTIC
assert state.state == STATE_OFF assert state.state == STATE_OFF
assert state.attributes.get(ATTR_FRIENDLY_NAME) == "frencks-iphone Supports UPnP" assert state.attributes.get(ATTR_FRIENDLY_NAME) == "frencks-iphone Supports UPnP"
assert state.attributes.get(ATTR_ICON) == "mdi:wan"
assert ATTR_DEVICE_CLASS not in state.attributes assert ATTR_DEVICE_CLASS not in state.attributes
assert entry.device_id assert entry.device_id

View File

@ -1,12 +1,7 @@
"""Tests for the sensors provided by the Tailscale integration.""" """Tests for the sensors provided by the Tailscale integration."""
from homeassistant.components.sensor import SensorDeviceClass from homeassistant.components.sensor import SensorDeviceClass
from homeassistant.components.tailscale.const import DOMAIN from homeassistant.components.tailscale.const import DOMAIN
from homeassistant.const import ( from homeassistant.const import ATTR_DEVICE_CLASS, ATTR_FRIENDLY_NAME, EntityCategory
ATTR_DEVICE_CLASS,
ATTR_FRIENDLY_NAME,
ATTR_ICON,
EntityCategory,
)
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.helpers import device_registry as dr, entity_registry as er from homeassistant.helpers import device_registry as dr, entity_registry as er
@ -30,7 +25,6 @@ async def test_tailscale_sensors(
assert state.state == "2022-02-25T09:49:06+00:00" assert state.state == "2022-02-25T09:49:06+00:00"
assert state.attributes.get(ATTR_FRIENDLY_NAME) == "router Expires" assert state.attributes.get(ATTR_FRIENDLY_NAME) == "router Expires"
assert state.attributes.get(ATTR_DEVICE_CLASS) == SensorDeviceClass.TIMESTAMP assert state.attributes.get(ATTR_DEVICE_CLASS) == SensorDeviceClass.TIMESTAMP
assert ATTR_ICON not in state.attributes
state = hass.states.get("sensor.router_last_seen") state = hass.states.get("sensor.router_last_seen")
entry = entity_registry.async_get("sensor.router_last_seen") entry = entity_registry.async_get("sensor.router_last_seen")
@ -41,7 +35,6 @@ async def test_tailscale_sensors(
assert state.state == "2021-11-15T20:37:03+00:00" assert state.state == "2021-11-15T20:37:03+00:00"
assert state.attributes.get(ATTR_FRIENDLY_NAME) == "router Last seen" assert state.attributes.get(ATTR_FRIENDLY_NAME) == "router Last seen"
assert state.attributes.get(ATTR_DEVICE_CLASS) == SensorDeviceClass.TIMESTAMP assert state.attributes.get(ATTR_DEVICE_CLASS) == SensorDeviceClass.TIMESTAMP
assert ATTR_ICON not in state.attributes
state = hass.states.get("sensor.router_ip_address") state = hass.states.get("sensor.router_ip_address")
entry = entity_registry.async_get("sensor.router_ip_address") entry = entity_registry.async_get("sensor.router_ip_address")
@ -51,7 +44,6 @@ async def test_tailscale_sensors(
assert entry.entity_category == EntityCategory.DIAGNOSTIC assert entry.entity_category == EntityCategory.DIAGNOSTIC
assert state.state == "100.11.11.112" assert state.state == "100.11.11.112"
assert state.attributes.get(ATTR_FRIENDLY_NAME) == "router IP address" assert state.attributes.get(ATTR_FRIENDLY_NAME) == "router IP address"
assert state.attributes.get(ATTR_ICON) == "mdi:ip-network"
assert ATTR_DEVICE_CLASS not in state.attributes assert ATTR_DEVICE_CLASS not in state.attributes
assert entry.device_id assert entry.device_id