Add ability to translate ENUM sensor states in Unifi integration (#131921)

This commit is contained in:
Maciej Bieniek 2024-12-18 14:02:44 +00:00 committed by GitHub
parent 943b1d9f08
commit 3132700492
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 113 additions and 97 deletions

View File

@ -50,17 +50,16 @@ DPI_SWITCH = "dpi"
OUTLET_SWITCH = "outlet"
DEVICE_STATES = {
DeviceState.DISCONNECTED: "Disconnected",
DeviceState.CONNECTED: "Connected",
DeviceState.PENDING: "Pending",
DeviceState.FIRMWARE_MISMATCH: "Firmware Mismatch",
DeviceState.UPGRADING: "Upgrading",
DeviceState.PROVISIONING: "Provisioning",
DeviceState.HEARTBEAT_MISSED: "Heartbeat Missed",
DeviceState.ADOPTING: "Adopting",
DeviceState.DELETING: "Deleting",
DeviceState.INFORM_ERROR: "Inform Error",
DeviceState.ADOPTION_FALIED: "Adoption Failed",
DeviceState.ISOLATED: "Isolated",
DeviceState.UNKNOWN: "Unknown",
DeviceState.DISCONNECTED: "disconnected",
DeviceState.CONNECTED: "connected",
DeviceState.PENDING: "pending",
DeviceState.FIRMWARE_MISMATCH: "firmware_mismatch",
DeviceState.UPGRADING: "upgrading",
DeviceState.PROVISIONING: "provisioning",
DeviceState.HEARTBEAT_MISSED: "heartbeat_missed",
DeviceState.ADOPTING: "adopting",
DeviceState.DELETING: "deleting",
DeviceState.INFORM_ERROR: "inform_error",
DeviceState.ADOPTION_FALIED: "adoption_failed",
DeviceState.ISOLATED: "isolated",
}

View File

@ -205,9 +205,9 @@ def async_client_is_connected_fn(hub: UnifiHub, obj_id: str) -> bool:
@callback
def async_device_state_value_fn(hub: UnifiHub, device: Device) -> str:
def async_device_state_value_fn(hub: UnifiHub, device: Device) -> str | None:
"""Retrieve the state of the device."""
return DEVICE_STATES[device.state]
return DEVICE_STATES.get(device.state)
@callback

View File

@ -33,6 +33,26 @@
"reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]"
}
},
"entity": {
"sensor": {
"device_state": {
"state": {
"disconnected": "[%key:common::state::disconnected%]",
"connected": "[%key:common::state::connected%]",
"pending": "Pending",
"firmware_mismatch": "Firmware mismatch",
"upgrading": "Upgrading",
"provisioning": "Provisioning",
"heartbeat_missed": "Heartbeat missed",
"adopting": "Adopting",
"deleting": "Deleting",
"inform_error": "Inform error",
"adoption_failed": "Adoption failed",
"isolated": "Isolated"
}
}
}
},
"options": {
"abort": {
"integration_not_setup": "UniFi integration is not set up"

View File

@ -55,19 +55,18 @@
'area_id': None,
'capabilities': dict({
'options': list([
'Disconnected',
'Connected',
'Pending',
'Firmware Mismatch',
'Upgrading',
'Provisioning',
'Heartbeat Missed',
'Adopting',
'Deleting',
'Inform Error',
'Adoption Failed',
'Isolated',
'Unknown',
'disconnected',
'connected',
'pending',
'firmware_mismatch',
'upgrading',
'provisioning',
'heartbeat_missed',
'adopting',
'deleting',
'inform_error',
'adoption_failed',
'isolated',
]),
}),
'config_entry_id': <ANY>,
@ -103,19 +102,18 @@
'device_class': 'enum',
'friendly_name': 'Device State',
'options': list([
'Disconnected',
'Connected',
'Pending',
'Firmware Mismatch',
'Upgrading',
'Provisioning',
'Heartbeat Missed',
'Adopting',
'Deleting',
'Inform Error',
'Adoption Failed',
'Isolated',
'Unknown',
'disconnected',
'connected',
'pending',
'firmware_mismatch',
'upgrading',
'provisioning',
'heartbeat_missed',
'adopting',
'deleting',
'inform_error',
'adoption_failed',
'isolated',
]),
}),
'context': <ANY>,
@ -123,7 +121,7 @@
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'Connected',
'state': 'connected',
})
# ---
# name: test_entity_and_device_data[wlan_payload0-device_payload0-client_payload0-config_entry_options0][sensor.device_temperature-entry]
@ -536,19 +534,18 @@
'area_id': None,
'capabilities': dict({
'options': list([
'Disconnected',
'Connected',
'Pending',
'Firmware Mismatch',
'Upgrading',
'Provisioning',
'Heartbeat Missed',
'Adopting',
'Deleting',
'Inform Error',
'Adoption Failed',
'Isolated',
'Unknown',
'disconnected',
'connected',
'pending',
'firmware_mismatch',
'upgrading',
'provisioning',
'heartbeat_missed',
'adopting',
'deleting',
'inform_error',
'adoption_failed',
'isolated',
]),
}),
'config_entry_id': <ANY>,
@ -584,19 +581,18 @@
'device_class': 'enum',
'friendly_name': 'Dummy USP-PDU-Pro State',
'options': list([
'Disconnected',
'Connected',
'Pending',
'Firmware Mismatch',
'Upgrading',
'Provisioning',
'Heartbeat Missed',
'Adopting',
'Deleting',
'Inform Error',
'Adoption Failed',
'Isolated',
'Unknown',
'disconnected',
'connected',
'pending',
'firmware_mismatch',
'upgrading',
'provisioning',
'heartbeat_missed',
'adopting',
'deleting',
'inform_error',
'adoption_failed',
'isolated',
]),
}),
'context': <ANY>,
@ -604,7 +600,7 @@
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'Connected',
'state': 'connected',
})
# ---
# name: test_entity_and_device_data[wlan_payload0-device_payload0-client_payload0-config_entry_options0][sensor.dummy_usp_pdu_pro_uptime-entry]
@ -1601,19 +1597,18 @@
'area_id': None,
'capabilities': dict({
'options': list([
'Disconnected',
'Connected',
'Pending',
'Firmware Mismatch',
'Upgrading',
'Provisioning',
'Heartbeat Missed',
'Adopting',
'Deleting',
'Inform Error',
'Adoption Failed',
'Isolated',
'Unknown',
'disconnected',
'connected',
'pending',
'firmware_mismatch',
'upgrading',
'provisioning',
'heartbeat_missed',
'adopting',
'deleting',
'inform_error',
'adoption_failed',
'isolated',
]),
}),
'config_entry_id': <ANY>,
@ -1649,19 +1644,18 @@
'device_class': 'enum',
'friendly_name': 'mock-name State',
'options': list([
'Disconnected',
'Connected',
'Pending',
'Firmware Mismatch',
'Upgrading',
'Provisioning',
'Heartbeat Missed',
'Adopting',
'Deleting',
'Inform Error',
'Adoption Failed',
'Isolated',
'Unknown',
'disconnected',
'connected',
'pending',
'firmware_mismatch',
'upgrading',
'provisioning',
'heartbeat_missed',
'adopting',
'deleting',
'inform_error',
'adoption_failed',
'isolated',
]),
}),
'context': <ANY>,
@ -1669,7 +1663,7 @@
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'Connected',
'state': 'connected',
})
# ---
# name: test_entity_and_device_data[wlan_payload0-device_payload0-client_payload0-config_entry_options0][sensor.mock_name_uptime-entry]

View File

@ -30,6 +30,7 @@ from homeassistant.config_entries import RELOAD_AFTER_UPDATE_DELAY
from homeassistant.const import (
ATTR_DEVICE_CLASS,
STATE_UNAVAILABLE,
STATE_UNKNOWN,
EntityCategory,
Platform,
)
@ -891,7 +892,9 @@ async def test_device_state(
for i in list(map(int, DeviceState)):
device["state"] = i
mock_websocket_message(message=MessageKey.DEVICE, data=device)
assert hass.states.get("sensor.device_state").state == DEVICE_STATES[i]
assert hass.states.get("sensor.device_state").state == DEVICE_STATES.get(
i, STATE_UNKNOWN
)
@pytest.mark.parametrize(