{"id":15145180,"url":"https://github.com/node-alarm-dot-com/node-alarm-dot-com","last_synced_at":"2026-04-11T19:12:27.936Z","repository":{"id":39668190,"uuid":"145354886","full_name":"node-alarm-dot-com/node-alarm-dot-com","owner":"node-alarm-dot-com","description":"A module written in Node.js to interface with Alarm.com security systems.","archived":false,"fork":false,"pushed_at":"2024-09-21T15:36:09.000Z","size":305,"stargazers_count":26,"open_issues_count":4,"forks_count":15,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-04-02T07:51:17.838Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/node-alarm-dot-com.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-08-20T02:12:54.000Z","updated_at":"2025-03-14T02:20:44.000Z","dependencies_parsed_at":"2024-09-26T11:09:24.436Z","dependency_job_id":null,"html_url":"https://github.com/node-alarm-dot-com/node-alarm-dot-com","commit_stats":{"total_commits":109,"total_committers":8,"mean_commits":13.625,"dds":0.5045871559633027,"last_synced_commit":"f082ef6944fa18507623cc5c4732baf7ec20f948"},"previous_names":[],"tags_count":49,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/node-alarm-dot-com%2Fnode-alarm-dot-com","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/node-alarm-dot-com%2Fnode-alarm-dot-com/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/node-alarm-dot-com%2Fnode-alarm-dot-com/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/node-alarm-dot-com%2Fnode-alarm-dot-com/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/node-alarm-dot-com","download_url":"https://codeload.github.com/node-alarm-dot-com/node-alarm-dot-com/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248565181,"owners_count":21125435,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-09-26T11:09:19.235Z","updated_at":"2025-10-23T22:24:44.990Z","avatar_url":"https://github.com/node-alarm-dot-com.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Node.js Alarm.com Interface\n\nUnofficial interface module written in Node.js to access and operate [Alarm.com](https://www.alarm.com/) security systems.\n\nThis interface works best with the fork: [https://github.com/node-alarm-dot-com/homebridge-node-alarm-dot-com](https://github.com/node-alarm-dot-com/homebridge-node-alarm-dot-com), based off of John Hurliman's FrontPoint\\* plugin for Homebridge\u003csmall\u003e[↗](https://github.com/jhurliman/homebridge-frontpoint)\u003c/small\u003e. This variation \u003cdel\u003eadds\u003c/del\u003e changes the default login authentication \u003cdel\u003efor\u003c/del\u003e to Alarm.com. \u003cdel\u003ewith a switch to use the FrontPoint login authentication process if desired.\u003c/del\u003e\n\n\u003csmall\u003e\\*FrontPoint is simply a rebranded service provider for Alarm.com.\u003c/small\u003e\n\nOriginally intended for use with the fork: [https://github.com/node-alarm-dot-com/homebridge-node-alarm-dot-com](https://github.com/node-alarm-dot-com/homebridge-node-alarm-dot-com), originally created by Bryan Bartow for his Alarm.com plugin for Homebridge\u003csmall\u003e[↗](https://github.com/bryan-bartow/homebridge-alarm.com)\u003c/small\u003e.\n\n## Supported Features\n\n- Querying panels\n  - Arming\n  - Disarming\n- Sensors\n  - Contact states\n  - \u003cdel\u003eOccupancy states\u003c/del\u003e (this does not work due to lag in the Alarm.com webAPI itself)\n  - Water Leak states\n- Lights\n  - On/Off switch\n  - Dimmer switch\n- Locks\n  - Lock/Unlock switch\n- Thermostats\n  - State (Off, Heat, Cool, Auto)\n  - Desired Heat setpoint\n  - Desired Cool setpoint\n\n## Usage\n\n**Install:**\n\n`npm i node-alarm-dot-com`\n\n**Querying:**\n\n```js\nconst nodeADC = require('node-alarm-dot-com');\n\nnodeADC\n  .login('your_username', 'your_password')\n  .then((authOpts) =\u003e nodeADC.getCurrentState(authOpts.systems[0], authOpts))\n  .then((res) =\u003e {\n    console.log('Security Systems:', res.partitions);\n    console.log('Sensors:', res.sensors);\n  })\n  .catch((err) =\u003e console.error(err));\n```\n\n**Arming:**\n\n```js\nconst nodeADC = require('node-alarm-dot-com');\n\nnodeADC\n  .login('your_username', 'your_password')\n  .then((authOpts) =\u003e {\n    return nodeADC.getCurrentState(authOpts.systems[0], authOpts).then((res) =\u003e {\n      // This will take 20-30 seconds\n      nodeADC.armStay(res.partitions[0].id, authOpts).then((res) =\u003e {\n        console.log(res);\n      });\n    });\n  })\n  .catch((err) =\u003e console.error(err));\n```\n\n## Documentation\n\n\u003ca name=\"module_nodeADC\"\u003e\u003c/a\u003e\n\n- [nodeADC](#module_nodeADC)\n  - [~login(username, password)](#module_nodeADCmodule_nodeADC..login) ⇒ \u003ccode\u003ePromise\u003c/code\u003e\n  - [~getCurrentState(systemID, authOpts)](#module_nodeADC..getCurrentState) ⇒ \u003ccode\u003ePromise\u003c/code\u003e\n  - [~getPartition(partitionID, authOpts)](#module_nodeADC..getPartition) ⇒ \u003ccode\u003ePromise\u003c/code\u003e\n  - [~getSensors(sensorIDs, authOpts)](#module_nodeADC..getSensors) ⇒ \u003ccode\u003ePromise\u003c/code\u003e\n  - [~getLights(lightIDs, authOpts)](#module_nodeADC..getLights) ⇒ \u003ccode\u003ePromise\u003c/code\u003e\n  - [~turnOnLight(lightID, brightness, authOpts)](#module_nodeADC..turnOnLight) ⇒ \u003ccode\u003ePromise\u003c/code\u003e\n  - [~turnOffLight(lightID, brightness, authOpts)](#module_nodeADC..turnOffLight) ⇒ \u003ccode\u003ePromise\u003c/code\u003e\n  - [~getLocks(lockIDs, authOpts)](#module_nodeADC..getLocks) ⇒ \u003ccode\u003ePromise\u003c/code\u003e\n  - [~setLockSecure(lockID, authOpts)](#module_nodeADC..setLockSecure) ⇒ \u003ccode\u003ePromise\u003c/code\u003e\n  - [~setLockUnsecure(lockID, authOpts)](#module_nodeADC..setLockUnsecure) ⇒ \u003ccode\u003ePromise\u003c/code\u003e\n  - [~setThermostatState(thermostatID, newState, authOpts)](#module_nodeADC..setThermostatState) ⇒ \u003ccode\u003ePromise\u003c/code\u003e\n  - [~setThermostatTargetHeatTemperature(thermostatID, newTemp, authOpts)](#module_nodeADC..setThermostatTargetHeatTemperature) ⇒ \u003ccode\u003ePromise\u003c/code\u003e\n  - [~setThermostatTargetCoolTemperature(thermostatID, newTemp, authOpts)](#module_nodeADC..setThermostatTargetCoolTemperature) ⇒ \u003ccode\u003ePromise\u003c/code\u003e\n  - [~armStay(partitionID, authOpts, opts)](#module_nodeADC..armStay) ⇒ \u003ccode\u003ePromise\u003c/code\u003e\n  - [~armAway(partitionID, authOpts, opts)](#module_nodeADC..armAway) ⇒ \u003ccode\u003ePromise\u003c/code\u003e\n  - [~disarm(partitionID, authOpts)](#module_nodeADC..disarm) ⇒ \u003ccode\u003ePromise\u003c/code\u003e\n\n\u003ca name=\"module_nodeADC..login\"\u003e\u003c/a\u003e\n\n### nodeADC~login(username, password) ⇒ \u003ccode\u003ePromise\u003c/code\u003e\n\nAuthenticate with alarm.com using the mobile webpage login form (loads faster than the desktop webpage login form). Returns an authentication object that can be passed to other methods.\n\n**Kind**: inner method of [\u003ccode\u003emodule_nodeADC\u003c/code\u003e](#module_nodeADC)\n\n| Param    | Type                | Description          |\n| -------- | ------------------- | -------------------- |\n| username | \u003ccode\u003estring\u003c/code\u003e | FrontPoint username. |\n| password | \u003ccode\u003estring\u003c/code\u003e | FrontPoint password. |\n\n\u003ca name=\"module_nodeADC..getCurrentState\"\u003e\u003c/a\u003e\n\n### nodeADC~getCurrentState(systemID, authOpts) ⇒ \u003ccode\u003ePromise\u003c/code\u003e\n\nRetrieve information about the current state of a security system including attributes, partitions, sensors, and relationships.\n\n**Kind**: inner method of [\u003ccode\u003enodeADC\u003c/code\u003e](#module_nodeADC)\n\n| Param    | Type                | Description                                                                                                                                                     |\n| -------- | ------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| systemID | \u003ccode\u003estring\u003c/code\u003e | ID of the FrontPoint system to query. The Authentication object returned from the `login` method contains a `systems` property which is an array of system IDs. |\n| authOpts | \u003ccode\u003eObject\u003c/code\u003e | Authentication object returned from the `login` method.                                                                                                         |\n\n\u003ca name=\"module_nodeADC..getPartition\"\u003e\u003c/a\u003e\n\n### nodeADC~getPartition(partitionID, authOpts) ⇒ \u003ccode\u003ePromise\u003c/code\u003e\n\nGet information for a single security system partition.\n\n**Kind**: inner method of [\u003ccode\u003enodeADC\u003c/code\u003e](#module_nodeADC)\n\n| Param       | Type                | Description                                             |\n| ----------- | ------------------- | ------------------------------------------------------- |\n| partitionID | \u003ccode\u003estring\u003c/code\u003e | Partition ID to retrieve                                |\n| authOpts    | \u003ccode\u003eObject\u003c/code\u003e | Authentication object returned from the `login` method. |\n\n\u003ca name=\"module_nodeADC..getSensors\"\u003e\u003c/a\u003e\n\n### nodeADC~getSensors(sensorIDs, authOpts) ⇒ \u003ccode\u003ePromise\u003c/code\u003e\n\nGet information for one or more sensors.\n\n**Kind**: inner method of [\u003ccode\u003enodeADC\u003c/code\u003e](#module_nodeADC)\n\n| Param     | Type                                                     | Description                                             |\n| --------- | -------------------------------------------------------- | ------------------------------------------------------- |\n| sensorIDs | \u003ccode\u003estring\u003c/code\u003e \\| \u003ccode\u003eArray.\u0026lt;string\u0026gt;\u003c/code\u003e | Array of sensor ID strings.                             |\n| authOpts  | \u003ccode\u003eObject\u003c/code\u003e                                      | Authentication object returned from the `login` method. |\n\n\u003ca name=\"module_nodeADC..getLights\"\u003e\u003c/a\u003e\n\n### nodeADC~getLights(lightIDs, authOpts) ⇒ \u003ccode\u003ePromise\u003c/code\u003e\n\nGet information for one or more lights.\n\n**Kind**: inner method of [\u003ccode\u003enodeADC\u003c/code\u003e](#module_nodeADC)\n\n| Param    | Type                                                     | Description                                             |\n| -------- | -------------------------------------------------------- | ------------------------------------------------------- |\n| lightIDs | \u003ccode\u003estring\u003c/code\u003e \\| \u003ccode\u003eArray.\u0026lt;string\u0026gt;\u003c/code\u003e | Array of light ID strings.                              |\n| authOpts | \u003ccode\u003eObject\u003c/code\u003e                                      | Authentication object returned from the `login` method. |\n\n\u003ca name=\"module_nodeADC..turnOnLight\"\u003e\u003c/a\u003e\n\n### nodeADC~turnOnLight(lightID, brightness, authOpts) ⇒ \u003ccode\u003ePromise\u003c/code\u003e\n\nSets a light to ON and adjusts brightness level (1-100) of dimmable lights.\n\n**Kind**: inner method of [\u003ccode\u003enodeADC\u003c/code\u003e](#module_nodeADC)\n\n| Param      | Type                | Description                                             |\n| ---------- | ------------------- | ------------------------------------------------------- |\n| lightID    | \u003ccode\u003estring\u003c/code\u003e | Light ID string.                                        |\n| brightness | \u003ccode\u003enumber\u003c/code\u003e | An integer, 1-100, indicating brightness.               |\n| authOpts   | \u003ccode\u003eObject\u003c/code\u003e | Authentication object returned from the `login` method. |\n\n\u003ca name=\"module_nodeADC..turnOffLight\"\u003e\u003c/a\u003e\n\n### nodeADC~turnOffLight(lightID, brightness, authOpts) ⇒ \u003ccode\u003ePromise\u003c/code\u003e\n\nSets a light to OFF. The brightness level is ignored.\n\n**Kind**: inner method of [\u003ccode\u003enodeADC\u003c/code\u003e](#module_nodeADC)\n\n| Param      | Type                | Description                                                   |\n| ---------- | ------------------- | ------------------------------------------------------------- |\n| lightID    | \u003ccode\u003estring\u003c/code\u003e | Light ID string.                                              |\n| brightness | \u003ccode\u003enumber\u003c/code\u003e | \u003cdel\u003eAn integer, 1-100, indicating brightness.\u003c/del\u003e Ignored. |\n| authOpts   | \u003ccode\u003eObject\u003c/code\u003e | Authentication object returned from the `login` method.       |\n\n\u003ca name=\"module_nodeADC..getLocks\"\u003e\u003c/a\u003e\n\n### nodeADC~getLocks(lightIDs, authOpts) ⇒ \u003ccode\u003ePromise\u003c/code\u003e\n\nGet information for one or more locks.\n\n**Kind**: inner method of [\u003ccode\u003enodeADC\u003c/code\u003e](#module_nodeADC)\n\n| Param    | Type                                                     | Description                                             |\n| -------- | -------------------------------------------------------- | ------------------------------------------------------- |\n| lockIDs  | \u003ccode\u003estring\u003c/code\u003e \\| \u003ccode\u003eArray.\u0026lt;string\u0026gt;\u003c/code\u003e | Array of lock ID strings.                               |\n| authOpts | \u003ccode\u003eObject\u003c/code\u003e                                      | Authentication object returned from the `login` method. |\n\n\u003ca name=\"module_nodeADC..setLockSecure\"\u003e\u003c/a\u003e\n\n### nodeADC~setLockSecure(lockID, authOpts) ⇒ \u003ccode\u003ePromise\u003c/code\u003e\n\nSets a lock to \"locked\" (SECURED).\n\n**Kind**: inner method of [\u003ccode\u003enodeADC\u003c/code\u003e](#module_nodeADC)\n\n| Param    | Type                | Description                                             |\n| -------- | ------------------- | ------------------------------------------------------- |\n| lockID   | \u003ccode\u003estring\u003c/code\u003e | Lock ID string.                                         |\n| authOpts | \u003ccode\u003eObject\u003c/code\u003e | Authentication object returned from the `login` method. |\n\n\u003ca name=\"module_nodeADC..setLockUnsecure\"\u003e\u003c/a\u003e\n\n### nodeADC~setLockUnsecure(lockID, authOpts) ⇒ \u003ccode\u003ePromise\u003c/code\u003e\n\nSets a lock to \"unlocked\" (UNSECURED).\n\n**Kind**: inner method of [\u003ccode\u003enodeADC\u003c/code\u003e](#module_nodeADC)\n\n| Param    | Type                | Description                                             |\n| -------- | ------------------- | ------------------------------------------------------- |\n| lockID   | \u003ccode\u003estring\u003c/code\u003e | Lock ID string.                                         |\n| authOpts | \u003ccode\u003eObject\u003c/code\u003e | Authentication object returned from the `login` method. |\n\n\u003ca name=\"module_nodeADC..setThermostatState\"\u003e\u003c/a\u003e\n\n### nodeADC~setThermostatState(thermostatID, newState, authOpts) ⇒ \u003ccode\u003ePromise\u003c/code\u003e\n\nUpdate Thermostat State (see `THERMOSTAT_STATES`)\n\n**Kind**: inner method of [\u003ccode\u003enodeADC\u003c/code\u003e](#module_nodeADC)\n\n| Param        | Type                           | Description                                                 |\n| ------------ | ------------------------------ | ----------------------------------------------------------- |\n| thermostatID | \u003ccode\u003estring\u003c/code\u003e            | Thermostat ID string.                                       |\n| newState     | \u003ccode\u003eTHERMOSTAT_STATES\u003c/code\u003e | Desired state, `THERMOSTAT_STATES.OFF`/`HEAT`/`COOL`/`AUTO` |\n| authOpts     | \u003ccode\u003eObject\u003c/code\u003e            | Authentication object returned from the `login` method.     |\n\n\u003ca name=\"module_nodeADC..setThermostatTargetHeatTemperature\"\u003e\u003c/a\u003e\n\n### nodeADC~setThermostatTargetHeatTemperature(thermostatID, newTemp, authOpts) ⇒ \u003ccode\u003ePromise\u003c/code\u003e\n\nSet desired Heat setpoint temperature for Thermostat\n\n**Kind**: inner method of [\u003ccode\u003enodeADC\u003c/code\u003e](#module_nodeADC)\n\n| Param        | Type                | Description                                             |\n| ------------ | ------------------- | ------------------------------------------------------- |\n| thermostatID | \u003ccode\u003estring\u003c/code\u003e | Thermostat ID string.                                   |\n| newTemp      | \u003ccode\u003enumber\u003c/code\u003e | Desired temperature                                     |\n| authOpts     | \u003ccode\u003eObject\u003c/code\u003e | Authentication object returned from the `login` method. |\n\n\u003ca name=\"module_nodeADC..setThermostatTargetCoolTemperature\"\u003e\u003c/a\u003e\n\n### nodeADC~setThermostatTargetCoolTemperature(thermostatID, newTemp, authOpts) ⇒ \u003ccode\u003ePromise\u003c/code\u003e\n\nSet desired Cool setpoint temperature for Thermostat\n\n**Kind**: inner method of [\u003ccode\u003enodeADC\u003c/code\u003e](#module_nodeADC)\n\n| Param        | Type                | Description                                             |\n| ------------ | ------------------- | ------------------------------------------------------- |\n| thermostatID | \u003ccode\u003estring\u003c/code\u003e | Thermostat ID string.                                   |\n| newTemp      | \u003ccode\u003enumber\u003c/code\u003e | Desired temperature                                     |\n| authOpts     | \u003ccode\u003eObject\u003c/code\u003e | Authentication object returned from the `login` method. |\n\n\u003ca name=\"module_nodeADC..armStay\"\u003e\u003c/a\u003e\n\n### nodeADC~armStay(partitionID, authOpts, opts) ⇒ \u003ccode\u003ePromise\u003c/code\u003e\n\nArm a security system panel in \"stay\" mode. NOTE: This call may take 20-30 seconds to complete.\n\n**Kind**: inner method of [\u003ccode\u003enodeADC\u003c/code\u003e](#module_nodeADC)\n\n| Param             | Type                 | Description                                             |\n| ----------------- | -------------------- | ------------------------------------------------------- |\n| partitionID       | \u003ccode\u003estring\u003c/code\u003e  | Partition ID to arm.                                    |\n| authOpts          | \u003ccode\u003eObject\u003c/code\u003e  | Authentication object returned from the `login` method. |\n| opts              | \u003ccode\u003eObject\u003c/code\u003e  | Optional arguments for arming the system.               |\n| opts.noEntryDelay | \u003ccode\u003eboolean\u003c/code\u003e | Disable the 30-second entry delay.                      |\n| opts.silentArming | \u003ccode\u003eboolean\u003c/code\u003e | Disable audible beeps and double the exit delay.        |\n\n\u003ca name=\"module_nodeADC..armAway\"\u003e\u003c/a\u003e\n\n### nodeADC~armAway(partitionID, authOpts, opts) ⇒ \u003ccode\u003ePromise\u003c/code\u003e\n\nArm a security system panel in \"away\" mode. NOTE: This call may take 20-30 seconds to complete.\n\n**Kind**: inner method of [\u003ccode\u003enodeADC\u003c/code\u003e](#module_nodeADC)\n\n| Param             | Type                 | Description                                             |\n| ----------------- | -------------------- | ------------------------------------------------------- |\n| partitionID       | \u003ccode\u003estring\u003c/code\u003e  | Partition ID to arm.                                    |\n| authOpts          | \u003ccode\u003eObject\u003c/code\u003e  | Authentication object returned from the `login` method. |\n| opts              | \u003ccode\u003eObject\u003c/code\u003e  | Optional arguments for arming the system.               |\n| opts.noEntryDelay | \u003ccode\u003eboolean\u003c/code\u003e | Disable the 30-second entry delay.                      |\n| opts.silentArming | \u003ccode\u003eboolean\u003c/code\u003e | Disable audible beeps and double the exit delay.        |\n\n\u003ca name=\"module_nodeADC..disarm\"\u003e\u003c/a\u003e\n\n### nodeADC~disarm(partitionID, authOpts) ⇒ \u003ccode\u003ePromise\u003c/code\u003e\n\nDisarm a security system panel.\n\n**Kind**: inner method of [\u003ccode\u003enodeADC\u003c/code\u003e](#module_nodeADC)\n\n| Param       | Type                | Description                                             |\n| ----------- | ------------------- | ------------------------------------------------------- |\n| partitionID | \u003ccode\u003estring\u003c/code\u003e | Partition ID to disarm.                                 |\n| authOpts    | \u003ccode\u003eObject\u003c/code\u003e | Authentication object returned from the `login` method. |\n\n## Notes\n\nIn efforts to maintain this project as a native Alarm.com implementation, authentication and reference to FrontPoint have been removed altogether within the code as of versions 1.6.0. This allows for the codebase to be cleaner without having to solve everyone else's extraneous Alarm.com Verified-Partner setups, encouraging separate forks and augmentation for those unique scenarios.\n\n## Acknowledgements\n\n- **Original Code:** [https://github.com/jhurliman/node-frontpoint](https://github.com/jhurliman/node-frontpoint)\n- **Alarm.com Login Process:** [Schwark Satyavolu](https://github.com/schwark), original author of [pyalarmcom](https://github.com/schwark/pyalarmcom)\n- **Alarm.com Mobile Login Tips:** [Bryan Bartow](https://github.com/bryan-bartow), original author of [homebridge-alarm.com](https://github.com/bryan-bartow/homebridge-alarm.com)\n- **Lights/Locks Implementation:** [Chase Lau](https://github.com/chase9)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnode-alarm-dot-com%2Fnode-alarm-dot-com","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnode-alarm-dot-com%2Fnode-alarm-dot-com","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnode-alarm-dot-com%2Fnode-alarm-dot-com/lists"}