node-red-contrib-wow-ethernet-ip 1.0.0
Node-RED nodes for communicating with EtherNet/IP industrial devices (CompactLogix and MicroLogix) using the wow-another-ethernet-ip library. Read, write and monitor PLC tags in real time.
@keest/node-red-contrib-wow-ethernet-ip
Node-RED nodes for communicating with EtherNet/IP industrial devices — CompactLogix and MicroLogix 1400 (Allen-Bradley / Rockwell Automation).
Built on top of the wow-another-ethernet-ip library.
Features
- Device configuration node — register devices with IP, port, type and a list of tags to poll automatically
- On Change node — observe a tag and emit a message only when its value changes (event-driven)
- Read node — read any tag/address on demand (direct read, no polling cache)
- Write node — write values to any tag/address
- Auto-reconnect — automatic reconnection on connection loss
- Configurable polling interval — set the tag reading cycle (default: 1500 ms)
- CompactLogix buffer tuning — configure read/write cycle times to batch requests and avoid spamming the device
- Supports atomic types (INT, DINT, REAL, etc.), strings (ASCIIString82) and arrays
Installation
Via Node-RED Palette Manager
- Open Node-RED
- Go to Menu → Manage palette → Install
- Search for
@keest/node-red-contrib-wow-ethernet-ip - Click Install
Via npm (command line)
cd ~/.node-red
npm install @keest/node-red-contrib-wow-ethernet-ip
From local folder (development)
cd ~/.node-red
npm install /path/to/node-red-contrib-wow-ethernet-ip
Restart Node-RED after installing.
Nodes
After installation, three new nodes appear in the EtherNet/IP category on the palette:
🔧 ethip-device (Configuration Node)
A configuration node that manages the connection with a physical device. It is shared between all the other nodes.
| Property | Description |
|---|---|
| Nome | Friendly name for the device (e.g. forno) |
| Tipo | CompactLogix (Rockwell) or MicroLogix 1400 |
| Endereço IP | Device IP address |
| Porta | TCP port (default: 44818) |
| Ciclo Leitura (ms) | (CompactLogix only) Minimum time between batched read requests (0–5000). Leave empty for library default |
| Ciclo Escrita (ms) | (CompactLogix only) Minimum time between batched write requests (0–5000). Leave empty for library default |
| Polling (ms) | Interval for automatic tag reading (default: 1500, minimum: 1) |
| Tags / Endereços | List of tags to read automatically. Each entry has an address and an optional description |
Tag address examples:
| Device Type | Examples |
|---|---|
| CompactLogix | MINHA_TAG, STRING_NOME, MINHA_TAG[3] |
| MicroLogix | N7:1, ST10:5, N7:33 |
🔵 ethip onchange
Observes a tag from the device's configured polling list and emits a message only when the value changes.
- No input — this node has no input connector; it fires automatically
- Select the device and pick a tag from the dropdown (populated from the device configuration)
- Perfect for triggering flows on value changes (e.g., save to database when an operator name changes)
Output msg properties:
| Property | Type | Description |
|---|---|---|
payload |
number | string |
New value of the tag |
topic |
string |
deviceName/tagAddress |
tagAddress |
string |
Address that was read |
tagDescription |
string |
Description from device config |
deviceName |
string |
Device name |
deviceType |
string |
compactlogix or micrologix |
previousValue |
any |
Previous value (null on first read) |
timestamp |
number |
Timestamp in milliseconds |
🟢 ethip read
Performs a direct on-demand read from the device when it receives an input message.
- The tag address can be set in the node config or sent dynamically via
msg.address - The address does not need to be in the polling list — you can read any valid tag
- Each invocation performs a fresh read directly on the device (not from the polling cache)
Input msg properties:
| Property | Type | Description |
|---|---|---|
address (optional) |
string |
Tag address to read. Overrides the node config |
Output msg properties:
| Property | Type | Description |
|---|---|---|
payload |
number | string | null |
Value read (null on error) |
topic |
string |
deviceName/tagAddress |
tagAddress |
string |
Address that was read |
deviceName |
string |
Device name |
deviceType |
string |
compactlogix or micrologix |
timestamp |
number |
Timestamp in milliseconds |
error (on failure) |
string |
Error description |
🟠 ethip write
Writes a value to a tag/address on the device when it receives an input message.
- The tag address can be set in the node config or sent dynamically via
msg.address - The value to write comes from
msg.payload - For CompactLogix, the library automatically resolves the data type
Input msg properties:
| Property | Type | Description |
|---|---|---|
payload |
number | string |
Value to write |
address (optional) |
string |
Tag address. Overrides the node config |
Output msg properties:
| Property | Type | Description |
|---|---|---|
payload |
boolean |
true if successful, false otherwise |
tagAddress |
string |
Address written to |
deviceName |
string |
Device name |
writeValue |
any |
Value that was written |
timestamp |
number |
Timestamp in milliseconds |
error (on failure) |
string |
Error description |
Usage Example
Scenario: Monitoring a MicroLogix 1400
Imagine you have a MicroLogix 1400 controlling a furnace. You want to:
- Monitor the operator name (
ST:3) and save it to a database whenever it changes - Read the produced quantity (
N7:1) on demand - Write a reset command to
N7:50
Step 1 — Configure the device
Create a device configuration:
- Nome:
forno - Tipo: MicroLogix 1400
- IP:
192.168.1.1 - Porta:
2232 - Tags:
N7:1—quantidade_produzidaST:3—nome_operador
Step 2 — Monitor operator name changes
- Drag an ethip onchange node onto the canvas
- Select device
forno, tagnome_operador (ST:3) - Connect it to a database node (e.g., MySQL, PostgreSQL)
- Whenever the operator name changes, the flow triggers automatically
Step 3 — Read produced quantity on demand
- Drag an ethip read node onto the canvas
- Select device
forno, addressN7:1 - Connect an inject node as input to trigger the read
- Connect the output to a debug node to see the value
Step 4 — Write a reset command
- Drag an ethip write node onto the canvas
- Select device
forno, addressN7:50 - Connect an inject node that sends
msg.payload = 1 - When triggered, the value
1is written toN7:50
Example Flow
An importable example flow is included. In Node-RED, go to Menu → Import and load the file from:
examples/basic-usage.json
Or find it in Menu → Import → Examples → @keest/node-red-contrib-wow-ethernet-ip.
Supported Devices
| Device | Class Used | Protocol |
|---|---|---|
| CompactLogix (Allen-Bradley / Rockwell) | CompactLogixRockwellV2 |
CIP over EtherNet/IP (UCMM) |
| MicroLogix 1400 (Allen-Bradley / Rockwell) | MicroLogix1400 |
CIP PCCC over EtherNet/IP |
CompactLogix — Supported Data Types
- Atomic: SINT, INT, DINT, REAL, BOOL
- Struct: ASCIIString82
- Arrays: accessed via
TAG_NAME[index]
MicroLogix 1400 — Supported Data Files
- N (Integer)
- ST (String)
Requirements
- Node-RED ≥ 2.0.0
- Node.js ≥ 14.0.0
- Network access to the EtherNet/IP device (TCP port, typically
44818)
License
Author
Samuel Machado Rodrigues — @keest
Related
- wow-another-ethernet-ip — The underlying EtherNet/IP communication library