mirror of
https://github.com/home-assistant/core.git
synced 2025-07-25 22:27:07 +00:00
Add icon translations to Tailscale (#112302)
This commit is contained in:
parent
a23dbe4727
commit
0cdc90468e
@ -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,
|
||||||
),
|
),
|
||||||
|
29
homeassistant/components/tailscale/icons.json
Normal file
29
homeassistant/components/tailscale/icons.json
Normal 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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -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,
|
||||||
),
|
),
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user