{"_id":"@brandonarrindell/homebridge-envisalink","_rev":"4-427a93b57847a0c9b8d67dd00c69a541","name":"@brandonarrindell/homebridge-envisalink","dist-tags":{"latest":"2.0.2"},"versions":{"1.3.0":{"name":"@brandonarrindell/homebridge-envisalink","version":"1.3.0","keywords":["homebridge-plugin","homebridge envisalink","homebridge envisa link","homebridge dsc envisalink","homekit dsc","homekit envisalink","homekit dsc envisalink"],"author":{"url":"https://github.com/brandonarrindell","name":"Brandon Arrindell"},"license":"MIT","_id":"@brandonarrindell/homebridge-envisalink@1.3.0","maintainers":[{"name":"brandonarrindell","email":"arrindellb@pm.me"}],"contributors":[{"url":"https://github.com/dustindclark","name":"Dustin D. Clark"}],"homepage":"https://github.com/brandonarrindell/homebridge-envisalink#readme","bugs":{"url":"https://github.com/brandonarrindell/homebridge-envisalink/issues"},"dist":{"shasum":"b61c4197f48b0e2dcda02da604e0e2d01686cae9","tarball":"https://registry.npmjs.org/@brandonarrindell/homebridge-envisalink/-/homebridge-envisalink-1.3.0.tgz","fileCount":84,"integrity":"sha512-/tAz2qQU8PobKGie6/4TKOiRFzOqRZMGl1UBr0mxz/P+8ZUuuMy0XvGqMK4zGqmbJ5taEQp8kTkx/rCiQstWzw==","signatures":[{"sig":"MEUCIBfbnb5su1V4pcR3yycq5+g7e56K51S6chtdQCl+hrq7AiEAivATL+AMqpwElme+2C1tfIM/ggtCaI3plno8ALFuWkI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":371998},"main":"dist/index.js","types":"./dist/index.d.ts","engines":{"node":">=14.18.1","homebridge":"^1.6.0 || ^2.0.0-beta.0"},"funding":{"url":"https://paypal.me/dustinclark04","type":"paypal"},"gitHead":"7583d0570acd4f979aeb843d86d0a155725af515","scripts":{"lint":"eslint src/**.ts --max-warnings=0","test":"jest --forceExit --detectOpenHandles --testTimeout=10000","build":"rimraf ./dist && tsc","watch":"npm run build && npm link && nodemon","prepublishOnly":"npm run lint && npm run build && npm run test"},"_npmUser":{"name":"brandonarrindell","email":"arrindellb@pm.me"},"repository":{"url":"git+https://github.com/brandonarrindell/homebridge-envisalink.git","type":"git"},"_npmVersion":"10.9.2","description":"A homebridge plugin for the EnvisaLink alarm module - Maintained fork of homebridge-envisalink","directories":{},"displayName":"Homebridge EnvisaLink (Fork)","_nodeVersion":"23.7.0","dependencies":{"net":">=1.0","dateformat":">=1.0.12 <5.0","nodealarmproxy":"https://github.com/dustindclark/NodeAlarmProxy/tarball/0abdfe688451cc57b0bbd64cf54e38e54a2d2a67"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.3.1","eslint":"^8.40.0","rimraf":"^5.0.0","nodemon":"^2.0.20","ts-jest":"^27.0.7","ts-node":"^10.9.1","homebridge":"^1.6.0 || ^2.0.0-beta.0","typescript":"^4.8.4","@types/jest":"^27.0.3","@types/node":"^20.1.0","@typescript-eslint/parser":"^5.59.2","@typescript-eslint/eslint-plugin":"^5.59.2"},"_npmOperationalInternal":{"tmp":"tmp/homebridge-envisalink_1.3.0_1742071106473_0.7525729220097852","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@brandonarrindell/homebridge-envisalink","version":"2.0.0","keywords":["homebridge-plugin","homebridge envisalink","homebridge envisa link","homebridge dsc envisalink","homekit dsc","homekit envisalink","homekit dsc envisalink"],"author":{"url":"https://github.com/brandonarrindell","name":"Brandon Arrindell"},"license":"MIT","_id":"@brandonarrindell/homebridge-envisalink@2.0.0","maintainers":[{"name":"brandonarrindell","email":"arrindellb@pm.me"}],"contributors":[{"url":"https://github.com/dustindclark","name":"Dustin D. Clark"}],"homepage":"https://github.com/brandonarrindell/homebridge-envisalink#readme","bugs":{"url":"https://github.com/brandonarrindell/homebridge-envisalink/issues"},"dist":{"shasum":"e146849897a66559ff518b6f5ce2ce9ff42677ec","tarball":"https://registry.npmjs.org/@brandonarrindell/homebridge-envisalink/-/homebridge-envisalink-2.0.0.tgz","fileCount":90,"integrity":"sha512-nfqdJC/V/qniVaB9F3eCOznYI6EwXF9RckJWtDAvApyLYfHcV/khSiTUjzoW+48t3Qm35r+StpQgBuGLbZJgsQ==","signatures":[{"sig":"MEUCIQCBcVkT92cH0qqJkGuy4ZY4gQZO15m7TpJvUgrLU2oG9wIgKVx9ZLpVNRx5pMwJQTe0HO13an58qy4UetjOE+TayNQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDWEInFBjUFhGXoTon57wpjdgyjNwwDEJ5cn0XB7oymdgIhAPAZAXq76LpcgJA3tu4KJtezaRa36KFTZ6mMHVVmr3KM","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":422695},"main":"dist/index.js","_from":"file:/Users/brandonarrindell/Documents/Codex/2026-09-30/task-2/release-artifacts/brandonarrindell-homebridge-envisalink-2.0.0.tgz","types":"./dist/index.d.ts","engines":{"node":"^22.0.0 || ^24.0.0","homebridge":"^1.6.0 || ^2.0.0-beta.0"},"funding":{"url":"https://paypal.me/dustinclark04","type":"paypal"},"scripts":{"lint":"eslint src/**.ts --max-warnings=0","test":"npm run test:unit && npm run test:e2e","build":"rimraf ./dist && tsc","check":"npm run lint && npm test","watch":"npm run build && npm link && nodemon","test:e2e":"npm run build && node --test test/e2e/*.test.cjs","test:unit":"jest --runInBand","prepublishOnly":"npm run check"},"_npmUser":{"name":"brandonarrindell","email":"arrindellb@pm.me"},"_resolved":"/Users/brandonarrindell/Documents/Codex/2026-09-30/task-2/release-artifacts/brandonarrindell-homebridge-envisalink-2.0.0.tgz","_integrity":"sha512-nfqdJC/V/qniVaB9F3eCOznYI6EwXF9RckJWtDAvApyLYfHcV/khSiTUjzoW+48t3Qm35r+StpQgBuGLbZJgsQ==","repository":{"url":"git+https://github.com/brandonarrindell/homebridge-envisalink.git","type":"git"},"_npmVersion":"11.9.0","description":"A homebridge plugin for the EnvisaLink alarm module - Maintained fork of homebridge-envisalink","directories":{},"displayName":"Homebridge EnvisaLink (Fork)","_nodeVersion":"24.21.0","dependencies":{"dateformat":"^4.6.3","nodealarmproxy":"https://github.com/dustindclark/NodeAlarmProxy/tarball/0abdfe688451cc57b0bbd64cf54e38e54a2d2a67"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.5.2","eslint":"^10.11.0","rimraf":"^6.1.3","nodemon":"^3.1.14","ts-jest":"^29.4.14","ts-node":"^10.9.2","@eslint/js":"^10.0.1","homebridge":"^1.11.4","typescript":"~5.9.3","@types/jest":"^30.0.0","@types/node":"^22.20.4","@typescript-eslint/parser":"^8.71.0","@typescript-eslint/eslint-plugin":"^8.71.0"},"_npmOperationalInternal":{"tmp":"tmp/homebridge-envisalink_2.0.0_1790777647318_0.573544814083192","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"@brandonarrindell/homebridge-envisalink","version":"2.0.1","keywords":["homebridge-plugin","homebridge envisalink","homebridge envisa link","homebridge dsc envisalink","homekit dsc","homekit envisalink","homekit dsc envisalink"],"author":{"url":"https://github.com/brandonarrindell","name":"Brandon Arrindell"},"license":"MIT","_id":"@brandonarrindell/homebridge-envisalink@2.0.1","maintainers":[{"name":"brandonarrindell","email":"arrindellb@pm.me"}],"contributors":[{"url":"https://github.com/dustindclark","name":"Dustin D. Clark"}],"homepage":"https://github.com/brandonarrindell/homebridge-envisalink#readme","bugs":{"url":"https://github.com/brandonarrindell/homebridge-envisalink/issues"},"dist":{"shasum":"b772d2db68445e72efe2403c3db121c5b2aaa363","tarball":"https://registry.npmjs.org/@brandonarrindell/homebridge-envisalink/-/homebridge-envisalink-2.0.1.tgz","fileCount":96,"integrity":"sha512-RAOEpaytveAO8NCrZyclB+JHh8Sst4MDZB585v+g0iB6RmIlqxjgThrcOBOOHQuwsp3j+QLFkc2mxf+qjHTw4Q==","signatures":[{"sig":"MEYCIQDzQVvwgFMzpAQuEN29/go67EwxpG1zyyp/+3i+qBb0aAIhAPxZeW/nENZELg8S2AoqLTB3NEjpy/L0cEE0YLucCLO4","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCUcq2K2yZPQ3Jq4KiGjoUspx6A1lB2xXzFsNqm/fd+4AIgAup+rg4bnsZ34JyWB0YdXNckNiyg+p0QvpL1q0dmoXo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":461153},"main":"dist/index.js","_from":"file:../release-2.0.1/brandonarrindell-homebridge-envisalink-2.0.1.tgz","types":"./dist/index.d.ts","engines":{"node":"^22.0.0 || ^24.0.0","homebridge":"^1.6.0 || ^2.0.0-beta.0"},"funding":{"url":"https://paypal.me/dustinclark04","type":"paypal"},"scripts":{"lint":"eslint src/**.ts --max-warnings=0","test":"npm run test:unit && npm run test:e2e","build":"rimraf ./dist && tsc","check":"npm run lint && npm test","watch":"npm run build && npm link && nodemon","test:e2e":"npm run build && node --test test/e2e/*.test.cjs","test:unit":"jest --runInBand","prepublishOnly":"npm run check"},"_npmUser":{"name":"brandonarrindell","email":"arrindellb@pm.me"},"_resolved":"/Users/brandonarrindell/Documents/Codex/2026-09-30/task-3/release-2.0.1/brandonarrindell-homebridge-envisalink-2.0.1.tgz","_integrity":"sha512-RAOEpaytveAO8NCrZyclB+JHh8Sst4MDZB585v+g0iB6RmIlqxjgThrcOBOOHQuwsp3j+QLFkc2mxf+qjHTw4Q==","repository":{"url":"git+https://github.com/brandonarrindell/homebridge-envisalink.git","type":"git"},"_npmVersion":"11.9.0","description":"A homebridge plugin for the EnvisaLink alarm module - Maintained fork of homebridge-envisalink","directories":{},"displayName":"Homebridge EnvisaLink (Fork)","_nodeVersion":"24.21.0","dependencies":{"dateformat":"^4.6.3","nodealarmproxy":"https://github.com/dustindclark/NodeAlarmProxy/tarball/0abdfe688451cc57b0bbd64cf54e38e54a2d2a67"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.5.2","eslint":"^10.11.0","rimraf":"^6.1.3","nodemon":"^3.1.14","ts-jest":"^29.4.14","ts-node":"^10.9.2","@eslint/js":"^10.0.1","homebridge":"^1.11.4","typescript":"~5.9.3","@types/jest":"^30.0.0","@types/node":"^22.20.4","@typescript-eslint/parser":"^8.71.0","@typescript-eslint/eslint-plugin":"^8.71.0"},"_npmOperationalInternal":{"tmp":"tmp/homebridge-envisalink_2.0.1_1790783551179_0.1445636803840915","host":"s3://npm-registry-packages-npm-production"}},"2.0.2":{"_id":"@brandonarrindell/homebridge-envisalink@2.0.2","bugs":{"url":"https://github.com/brandonarrindell/homebridge-envisalink/issues"},"dist":{"shasum":"d5766e44d7bf6c8eed2721ef39d01dcd0205f011","tarball":"https://registry.npmjs.org/@brandonarrindell/homebridge-envisalink/-/homebridge-envisalink-2.0.2.tgz","fileCount":97,"integrity":"sha512-9P/zX3eBjP29sz3r5pdE5IxPIwrlC7cRYPHJ6yWU08bK/ywM6Foo6WeqZMNITBZKRRCQH6P9i8X6CasN31mdTw==","signatures":[{"sig":"MEUCIQCL4Yo44HrmuS67cVnwUauBEkSRkur31Gs9qsiX7UqbMQIgdvQAUTBDQBIPxfjnQpRmX3hULFS1FFWR5CuS5izNnx0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIAGP+tW1BMEC9CvQqIWmHAWSZG9WsgW/8txeWZzz553SAiEA/rNLZ13V9E9gEvFLQlVD2dIRsZ+3yI7W2k+Mm9sa+/I="}],"unpackedSize":471685},"main":"dist/index.js","name":"@brandonarrindell/homebridge-envisalink","_from":"file:../validation/release-2.0.2/brandonarrindell-homebridge-envisalink-2.0.2.tgz","types":"./dist/index.d.ts","author":{"url":"https://github.com/brandonarrindell","name":"Brandon Arrindell"},"engines":{"node":"^22.0.0 || ^24.0.0","homebridge":"^1.6.0 || ^2.0.0-beta.0"},"funding":{"url":"https://paypal.me/dustinclark04","type":"paypal"},"license":"MIT","scripts":{"lint":"eslint src/**.ts --max-warnings=0","test":"npm run test:unit && npm run test:e2e","build":"rimraf ./dist && tsc","check":"npm run lint && npm test","watch":"npm run build && npm link && nodemon","test:e2e":"npm run build && node --test test/e2e/*.test.cjs","test:unit":"jest --runInBand","prepublishOnly":"npm run check"},"version":"2.0.2","_npmUser":{"name":"brandonarrindell","email":"arrindellb@pm.me"},"homepage":"https://github.com/brandonarrindell/homebridge-envisalink#readme","keywords":["homebridge-plugin","homebridge envisalink","homebridge envisa link","homebridge dsc envisalink","homekit dsc","homekit envisalink","homekit dsc envisalink"],"_resolved":"/Users/brandonarrindell/Documents/Codex/2026-09-30/task-4/validation/release-2.0.2/brandonarrindell-homebridge-envisalink-2.0.2.tgz","_integrity":"sha512-9P/zX3eBjP29sz3r5pdE5IxPIwrlC7cRYPHJ6yWU08bK/ywM6Foo6WeqZMNITBZKRRCQH6P9i8X6CasN31mdTw==","repository":{"url":"git+https://github.com/brandonarrindell/homebridge-envisalink.git","type":"git"},"_npmVersion":"11.9.0","description":"A homebridge plugin for the EnvisaLink alarm module - Maintained fork of homebridge-envisalink","directories":{},"displayName":"Homebridge EnvisaLink (Fork)","maintainers":[{"name":"brandonarrindell","email":"arrindellb@pm.me"}],"_nodeVersion":"24.14.0","contributors":[{"url":"https://github.com/dustindclark","name":"Dustin D. Clark"}],"dependencies":{"dateformat":"^4.6.3","nodealarmproxy":"https://github.com/dustindclark/NodeAlarmProxy/tarball/0abdfe688451cc57b0bbd64cf54e38e54a2d2a67"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.5.2","eslint":"^10.11.0","rimraf":"^6.1.3","nodemon":"^3.1.14","ts-jest":"^29.4.14","ts-node":"^10.9.2","@eslint/js":"^10.0.1","homebridge":"^1.11.4","typescript":"~5.9.3","@types/jest":"^30.0.0","@types/node":"^22.20.4","@typescript-eslint/parser":"^8.71.0","@typescript-eslint/eslint-plugin":"^8.71.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/homebridge-envisalink_2.0.2_1790787867151_0.93089482231752"}}},"time":{"created":"2025-03-15T20:38:26.370Z","modified":"2026-09-30T17:04:27.405Z","1.3.0":"2025-03-15T20:38:26.687Z","2.0.0":"2026-09-30T14:14:07.406Z","2.0.1":"2026-09-30T15:52:31.283Z","2.0.2":"2026-09-30T17:04:27.235Z"},"bugs":{"url":"https://github.com/brandonarrindell/homebridge-envisalink/issues"},"author":{"url":"https://github.com/brandonarrindell","name":"Brandon Arrindell"},"license":"MIT","homepage":"https://github.com/brandonarrindell/homebridge-envisalink#readme","keywords":["homebridge-plugin","homebridge envisalink","homebridge envisa link","homebridge dsc envisalink","homekit dsc","homekit envisalink","homekit dsc envisalink"],"repository":{"url":"git+https://github.com/brandonarrindell/homebridge-envisalink.git","type":"git"},"description":"A homebridge plugin for the EnvisaLink alarm module - Maintained fork of homebridge-envisalink","contributors":[{"url":"https://github.com/dustindclark","name":"Dustin D. Clark"}],"maintainers":[{"name":"brandonarrindell","email":"arrindellb@pm.me"}],"readme":"# @brandonarrindell/homebridge-envisalink\n\n[![npm version](https://img.shields.io/npm/v/@brandonarrindell/homebridge-envisalink.svg)](https://www.npmjs.com/package/@brandonarrindell/homebridge-envisalink)\n[![npm downloads](https://img.shields.io/npm/dm/@brandonarrindell/homebridge-envisalink.svg)](https://www.npmjs.com/package/@brandonarrindell/homebridge-envisalink)\n\n> A maintained fork of [homebridge-envisalink](https://github.com/dustindclark/homebridge-envisalink) (v1.2.10) with enhanced features and Homebridge 2.0 support.\n\nThis Homebridge plugin integrates your Envisalink security system with HomeKit, allowing you to:\n- Control your alarm panel (arm/disarm) using Siri or any HomeKit app\n- Monitor sensors for automations (e.g., turn on lights when doors open)\n- Trigger panic buttons (police, fire, ambulance) from HomeKit\n- Auto-discover Envisalink devices on your network\n\n## Version History\n\nThis fork continues from version 1.2.10 of the original plugin:\n\n- v2.0.2 (2026-09-30) - Fix scoped plugin registration and verify legacy cache\n  migration. Thanks to Marc Kagan for [PR #75](https://github.com/brandonarrindell/homebridge-envisalink/pull/75).\n- v2.0.1 (2026-09-30) - Missing-name fallbacks, valid HomeKit names and cached\n  accessory-name repairs. See [upgrade and release notes](RELEASE_NOTES.md).\n- v2.0.0 (2026-09-30) - Node.js 22/24 support, custom-command cache cleanup,\n  dependency refresh, and simulated end-to-end tests. **Breaking runtime change:**\n  see [migration and release notes](RELEASE_NOTES.md).\n- v1.3.0 - First release of the fork\n  - Added Homebridge 2.0 support\n  - Added auto-discovery feature\n  - Improved stability and error handling\n  - TypeScript rewrite\n\nFor earlier version history, see the [original repository](https://github.com/dustindclark/homebridge-envisalink).\n\n## Features\n\n✨ **What's New in This Fork**\n- Full Homebridge 2.0 compatibility\n- Automatic discovery of Envisalink devices\n- Improved stability and error handling\n- Regular updates and maintenance\n- TypeScript rewrite for better reliability\n\n🔒 **Core Features**\n- Support for both Envisalink 3 and 4\n- DSC panel support (the current transport does not implement Honeywell TPI)\n- Zone monitoring (doors, windows, motion, smoke, leak sensors)\n- Multiple partition support\n- Custom command support\n- Chime control\n- Panic buttons\n\n## Installation\n\n```bash\nnpm install -g @brandonarrindell/homebridge-envisalink\n```\n\n## Configuration\n\nAdd to your Homebridge config.json:\n\n```json\n{\n  \"platforms\": [\n    {\n      \"platform\": \"Envisalink\",\n      \"name\": \"Envisalink\",\n      \"enableAutoDiscovery\": true,\n      \"host\": \"192.168.0.XXX\",  // Optional if enableAutoDiscovery is true\n      \"deviceType\": \"DSC\",\n      \"password\": \"YOUR_PASSWORD\",  // Default is \"user\"\n      \"pin\": \"YOUR_PANEL_PIN\",\n      \"suppressZoneAccessories\": false,\n      \"suppressClockReset\": false,\n      \"ambulancePanic\": {\n          \"enabled\": true,\n          \"name\": \"Ambulance Panic\"\n      },\n      \"firePanic\": {\n          \"enabled\": true,\n          \"name\": \"Fire Panic\"\n      },\n      \"policePanic\": {\n          \"enabled\": true,\n          \"name\": \"Police Panic\"\n      },\n      \"partitions\": [\n        {\n          \"name\": \"Main Alarm\",\n          \"enableChimeSwitch\": true,\n          \"pin\": \"1243\"\n        }\n      ],\n      \"zones\": [\n        {\n          \"name\": \"Front Door\",\n          \"type\": \"door\",\n          \"partition\": 1\n        },\n        {\n          \"name\": \"Master Bedroom Door\",\n          \"type\": \"door\",\n          \"partition\": 1\n        }\n      ]\n    }\n  ]\n}\n```\n\n### Configuration Options\n\n| Option | Type | Default | Description |\n|--------|------|---------|-------------|\n| name | string | \"Envisalink\" | Platform display name; set explicitly for a child bridge |\n| enableAutoDiscovery | boolean | true | Automatically discover Envisalink devices |\n| host | string | - | IP address of Envisalink (optional with auto-discovery) |\n| deviceType | string | \"DSC\" | Panel type (\"DSC\" or \"Honeywell\") |\n| password | string | \"user\" | Envisalink web interface password |\n| pin | string | - | Alarm panel PIN for disarming |\n| suppressZoneAccessories | boolean | false | Hide zone accessories in HomeKit |\n| suppressClockReset | boolean | false | Disable hourly panel clock sync |\n\nSee [config.schema.json](./config.schema.json) for full configuration options.\n\n### Display names and upgrading existing caches\n\nMissing or blank partition names use numbered defaults (`Partition 1`,\n`Partition 2`, etc.). Zone defaults use the actual zone number, including sparse\nzones. Panic switches and custom commands also receive usable defaults. Names\nare trimmed, unsupported symbols (such as emoji and `@`) become spaces, and names\nare limited to 64 characters. Unicode letters and numbers, apostrophes and the\ninterior punctuation supported by current HAP-NodeJS are preserved. Only display\nnames change; partition/zone UUIDs, command-derived identities, service subtypes,\nPINs and panel command strings keep their existing behavior.\n\nFor a child bridge, set the platform's `\"name\": \"Envisalink\"` explicitly in\nHomebridge's configuration UI or JSON. An existing `\"_bridge\": { \"name\":\n\"Envisalink\", ... }` overrides the platform display name. Replace an invalid\nexplicit `_bridge.name` too. Homebridge chooses this name **before** constructing\nthe plugin; the plugin's runtime fallback cannot repair that bridge itself.\nKeep the existing `_bridge.username` and other bridge settings when renaming it.\nThe npm identifier remains `@brandonarrindell/homebridge-envisalink`; use a display\nname rather than changing the package or platform identifier.\n\nOn the first startup with an old invalid cache, Homebridge 2 can warn while\nloading that cache before the plugin receives its accessories. The plugin updates\nthe restored accessory, Accessory Information, sensor, security, chime, bypass,\npanic and custom-command names and saves them in place. Cached names are also\nnormalized before DSC status arrives, including inactive controls. Active\naccessories receive their configured names after DSC initialization.\nAfter a normal restart, the repaired cache should load without those\nnaming warnings. UUIDs and HomeKit AIDs remain stable; deleting the cache or\nunpairing the bridge is unnecessary. This does not test Apple Home's own cached\nlabels or pairing behavior.\n\n## Auto-Discovery\n\nThe auto-discovery feature scans your network for Envisalink devices:\n\n1. Enable with `enableAutoDiscovery: true`\n2. Omit `host` to use auto-discovery exclusively\n3. First discovered device will be used\n4. Manual `host` configuration takes precedence\n\n## Advanced Features\n\n### Home vs. Night Arm Modes\n\n- **Home**: Arms in stay mode with entry delay\n- **Night**: Arms in stay mode with no entry delay (instant alarm)\n\n### Non-Sequential Zones\n\nFor systems with gaps in zone numbering:\n\n```json\n{\n  \"zones\": [\n    {\n      \"name\": \"Front Door\",\n      \"type\": \"door\",\n      \"partition\": 1,\n      \"zoneNumber\": 1\n    },\n    {\n      \"name\": \"Garage Door\",\n      \"type\": \"door\",\n      \"partition\": 1,\n      \"zoneNumber\": 5\n    }\n  ]\n}\n```\n\n### Custom Commands\n\nAdd custom panel commands:\n\n```json\n{\n  \"customCommands\": [\n    {\n      \"name\": \"System Test\",\n      \"command\": \"071*600004\"\n    }\n  ]\n}\n```\n\n## Troubleshooting\n\n### Common Issues\n\n1. **Connection Problems**\n   - Only one socket connection allowed at a time\n   - Use wired connections when possible\n   - Set static IP for Envisalink\n   - Verify password is correct\n\n2. **Debug Mode**\n   ```json\n   {\n     \"platforms\": [\n       {\n         \"platform\": \"Envisalink\",\n         \"enableVerboseLogging\": true\n       }\n     ]\n   }\n   ```\n\n## Custom command changes\n\nCustom command identities remain based on their command string for compatibility\nwith existing HomeKit installations. Renaming a command preserves its accessory.\nEditing its command string replaces that accessory and removes the old tile;\nHomeKit room assignments and automations referencing the old command may need to\nbe updated. Removing commands (including clearing or omitting `customCommands`)\nremoves their cached accessories on the next successful platform startup.\nPreviously orphaned command switches are recognized from their persisted serial\nnumber and matching UUID, without deleting unrelated accessories.\n\n## Development and testing\n\nUse Node.js 22.13+ or 24 for development tooling, then run:\n\n```sh\nnpm ci\nnpm run check\n```\n\n`npm test` runs both unit tests and real Homebridge-process tests against a local\nsimulated DSC EnvisaLink TCP panel. No alarm hardware, Home app pairing, or real\nalarm credentials are needed. The simulator binds only to loopback and uses\ntemporary Homebridge storage. See [the testing guide](docs/testing.md) for protocol\nsources, coverage, runtime overrides, and important simulation limits.\n\nVersion 2 requires Node.js 22 or 24. CI runs the simulator against Homebridge 1\nand 2 on both Node versions, and checks the Homebridge 1.6 API floor on Node 22.0.0.\nUpgrade older Node installations before installing version 2; see the\n[migration notes](RELEASE_NOTES.md). The Homebridge engine range is unchanged.\n\n## Contributing\n\n1. Fork the repository\n2. Create a feature branch\n3. Commit your changes\n4. Push to the branch\n5. Create a Pull Request\n\n## Credits\n\n- Original plugin by [Dustin D. Clark](https://github.com/dustindclark)\n- Built on [Node Alarm Proxy](https://www.npmjs.com/package/nodealarmproxy)\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n","readmeFilename":"README.md"}