mirror of
https://github.com/home-assistant/core.git
synced 2025-07-24 13:47:35 +00:00
Add ability to translate ENUM sensor states in Unifi integration (#131921)
This commit is contained in:
parent
943b1d9f08
commit
3132700492
@ -50,17 +50,16 @@ DPI_SWITCH = "dpi"
|
|||||||
OUTLET_SWITCH = "outlet"
|
OUTLET_SWITCH = "outlet"
|
||||||
|
|
||||||
DEVICE_STATES = {
|
DEVICE_STATES = {
|
||||||
DeviceState.DISCONNECTED: "Disconnected",
|
DeviceState.DISCONNECTED: "disconnected",
|
||||||
DeviceState.CONNECTED: "Connected",
|
DeviceState.CONNECTED: "connected",
|
||||||
DeviceState.PENDING: "Pending",
|
DeviceState.PENDING: "pending",
|
||||||
DeviceState.FIRMWARE_MISMATCH: "Firmware Mismatch",
|
DeviceState.FIRMWARE_MISMATCH: "firmware_mismatch",
|
||||||
DeviceState.UPGRADING: "Upgrading",
|
DeviceState.UPGRADING: "upgrading",
|
||||||
DeviceState.PROVISIONING: "Provisioning",
|
DeviceState.PROVISIONING: "provisioning",
|
||||||
DeviceState.HEARTBEAT_MISSED: "Heartbeat Missed",
|
DeviceState.HEARTBEAT_MISSED: "heartbeat_missed",
|
||||||
DeviceState.ADOPTING: "Adopting",
|
DeviceState.ADOPTING: "adopting",
|
||||||
DeviceState.DELETING: "Deleting",
|
DeviceState.DELETING: "deleting",
|
||||||
DeviceState.INFORM_ERROR: "Inform Error",
|
DeviceState.INFORM_ERROR: "inform_error",
|
||||||
DeviceState.ADOPTION_FALIED: "Adoption Failed",
|
DeviceState.ADOPTION_FALIED: "adoption_failed",
|
||||||
DeviceState.ISOLATED: "Isolated",
|
DeviceState.ISOLATED: "isolated",
|
||||||
DeviceState.UNKNOWN: "Unknown",
|
|
||||||
}
|
}
|
||||||
|
@ -205,9 +205,9 @@ def async_client_is_connected_fn(hub: UnifiHub, obj_id: str) -> bool:
|
|||||||
|
|
||||||
|
|
||||||
@callback
|
@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."""
|
"""Retrieve the state of the device."""
|
||||||
return DEVICE_STATES[device.state]
|
return DEVICE_STATES.get(device.state)
|
||||||
|
|
||||||
|
|
||||||
@callback
|
@callback
|
||||||
|
@ -33,6 +33,26 @@
|
|||||||
"reauth_successful": "[%key:common::config_flow::abort::reauth_successful%]"
|
"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": {
|
"options": {
|
||||||
"abort": {
|
"abort": {
|
||||||
"integration_not_setup": "UniFi integration is not set up"
|
"integration_not_setup": "UniFi integration is not set up"
|
||||||
|
@ -55,19 +55,18 @@
|
|||||||
'area_id': None,
|
'area_id': None,
|
||||||
'capabilities': dict({
|
'capabilities': dict({
|
||||||
'options': list([
|
'options': list([
|
||||||
'Disconnected',
|
'disconnected',
|
||||||
'Connected',
|
'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',
|
||||||
'Unknown',
|
|
||||||
]),
|
]),
|
||||||
}),
|
}),
|
||||||
'config_entry_id': <ANY>,
|
'config_entry_id': <ANY>,
|
||||||
@ -103,19 +102,18 @@
|
|||||||
'device_class': 'enum',
|
'device_class': 'enum',
|
||||||
'friendly_name': 'Device State',
|
'friendly_name': 'Device State',
|
||||||
'options': list([
|
'options': list([
|
||||||
'Disconnected',
|
'disconnected',
|
||||||
'Connected',
|
'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',
|
||||||
'Unknown',
|
|
||||||
]),
|
]),
|
||||||
}),
|
}),
|
||||||
'context': <ANY>,
|
'context': <ANY>,
|
||||||
@ -123,7 +121,7 @@
|
|||||||
'last_changed': <ANY>,
|
'last_changed': <ANY>,
|
||||||
'last_reported': <ANY>,
|
'last_reported': <ANY>,
|
||||||
'last_updated': <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]
|
# 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,
|
'area_id': None,
|
||||||
'capabilities': dict({
|
'capabilities': dict({
|
||||||
'options': list([
|
'options': list([
|
||||||
'Disconnected',
|
'disconnected',
|
||||||
'Connected',
|
'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',
|
||||||
'Unknown',
|
|
||||||
]),
|
]),
|
||||||
}),
|
}),
|
||||||
'config_entry_id': <ANY>,
|
'config_entry_id': <ANY>,
|
||||||
@ -584,19 +581,18 @@
|
|||||||
'device_class': 'enum',
|
'device_class': 'enum',
|
||||||
'friendly_name': 'Dummy USP-PDU-Pro State',
|
'friendly_name': 'Dummy USP-PDU-Pro State',
|
||||||
'options': list([
|
'options': list([
|
||||||
'Disconnected',
|
'disconnected',
|
||||||
'Connected',
|
'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',
|
||||||
'Unknown',
|
|
||||||
]),
|
]),
|
||||||
}),
|
}),
|
||||||
'context': <ANY>,
|
'context': <ANY>,
|
||||||
@ -604,7 +600,7 @@
|
|||||||
'last_changed': <ANY>,
|
'last_changed': <ANY>,
|
||||||
'last_reported': <ANY>,
|
'last_reported': <ANY>,
|
||||||
'last_updated': <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]
|
# 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,
|
'area_id': None,
|
||||||
'capabilities': dict({
|
'capabilities': dict({
|
||||||
'options': list([
|
'options': list([
|
||||||
'Disconnected',
|
'disconnected',
|
||||||
'Connected',
|
'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',
|
||||||
'Unknown',
|
|
||||||
]),
|
]),
|
||||||
}),
|
}),
|
||||||
'config_entry_id': <ANY>,
|
'config_entry_id': <ANY>,
|
||||||
@ -1649,19 +1644,18 @@
|
|||||||
'device_class': 'enum',
|
'device_class': 'enum',
|
||||||
'friendly_name': 'mock-name State',
|
'friendly_name': 'mock-name State',
|
||||||
'options': list([
|
'options': list([
|
||||||
'Disconnected',
|
'disconnected',
|
||||||
'Connected',
|
'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',
|
||||||
'Unknown',
|
|
||||||
]),
|
]),
|
||||||
}),
|
}),
|
||||||
'context': <ANY>,
|
'context': <ANY>,
|
||||||
@ -1669,7 +1663,7 @@
|
|||||||
'last_changed': <ANY>,
|
'last_changed': <ANY>,
|
||||||
'last_reported': <ANY>,
|
'last_reported': <ANY>,
|
||||||
'last_updated': <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]
|
# name: test_entity_and_device_data[wlan_payload0-device_payload0-client_payload0-config_entry_options0][sensor.mock_name_uptime-entry]
|
||||||
|
@ -30,6 +30,7 @@ from homeassistant.config_entries import RELOAD_AFTER_UPDATE_DELAY
|
|||||||
from homeassistant.const import (
|
from homeassistant.const import (
|
||||||
ATTR_DEVICE_CLASS,
|
ATTR_DEVICE_CLASS,
|
||||||
STATE_UNAVAILABLE,
|
STATE_UNAVAILABLE,
|
||||||
|
STATE_UNKNOWN,
|
||||||
EntityCategory,
|
EntityCategory,
|
||||||
Platform,
|
Platform,
|
||||||
)
|
)
|
||||||
@ -891,7 +892,9 @@ async def test_device_state(
|
|||||||
for i in list(map(int, DeviceState)):
|
for i in list(map(int, DeviceState)):
|
||||||
device["state"] = i
|
device["state"] = i
|
||||||
mock_websocket_message(message=MessageKey.DEVICE, data=device)
|
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(
|
@pytest.mark.parametrize(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user