mirror of
https://github.com/home-assistant/core.git
synced 2025-07-24 21:57:51 +00:00
HomeKit: Support triggered state for alarm_control_panel (#14285)
This commit is contained in:
parent
bb76ba67f3
commit
255a85ad02
@ -6,7 +6,7 @@ from pyhap.const import CATEGORY_ALARM_SYSTEM
|
|||||||
from homeassistant.const import (
|
from homeassistant.const import (
|
||||||
STATE_ALARM_ARMED_AWAY, STATE_ALARM_ARMED_HOME,
|
STATE_ALARM_ARMED_AWAY, STATE_ALARM_ARMED_HOME,
|
||||||
STATE_ALARM_ARMED_NIGHT, STATE_ALARM_DISARMED,
|
STATE_ALARM_ARMED_NIGHT, STATE_ALARM_DISARMED,
|
||||||
ATTR_ENTITY_ID, ATTR_CODE)
|
STATE_ALARM_TRIGGERED, ATTR_ENTITY_ID, ATTR_CODE)
|
||||||
|
|
||||||
from . import TYPES
|
from . import TYPES
|
||||||
from .accessories import HomeAccessory
|
from .accessories import HomeAccessory
|
||||||
@ -16,13 +16,16 @@ from .const import (
|
|||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
HASS_TO_HOMEKIT = {STATE_ALARM_DISARMED: 3, STATE_ALARM_ARMED_HOME: 0,
|
HASS_TO_HOMEKIT = {STATE_ALARM_ARMED_HOME: 0,
|
||||||
STATE_ALARM_ARMED_AWAY: 1, STATE_ALARM_ARMED_NIGHT: 2}
|
STATE_ALARM_ARMED_AWAY: 1,
|
||||||
|
STATE_ALARM_ARMED_NIGHT: 2,
|
||||||
|
STATE_ALARM_DISARMED: 3,
|
||||||
|
STATE_ALARM_TRIGGERED: 4}
|
||||||
HOMEKIT_TO_HASS = {c: s for s, c in HASS_TO_HOMEKIT.items()}
|
HOMEKIT_TO_HASS = {c: s for s, c in HASS_TO_HOMEKIT.items()}
|
||||||
STATE_TO_SERVICE = {STATE_ALARM_DISARMED: 'alarm_disarm',
|
STATE_TO_SERVICE = {STATE_ALARM_ARMED_HOME: 'alarm_arm_home',
|
||||||
STATE_ALARM_ARMED_HOME: 'alarm_arm_home',
|
|
||||||
STATE_ALARM_ARMED_AWAY: 'alarm_arm_away',
|
STATE_ALARM_ARMED_AWAY: 'alarm_arm_away',
|
||||||
STATE_ALARM_ARMED_NIGHT: 'alarm_arm_night'}
|
STATE_ALARM_ARMED_NIGHT: 'alarm_arm_night',
|
||||||
|
STATE_ALARM_DISARMED: 'alarm_disarm'}
|
||||||
|
|
||||||
|
|
||||||
@TYPES.register('SecuritySystem')
|
@TYPES.register('SecuritySystem')
|
||||||
@ -64,7 +67,8 @@ class SecuritySystem(HomeAccessory):
|
|||||||
_LOGGER.debug('%s: Updated current state to %s (%d)',
|
_LOGGER.debug('%s: Updated current state to %s (%d)',
|
||||||
self.entity_id, hass_state, current_security_state)
|
self.entity_id, hass_state, current_security_state)
|
||||||
|
|
||||||
if not self.flag_target_state:
|
# SecuritySystemTargetSTate does not support triggered
|
||||||
|
if not self.flag_target_state and \
|
||||||
|
hass_state != STATE_ALARM_TRIGGERED:
|
||||||
self.char_target_state.set_value(current_security_state)
|
self.char_target_state.set_value(current_security_state)
|
||||||
if self.char_target_state.value == self.char_current_state.value:
|
self.flag_target_state = False
|
||||||
self.flag_target_state = False
|
|
||||||
|
@ -7,7 +7,8 @@ from homeassistant.components.homekit.type_security_systems import (
|
|||||||
from homeassistant.const import (
|
from homeassistant.const import (
|
||||||
ATTR_CODE, ATTR_SERVICE, ATTR_SERVICE_DATA, EVENT_CALL_SERVICE,
|
ATTR_CODE, ATTR_SERVICE, ATTR_SERVICE_DATA, EVENT_CALL_SERVICE,
|
||||||
STATE_ALARM_ARMED_AWAY, STATE_ALARM_ARMED_HOME,
|
STATE_ALARM_ARMED_AWAY, STATE_ALARM_ARMED_HOME,
|
||||||
STATE_ALARM_ARMED_NIGHT, STATE_ALARM_DISARMED, STATE_UNKNOWN)
|
STATE_ALARM_ARMED_NIGHT, STATE_ALARM_DISARMED, STATE_ALARM_TRIGGERED,
|
||||||
|
STATE_UNKNOWN)
|
||||||
|
|
||||||
from tests.common import get_test_home_assistant
|
from tests.common import get_test_home_assistant
|
||||||
|
|
||||||
@ -65,10 +66,15 @@ class TestHomekitSecuritySystems(unittest.TestCase):
|
|||||||
self.assertEqual(acc.char_target_state.value, 3)
|
self.assertEqual(acc.char_target_state.value, 3)
|
||||||
self.assertEqual(acc.char_current_state.value, 3)
|
self.assertEqual(acc.char_current_state.value, 3)
|
||||||
|
|
||||||
|
self.hass.states.set(acp, STATE_ALARM_TRIGGERED)
|
||||||
|
self.hass.block_till_done()
|
||||||
|
self.assertEqual(acc.char_target_state.value, 3)
|
||||||
|
self.assertEqual(acc.char_current_state.value, 4)
|
||||||
|
|
||||||
self.hass.states.set(acp, STATE_UNKNOWN)
|
self.hass.states.set(acp, STATE_UNKNOWN)
|
||||||
self.hass.block_till_done()
|
self.hass.block_till_done()
|
||||||
self.assertEqual(acc.char_target_state.value, 3)
|
self.assertEqual(acc.char_target_state.value, 3)
|
||||||
self.assertEqual(acc.char_current_state.value, 3)
|
self.assertEqual(acc.char_current_state.value, 4)
|
||||||
|
|
||||||
# Set from HomeKit
|
# Set from HomeKit
|
||||||
acc.char_target_state.client_update_value(0)
|
acc.char_target_state.client_update_value(0)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user