This repository is an actively maintained fork of the original Alarm.com for Home Assistant integration.
The goal of this fork is to maintain compatibility with modern Home Assistant releases while continuing development of the Alarm.com integration as the Home Assistant platform evolves.
Recent Home Assistant updates introduced architectural changes that affect older integrations. This fork adapts the integration to those changes and ensures continued functionality, including compliance with the Home Assistant device registry enforcement requirements introduced in Home Assistant 2025.12.
Repository and issue tracker:
https://github.com/ibasebcast/ha-alarmdotcom
The maintainer of this fork operates Alarm.com systems professionally and has access to multiple Alarm.com environments, allowing testing across a wider variety of devices and system configurations.
Community feedback, testing, and contributions are welcome.
This integration is currently maintained by:
Chris Pulliam GitHub: https://github.com/ibasebcast
The goal of this project is to ensure the Alarm.com ecosystem remains usable within Home Assistant as the platform evolves.
This fork exists to provide:
- Continued compatibility with new Home Assistant versions
- Expanded device support
- Improved reliability and error handling
- Long-term maintenance of the integration
This custom component allows Home Assistant to interface with Alarm.com using the Alarm.com web platform.
The integration focuses primarily on Alarm.com security system functionality and requires an Alarm.com service package that includes security system support.
Because this integration communicates with Alarm.com cloud services, functionality may change if Alarm.com modifies their platform.
This integration is designed for convenience and automation, but it should not be relied upon for safety-critical functions.
Reasons include:
- This integration communicates with Alarm.com using unofficial endpoints.
- Alarm.com status updates may take time to propagate.
- Home Assistant automations may introduce unintended behavior.
- This code is community developed and may contain bugs.
For critical alerts such as:
- Break-ins
- Fire
- Carbon monoxide
- Water leaks
- Freeze warnings
You should rely on Alarm.com's official monitoring services and mobile applications.
Where possible, use locally controlled Home Assistant integrations for automation. Local integrations continue functioning during internet outages, while this integration requires cloud communication.
| Device Type | Actions | Status | Low Battery | Malfunction | Notes |
|---|---|---|---|---|---|
| Alarm System | Arm Away, Arm Stay, Arm Night, Disarm | ✔ | ✔ | ✔ | |
| Garage Door | Open, Close | ✔ | ✔ | ✔ | |
| Gate | Open, Close | ✔ | ✔ | ✔ | |
| Light | On / Off / Brightness | ✔ | ✔ | ✔ | |
| Lock | Lock, Unlock | ✔ | ✔ | ✔ | |
| Sensor | None | ✔ | ✔ | ✔ | Contact sensors will not report repeated changes within a 3 minute window |
| Thermostat | Heat, Cool, Auto, Fan | ✔ | ✔ | ✔ | Fan-only mode runs for the maximum duration supported by Alarm.com |
| Camera | Live WebRTC stream, Snapshot | ✔ | — | — | Requires the www/alarm-webrtc-card.js Lovelace card |
| Sensor Type | Description |
|---|---|
| Contact | Doors and windows |
| Freeze | Temperature threshold sensors |
| Glass Break / Vibration | Standalone or panel-integrated |
| Motion | Motion detection sensors |
| Vibration Contact | Doors, safes, windows |
| Water | Leak sensors |
Alarm.com may use different internal identifiers for some sensors. If a supported sensor does not appear in Home Assistant, please open an issue.
https://github.com/ibasebcast/ha-alarmdotcom/issues
- Open HACS
- Navigate to Integrations
- Click the three-dot menu
- Select Custom repositories
- Add the repository:
https://github.com/ibasebcast/ha-alarmdotcom
- Select Integration as the category
- Click Add
- Install Alarm.com
- Restart Home Assistant
After restarting:
Settings → Devices & Services → Add Integration → Alarm.com
When adding the integration you will be prompted for:
| Parameter | Required | Description |
|---|---|---|
| Username | Yes | Alarm.com account username |
| Password | Yes | Alarm.com account password |
| One-Time Password | Optional | Required if your account uses two-factor authentication |
These settings can be modified later using the Configure button on the Alarm.com integration card.
| Parameter | Description |
|---|---|
| Code | Code required for disarming or unlocking via Home Assistant |
| Force Bypass | Bypass open zones when arming |
| No Entry Delay | Skip entry delay sensors |
| Silent Arming | Suppress panel beeps when arming |
Some Alarm.com providers may restrict combinations of these options.
This integration includes WebRTC live-streaming support for Alarm.com cameras.
- Copy
www/alarm-webrtc-card.jsfrom this repository to your Home Assistantwww/folder. - Add it as a Lovelace resource:
- Go to Settings → Dashboards → Resources
- Click Add Resource
- URL:
/local/alarm-webrtc-card.js - Type: JavaScript module
- Add the card to any Lovelace dashboard:
type: custom:alarm-webrtc-card
entity: camera.your_camera_nameWhen the card loads it calls the camera.turn_on service which fetches a fresh set of WebRTC tokens from Alarm.com. Tokens are refreshed automatically every 30 minutes in the background so the stream is always ready. If a token expires before the next scheduled refresh the card requests new tokens automatically.
Still image snapshots are also available, which means the camera will display a thumbnail in the Home Assistant media browser and picture-glance dashboard cards.
This integration is under active maintenance. Version 2026.7.9.3 is the current stable release, consolidating a significant round of fixes and new features - see CHANGELOG.md for the complete, detailed history, but the highlights:
Arm/disarm code enforcement was silently broken. If you configured a code to require for arming/disarming, entering any correctly-formatted code - not necessarily the one you set - would still successfully arm or disarm. This is now fixed and covered by automated regression tests. If you rely on the code requirement, you should update as soon as practical.
- A diagnostics page (Settings → Devices & Services → Alarm.com → Download diagnostics) - a downloadable snapshot of everything the integration knows about your account or a specific device, with all credentials and session tokens automatically redacted. Useful for troubleshooting and for attaching to bug reports without needing to dig through logs or worry about leaking a live camera token.
- Account-wide low/critical battery count sensors - two new entities that track how many devices currently report low or critical battery, with the specific device names available as an attribute, so you don't have to check every sensor individually.
- Two real bugs found while adding test coverage: duplicate config entries were never actually prevented, and a crash could occur in the reconnect-recovery path after enough failed connection attempts.
- Camera diagnostics were silently missing all camera data due to cameras using a different internal discovery path than every other device type - now fixed and verified against a real account with real cameras.
- Live camera session tokens were being written to Home Assistant's logs whenever debug logging was enabled - this is now off by default and opt-in only, and separately redacted anywhere else this data surfaces.
- Carried-forward fixes from
2026.7.6: the iPhone/iPad/Safari black-screen camera issue, and a bug where entity state could silently stop updating until a full integration reload.
- Vendored the
pyalarmdotcomajaxAPI client directly into this repository (see "Architecture Note" below) - this was previously a real HACS compliance blocker and a source of duplicated bug reports across two repos. - A real, automated test suite now runs in CI on every push and pull request, covering config flow, setup/unload lifecycle, the arm-code security fix, diagnostics (including the redaction itself), and the new battery sensors.
mypynow reports zero type errors across the entire codebase, for the first time -ruff,codespell, andtaploall pass cleanly as well.- A preemptive fix for a Home Assistant deprecation that becomes a hard error in December 2026 (a config-entry reload pattern used during reauthentication), verified directly against Home Assistant's own source code before shipping.
As of 2026.7.6.1b0, the pyalarmdotcomajax Alarm.com API client lives directly in this repository, instead of being installed separately via a git+ URL in manifest.json. As of 2026.7.7.1b0, it's vendored under the deliberately collision-proof name _pyalarmdotcomajax at custom_components/alarmdotcom/_pyalarmdotcomajax/ (see below for why the name changed).
Why: pyalarmdotcomajax was previously a separate repository (ibasebcast/pyalarmdotcomajax) that this integration depended on via a git+ dependency. In practice, the two repos were never really independent — nearly every bug fix required a version bump in pyalarmdotcomajax, then a matching dependency-pin bump here, then a release of both. Bugs also frequently got reported in both repos as duplicates, since from a user's perspective it's one integration. On top of the coordination overhead, a git+ dependency in manifest.json is a HACS/hassfest compliance issue, since HACS/hassfest strongly prefer plain PyPI-resolvable requirements.
What changed:
- The library's code (and its git history) now lives under
custom_components/alarmdotcom/_pyalarmdotcomajax/. It's imported as_pyalarmdotcomajax(leading underscore), notpyalarmdotcomajax, deliberately: no legitimate PyPI package can use a leading underscore, so this name can never collide with a stray pip-installedpyalarmdotcomajax(e.g. one left over from before this vendoring change). Without that, a missing or broken vendored copy could silently fall back to a stale pip-installed copy instead of failing loudly - which is exactly what happened during beta testing of2026.7.6.1b0. manifest.jsonno longer has agit+requirement; it now lists the library's actual runtime dependencies directly (mashumaro,phonenumbers,pyhumps,typer,beautifulsoup4), which were previously pulled in transitively.- The library's internal code is otherwise unchanged and still uses absolute imports internally (e.g.
from _pyalarmdotcomajax.controllers.users import ..., updated from the originalpyalarmdotcomajax.prefix as part of the rename). This integration's__init__.pyadds the vendored directory tosys.pathbefore anything imports it, so those imports keep resolving without needing every file in the library rewritten to relative imports. - No functional/runtime behavior changes are intended by this move — it's a packaging change only.
What this means going forward:
- Bug reports and contributions related to the Alarm.com API client now belong in this repository, not a separate one.
- The standalone
pyalarmdotcomajaxrepository is no longer the source of truth for this integration; see that repository's own README for its current status.
Planned areas of development include:
- Expanded device coverage across the Alarm.com ecosystem
- Improved websocket reliability and reconnection handling
- Expanded automation and scene support
- Additional device diagnostics and status reporting
- Continued compatibility updates for new Home Assistant releases
Community testing and feedback help guide development priorities.
Issues and pull requests are welcome.
Please report bugs or feature requests here:
https://github.com/ibasebcast/ha-alarmdotcom/issues
When reporting issues include:
- Home Assistant version
- Integration version
- Relevant Home Assistant logs
This project is licensed under the MIT License.
See the LICENSE file for details.