{"_id":"@ctann/node-red-ads-eventlogger","_rev":"2-a3c9284824af496fedb35fc74adfdb53","name":"@ctann/node-red-ads-eventlogger","dist-tags":{"latest":"0.1.2"},"versions":{"0.1.0":{"name":"@ctann/node-red-ads-eventlogger","version":"0.1.0","keywords":["node-red","ADS","twincat","beckhoff","eventlogger","event","alarm","twincat 3","twincat ADS","plc","iec-61131-3"],"author":{"name":"ctanno"},"license":"MIT","_id":"@ctann/node-red-ads-eventlogger@0.1.0","maintainers":[{"name":"ctann","email":"ctannonpm@gmail.com"}],"homepage":"https://github.com/ctanno/node-red-ads-eventlogger#readme","bugs":{"url":"https://github.com/ctanno/node-red-ads-eventlogger/issues"},"dist":{"shasum":"0900b6d0d0217c1f3bceb2fe8fd243ad0c93966f","tarball":"https://registry.npmjs.org/@ctann/node-red-ads-eventlogger/-/node-red-ads-eventlogger-0.1.0.tgz","fileCount":10,"integrity":"sha512-Pn8+ki8pasl8l0o8JyZnd5Y8nFA2HSzGT1FrIHwvSPJbDIZe0G5Aq8CAobcUOcadY5iqHrBfNHvZgaTd0h0kzw==","signatures":[{"sig":"MEQCIDNNZiZaW4d72WHzK5zunsMLijHcrxMioyEPYl7gXUi/AiB8/gAvXqcyrZltjG8WE3CaSyNkohujwBXFXZA76u4weA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":59729},"engines":{"node":">=14.0.0"},"gitHead":"336a68d44d6fb4b0abb664a1b287f6ae14137ac6","_npmUser":{"name":"ctann","email":"ctannonpm@gmail.com"},"node-red":{"nodes":{"ads-eventlogger-history":"src/ads-eventlogger-history.js","ads-eventlogger-subscribe":"src/ads-eventlogger-subscribe.js","ads-eventlogger-connection":"src/ads-eventlogger-connection.js"},"version":">=4.0.0"},"repository":{"url":"git+https://github.com/ctanno/node-red-ads-eventlogger.git","type":"git"},"_npmVersion":"11.7.0","description":"Node-RED nodes for subscribing to Beckhoff TwinCAT 3 EventLogger events and alarms via ADS protocol.","directories":{},"_nodeVersion":"22.22.0","dependencies":{"ads-client":"^2.1.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-ads-eventlogger_0.1.0_1772112593666_0.34254561425783714","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@ctann/node-red-ads-eventlogger","version":"0.1.2","description":"Node-RED nodes for subscribing to Beckhoff TwinCAT 3 EventLogger events and alarms via ADS protocol.","keywords":["node-red","ADS","twincat","beckhoff","eventlogger","event","alarm","twincat 3","twincat ADS","plc","iec-61131-3"],"author":{"name":"ctanno"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/ctanno/node-red-ads-eventlogger.git"},"node-red":{"version":">=4.0.0","nodes":{"ads-eventlogger-connection":"src/ads-eventlogger-connection.js","ads-eventlogger-subscribe":"src/ads-eventlogger-subscribe.js","ads-eventlogger-history":"src/ads-eventlogger-history.js"}},"dependencies":{"ads-client":"^2.1.0"},"engines":{"node":">=14.0.0"},"gitHead":"08e7be93496e59fa19d236499a154fc5d0c4e0c5","_id":"@ctann/node-red-ads-eventlogger@0.1.2","bugs":{"url":"https://github.com/ctanno/node-red-ads-eventlogger/issues"},"homepage":"https://github.com/ctanno/node-red-ads-eventlogger#readme","_nodeVersion":"24.13.1","_npmVersion":"11.8.0","dist":{"integrity":"sha512-qYuZA6iw6GqhNBAo9EQBSxBhYkA/bN/f810o9/lPHhl3ZR+c6YmxX4HBPCHPXHhr9xEmFw9qAU51iDolmI7+hg==","shasum":"e68f3a2bd11bf2fbf739b92233065d839b6ae53c","tarball":"https://registry.npmjs.org/@ctann/node-red-ads-eventlogger/-/node-red-ads-eventlogger-0.1.2.tgz","fileCount":10,"unpackedSize":59733,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ctann%2fnode-red-ads-eventlogger@0.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIFpk1lWHc6/WGk9/r2TzoUroE3PhpMPiTKDy6bkb2KjqAiApA0Vr4/1A8akGZxO0h3iAlYu5qK3u0ZfF1sxkQCfW6A=="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:db58a276-7e54-451d-90a2-f56136f116d1"}},"directories":{},"maintainers":[{"name":"ctann","email":"ctannonpm@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/node-red-ads-eventlogger_0.1.2_1772113752769_0.42903873932959447"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-26T13:29:53.607Z","modified":"2026-02-26T13:49:13.241Z","0.1.0":"2026-02-26T13:29:53.815Z","0.1.2":"2026-02-26T13:49:12.949Z"},"bugs":{"url":"https://github.com/ctanno/node-red-ads-eventlogger/issues"},"author":{"name":"ctanno"},"license":"MIT","homepage":"https://github.com/ctanno/node-red-ads-eventlogger#readme","keywords":["node-red","ADS","twincat","beckhoff","eventlogger","event","alarm","twincat 3","twincat ADS","plc","iec-61131-3"],"repository":{"type":"git","url":"git+https://github.com/ctanno/node-red-ads-eventlogger.git"},"description":"Node-RED nodes for subscribing to Beckhoff TwinCAT 3 EventLogger events and alarms via ADS protocol.","maintainers":[{"name":"ctann","email":"ctannonpm@gmail.com"}],"readme":"# node-red-ads-eventlogger\n\nNode-RED nodes for subscribing to **Beckhoff TwinCAT 3 EventLogger** events and alarms via ADS protocol.\n\nUses [ads-client](https://github.com/jisotalo/ads-client) (v2.x) in raw mode to communicate directly with the EventLogger Publisher V2 on ADS port 132.\n\n> **TwinCAT 3 Build 4022+ required.**\n\n---\n\n## Features\n\n- Subscribe to EventLogger notifications (events **and** alarms)\n- Automatic binary parsing of event data (GUIDs, timestamps, UTF-16LE strings)\n- Configurable severity filter (Verbose / Info / Warning / Error / Critical)\n- Event history storage in Node-RED global context (survives dashboard reloads)\n- Automatic deduplication: cleared events update existing raised entries\n- Auto-reconnect with configurable retry interval\n- Shared connection config node (multiple subscriber nodes can share one connection)\n\n## Installation\n\n### From a local folder (development)\n\n```bash\ncd ~/.node-red\nnpm install /path/to/node-red-ads-eventlogger\n```\n\n### From npm (once published)\n\n```bash\ncd ~/.node-red\nnpm install node-red-ads-eventlogger\n```\n\nThen restart Node-RED.\n\n## Nodes\n\n### ads-eventlogger-connection (config node)\n\nManages the ADS connection to the TwinCAT system.\n\n| Setting             | Description                                             | Default  |\n| ------------------- | ------------------------------------------------------- | -------- |\n| Target AmsNetId     | AMS Net ID of the TwinCAT target (e.g. `192.168.1.1.1.1`) | required |\n| Target ADS Port     | ADS port of the EventLogger service                     | `132`    |\n| Router Address      | IP/hostname of the ADS router (empty = local)           | —        |\n| Router TCP Port     | TCP port of the ADS router                              | `48898`  |\n| Local AmsNetId      | Override local AMS Net ID (empty = auto)                | —        |\n| Local ADS Port      | Override local ADS port (empty = auto)                  | —        |\n| Auto Reconnect      | Reconnect automatically on disconnect                   | `true`   |\n| Reconnect Interval  | Milliseconds between reconnection attempts              | `2000`   |\n| Timeout             | ADS request timeout in milliseconds                     | `5000`   |\n\n### ads-eventlogger-subscribe\n\nSubscribes to EventLogger notifications and outputs parsed event messages.\n\n| Setting       | Description                                        | Default        |\n| ------------- | -------------------------------------------------- | -------------- |\n| Connection    | Reference to an `ads-eventlogger-connection` node   | required       |\n| Min. Severity | Only output events at or above this severity level  | Verbose (all)  |\n\n#### Output `msg.payload`\n\n```jsonc\n{\n  \"eventClass\":     \"160d9f14-d97e-4462-afad-ea4cd48296b4\",\n  \"eventId\":        1,\n  \"severity\":       \"Verbose\",        // human-readable\n  \"severityLevel\":  0,               // numeric (0-4)\n  \"timeRaised\":     \"2026-02-26T09:36:22.400Z\",\n  \"timeCleared\":    null,            // null until alarm is cleared\n  \"timeConfirmed\":  null,            // null until alarm is confirmed\n  \"alarmState\":     \"Raised\",        // Raised | Cleared\n  \"isAlarm\":        true,\n  \"sourceName\":     \"MAIN.fbEventTester\",\n  \"message\":        \"\"\n}\n```\n\n- `msg.topic` is always `\"eventlogger\"`.\n\n#### Input\n\nSend `msg.payload = \"resubscribe\"` to drop and re-create the subscription.\n\n### ads-eventlogger-history\n\nStores events in Node-RED's **global context** so they survive dashboard reloads and (optionally) Node-RED restarts.\n\n| Setting        | Description                                                   | Default                |\n| -------------- | ------------------------------------------------------------- | ---------------------- |\n| Max Events     | Maximum events to keep (oldest discarded first)               | `1000`                 |\n| Context Key    | Global context key name                                       | `eventlogger_history`  |\n| Context Store  | Context store (`\"\"` = default memory, `\"file\"` = persistent)  | `\"\"` (default)         |\n| Pass through   | Forward incoming events to the output                         | `false`                |\n\n#### Wiring\n\nWire the output of an **eventlogger subscribe** node into this node. Events are stored automatically and deduplicated — when a cleared event arrives matching an existing raised event (same `eventClass` + `eventId` + `timeRaised`), the entry is updated in-place.\n\n#### Query interface\n\nSend a message to the input to query the history:\n\n| `msg.payload`                              | Response                                 |\n| ------------------------------------------ | ---------------------------------------- |\n| `\"getAll\"` / `\"getHistory\"`                | All stored events                        |\n| `\"clear\"`                                  | Clears all stored events                 |\n| `\"count\"`                                  | Number of stored events                  |\n| `{ severity: \"Warning\" }`                  | Events ≥ Warning severity               |\n| `{ sourceName: \"MAIN\" }`                   | Events matching source (substring)       |\n| `{ alarmState: \"Raised\" }`                 | Only raised events                       |\n| `{ last: 50 }`                             | Last 50 events                           |\n| `{ since: \"2026-02-26T10:00:00Z\" }`        | Events after timestamp                   |\n\nFilters can be combined: `{ severity: \"Warning\", sourceName: \"MAIN\", last: 100 }`\n\n#### Dashboard integration\n\nBecause events are stored in global context, dashboard nodes can read them directly:\n\n```js\n// In a function node:\nconst events = global.get(\"eventlogger_history\") || [];\n```\n\n## Status Indicators\n\n| Colour / Shape    | Meaning                       |\n| ----------------- | ----------------------------- |\n| 🟢 green dot      | Subscribed, receiving events  |\n| 🟡 yellow dot     | Subscribing in progress       |\n| 🟢 green ring     | Connected, not yet subscribed |\n| 🔴 red ring       | Disconnected                  |\n| 🔴 red dot        | Subscription failed           |\n\n## Notes\n\n- **ADS Port 132** is the EventLogger Publisher V2 port. This is different from port 100 (TwinCAT Logger for system text messages) and port 110 (EventLogger V1, which does not accept subscriptions).\n- The subscription uses Index Group 1, Index Offset 0xFFFF with cyclic mode and 0ms cycle time (immediate delivery). These values were determined through packet capture analysis.\n- The binary event structure was reverse-engineered from live TwinCAT 3.1 Build 4026 traffic. It may vary between TwinCAT versions. The parser handles minor variations defensively.\n- The EventLogger sends periodic 16-byte heartbeat notifications which are automatically filtered out.\n- For remote connections (Node-RED running on a different machine than TwinCAT), configure the **Router Address** to point to the TwinCAT system's ADS router and ensure the ADS route is set up on both sides.\n\n## References\n\n- [Beckhoff TwinCAT 3 EventLogger Documentation](https://infosys.beckhoff.com/english.php?content=../content/1033/tc3_eventlogger/index.html)\n- [ads-client library (GitHub)](https://github.com/jisotalo/ads-client)\n- [node-red-contrib-ads-client (reference)](https://github.com/jisotalo/node-red-contrib-ads-client)\n\n## License\n\nMIT\n","readmeFilename":"README.md"}