
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.


I`m very happy to see that someone finally connect ajax to HA. I was searching for solution for long time… Main reson is to use same motion and door sensors in HA ans ajax – at least not to have two sensors on every door and at every room (one for HA, and one for ajax)… this si visual ugly and total waste of money.
Can you confirm that door and motion sensors work fast and reliable with HA when ajax is disarmed ?
Only the door sensors send state changes when the alarm is disarmed.
The motion sensors only send their temperature status to Jeedom.
Ahh… I was hopping PIR sensors to work also. Now I’m testing AX Pro (Hikvision) and have same problem. No matter that sensor work and detect in disarm mode (there is chime tone on every move ) … I did not get info in HA. Door sensor send info, but with 20-30sec delay (and that made them usless in HA).
I can belive that all security vendors are such #@$… The only working system is Paradox… but it’s very retro and phone app is disaster.
Thanks for this.
apparently to do this, Jeedom now requires at least the power pack service pack to enable external access to the device.
As far as I understand, the power pack service pack would allow connecting to Jeedom without opening ports, similarly to what Nabu Casa allowed with Home Assistant…
For me it’s not working, the window/door sensors are not updating as soon as I open or close, I need to sync in order to the see the new status.
Did this happen to you to?
Thanks
For me, this was immediately fixed as soon as I enabled the access to my Jeedom server from the Internet, and I correctly set the corresponding external URL access into Jeedom.
Strange, because I’ve also the external access available through Ha-Proxy (PFsense), access and connect without any problem, so not sure where the problem is right now.
Also the famous three certificates levels are good.
The same goes for me: I’ve activated external access, and I can access my instance via a 3G/4G/5G mobile connection.
I have a domain passing through a nginx and cloudflare proxy, certificates ok.
And not to mention Home Assistant, even under jeedom only, the door sensor states don’t update.
Hello Lacrima,
I was able to solve the problem reinstalling the plugin, but be sure that before reinstalling the External Access is working.
As soon as I did that, everything starts working again.
Have a good one 😉
Hello Roberto,
I tried, my external access works fine.
I uninstalled the plugin, rebooted jeedom, reinstalled the plugin, but still the same thing. The satus of the various sensors doesn’t update unless I click on “Syncrhonize my equipment” in the jeedom Ajax plugin.
Hi,
Thank you for this guide. I can get the buttons to work, but the sensors update very, very slowly and very randomly.
I don’t know jeedom, I’ve just set it up for ajax.
Is there a solution to make status updates faster?
Regards
In my case, the status of the door sensors is updated almos instantly.
But that’s not the case for other sensors (like temperature ones)
Sorry for double post, bug with my browser cache..
I’ve just enabled external access (at least, I think) in Settings / System / Configuration / Networks / External Access and reboot jeedom (just in case) but nothing has changed. I currently have one of my doors open, and its status is still “Closed”.
On the other hand, I know absolutely nothing about jeedom, I tried it 5 years ago, and I couldn’t get the hang of it, so I switched to Home Assistant.
Hi,
Thank you for this guide. I can get the buttons to work, but the door sensors update very, very slowly and very randomly (often they don’t even update).
I don’t know jeedom, I’ve just set it up for ajax.
Is there a solution to make status updates faster?
Regards
Can you provide a more detailed step-by-step guido how to do this (screenshots?)? I am new to Home Assistant and want to integrate my Ajax Alarm system
For instance, how do I do the following:
‘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.’
But also the next steps:
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.
Jeedom is a different home automation system. You need to set it up somewhere. It’s not a Home Assistant component.
My tutorial is addressed to people with a good knowledge of Home Assistant and its setup.
Maybe an AI can lend you a hand with the different steps!
One question about external access to jeedom: does the integration work also with external access provided with Cloudflare tunnel and MFA on jeedom side?
Thanks
Hello, thank you for the tutorial on integrating Ajax with Jeedom and Home Assistant.
With SIA in Home Assistant, it’s possible to integrate alarm triggers, activation alerts, and deactivation alerts into automations.
In my setup, I use the following automations:
Alarm armed → Alexa announces it.
Alarm disarmed → Alexa announces it.
Alarm armed in night mode → Alexa announces it.
If the alarm is triggered, Alexa keeps looping the message: “Attention! There are intruders in the house. I will call the police!”.
(This is only a warning — it doesn’t actually make the call, but the intruder doesn’t know that.)
I also created another automation to activate a Zigbee siren outside of Ajax.
If I leave the house without arming the alarm, Home Assistant sends me a notification:
”’tts_text: “Attention! Remember, the alarm has not been armed”
media_stream: alarm_stream_max”’
With SIA, beyond arming and disarming, I can create many useful automations.
However, the only real advantage I see in integrating Ajax through Jeedom is being able to arm the alarm from HA — but in my opinion, this is unnecessary and even reduces the security of Ajax, since it relies on two external systems.
SIA code:
https://docs.google.com/spreadsheets/d/1-N-RZVS8IiwM5zuw2u4gt8Bx_5xo_JOwuagHJgSJxUw/edit?gid=1861247#gid=1861247
My main problem with integrating the Ajax alarm with SIA is that this integration cannot be used if the alarm is already configured to be monitored by an Alarm Receiving Center, which is my case.
In addition, with SIA you only receive the status of the door sensors when the alarm is armed. However, with the integration through Jeedom, you can receive the status of the sensors whenever they change, regardless of whether the alarm is armed or disarmed.
Ajax light switches look nice and can be triggered by the alarm’s motion sensors, which can be useful, but it would be nice to extend those light switches functionality into HomeAssistant, have them activated by Siri, etc. I don’t believe SIA enables that level of functionality.
I wish HomeAssistant would provide an integration for Ajax Systems. It’s obviously possible as Jeedom have done it.
Would this work locally and without an internet connection? I would want to create this setup, but in a boat where internet connection is not constant.
Jeedom integrates AJAX via AJAX Cloud, so no, this wouldn’t work without an internet connection.
If you are not using an Alarm Receiving Center, I recommend you to use SIA protocol to integrate your AJAX alarm. Then, if you want to control the alarm status through HA, I then recommend to hack one AJAX remote control using an ESP32 as explained, for example, in https://bitbucket.org/iesus_sonesson/d1-ajax-mqtt/src/master/
I set up Jeedom and it detects light switches but does not have any commands available, unlike other Ajax devices. Any ideas?
Could you share your Home Assistant YAML configuration file ? I’ve integrated my AJAX system into HA using Jeedom but don’t know how to get same level of information (temperatures, the panal alarme with lock …ETc) as you show in your screenshot at the beginning of the post !
I’ve defined a sensor for every value I want to import. From my mqtt.yaml file:
sensor:
- name: "Ajax Alarm Status"
state_topic: "jeedom/cmd/event/1"
unique_id: "ajax_alarm_status_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"
button:
- name: "Arm alarm"
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"
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"
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"
And then, from my templates.yaml file:
code_arm_required: false
arm_away:
target:
entity_id:
arm_night:
target:
entity_id:
disarm:
target:
entity_id:
unique_id: alarm_control_panel_ajax_from_freedom
code_format: number
default_entity_id: alarm_control_panel.ajax_alarm_panel
state: '{{ "armed_night" if states("sensor.ajax_alarm_alarm_status")=="NIGHT_MODE"
else "armed_away" if states("sensor.alarma_ajax_estado_alarma_ajax")=="ARMED"
else "disarmed" if states("sensor.alarma_ajax_estado_alarma_ajax")=="DISARMED"
else "unavailable" }}'
Does it still work? Do you have some limitations?
Thanks!
I just switched to this integration as it simplify it a lot https://github.com/bvis/aegis-hass