
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. Instead, I only spent €8 on the official Jeedom plugin for AJAX alarms—interestingly, this plugin has an AGPL license, making it open-source and free.
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.
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!