npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

node-red-contrib-alarm-ultimate

v0.3.0-beta.7

Published

Alarm System node for Node-RED.

Readme

NPM version NPM downloads Node-RED Flows License GitHub issues Status: beta

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 paletteInstall → search alarm ultimate
  • NPM:
npm i node-red-contrib-alarm-ultimate

Quick start

Beginner-friendly flow:

  1. Add an AlarmSystemUltimate (BETA) node.
  2. 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).
  3. Send sensor messages to the Alarm node:
    • open: msg.topic="sensor/frontdoor", msg.payload=true
    • close: msg.topic="sensor/frontdoor", msg.payload=false
  4. Arm/disarm by sending a control message to the Alarm node:
    • msg.topic = controlTopic (default alarm)
    • msg.command = "arm" or msg.command = "disarm"
  5. 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 the AlarmSystemUltimate editor (KNX-Ultimate: knx.destination, AX Pro: payload.zoneUpdate).
  • Use AlarmUltimateState in Input mode to normalize arm/disarm commands (e.g. HomeKit) and inject them into the selected Alarm node.
  • Use AlarmUltimateState in Output mode with an Adapter to format state events for external systems (HomeKit / KNX / AX Pro / ...).
  • Use AlarmUltimateZone / AlarmUltimateSiren output-only nodes to split Alarm outputs into dedicated streams.
  • For distributed flows, use Node-RED built-in link in / link out to fan-in sensors/commands and fan-out Alarm outputs (see examples/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; 0 disables)
  • Open Zones (Cycle): cyclic open zones listing at a fixed interval (any alarm state; 0 disables)

Arming behavior:

  • By default, arming is blocked if any (non-bypassed) zone is open.
  • If enabled in a zone, supervision.blockArm: true also 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 emits supervision_lost and 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 .../event telegrams (msg.event, msg.payload = { event, mode, ... })
  • Alarm Zone (AlarmUltimateZone): emits zone_open / zone_close as .../event telegrams
  • Alarm 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/payload fields 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 with AlarmSystemUltimate, injects and debug nodes.
  • examples/alarm-ultimate-dashboard.json: Node-RED Dashboard example embedding the Alarm Panel in a ui_template iframe.
  • 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.read
  • AlarmSystemUltimate.write

HTTP admin endpoints:

  • GET /alarm-ultimate/alarm/nodes
  • GET /alarm-ultimate/alarm/:id/state
  • GET /alarm-ultimate/alarm/:id/log
  • POST /alarm-ultimate/alarm/:id/command
  • GET /alarm-ultimate/alarm-json-mapper
  • GET /alarm-ultimate/alarm-panel