
As I mentioned a few weeks ago in my post Prosegur Alarms: A Step Back in Home Assistant Integration, I’ve installed an AJAX alarm system at home. And despite some voices claiming it wasn’t possible, I now have it successfully connected both to an Alarm Receiving Center (ARC) and to my Home Assistant home automation hub. This integration allows me to arm and disarm the alarm directly from my home automation control panel, and I can get real-time status updates from the alarm system itself, as well as from door/window sensors and even temperature data from motion sensors.

Remarkably, I achieved this integration without needing to hack an alarm remote and connect it to an ESP32 device controlled via ESPHome.
Update (May 2026): Aegis, the direct way
A few weeks after publishing this article, a reader left a comment suggesting Aegis for Ajax — Home Assistant Integration. I tried it, and honestly, it simplifies the whole setup massively: a custom Home Assistant integration that talks directly to Ajax’s servers using the same gRPC protocol as the official mobile app. No Jeedom acting as a bridge, no MQTT, no extra gadgets running on my network.
Three reasons why I’d recommend going directly via Aegis today:
- Simpler. No middleware: a single native integration in Home Assistant.
- More active development. Aegis is on version 1.5.1 with regular releases; the Jeedom plugin for Ajax gets sporadic updates.
- Supports devices Jeedom doesn’t yet, like the Fire Protect Two Plus smoke sensor, which I have installed and which never made it to Home Assistant via the Jeedom route.
Once Aegis covered everything I needed, I shut Jeedom down. The installation process is quick — here it is step by step.
1. Install Aegis via HACS
Open HACS in your Home Assistant.
- Click the three-dot menu (top right) → “Custom repositories”.
- Paste this URL:
https://github.com/bvis/aegis-hass - Select category: Integration.
- Search for “Aegis for Ajax” in HACS and click Install.
- Restart Home Assistant.
2. Add the integration
After the restart, go to Settings → Devices & Services → Add Integration and search for “Aegis for Ajax”. The wizard will ask for:
- Email: your Ajax account email.
- Password: the same password you use in the official app (or were using with Jeedom).
- App Label: the provider identifier. It’s a dropdown with the most common ones — for a vanilla Ajax account (not co-branded), pick
Ajax. If your system comes from a company that rebrands the app (Protegim, ADT, G4S…), find theirs in the list. - 2FA code (if you have it enabled): generate one from your authenticator app.
- Space selection: if you have several hubs registered under the account, you pick which ones to add.
In my case I just had to give it the same username and password I was already using with Jeedom, and instantly all the devices were discovered in Home Assistant.
3. Configure and enjoy
Devices appear automatically under Settings → Devices & Services → Aegis for Ajax. The integration creates for you:
- Alarm control panel (
alarm_control_panel) for arming and disarming. - Binary sensors for door/window, motion, vibration, tamper…
- Switches for relays, locks, valves and the like.
- Numeric sensors: temperature, battery, GSM signal strength, electrical readings from measuring sockets…
Under the Configure button on the integration’s card you can adjust the poll interval, whether to require a PIN to arm/disarm, and photo retention for MotionCam cameras if you have them.
Strongly recommended: set up Firebase Cloud Messaging (FCM) credentials in the integration options to receive real-time push notifications for events (alarm, tamper, panic). That’s what really sets it apart from traditional polling.
What follows is the original method — integration via Jeedom as a bridge — from before Aegis. I keep it here because it remains valid and may be useful for anyone already using Jeedom as a central hub for other devices, or as a reference in case Aegis stops working at some point.
Original method: integration via Jeedom (click to expand)
AJAX Alarm into Home Assistant: How I Achieved It
My goal was clear: fully integrate the AJAX alarm into my smart home ecosystem. Initially, it seemed challenging because there’s not any AJAX direct integration in Home Assistant. And there likely won’t be any in the future unless Nabu Casa officially steps in.
The only existing integration used the SIA security protocol, which AJAX utilizes to connect with Alarm Receiving Centers. However, I had to discard this method entirely. When using it, you cannot connect to an external ARC— as only one alarm center connection is permitted.
Fortunately, after researching and experimenting, I discovered a viable solution: using Jeedom and MQTT as intermediary bridges.
Jeedom
Jeedom is another open home automation platform similar in scope to Home Assistant but far less popular. However, it offers a specific AJAX plugin that connects through AJAX’s cloud service, similar to AJAX’s own mobile apps. The plugin costs €8, a one-time fee.
This component was crucial as it easily connected to the AJAX alarm and provided immediate access to sensor statuses and the alarm itself, all without using the SIA protocol.
I started by setting up a new Jeedom installation on my virtual machine home server (where I already run Frigate, among other applications). Based on Debian 11, it was straightforward to set up.
Next, connecting Jeedom to my AJAX alarm wasn’t too complex. It simply required purchasing the plugin from Jeedom’s marketplace and following basic instructions:
- Creating a new user on the AJAX hub specifically for home automation purposes, granting appropriate permissions.
- Using these new credentials in the Jeedom plugin configuration.
- Inviting [email protected] as a user to the AJAX hub (a necessary step to receive events from AJAX’s cloud).
- Crucially, setting up external access to Jeedom, enabling internet-based event reception.
After configuring these steps and initiating synchronization, all AJAX devices appeared in Jeedom.

Sending Data from Jeedom to Home Assistant
Then, I just had to transfer this data to Home Assistant using MQTT, a lightweight communication protocol commonly used in home automation.
I configured Jeedom’s free MQTT Manager plugin to connect to the Mosquitto MQTT server already running within my Home Assistant setup, which also manages devices like Tasmota, my heating system communicating via Ebusd, and all Zigbee devices through Zigbee2MQTT. I also set Jeedom to publish all device events automatically via MQTT.
Subsequently, I manually configured MQTT sensors, binary sensors, and buttons in my Home Assistant YAML configuration file to manage the alarm’s states and sensor statuses.
button:
# Note: there can only be one sensor section, one binary_sensor section, and one button section.
# If multiple exist, only the last one will be considered.
# Buttons to control the alarm hub
- name: "Arm Alarm"
# Note: "15" corresponds to the command number configured by Jeedom for my alarm.
# Change it according to your setup
command_topic: "jeedom/cmd/set/15"
unique_id: "control_arm_ajax_from_jeedom"
payload_press: "ARM"
retain: false
device:
identifiers: "AJAX Alarm via Jeedom MQTT"
name: "AJAX Alarm"
model: "Hub 2 Plus"
manufacturer: "AJAX"
- name: "Alarm Night Mode"
# Note: "16" corresponds to the command number configured by Jeedom for my alarm.
# Change it according to your setup
command_topic: "jeedom/cmd/set/16"
unique_id: "control_night_mode_ajax_from_jeedom"
payload_press: "NIGHT MODE"
retain: false
device:
identifiers: "AJAX Alarm via Jeedom MQTT"
name: "AJAX Alarm"
model: "Hub 2 Plus"
manufacturer: "AJAX"
- name: "Disarm Alarm"
# Note: "17" corresponds to the command number configured by Jeedom for my alarm.
# Change it according to your setup
command_topic: "jeedom/cmd/set/17"
unique_id: "control_disarm_ajax_from_jeedom"
payload_press: "DISARM"
retain: false
device:
identifiers: "AJAX Alarm via Jeedom MQTT"
name: "AJAX Alarm"
model: "Hub 2 Plus"
manufacturer: "AJAX"
- name: "Stop Fire Alarm"
# Note: "19" corresponds to the command number configured by Jeedom for my alarm.
# Change it according to your setup
command_topic: "jeedom/cmd/set/19"
unique_id: "mute_fire_detectors_ajax_from_jeedom"
payload_press: "muteFireDetectors"
retain: false
device:
identifiers: "AJAX Alarm via Jeedom MQTT"
name: "AJAX Alarm"
model: "Hub 2 Plus"
manufacturer: "AJAX"
sensor:
# AJAX Alarm Hub Sensors
- name: "AJAX Alarm Status"
# Note: "1" corresponds to the command number configured by Jeedom for my alarm.
# Change it according to your setup
state_topic: "jeedom/cmd/event/1"
unique_id: "alarm_status_ajax_from_jeedom"
value_template: '{% if value_json.value is defined and value_json.value != "" %}{{value_json.value}}{% else %}{{this.state}}{% endif %}'
expire_after: 2629746
device:
identifiers: "AJAX Alarm via Jeedom MQTT"
name: "AJAX Alarm"
model: "Hub 2 Plus"
manufacturer: "AJAX"
- name: "Last Event"
# Note: "3" corresponds to the command number configured by Jeedom for my alarm.
# Change it according to your setup
state_topic: "jeedom/cmd/event/3"
unique_id: "last_event_alarm_ajax_from_jeedom"
value_template: '{% if value_json.value is defined and value_json.value != "" %}{{value_json.value}}{% else %}{{this.state}}{% endif %}'
expire_after: 2629746
device:
identifiers: "AJAX Alarm via Jeedom MQTT"
name: "AJAX Alarm"
model: "Hub 2 Plus"
manufacturer: "AJAX"
- name: "Last Event Code"
# Note: "4" corresponds to the command number configured by Jeedom for my alarm.
# Change it according to your setup
state_topic: "jeedom/cmd/event/4"
unique_id: "last_event_code_alarm_ajax_from_jeedom"
value_template: '{% if value_json.value is defined and value_json.value != "" %}{{value_json.value}}{% else %}{{this.state}}{% endif %}'
expire_after: 2629746
device:
identifiers: "AJAX Alarm via Jeedom MQTT"
name: "AJAX Alarm"
model: "Hub 2 Plus"
manufacturer: "AJAX"
- name: "Mobile Signal Strength"
# Note: "7" corresponds to the command number configured by Jeedom for my alarm.
# Change it according to your setup
state_topic: "jeedom/cmd/event/7"
unique_id: "gsm_signal_level_ajax_from_jeedom"
value_template: '{% if value_json.value is defined and value_json.value != "" %}{{value_json.value}}{% else %}{{this.state}}{% endif %}'
expire_after: 2629746
device:
identifiers: "AJAX Alarm via Jeedom MQTT"
name: "AJAX Alarm"
model: "Hub 2 Plus"
manufacturer: "AJAX"
binary_sensor:
- name: "Alarm Tamper"
# Note: "5" corresponds to the command number configured by Jeedom for my alarm.
# Change it according to your setup
state_topic: "jeedom/cmd/event/5"
unique_id: "alarm_tamper_ajax_from_jeedom"
value_template: '{% if value_json.value is defined and value_json.value != "" %}{{value_json.value}}{% else %}{{this.state}}{% endif %}'
expire_after: 2629746
device_class: tamper
payload_on: "1"
payload_off: "0"
device:
identifiers: "AJAX Alarm via Jeedom MQTT"
name: "AJAX Alarm"
model: "Hub 2 Plus"
manufacturer: "AJAX"
- name: "External Power"
# Note: "12" corresponds to the command number configured by Jeedom for my alarm.
# Change it according to your setup
state_topic: "jeedom/cmd/event/12"
unique_id: "externally_powered_ajax_from_jeedom"
value_template: '{% if value_json.value is defined and value_json.value != "" %}{{value_json.value}}{% else %}{{this.state}}{% endif %}'
expire_after: 2629746
device_class: power
payload_on: "1"
payload_off: "0"
device:
identifiers: "AJAX Alarm via Jeedom MQTT"
name: "AJAX Alarm"
model: "Hub 2 Plus"
manufacturer: "AJAX"
- name: "Door 1"
# Note: "72" corresponds to the command number configured by Jeedom for my alarm.
# Change it according to your setup
state_topic: "jeedom/cmd/event/72"
unique_id: "door_1_status_ajax_from_jeedom"
device_class: door
value_template: '{% if value_json.value is defined and value_json.value != "" %}{{value_json.value}}{% else %}{{this.state}}{% endif %}'
payload_on: "0"
payload_off: "1"
expire_after: 2629746
device:
identifiers: "Door 1 AJAX via Jeedom MQTT"
name: "Door sensor 1 AJAX"
model: "DoorProtect"
manufacturer: "AJAX"
- name: "Door 2"
# Note: "92" corresponds to the command number configured by Jeedom for my alarm.
# Change it according to your setup
state_topic: "jeedom/cmd/event/92"
unique_id: "door_2_status_ajax_from_jeedom"
device_class: door
value_template: '{% if value_json.value is defined and value_json.value != "" %}{{value_json.value}}{% else %}{{this.state}}{% endif %}'
payload_on: "0"
payload_off: "1"
expire_after: 2629746
device:
identifiers: "Door 2 AJAX via Jeedom MQTT"
name: "Door sensor 2 AJAX"
model: "DoorProtect"
manufacturer: "AJAX"
- name: "Door 3"
# Note: "82" corresponds to the command number configured by Jeedom for my alarm.
# Change it according to your setup
state_topic: "jeedom/cmd/event/82"
unique_id: "door_3_status_ajax_from_jeedom"
device_class: door
payload_on: "0"
payload_off: "1"
value_template: '{% if value_json.value is defined and value_json.value != "" %}{{value_json.value}}{% else %}{{this.state}}{% endif %}'
expire_after: 2629746
device:
identifiers: "Door 3 AJAX via Jeedom MQTT"
name: "Door sensor 3 AJAX"
model: "DoorProtect"
manufacturer: "AJAX"
After manually reloading the MQTT entities configured from Home Assistant, all these sensors began displaying real-time information. After some testing, fine-tuning, and minor adjustments, I managed not only to visualize the alarm status from my Home Assistant dashboard but also to control it: arming, disarming, and integrating it into various automations.
Conclusion
Now, I can smoothly manage my AJAX alarm directly from Home Assistant, without sacrificing the peace of mind provided by having my home monitored by a Alarm Receiving Center (ARC).
I can create complex scenarios involving lighting, advanced notifications, and automatic actions based on the alarm’s state. I can also detect door openings monitored by AJAX sensors, regardless of whether the alarm is armed or not. However, the temperature readings reported by these sensors are not very precise; the threshold for generating events appears to be above 1.5 degrees Celsius, making this data less practical to use.
This integration not only enhances security but also makes managing my smart home easier and more convenient than ever.

Leave a Reply