Allow arm levels be in order for google assistant (#119645)

This commit is contained in:
Joakim Plate 2024-06-14 07:18:57 +02:00 committed by GitHub
parent 95b9e15306
commit 097844aca6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 23 additions and 12 deletions

View File

@ -1553,19 +1553,20 @@ class ArmDisArmTrait(_Trait):
state_to_service = {
STATE_ALARM_ARMED_HOME: SERVICE_ALARM_ARM_HOME,
STATE_ALARM_ARMED_AWAY: SERVICE_ALARM_ARM_AWAY,
STATE_ALARM_ARMED_NIGHT: SERVICE_ALARM_ARM_NIGHT,
STATE_ALARM_ARMED_AWAY: SERVICE_ALARM_ARM_AWAY,
STATE_ALARM_ARMED_CUSTOM_BYPASS: SERVICE_ALARM_ARM_CUSTOM_BYPASS,
STATE_ALARM_TRIGGERED: SERVICE_ALARM_TRIGGER,
}
state_to_support = {
STATE_ALARM_ARMED_HOME: AlarmControlPanelEntityFeature.ARM_HOME,
STATE_ALARM_ARMED_AWAY: AlarmControlPanelEntityFeature.ARM_AWAY,
STATE_ALARM_ARMED_NIGHT: AlarmControlPanelEntityFeature.ARM_NIGHT,
STATE_ALARM_ARMED_AWAY: AlarmControlPanelEntityFeature.ARM_AWAY,
STATE_ALARM_ARMED_CUSTOM_BYPASS: AlarmControlPanelEntityFeature.ARM_CUSTOM_BYPASS,
STATE_ALARM_TRIGGERED: AlarmControlPanelEntityFeature.TRIGGER,
}
"""The list of states to support in increasing security state."""
@staticmethod
def supported(domain, features, device_class, _):
@ -1592,7 +1593,7 @@ class ArmDisArmTrait(_Trait):
if STATE_ALARM_TRIGGERED in states:
states.remove(STATE_ALARM_TRIGGERED)
if len(states) != 1:
if not states:
raise SmartHomeError(ERR_NOT_SUPPORTED, "ArmLevel missing")
return states[0]
@ -1614,7 +1615,7 @@ class ArmDisArmTrait(_Trait):
}
levels.append(level)
response["availableArmLevels"] = {"levels": levels, "ordered": False}
response["availableArmLevels"] = {"levels": levels, "ordered": True}
return response
def query_attributes(self):
@ -1631,8 +1632,8 @@ class ArmDisArmTrait(_Trait):
async def execute(self, command, data, params, challenge):
"""Execute an ArmDisarm command."""
if params["arm"] and not params.get("cancel"):
# If no arm level given, we can only arm it if there is
# only one supported arm type. We never default to triggered.
# If no arm level given, we we arm the first supported
# level in state_to_support.
if not (arm_level := params.get("armLevel")):
arm_level = self._default_arm_state()

View File

@ -1763,7 +1763,7 @@ async def test_arm_disarm_arm_away(hass: HomeAssistant) -> None:
],
},
],
"ordered": False,
"ordered": True,
}
}
@ -1905,7 +1905,8 @@ async def test_arm_disarm_disarm(hass: HomeAssistant) -> None:
{
alarm_control_panel.ATTR_CODE_ARM_REQUIRED: True,
ATTR_SUPPORTED_FEATURES: AlarmControlPanelEntityFeature.TRIGGER
| AlarmControlPanelEntityFeature.ARM_CUSTOM_BYPASS,
| AlarmControlPanelEntityFeature.ARM_HOME
| AlarmControlPanelEntityFeature.ARM_AWAY,
},
),
PIN_CONFIG,
@ -1914,10 +1915,19 @@ async def test_arm_disarm_disarm(hass: HomeAssistant) -> None:
"availableArmLevels": {
"levels": [
{
"level_name": "armed_custom_bypass",
"level_name": "armed_home",
"level_values": [
{
"level_synonym": ["armed custom bypass", "custom"],
"level_synonym": ["armed home", "home"],
"lang": "en",
}
],
},
{
"level_name": "armed_away",
"level_values": [
{
"level_synonym": ["armed away", "away"],
"lang": "en",
}
],
@ -1927,12 +1937,12 @@ async def test_arm_disarm_disarm(hass: HomeAssistant) -> None:
"level_values": [{"level_synonym": ["triggered"], "lang": "en"}],
},
],
"ordered": False,
"ordered": True,
}
}
assert trt.query_attributes() == {
"currentArmLevel": "armed_custom_bypass",
"currentArmLevel": "armed_home",
"isArmed": False,
}