mirror of
https://github.com/home-assistant/core.git
synced 2025-07-24 21:57:51 +00:00
Allow arm levels be in order for google assistant (#119645)
This commit is contained in:
parent
95b9e15306
commit
097844aca6
@ -1553,19 +1553,20 @@ class ArmDisArmTrait(_Trait):
|
|||||||
|
|
||||||
state_to_service = {
|
state_to_service = {
|
||||||
STATE_ALARM_ARMED_HOME: SERVICE_ALARM_ARM_HOME,
|
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_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_ARMED_CUSTOM_BYPASS: SERVICE_ALARM_ARM_CUSTOM_BYPASS,
|
||||||
STATE_ALARM_TRIGGERED: SERVICE_ALARM_TRIGGER,
|
STATE_ALARM_TRIGGERED: SERVICE_ALARM_TRIGGER,
|
||||||
}
|
}
|
||||||
|
|
||||||
state_to_support = {
|
state_to_support = {
|
||||||
STATE_ALARM_ARMED_HOME: AlarmControlPanelEntityFeature.ARM_HOME,
|
STATE_ALARM_ARMED_HOME: AlarmControlPanelEntityFeature.ARM_HOME,
|
||||||
STATE_ALARM_ARMED_AWAY: AlarmControlPanelEntityFeature.ARM_AWAY,
|
|
||||||
STATE_ALARM_ARMED_NIGHT: AlarmControlPanelEntityFeature.ARM_NIGHT,
|
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_ARMED_CUSTOM_BYPASS: AlarmControlPanelEntityFeature.ARM_CUSTOM_BYPASS,
|
||||||
STATE_ALARM_TRIGGERED: AlarmControlPanelEntityFeature.TRIGGER,
|
STATE_ALARM_TRIGGERED: AlarmControlPanelEntityFeature.TRIGGER,
|
||||||
}
|
}
|
||||||
|
"""The list of states to support in increasing security state."""
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def supported(domain, features, device_class, _):
|
def supported(domain, features, device_class, _):
|
||||||
@ -1592,7 +1593,7 @@ class ArmDisArmTrait(_Trait):
|
|||||||
if STATE_ALARM_TRIGGERED in states:
|
if STATE_ALARM_TRIGGERED in states:
|
||||||
states.remove(STATE_ALARM_TRIGGERED)
|
states.remove(STATE_ALARM_TRIGGERED)
|
||||||
|
|
||||||
if len(states) != 1:
|
if not states:
|
||||||
raise SmartHomeError(ERR_NOT_SUPPORTED, "ArmLevel missing")
|
raise SmartHomeError(ERR_NOT_SUPPORTED, "ArmLevel missing")
|
||||||
|
|
||||||
return states[0]
|
return states[0]
|
||||||
@ -1614,7 +1615,7 @@ class ArmDisArmTrait(_Trait):
|
|||||||
}
|
}
|
||||||
levels.append(level)
|
levels.append(level)
|
||||||
|
|
||||||
response["availableArmLevels"] = {"levels": levels, "ordered": False}
|
response["availableArmLevels"] = {"levels": levels, "ordered": True}
|
||||||
return response
|
return response
|
||||||
|
|
||||||
def query_attributes(self):
|
def query_attributes(self):
|
||||||
@ -1631,8 +1632,8 @@ class ArmDisArmTrait(_Trait):
|
|||||||
async def execute(self, command, data, params, challenge):
|
async def execute(self, command, data, params, challenge):
|
||||||
"""Execute an ArmDisarm command."""
|
"""Execute an ArmDisarm command."""
|
||||||
if params["arm"] and not params.get("cancel"):
|
if params["arm"] and not params.get("cancel"):
|
||||||
# If no arm level given, we can only arm it if there is
|
# If no arm level given, we we arm the first supported
|
||||||
# only one supported arm type. We never default to triggered.
|
# level in state_to_support.
|
||||||
if not (arm_level := params.get("armLevel")):
|
if not (arm_level := params.get("armLevel")):
|
||||||
arm_level = self._default_arm_state()
|
arm_level = self._default_arm_state()
|
||||||
|
|
||||||
|
@ -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,
|
alarm_control_panel.ATTR_CODE_ARM_REQUIRED: True,
|
||||||
ATTR_SUPPORTED_FEATURES: AlarmControlPanelEntityFeature.TRIGGER
|
ATTR_SUPPORTED_FEATURES: AlarmControlPanelEntityFeature.TRIGGER
|
||||||
| AlarmControlPanelEntityFeature.ARM_CUSTOM_BYPASS,
|
| AlarmControlPanelEntityFeature.ARM_HOME
|
||||||
|
| AlarmControlPanelEntityFeature.ARM_AWAY,
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
PIN_CONFIG,
|
PIN_CONFIG,
|
||||||
@ -1914,10 +1915,19 @@ async def test_arm_disarm_disarm(hass: HomeAssistant) -> None:
|
|||||||
"availableArmLevels": {
|
"availableArmLevels": {
|
||||||
"levels": [
|
"levels": [
|
||||||
{
|
{
|
||||||
"level_name": "armed_custom_bypass",
|
"level_name": "armed_home",
|
||||||
"level_values": [
|
"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",
|
"lang": "en",
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@ -1927,12 +1937,12 @@ async def test_arm_disarm_disarm(hass: HomeAssistant) -> None:
|
|||||||
"level_values": [{"level_synonym": ["triggered"], "lang": "en"}],
|
"level_values": [{"level_synonym": ["triggered"], "lang": "en"}],
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
"ordered": False,
|
"ordered": True,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
assert trt.query_attributes() == {
|
assert trt.query_attributes() == {
|
||||||
"currentArmLevel": "armed_custom_bypass",
|
"currentArmLevel": "armed_home",
|
||||||
"isArmed": False,
|
"isArmed": False,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user