mirror of
https://github.com/home-assistant/core.git
synced 2025-07-24 21:57:51 +00:00
Always provide a currentArmLevel in Google assistant (#119238)
This commit is contained in:
parent
1e7ab07d9e
commit
119d4c2316
@ -1586,6 +1586,17 @@ class ArmDisArmTrait(_Trait):
|
|||||||
if features & required_feature != 0
|
if features & required_feature != 0
|
||||||
]
|
]
|
||||||
|
|
||||||
|
def _default_arm_state(self):
|
||||||
|
states = self._supported_states()
|
||||||
|
|
||||||
|
if STATE_ALARM_TRIGGERED in states:
|
||||||
|
states.remove(STATE_ALARM_TRIGGERED)
|
||||||
|
|
||||||
|
if len(states) != 1:
|
||||||
|
raise SmartHomeError(ERR_NOT_SUPPORTED, "ArmLevel missing")
|
||||||
|
|
||||||
|
return states[0]
|
||||||
|
|
||||||
def sync_attributes(self):
|
def sync_attributes(self):
|
||||||
"""Return ArmDisarm attributes for a sync request."""
|
"""Return ArmDisarm attributes for a sync request."""
|
||||||
response = {}
|
response = {}
|
||||||
@ -1609,10 +1620,13 @@ class ArmDisArmTrait(_Trait):
|
|||||||
def query_attributes(self):
|
def query_attributes(self):
|
||||||
"""Return ArmDisarm query attributes."""
|
"""Return ArmDisarm query attributes."""
|
||||||
armed_state = self.state.attributes.get("next_state", self.state.state)
|
armed_state = self.state.attributes.get("next_state", self.state.state)
|
||||||
response = {"isArmed": armed_state in self.state_to_service}
|
|
||||||
if response["isArmed"]:
|
if armed_state in self.state_to_service:
|
||||||
response.update({"currentArmLevel": armed_state})
|
return {"isArmed": True, "currentArmLevel": armed_state}
|
||||||
return response
|
return {
|
||||||
|
"isArmed": False,
|
||||||
|
"currentArmLevel": self._default_arm_state(),
|
||||||
|
}
|
||||||
|
|
||||||
async def execute(self, command, data, params, challenge):
|
async def execute(self, command, data, params, challenge):
|
||||||
"""Execute an ArmDisarm command."""
|
"""Execute an ArmDisarm command."""
|
||||||
@ -1620,15 +1634,7 @@ class ArmDisArmTrait(_Trait):
|
|||||||
# If no arm level given, we can only arm it if there is
|
# If no arm level given, we can only arm it if there is
|
||||||
# only one supported arm type. We never default to triggered.
|
# only one supported arm type. We never default to triggered.
|
||||||
if not (arm_level := params.get("armLevel")):
|
if not (arm_level := params.get("armLevel")):
|
||||||
states = self._supported_states()
|
arm_level = self._default_arm_state()
|
||||||
|
|
||||||
if STATE_ALARM_TRIGGERED in states:
|
|
||||||
states.remove(STATE_ALARM_TRIGGERED)
|
|
||||||
|
|
||||||
if len(states) != 1:
|
|
||||||
raise SmartHomeError(ERR_NOT_SUPPORTED, "ArmLevel missing")
|
|
||||||
|
|
||||||
arm_level = states[0]
|
|
||||||
|
|
||||||
if self.state.state == arm_level:
|
if self.state.state == arm_level:
|
||||||
raise SmartHomeError(ERR_ALREADY_ARMED, "System is already armed")
|
raise SmartHomeError(ERR_ALREADY_ARMED, "System is already armed")
|
||||||
|
@ -1931,7 +1931,10 @@ async def test_arm_disarm_disarm(hass: HomeAssistant) -> None:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
assert trt.query_attributes() == {"isArmed": False}
|
assert trt.query_attributes() == {
|
||||||
|
"currentArmLevel": "armed_custom_bypass",
|
||||||
|
"isArmed": False,
|
||||||
|
}
|
||||||
|
|
||||||
assert trt.can_execute(trait.COMMAND_ARMDISARM, {"arm": False})
|
assert trt.can_execute(trait.COMMAND_ARMDISARM, {"arm": False})
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user