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-modbus-modpackqt

v3.3.25

Published

Modbus commissioning, testing & analysis tools for Node-RED. Embedded Modbus TCP/RTU master + slave server, FC1/FC2/FC3/FC4 reads, FC5/FC6/FC15/FC16 writes, built-in slave register store, and a passive traffic monitor for debugging. 100% free, MIT, no usa

Readme

node-red-contrib-modbus-modpackqt

Modbus commissioning, testing & analysis tools for Node-RED. By ModPackQT.

npm version Node-RED License: MIT

100% free, MIT-licensed, no usage limits. Open the ModPackQT web console for register decoding, device simulation and AI assistance.


What you get

  • Modbus master — read (FC1–FC4) and write (FC5/FC6/FC15/FC16) over TCP or RTU (serial)
  • Embedded Modbus TCP slave server — push values from any flow, let PLCs / SCADA / HMIs read them
  • Cloud profile pickers — paste your ModPackQT Account Key into the runtime config and a My Connections dropdown loads your saved devices, auto-filling host / port / unit. The slave server node has a matching My Slaves picker. No more retyping IPs across nodes.
  • Outputs raw register values — pair with node-red-contrib-bytes-modpackqt to decode int / float / string / bitmask
  • Zero external dependencies — Modbus runs inside the Node-RED process

Install

Recommended (one shot): install both palettes — Modbus + decoders — together.

Palette manager → Manage palette → Install:

  • node-red-contrib-modbus-modpackqt
  • node-red-contrib-bytes-modpackqt

npm:

cd ~/.node-red
npm install node-red-contrib-modbus-modpackqt node-red-contrib-bytes-modpackqt
# then restart Node-RED

5-minute walkthrough

1. Read a temperature float from a PLC

[inject every 5s] → [modbus master read FC3 addr=100 qty=2] → [decode-float32 BE] → [debug]

| Step | Setting | |---|---| | Add a runtime config | TCP, timeout 3000 ms | | Master read | Host 192.168.1.10, port 502, unit 1, FC 3, address 100, qty 2 | | decode-float32 | Endian BE (try LE_SWAP if value looks wrong — many PLCs use CDAB) |

msg.payload along the wire:

  • After Modbus read: [16828, 0] (raw registers)
  • After decode-float32: 23.5 (clean float — done)

2. Send a setpoint back

[inject 23.5] → [encode-float32 BE] → [modbus master write FC16 addr=200]

The encoder converts 23.5[16828, 0], the write node sends it to the PLC.

3. Watch what's happening (debug visibility)

Drop a modbus traffic node anywhere on the canvas, point it at the same runtime config, wire to a Debug node. You'll see one message per Modbus op:

{
  "ts": "2026-05-09T14:23:01.234Z",
  "direction": "read",
  "kind": "master",
  "target": "192.168.1.10:502",
  "unitId": 1,
  "fc": 3,
  "address": 100,
  "quantity": 2,
  "values": [16828, 0],
  "durationMs": 12,
  "ok": true
}

Filter by direction, function code, or target if you only want a slice.

4. Be a Modbus slave (let SCADA read your values)

In the runtime config check Enable embedded Modbus TCP slave server, set port 1502. Then:

[any source] → [encode-int32 BE] → [modbus slave write holding addr=0]

External masters connecting to your-host:1502, unit 1, FC 3, address 0, qty 2 will read the latest value back.


Cookbook (combined with the bytes palette)

Decode a status bitmask

[master read FC3 addr=50 qty=1] → [decode-bitmask bits=8] → [debug]
// payload = [true, true, false, true, false, false, false, false]

Read a device serial number string

[master read FC3 addr=10 qty=8] → [decode-string BE encoding=utf8 trim=true] → [debug]
// payload = "SN-2025-A0042"

Bridge MQTT → Modbus

[mqtt in topic=setpoint] → [encode-float32 BE] → [master write FC16 addr=200]

Bridge Modbus → MQTT

[poll every 5s] → [master read FC3 addr=100 qty=2] → [decode-float32 BE] → [mqtt out topic=temp]

Mirror a remote PLC into local slave server

[poll 1s] → [master read FC3 addr=0 qty=10] → [slave write holding addr=0]
// any local SCADA can now read from your Node-RED slave instead of hammering the PLC

Alert on Modbus errors

[modbus traffic filter=any] → [switch ok==false] → [email out]

Available nodes

| Node | Purpose | |---|---| | modpackqt-config | Shared runtime — master mode (TCP/RTU), serial settings, optional slave server | | modpackqt-master-read | Read FC1/FC2/FC3/FC4 from a remote Modbus device | | modpackqt-master-write | Write FC5/FC6/FC15/FC16 to a remote Modbus device | | modpackqt-slave-read | Read from the embedded slave's register store (verify what masters see) | | modpackqt-slave-write | Push values into the embedded slave's register store | | modpackqt-traffic | Passive monitor — emits one message per Modbus op with full visibility into what's happening on the wire | | modpackqt-master-probe | Live commissioning probe for a single Modbus TCP device. One node per device. Click Open in ModPackQT Console to launch the web tester live-attached. | | modpackqt-slave-probe | Live simulator probe for a single fake slave. One node per port. Web console gives you a real-time register editor. |


Live commissioning with probe nodes

The two probe nodes (modpackqt-master-probe, modpackqt-slave-probe) are tools for the kind of work you do once per device — figuring out a register map, decoding bytes correctly, simulating a device for SCADA development. They have no flow inputs or outputs; instead, each probe registers itself with a small local HTTP runtime, and the modpackqt.com web console attaches live.

Pattern: one probe per device

┌─────────────────────────┐  ┌─────────────────────────┐  ┌─────────────────────────┐
│  master-probe           │  │  master-probe           │  │  slave-probe            │
│  Inverter A             │  │  Energy Meter           │  │  Fake Inverter          │
│  192.168.1.10:502 #1    │  │  192.168.1.20:502 #5    │  │  Listening :1502 #1     │
│  [ Open in Console ]    │  │  [ Open in Console ]    │  │  [ Open in Console ]    │
└─────────────────────────┘  └─────────────────────────┘  └─────────────────────────┘

Click Open in Console on any probe → the web console opens with all probes from this Node-RED instance in the sidebar, the clicked one pre-selected. Switch between devices with one click.

Hidden runtime

The first probe deployed starts a small HTTP server on 127.0.0.1:8502:

| Endpoint | Purpose | |---|---| | GET /api/health | Runtime health + probe count | | GET /api/probes | List all registered probes | | GET /api/probes/:id | Probe details | | POST /api/probes/:id/read | Master probe: read registers { fc, address, quantity } | | POST /api/probes/:id/write | Master probe: write registers { fc, address, values } | | GET /api/probes/:id/store?type=&address=&quantity= | Slave probe: inspect register values | | PUT /api/probes/:id/store | Slave probe: set register values |

The server auto-stops when the last probe is removed.

Network access

Default bind is loopback-only (127.0.0.1) — only browsers on the same machine can reach it. To allow remote browsers on your LAN:

MODPACKQT_PROBE_HOST=0.0.0.0 MODPACKQT_PROBE_PORT=8502 node-red

Port 8502 falls back to 85038506 automatically if it's already in use.


Why this palette?

These nodes are built for commissioning, testing, and analysis — the kind of work where you need to quickly probe a device, verify register layouts, decode bytes correctly, simulate a slave for SCADA development, or watch traffic to debug a flaky link. Pair them with the ModPackQT web console for AI-assisted register decoding, profile management, and a full visual tester.


Importing the example flow

This package ships with a complete demo flow under examples/basic-flow.json showing every node combined with the bytes palette (master read → decode-float32, encode-float32 → master write, status bitmask, traffic monitor, slave loop).

Node-RED → Menu → Import → Examples → node-red-contrib-modbus-modpackqt → basic-flow.

Make sure node-red-contrib-bytes-modpackqt is also installed before importing — the example uses both.


Troubleshooting

| Issue | Solution | |---|---| | Decoded float looks like garbage | Try a different word order (BELE_SWAP) — common conventions are ABCD and CDAB | | Serial port not configured for RTU mode | Open runtime config → set Serial Port (e.g. /dev/ttyUSB0 or COM3) | | EADDRINUSE on slave port | Another process already uses that port. Pick a different one (e.g. 1502). | | connect ECONNREFUSED | Target Modbus device is unreachable. Check IP / port / firewall. | | Embedded slave is disabled | Open runtime config → check Enable embedded slave server | | Nodes don't appear after install | Fully restart Node-RED. |


Reporting bugs & getting updates

  • Bugs / feature requests: use our contact page.
  • Security issues: report privately via the security page.
  • Updates are never automatic. Node-RED's palette manager will show "update available" when we publish a new version — you choose when to upgrade. Pin a major version (^3.0.0) for stability.
  • Changelog: the CHANGELOG.md file is shipped inside this package. We follow semver — patch releases for bug fixes only.

Links


License & disclaimer

MIT — © ModPackQT. Provided "as is" without warranty of any kind. You are responsible for validating this software in your environment before any use with real equipment.