node-red-contrib-alarm-ultimate 0.3.0-beta.7
Alarm System node for Node-RED.
node-red-contrib-alarm-ultimate
Alarm System Ultimate nodes + web panel for Node-RED.
Includes:
AlarmSystemUltimate(BETA): full alarm control panel node (zones, entry/exit delays, bypass, chime, 24h/fire/tamper, siren, event log, optional per-zone sensor supervision).- Helper nodes:
AlarmUltimateState,AlarmUltimateZone,AlarmUltimateSiren.AlarmUltimateState: Input/Output node with embedded adapters (Default / Homekit / Ax Pro / KNX-Ultimate).AlarmUltimateZone: output-only zone events splitter (no adapters).AlarmUltimateSiren: output-only siren state splitter.
- Web tools: Zones JSON mapper + web Alarm Panel (embeddable in Node-RED Dashboard).
Note: AlarmSystemUltimate is currently BETA.
Table of contents
Install
- Palette Manager: Menu → Manage palette → Install → search
alarm ultimate - NPM:
npm i node-red-contrib-alarm-ultimate
Quick start
Beginner-friendly flow:
- Add an AlarmSystemUltimate (BETA) node.
- Click Manage zones and add at least one zone (example topic:
sensor/frontdoor). Use Export JSON / Import JSON in the Zones JSON Mapper web tool to backup/restore your zones. Important: after editing zones, click Done in the Node-RED editor to save (if you click Cancel, changes are lost). - Send sensor messages to the Alarm node:
- open:
msg.topic="sensor/frontdoor",msg.payload=true - close:
msg.topic="sensor/frontdoor",msg.payload=false
- open:
- Arm/disarm by sending a control message to the Alarm node:
msg.topic = controlTopic(defaultalarm)msg.command = "arm"ormsg.command = "disarm"
- Connect a Debug node to the Alarm output to see events.
Optional (recommended):
- For sensor integrations that don't use
msg.topic, use Zones → Zone input adapter in theAlarmSystemUltimateeditor (KNX-Ultimate:knx.destination, AX Pro:payload.zoneUpdate). - Use
AlarmUltimateStatein Input mode to normalize arm/disarm commands (e.g. HomeKit) and inject them into the selected Alarm node. - Use
AlarmUltimateStatein Output mode with an Adapter to format state events for external systems (HomeKit / KNX / AX Pro / ...). - Use
AlarmUltimateZone/AlarmUltimateSirenoutput-only nodes to split Alarm outputs into dedicated streams. - For distributed flows, use Node-RED built-in
link in/link outto fan-in sensors/commands and fan-out Alarm outputs (seeexamples/alarm-ultimate-link-bus.json).
Screenshots
Alarm Panel (web)
Flow overview
Nodes
Alarm System Ultimate (BETA)
Main node that:
- Receives control commands on
msg.topic === controlTopic - Receives sensor messages on any other topic and matches them to a configured zone
It emits events and state updates on 9 outputs (see the node help in the editor for full details). Output #1 (All messages) is a superset and may emit a single message or an array (event + siren at the same time).
Use AlarmUltimateState (Output mode + Adapter) to format state events for your integrations, and AlarmUltimateZone / AlarmUltimateSiren to split outputs into dedicated streams.
Open zones listing features:
- Open Zones (Arming): open zones listing while arming (interval configurable;
0disables) - Open Zones (Cycle): cyclic open zones listing at a fixed interval (any alarm state;
0disables)
Arming behavior:
- By default, arming is blocked if any (non-bypassed) zone is open.
- If enabled in a zone,
supervision.blockArm: truealso blocks arming while the zone is MISSING. - Optional node setting: Wait zones closed before exit delay (when arming with open zones, the node waits for all zones to close before starting the exit delay countdown).
Persistence:
- Enable Persist state to keep armed/disarmed state, bypass list, event log and zone state across Node-RED restarts/deploys.
Optional per-zone sensor supervision
You can enable sensor supervision per zone to detect devices that stop reporting.
- Supervision starts immediately when the node runs.
- If a zone does not receive a valid sensor update for
timeoutSeconds, the node emitssupervision_lostand the Alarm Panel shows… • MISSING. - The next valid sensor update emits
supervision_restored. - If
blockArm: true, arming is blocked while the zone is missing.
“Valid” means the message value can be converted to boolean using the Alarm node With Input property (default msg.payload), e.g. true/false, open/closed, on/off, 1/0.
Example zone:
{
"name": "Front door",
"topic": "sensor/frontdoor",
"type": "perimeter",
"supervision": { "enabled": true, "timeoutSeconds": 120, "blockArm": true }
}
Helper nodes (I/O)
AlarmUltimateState and AlarmUltimateZone can work in two modes:
- Output: emit Alarm events to the flow (no wiring from the Alarm node required).
- Input: receive messages from the flow, apply an Adapter, and inject them into the selected Alarm node.
AlarmUltimateSiren remains output-only and emits siren telegrams.
Alarm State(AlarmUltimateState): emits.../eventtelegrams (msg.event,msg.payload = { event, mode, ... })Alarm Zone(AlarmUltimateZone): emitszone_open/zone_closeas.../eventtelegramsAlarm Siren(AlarmUltimateSiren): emits siren telegrams (msg.topic = <controlTopic>/siren,msg.event = siren_on|siren_off,msg.payload = true|false)
Canonical envelope (msg.alarmUltimate)
All nodes in this package add a stable, versioned object to every output message:
msg.alarmUltimate = {
v: 1,
ts: 1700000000000,
kind: "event|siren|open_zones|any_zone_open|command|...",
alarm: { id, name, controlTopic },
event: "armed|disarmed|zone_open|siren_on|...",
mode: "armed|disarmed",
reason: "init|timeout|manual|...",
};
Embedded adapters use msg.alarmUltimate as the canonical source, so they do not depend on user-configurable msg.topic / msg.payload formats.
Web tools
These pages are served via the Node-RED admin HTTP endpoint:
- Zones JSON Mapper:
/alarm-ultimate/alarm-json-mapper - Alarm Panel:
/alarm-ultimate/alarm-panel
The Alarm Panel supports:
- Preselect node:
/alarm-ultimate/alarm-panel?id=<alarmNodeId> - Embed mode (for Dashboard iframes):
/alarm-ultimate/alarm-panel?embed=1&id=<alarmNodeId> - Views:
view=keypad,view=zones,view=log(e.g./alarm-ultimate/alarm-panel?embed=1&view=log&id=<alarmNodeId>)
The Zones JSON Mapper supports:
- Sample message mapping (e.g. KNX Ultimate): map
topic/payloadfields and generate a zone template. - ETS Group Addresses export (TSV): paste the exported table and generate zones in batch (boolean datapoints only).
- Backup/restore: Export JSON / Import JSON for zone definitions.
- Quality-of-life: bulk apply (Kind/Supervision), sorting, duplicate-topic skipping on import, persisted Step 1 input.
Examples
examples/alarm-ultimate-basic.json: ready-to-import flow withAlarmSystemUltimate, injects and debug nodes.examples/alarm-ultimate-dashboard.json: Node-RED Dashboard example embedding the Alarm Panel in aui_templateiframe.examples/alarm-ultimate-dashboard-controls.json: Node-RED Dashboard example with the embedded panel plus command buttons (and a small sensor simulator).examples/alarm-ultimate-dashboard-v2.json: Dashboard 2.0 example for@flowfuse/node-red-dashboard(Alarm Panel + basic controls + status).examples/alarm-ultimate-home-assistant-alarm-panel.json: Home Assistant Add-on example (no MQTT) using the HA Alarm Panel card.
See examples/README.md.
Development
Run tests:
npm test
Permissions and endpoints
When Node-RED authentication is enabled, the admin endpoints use these permissions (if available):
AlarmSystemUltimate.readAlarmSystemUltimate.write
HTTP admin endpoints:
GET /alarm-ultimate/alarm/nodesGET /alarm-ultimate/alarm/:id/stateGET /alarm-ultimate/alarm/:id/logPOST /alarm-ultimate/alarm/:id/commandGET /alarm-ultimate/alarm-json-mapperGET /alarm-ultimate/alarm-panel