Remove state attributes in Totalconnect (#142625)

pull/139888/merge
Joost Lekkerkerker 2025-04-14 12:24:32 +02:00 committed by GitHub
parent 1480b77461
commit 583eb1a80e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 6 additions and 85 deletions

View File

@ -97,22 +97,6 @@ class TotalConnectAlarm(TotalConnectLocationEntity, AlarmControlPanelEntity):
@property
def alarm_state(self) -> AlarmControlPanelState | None:
"""Return the state of the device."""
# State attributes can be removed in 2025.3
attr = {
"location_id": self._location.location_id,
"partition": self._partition_id,
"ac_loss": self._location.ac_loss,
"low_battery": self._location.low_battery,
"cover_tampered": self._location.is_cover_tampered(),
"triggered_source": None,
"triggered_zone": None,
}
if self._partition_id == 1:
attr["location_name"] = self.device.name
else:
attr["location_name"] = f"{self.device.name} partition {self._partition_id}"
state: AlarmControlPanelState | None = None
if self._partition.arming_state.is_disarmed():
state = AlarmControlPanelState.DISARMED
@ -128,17 +112,12 @@ class TotalConnectAlarm(TotalConnectLocationEntity, AlarmControlPanelEntity):
state = AlarmControlPanelState.ARMING
elif self._partition.arming_state.is_disarming():
state = AlarmControlPanelState.DISARMING
elif self._partition.arming_state.is_triggered_police():
elif (
self._partition.arming_state.is_triggered_police()
or self._partition.arming_state.is_triggered_fire()
or self._partition.arming_state.is_triggered_gas()
):
state = AlarmControlPanelState.TRIGGERED
attr["triggered_source"] = "Police/Medical"
elif self._partition.arming_state.is_triggered_fire():
state = AlarmControlPanelState.TRIGGERED
attr["triggered_source"] = "Fire/Smoke"
elif self._partition.arming_state.is_triggered_gas():
state = AlarmControlPanelState.TRIGGERED
attr["triggered_source"] = "Carbon Monoxide"
self._attr_extra_state_attributes = attr
return state

View File

@ -36,19 +36,11 @@
# name: test_attributes[alarm_control_panel.test-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'ac_loss': False,
'changed_by': None,
'code_arm_required': False,
'code_format': None,
'cover_tampered': False,
'friendly_name': 'test',
'location_id': 123456,
'location_name': 'test',
'low_battery': False,
'partition': 1,
'supported_features': <AlarmControlPanelEntityFeature: 7>,
'triggered_source': None,
'triggered_zone': None,
}),
'context': <ANY>,
'entity_id': 'alarm_control_panel.test',
@ -95,19 +87,11 @@
# name: test_attributes[alarm_control_panel.test_partition_2-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'ac_loss': False,
'changed_by': None,
'code_arm_required': False,
'code_format': None,
'cover_tampered': False,
'friendly_name': 'test Partition 2',
'location_id': 123456,
'location_name': 'test partition 2',
'low_battery': False,
'partition': 2,
'supported_features': <AlarmControlPanelEntityFeature: 7>,
'triggered_source': None,
'triggered_zone': None,
}),
'context': <ANY>,
'entity_id': 'alarm_control_panel.test_partition_2',

View File

@ -50,9 +50,6 @@ from .common import (
RESPONSE_DISARMED,
RESPONSE_DISARMING,
RESPONSE_SUCCESS,
RESPONSE_TRIGGERED_CARBON_MONOXIDE,
RESPONSE_TRIGGERED_FIRE,
RESPONSE_TRIGGERED_POLICE,
RESPONSE_UNKNOWN,
RESPONSE_USER_CODE_INVALID,
TOTALCONNECT_REQUEST,
@ -195,7 +192,7 @@ async def test_arm_home_instant_failure(hass: HomeAssistant) -> None:
DOMAIN, SERVICE_ALARM_ARM_HOME_INSTANT, DATA, blocking=True
)
await hass.async_block_till_done()
assert f"{err.value}" == "Usercode is invalid, did not arm home instant"
assert str(err.value) == "Usercode is invalid, did not arm home instant"
assert hass.states.get(ENTITY_ID).state == AlarmControlPanelState.DISARMED
# should have started a re-auth flow
assert len(hass.config_entries.flow.async_progress_by_handler(DOMAIN)) == 1
@ -513,45 +510,6 @@ async def test_disarming(hass: HomeAssistant, freezer: FrozenDateTimeFactory) ->
assert hass.states.get(ENTITY_ID).state == AlarmControlPanelState.DISARMING
async def test_triggered_fire(hass: HomeAssistant) -> None:
"""Test triggered by fire."""
responses = [RESPONSE_TRIGGERED_FIRE]
await setup_platform(hass, ALARM_DOMAIN)
with patch(TOTALCONNECT_REQUEST, side_effect=responses) as mock_request:
await async_update_entity(hass, ENTITY_ID)
await hass.async_block_till_done()
state = hass.states.get(ENTITY_ID)
assert state.state == AlarmControlPanelState.TRIGGERED
assert state.attributes.get("triggered_source") == "Fire/Smoke"
assert mock_request.call_count == 1
async def test_triggered_police(hass: HomeAssistant) -> None:
"""Test triggered by police."""
responses = [RESPONSE_TRIGGERED_POLICE]
await setup_platform(hass, ALARM_DOMAIN)
with patch(TOTALCONNECT_REQUEST, side_effect=responses) as mock_request:
await async_update_entity(hass, ENTITY_ID)
await hass.async_block_till_done()
state = hass.states.get(ENTITY_ID)
assert state.state == AlarmControlPanelState.TRIGGERED
assert state.attributes.get("triggered_source") == "Police/Medical"
assert mock_request.call_count == 1
async def test_triggered_carbon_monoxide(hass: HomeAssistant) -> None:
"""Test triggered by carbon monoxide."""
responses = [RESPONSE_TRIGGERED_CARBON_MONOXIDE]
await setup_platform(hass, ALARM_DOMAIN)
with patch(TOTALCONNECT_REQUEST, side_effect=responses) as mock_request:
await async_update_entity(hass, ENTITY_ID)
await hass.async_block_till_done()
state = hass.states.get(ENTITY_ID)
assert state.state == AlarmControlPanelState.TRIGGERED
assert state.attributes.get("triggered_source") == "Carbon Monoxide"
assert mock_request.call_count == 1
async def test_armed_custom(hass: HomeAssistant) -> None:
"""Test armed custom."""
responses = [RESPONSE_ARMED_CUSTOM]