SIA-Server is a lightweight, self-hosted Python service that receives SIA protocol messages from Honeywell Galaxy Flex alarm systems and forwards them as rich, prioritized push notifications via ntfy.sh.
It was created as a replacement for the discontinued free Honeywell push notification service, allowing users to regain full control over their alarm alerts without ongoing subscription costs.
This project was developed and tested on a Honeywell Galaxy Flex 20. It is likely compatible with other Honeywell Galaxy panels, but this has not been verified.
If your Galaxy Flex notifications suddenly stopped working, this project provides a self-hosted alternative.
IMPORTANT SECURITY NOTICE The communication between the alarm panel and this server is unencrypted. This server is designed to be run on a trusted local network only. Please read the full Security & Privacy Guidelines before installation.
- Self-Hosted: Runs on any local Windows or Linux machine, like a Raspberry Pi.
- Real-time Notifications: Instantly forwards alarm events to your devices.
- Prioritized Alerts: Uses ntfy.sh priorities to distinguish between urgent alarms and routine events.
- Advanced Notification Routing: Route notifications for different accounts to different ntfy.sh topics, each with its own authentication (Bearer Token or User/Pass).
- Robust Protocol Handling: Correctly parses the multi-message protocol used by Galaxy Flex panels.
- Broad SIA Level Support: The flexible parser can correctly handle event data from SIA Levels 0, 1, 2, and 3.
- Optional Heartbeat Server: Includes an optional server to handle the proprietary Honeywell "IP Check" heartbeat.
- Character Encoding Fixes: Decodes the proprietary character set used by Galaxy panels (e.g., Å, Ä, Ö).
- Highly Configurable: Most settings are in a simple
sia-server.conffile, with advanced settings indefaults.py.
- A Honeywell Galaxy Flex alarm system with an Ethernet module (e.g., A083-00-10 or E080-4).
- A Linux or Windows machine on the same network as the alarm system (a Raspberry Pi running Raspberry Pi OS is perfect).
- Python 3.
- The
python3-requestspackage and the optionalpython3-uvlooppackage (for Linux).
The project is structured to separate the server logic, protocol parsing, and configuration.
.
├── sia-server.py # The main server application
├── sia-server.conf # Main user configuration file.
├── defaults.py # Advanced settings and constants.
├── configuration.py # Loads and validates all configuration.
├── notification.py # Handles formatting and sending of notifications.
├── ip_check.py # Optional subprocess for answering heartbeats.
├── README.md # This file.
├── galaxy/
│ ├── __init__.py
│ ├── README.md # Technical description of the protocol.
│ ├── parser.py # Handles parsing of the Galaxy SIA protocol.
│ └── constants.py # Constants used in the SIA protocol.
└── asuswrt-merlin/
├── README.md # Install instructions for Asuswrt-Merlin.
├── S99siaserver # Entware service (init.d) file.
└── check-sia.sh # Watchdog script for Entware service.
This guide will walk you through the five main steps to get your server running.
The recommended way is to download the latest stable release.
- Go to the Releases page on GitHub.
- Under the latest release, download the
Source code (zip)file. - Unzip the file to your chosen directory (e.g.,
/home/pi/Scripts/sia-serveron Linux orC:\siaserveron Windows).
For Developers: Cloning with Git
If you want the latest development code, you can clone the repository directly:
git clone https://github.com/ZebMcKayhan/SIA-Server.git sia-server
cd sia-serverThis server requires Python 3. The installation steps are different for Linux and Windows.
- Install Python (if needed): Most modern Linux systems come with Python 3 pre-installed. You can check with
python3 --version. If you need to install itsudo apt update sudo apt install python3
- Install Dependencies: Use
aptto install the required packages.uvloopis an optional performance enhancement.sudo apt update sudo apt install python3-requests python3-uvloop
- Install Python: Download and install the latest Python 3 from the official Python website. Important: During installation, make sure to check the box that says "Add Python to PATH".
- Install Dependencies: Open a PowerShell or Command Prompt. It is strongly recommended to use
python -m pipto ensure you are installing packages for the correct Python interpreter.python -m pip install requests pyopenssl cryptography ndg-httpsclient
Note: The extra packages (
pyopenssl, etc.) are highly recommended to avoid potential HTTPS/SSL errors when sending notifications from Windows.
Before configuring the server, get the ntfy.sh app on your phone or computer.
- Follow the instructions at the ntfy.sh documentation to get the app.
- Inside the app, subscribe to a new topic. Choose a long, random, unguessable name for your topic to keep it private (e.g.,
alarm-skUHvisapP2J382MDI2). - You will use the full URL of this topic (e.g.,
https://ntfy.sh/alarm-skUHvisapP2J382MDI2) in the configuration file.
Log into your Galaxy Flex panel's installer menu and configure the Ethernet module. The numbers in parentheses are the menu codes for a Galaxy Flex 20.
- ARC IP Address: The IP of the machine running
sia-server.py(e.g.,192.168.128.10). (Menu56.1.1.1.4.1) - ARC Port: The port for the
[SIA-Server]and optionally the[IP-Check]server. (Menu56.1.1.1.4.1) - Protocol: SIA. Levels 0-3 are supported; Level 3 is recommended for the most detail. (Menu
56.1.1.1.4.2) - Account Number: Your 4 or 6-digit alarm account number. SIA Level 3 requires 6 digits. (Menu
56.1.2.1.1) - Encryption: Must be set to Off. The proprietary encryption is not supported. (Menu
56.3.3.5) - IP-Check: (Optional) To use the heartbeat feature, enable it by setting a time interval (e.g., 00:30 for 30 minutes).
00:00means disabled. (Menu56.3.3.7.1) - Eng. Test: Use this to send a test notification without generating a fault. (Menu
56.7.1)
Edit the sia-server.conf file to match your setup. The file is pre-populated with examples to guide you.
# On Linux
nano /path/to/your/sia-server/sia-server.confOn Windows, simply edit the file with a text editor like Notepad.
The primary configuration is done in sia-server.conf. Advanced settings (like event priorities and character maps) can be found in defaults.py.
-
Site Sections (
[012345]): Each site is defined by a section where the header is the panel's unique Account Number.SITE_NAME: A friendly name for the site (e.g., "Main House"). If omitted, the account number is used.NTFY_ENABLED,NTFY_TOPIC,NTFY_TITLE: Configure notification delivery for this site.NTFY_AUTH: Can beNone,Token, orUserpassfor private topics. Provide the correspondingNTFY_TOKENorNTFY_USER/NTFY_PASSkeys.
-
[Default]Section: A special section for events from account numbers not specifically listed. -
[SIA-Server]&[IP-Check]Sections: Configure the ports and addresses for the main server and the optional heartbeat server. -
[Logging]Section: Control the log level, output, and file rotation.LOG_LEVEL: Set the verbosity of logs (DEBUG,INFO,WARNING,ERROR).INFOis recommended for normal use.LOG_TO: ChooseScreen(for testing/systemdjournal) orFile.LOG_FILE: IfLOG_TO = File, specify the full path to the log file.LOG_MAX_MB: The maximum size in Megabytes before the log file is rotated.LOG_BACKUP_COUNT: The number of old log files to keep.
-
[Notification]Section: Configures the server's resilient retry queue for handling network outages.MAX_QUE_SIZE: The maximum number of failed notifications to keep in the queue. If the queue becomes full, the oldest notification is discarded to make room for the newest one.MAX_RETRIES: The number of times to retry sending a failed notification after the initial attempt. Set to0for infinite retries.MAX_RETRY_TIME: The maximum number of minutes to wait between retry attempts. The server uses a progressive backoff strategy, increasing the wait time with each failure up to this maximum.
Note: It's convenient to set
LOG_TO = Screeninsia-server.confto see live events in your terminal.
cd /path/to/your/sia-server
python3 sia-server.pyPress Ctrl+C to stop.
Note: Set
LOG_TO = Fileinsia-server.confto keep a persistent log.
- Create the Service File:
sudo nano /etc/systemd/system/sia-server.service - Paste this content, changing the paths in
WorkingDirectoryandExecStart.[Unit] Description=Galaxy SIA Alarm Server After=network.target [Service] Type=simple User=pi WorkingDirectory=/home/pi/Scripts/sia-server ExecStart=/usr/bin/python3 /home/pi/Scripts/sia-server/sia-server.py Restart=on-failure RestartSec=5s [Install] WantedBy=multi-user.target
Note: You may need to add firewall rules (e.g., via
ExecStartPre=&ExecStopPost=). If your firewall commands require root, you may need to remove or comment out theUser=pidirective. - Enable and Start:
sudo systemctl daemon-reload sudo systemctl enable sia-server.service sudo systemctl start sia-server.service - Manage:
- Check status & recent logs:
sudo systemctl status sia-server.service - Stop the service:
sudo systemctl stop sia-server.service - Start the service:
sudo systemctl start sia-server.service - Restart the service:
sudo systemctl restart sia-server.service - View live logs:
journalctl -u sia-server.service -f(if not logging to a file) ortail -f /path/to/your/log/file.log(if logging to a file).
- Check status & recent logs:
Note: Set
LOG_TO = Screeninsia-server.confto see live events.
cd C:\path\to\your\sia-server
python sia-server.pyPress Ctrl+C to stop.
Note: Set
LOG_TO = Fileinsia-server.confto keep a persistent log.
- Download NSSM.
- Open a Command Prompt as an Administrator.
- Run the installer:
C:\path\to\nssm.exe install SIA-Server - In the GUI that pops up:
- Path: Browse to your Python executable (e.g.,
C:\Python312\python.exe). - Startup directory: Browse to your script folder.
- Arguments:
sia-server.py
- Path: Browse to your Python executable (e.g.,
- Click Install service. You can now manage it from the Windows Services app (
services.msc).
Please read these guidelines carefully.
1. Local Network Communication (Panel to Server)
The communication between your alarm panel and this server is unencrypted. Run it on a trusted local network (LAN).
Warning: Do not expose the server's listening ports directly to the public internet. If you must, use a VPN (e.g., WireGuard).
2. Notification Privacy (Server to ntfy.sh)
- Transport Security: Communication to
ntfy.shuses HTTPS and is secure. - Topic Privacy: ntfy.sh topics are public by default. To secure them:
- Use a long, unguessable topic name.
- Use a private, access-controlled topic. You can get one by subscribing to
ntfy.sh Proor by self-hosting your ownntfy.shserver. This server fully supports authentication via theNTFY_AUTHsettings. - Consider a generic Site Name that cannot be linked to your address.
- Alternatively: Subscribe to NTFY.sh PRO to setup private channels with authentication.
- Alternatively: Host NTFY yourself to be able to setup private channels free of charge (Requires a machine with public ip)
Disclaimer: You are ultimately responsible for securing your own setup.
- This project was developed through a collaborative effort with Anthropic's AI assistant, Claude.
- The initial socket server structure was inspired by the nimnull/sia-server project.
- Some protocol information was found in dklemm/FlexSIA2MQTT project.
This project is licensed under the MIT License.