Envisalink: wake DSC panel from keypad blanking before arm/disarm#165286
Envisalink: wake DSC panel from keypad blanking before arm/disarm#165286nopoz wants to merge 1 commit intohome-assistant:devfrom
Conversation
DSC panels enter a low-power display-off (blanking) mode after inactivity. TPI arm/disarm commands sent while blanked are silently rejected by the EVL because it pre-validates panel state. Send a '#' keypress to wake the panel before each arm/disarm command, equivalent to pressing # on the physical keypad.
There was a problem hiding this comment.
Pull request overview
This PR updates the Envisalink alarm control panel integration to handle DSC keypad “blanking” mode by waking the panel before sending arm/disarm commands, preventing TPI commands from being silently rejected when the keypad display is off.
Changes:
- Pass the configured panel type through platform discovery to the alarm control panel entities.
- Add a DSC-only wake step (send
#+ delay) before arm/disarm (home/away/night/disarm) commands.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.
| File | Description |
|---|---|
homeassistant/components/envisalink/alarm_control_panel.py |
Adds DSC wake-before-command behavior and threads panel type into the entity. |
homeassistant/components/envisalink/__init__.py |
Includes panel_type in discovery info when loading the alarm platform. |
You can also share your feedback on Copilot code review. Take the survey.
| async def _async_wake_panel(self) -> None: | ||
| """Wake DSC panel from keypad blanking state before sending commands. | ||
|
|
||
| DSC panels enter a low-power display-off (blanking) mode after | ||
| inactivity. TPI arm/disarm commands sent while blanked are silently | ||
| rejected. Sending '#' wakes the panel, equivalent to pressing # on | ||
| the physical keypad. | ||
| """ | ||
| if self._panel_type != PANEL_TYPE_DSC: | ||
| return | ||
| _LOGGER.debug("Sending '#' keypress to wake panel from possible blanking state") | ||
| self.hass.data[DATA_EVL].keypresses_to_partition(self._partition_number, "#") | ||
| await asyncio.sleep(1) |
There was a problem hiding this comment.
_async_wake_panel introduces an unconditional 1s delay for every arm/disarm on DSC panels (even when keypad blanking may not be active). This will slow service calls/automations; consider making the delay conditional (if there is a reliable state signal) or at least extracting the keypress/delay into named constants so the behavior is easy to tune.
Proposed change
DSC alarm panels can enter a low-power display-off ("keypad blanking") mode after a period of inactivity. When the panel is in this state, TPI arm/disarm commands (030/031/032/040) sent via the Envisalink are silently rejected because the EVL pre-validates the panel state and sees it as "not ready."
This PR sends a
#keypress to the partition before each arm/disarm command on DSC panels, which wakes the panel from blanking — equivalent to pressing#on the physical keypad. A 1-second delay follows the keypress to allow the panel to become ready before the actual command is sent.The wakeup is only applied to DSC panels; Honeywell panels are unaffected. The panic alarm command is intentionally excluded since TPI command 060 bypasses normal partition validation.
Type of change
Additional information
Checklist
ruff format homeassistant tests)To help with the load of incoming pull requests: