From 55a1c46b60fdf861255ca0123ac016fbc3599e86 Mon Sep 17 00:00:00 2001 From: kvanbiesen Date: Wed, 9 Aug 2023 09:51:26 +0200 Subject: [PATCH] fix: add control panel State Off on keypad (#871) * Update alarm_control_panel.py fixes off button in control panel....maybe. needs some looking after * Update alarm_control_panel.py * Update services.yaml add new service to eufy_security to change statte of alarm to off instead of disarmed (which are 2 states if you have a keypad) * Update alarm_control_panel.py Add new function if you have a keypad to turn the security off in stead of disarmed plus reflect this in HomeAssisant Now there is Disarmed and Off stage in HA * Update services.yaml extra line for readability --- .../eufy_security/alarm_control_panel.py | 16 ++++++++++++---- custom_components/eufy_security/services.yaml | 12 ++++++++++-- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/custom_components/eufy_security/alarm_control_panel.py b/custom_components/eufy_security/alarm_control_panel.py index 493b043..c9ce9b5 100644 --- a/custom_components/eufy_security/alarm_control_panel.py +++ b/custom_components/eufy_security/alarm_control_panel.py @@ -8,7 +8,7 @@ AlarmControlPanelEntityFeature, ) from homeassistant.config_entries import ConfigEntry -from homeassistant.const import STATE_ALARM_ARMED_AWAY, STATE_ALARM_ARMED_HOME, STATE_ALARM_DISARMED, STATE_ALARM_TRIGGERED +from homeassistant.const import STATE_ALARM_ARMED_AWAY, STATE_ALARM_ARMED_HOME, STATE_ALARM_DISARMED, STATE_ALARM_TRIGGERED, STATE_OFF from homeassistant.core import HomeAssistant from homeassistant.helpers import entity_platform from homeassistant.helpers.entity_platform import AddEntitiesCallback @@ -22,7 +22,7 @@ _LOGGER: logging.Logger = logging.getLogger(__package__) -KEYPAD_OFF_CODE = 6 +#KEYPAD_OFF_CODE = 6 class CurrentModeToState(Enum): @@ -35,6 +35,7 @@ class CurrentModeToState(Enum): CUSTOM_BYPASS = 3 NIGHT = 4 VACATION = 5 + OFF = 6 GEOFENCE = 47 DISARMED = 63 @@ -48,6 +49,7 @@ class CurrentModeToStateValue(Enum): NIGHT = auto() VACATION = auto() DISARMED = STATE_ALARM_DISARMED + OFF = STATE_OFF TRIGGERED = STATE_ALARM_TRIGGERED ALARM_DELAYED = "Alarm delayed" @@ -78,7 +80,9 @@ async def async_setup_entry(hass: HomeAssistant, config_entry: ConfigEntry, asyn platform.async_register_entity_service("schedule", {}, "schedule") platform.async_register_entity_service("chime", Schema.CHIME_SERVICE_SCHEMA.value, "chime") platform.async_register_entity_service("reboot", {}, "async_reboot") + platform.async_register_entity_service("alarm_off", {}, "async_alarm_off") + class EufySecurityAlarmControlPanel(AlarmControlPanelEntity, EufySecurityEntity): """Base alarm control panel entity for integration""" @@ -95,6 +99,7 @@ def __init__(self, coordinator: EufySecurityDataUpdateCoordinator, metadata: Met | AlarmControlPanelEntityFeature.ARM_CUSTOM_BYPASS | AlarmControlPanelEntityFeature.ARM_NIGHT | AlarmControlPanelEntityFeature.ARM_VACATION + ) @property @@ -113,6 +118,9 @@ async def _set_guard_mode(self, target_mode: CurrentModeToState): async def async_alarm_disarm(self, code: str | None = None) -> None: await self._set_guard_mode(CurrentModeToState.DISARMED) + async def async_alarm_off(self, code: str | None = None) -> None: + await self._set_guard_mode(CurrentModeToState.OFF) + async def async_alarm_arm_home(self, code: str | None = None) -> None: await self._set_guard_mode(CurrentModeToState.HOME) @@ -173,8 +181,8 @@ def state(self): except ValueError: pass - if current_mode == KEYPAD_OFF_CODE: - return CurrentModeToStateValue[CurrentModeToState.DISARMED.name].value + #if current_mode == KEYPAD_OFF_CODE: + # return CurrentModeToStateValue[CurrentModeToState.DISARMED.name].value if current_mode in CUSTOM_CODES: position = CUSTOM_CODES.index(current_mode) if position == 0: diff --git a/custom_components/eufy_security/services.yaml b/custom_components/eufy_security/services.yaml index 7989822..e78b25e 100644 --- a/custom_components/eufy_security/services.yaml +++ b/custom_components/eufy_security/services.yaml @@ -210,7 +210,15 @@ geofence: entity: domain: alarm_control_panel integration: eufy_security - + +alarm_off: + name: Turn Alarm off for Alarm Panel + description: Turn Alarm off for Alarm Panel + target: + entity: + domain: alarm_control_panel + integration: eufy_security + schedule: name: Switch to schedule mode description: Switch to schedule mode @@ -305,4 +313,4 @@ snooze: example: False default: False selector: - boolean: \ No newline at end of file + boolean: