Egardia GATE-04 integration for Home Assistant (Cloud API workaround)

Since the original Egardia integration is outdated/problematic, I built a working Home Assistant integration using Egardia’s cloud portal API.

Tested with:

  • Egardia GATE-04
  • Home Assistant OS 2026.5.x
  • HA on Proxmox

This uses the official Egardia cloud portal (my.egardia.com) via authenticated HTTP requests.

Currently working:

:white_check_mark: Alarm status (disarmed / armed_home / armed_away)
:white_check_mark: Arm Away
:white_check_mark: Arm Home
:white_check_mark: Disarm


1. Create shell scripts

Create:

/config/scripts/

egardia_login.sh

#!/bin/shcurl -s -c /config/egardia.cookies \  -X POST \  'https://my.egardia.com/de/home?p_p_id=com_liferay_login_web_portlet_LoginPortlet&p_p_lifecycle=1&p_p_state=normal&p_p_mode=view&_com_liferay_login_web_portlet_LoginPortlet_javax.portlet.action=%2Flogin%2Flogin&_com_liferay_login_web_portlet_LoginPortlet_mvcRenderCommandName=%2Flogin%2Flogin' \  -H 'Content-Type: application/x-www-form-urlencoded' \  --data-urlencode '_com_liferay_login_web_portlet_LoginPortlet_formDate=1778995960013' \  --data-urlencode '_com_liferay_login_web_portlet_LoginPortlet_saveLastPath=false' \  --data-urlencode '_com_liferay_login_web_portlet_LoginPortlet_doActionAfterLogin=false' \  --data-urlencode '_com_liferay_login_web_portlet_LoginPortlet_login=YOUR_USERNAME' \  --data-urlencode '_com_liferay_login_web_portlet_LoginPortlet_password=YOUR_PASSWORD'

egardia_status.sh

#!/bin/shcurl -s -b /config/egardia.cookies \'https://my.egardia.com/de/group/egardia/summary?p_p_id=portletalarmstatusegardia_WAR_portletliferayalarmsystemegardiawebapp_INSTANCE_HNn7&p_p_lifecycle=2&p_p_state=normal&p_p_mode=view&p_p_cacheability=cacheLevelPage&_portletalarmstatusegardia_WAR_portletliferayalarmsystemegardiawebapp_INSTANCE_HNn7_action=getAlarmStatus'

egardia_arm_away.sh

#!/bin/shcurl -s -b /config/egardia.cookies \  -X POST \  'https://my.egardia.com/de/group/egardia/summary?p_p_id=portletalarmstatusegardia_WAR_portletliferayalarmsystemegardiawebapp_INSTANCE_HNn7&p_p_lifecycle=2&p_p_state=normal&p_p_mode=view&p_p_cacheability=cacheLevelPage&_portletalarmstatusegardia_WAR_portletliferayalarmsystemegardiawebapp_INSTANCE_HNn7_action=setAlarmStatus' \  -H 'Content-Type: application/x-www-form-urlencoded' \  --data-urlencode 'json={"atHome":false,"on":true}'

egardia_arm_home.sh

#!/bin/shcurl -s -b /config/egardia.cookies \  -X POST \  'https://my.egardia.com/de/group/egardia/summary?p_p_id=portletalarmstatusegardia_WAR_portletliferayalarmsystemegardiawebapp_INSTANCE_HNn7&p_p_lifecycle=2&p_p_state=normal&p_p_mode=view&p_p_cacheability=cacheLevelPage&_portletalarmstatusegardia_WAR_portletliferayalarmsystemegardiawebapp_INSTANCE_HNn7_action=setAlarmStatus' \  -H 'Content-Type: application/x-www-form-urlencoded' \  --data-urlencode 'json={"atHome":true,"on":true}'

egardia_disarm.sh

#!/bin/shcurl -s -b /config/egardia.cookies \  -X POST \  'https://my.egardia.com/de/group/egardia/summary?p_p_id=portletalarmstatusegardia_WAR_portletliferayalarmsystemegardiawebapp_INSTANCE_HNn7&p_p_lifecycle=2&p_p_state=normal&p_p_mode=view&p_p_cacheability=cacheLevelPage&_portletalarmstatusegardia_WAR_portletliferayalarmsystemegardiawebapp_INSTANCE_HNn7_action=setAlarmStatus' \  -H 'Content-Type: application/x-www-form-urlencoded' \  --data-urlencode 'json={"atHome":false,"on":false}'

Make executable:

chmod +x /config/scripts/*.sh

2. Home Assistant configuration.yaml

shell_command:  egardia_login: /config/scripts/egardia_login.sh  egardia_arm_away: /config/scripts/egardia_arm_away.sh  egardia_arm_home: /config/scripts/egardia_arm_home.sh  egardia_disarm: /config/scripts/egardia_disarm.shcommand_line:  - sensor:      name: Egardia Alarm      unique_id: egardia_alarm_status      command: /config/scripts/egardia_status.sh      scan_interval: 60      value_template: >        {% if not value_json.on %}          disarmed        {% elif value_json.atHome %}          armed_home        {% else %}          armed_away        {% endif %}template:  - alarm_control_panel:      - name: Egardia Alarm Panel        unique_id: egardia_alarm_panel        code_arm_required: false        code_format: no_code        state: "{{ states('sensor.egardia_alarm') }}"        arm_away:          service: shell_command.egardia_arm_away        arm_home:          service: shell_command.egardia_arm_home        disarm:          service: shell_command.egardia_disarm

3. IMPORTANT

Before first use:

Run:

/config/scripts/egardia_login.sh

This creates:

/config/egardia.cookies

without this the API calls won't work.


Dashboard

Use:

type: alarm-panelentity: alarm_control_panel.egardia_alarm_panelname: Egardia Alarm

Known limitations

  • Uses cloud API (not local LAN API)
  • Cookie/session expiry not yet auto-refreshed
  • formDate may be static now but could change in future
  • unofficial / reverse engineered

Future improvements

  • auto re-login
  • secrets.yaml support
  • proper HACS integration
  • sensor entities for residents / siren / alarm state

Maybe this helps other Egardia users :slightly_smiling_face: