Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 13 additions & 4 deletions tests/test_component_alarm.py
Original file line number Diff line number Diff line change
Expand Up @@ -371,13 +371,22 @@ def test_handle_event(self, alarm_central):
assert alarm_central.extra_state_attributes["raw_state"] == "deactivation"
assert alarm_central.extra_state_attributes["state_code"] == 2

# Armed away event (*5*1*0## - activation)
msg_away = OWNEvent.parse("*5*1*0##")
alarm_central.handle_event(msg_away)
assert alarm_central.alarm_state == STATE_ARMED_AWAY
# Activation (*5*1*0##) is "system operational", not armed: the F454
# trace (#311) sends it on every disarm (*5*2*0## -> *5*1*0## -> *5*9*0##).
# OWNd <= 2.0.0b9 still reads it as armed_away; OWNd#66 does not.
msg_activation = OWNEvent.parse("*5*1*0##")
alarm_central.handle_event(msg_activation)
assert alarm_central.alarm_state == (STATE_ARMED_AWAY if msg_activation.is_armed_away else STATE_DISARMED)
assert alarm_central.extra_state_attributes["raw_state"] == "activation"
assert alarm_central.extra_state_attributes["state_code"] == 1

# Armed away event (*5*8*0## - engage)
msg_away = OWNEvent.parse("*5*8*0##")
alarm_central.handle_event(msg_away)
assert alarm_central.alarm_state == STATE_ARMED_AWAY
assert alarm_central.extra_state_attributes["raw_state"] == "engage"
assert alarm_central.extra_state_attributes["state_code"] == 8

# Armed home event (*5*11*0## - active zone)
msg_home = OWNEvent.parse("*5*11*0##")
alarm_central.handle_event(msg_home)
Expand Down
5 changes: 3 additions & 2 deletions tests/test_issue_311.py
Original file line number Diff line number Diff line change
Expand Up @@ -104,8 +104,9 @@ async def test_real_world_trace_replay_issue_311(hass: HomeAssistant) -> None:
# In the end of the trace, the alarm is disarmed (*5*2*0## and *5*9*0##)
assert alarm_0.state == AlarmControlPanelState.DISARMED

# 2. Test arming away event explicitly on the entity
arm_msg = OWNMessage.parse("*5*1*0##")
# 2. Test arming away event explicitly on the entity. The trace arms with
# *5*1*0## -> *5*8*0##: WHAT 8 (engage) is the armed state, WHAT 1 is not.
arm_msg = OWNMessage.parse("*5*8*0##")
assert isinstance(arm_msg, OWNAlarmEvent)
async_dispatcher_send(hass, f"myhome_message_{mac}", arm_msg)
await hass.async_block_till_done()
Expand Down
9 changes: 5 additions & 4 deletions tests/test_issue_466_h4890_trace.py
Original file line number Diff line number Diff line change
Expand Up @@ -140,8 +140,9 @@ async def test_h4890_alarm_trace_replay_and_state_transitions(hass: HomeAssistan
alarm_frames.append(raw)

# Authentic alarm frames present in trace
assert "*5*9*0##" in alarm_frames # Disarm
assert "*5*1*0##" in alarm_frames # Arm away
# A disarmed panel's status dump: activation + disengaged, then zone states
assert "*5*9*0##" in alarm_frames # Disengaged
assert "*5*1*0##" in alarm_frames # Activation (system operational, not armed)
assert "*5*11*#1##" in alarm_frames
assert "*5*11*#5##" in alarm_frames
assert "*5*18*#7##" in alarm_frames
Expand Down Expand Up @@ -171,8 +172,8 @@ async def test_h4890_alarm_trace_replay_and_state_transitions(hass: HomeAssistan
alarm.handle_event(OWNAlarmEvent.parse("*5*9*0##"))
assert alarm.alarm_state == AlarmControlPanelState.DISARMED

# Feed arm away frame *5*1*0##
alarm.handle_event(OWNAlarmEvent.parse("*5*1*0##"))
# Feed arm away frame *5*8*0## (engage; the trace has no arm transition)
alarm.handle_event(OWNAlarmEvent.parse("*5*8*0##"))
assert alarm.alarm_state == AlarmControlPanelState.ARMED_AWAY

# Disarm again
Expand Down
5 changes: 3 additions & 2 deletions tests/test_issue_564_mh202_alarm_trace.py
Original file line number Diff line number Diff line change
Expand Up @@ -148,8 +148,9 @@ async def test_mh202_alarm_entity_state_transitions(hass: HomeAssistant) -> None
alarm.hass = hass
alarm.async_schedule_update_ha_state = MagicMock()

# Feed arm away frame *5*1*0##
arm_event = OWNAlarmEvent.parse("*5*1*0##")
# Feed arm away frame *5*8*0## (engage). The trace's *5*1*0## sits 3 ms
# before *5*9*0## in one status dump: activation, not armed.
arm_event = OWNAlarmEvent.parse("*5*8*0##")
assert arm_event is not None
assert arm_event.is_armed_away is True
alarm.handle_event(arm_event)
Expand Down
Loading