[{"data":1,"prerenderedAt":161},["ShallowReactive",2],{"integration-node-red-contrib-modbus-modpackqt\u002F":3},{"_id":4,"categories":5,"author":7,"description":9,"npmOwners":10,"npmScope":12,"name":4,"ffCertified":13,"downloads":14,"version":16,"updatedAt":17,"maintainers":18,"homepage":21,"bugs":22,"time":24,"lastUpdated":26,"created":25,"license":159,"readme":160},"node-red-contrib-modbus-modpackqt",[6],"catalogue",{"name":8},"ModPackQT","Modbus commissioning, testing & analysis tools for Node-RED. Embedded Modbus TCP\u002FRTU master + slave server, FC1\u002FFC2\u002FFC3\u002FFC4 reads, FC5\u002FFC6\u002FFC15\u002FFC16 writes, built-in slave register store, and a passive traffic monitor for debugging. 100% free, MIT, no usa",[11],"modpackqt",null,false,{"week":15},8251,"3.3.25","2026-05-10T13:55:09.868Z",[19],{"name":11,"email":20},"modpackqt@gmail.com","https:\u002F\u002Fmodpackqt.com\u002Fnodered",{"url":23},"https:\u002F\u002Fmodpackqt.com\u002Fcontact",{"created":25,"modified":26,"1.1.0":27,"1.1.1":28,"1.1.2":29,"1.1.3":30,"1.1.4":31,"1.1.5":32,"1.1.6":33,"1.1.7":34,"1.1.8":35,"1.1.9":36,"1.1.10":37,"1.1.11":38,"1.1.12":39,"1.1.13":40,"1.1.14":41,"1.1.15":42,"1.1.16":43,"1.1.17":44,"1.1.18":45,"1.1.19":46,"1.1.20":47,"1.1.21":48,"1.1.22":49,"1.1.23":50,"1.1.24":51,"1.1.25":52,"1.1.26":53,"1.1.27":54,"1.1.28":55,"1.1.29":56,"1.1.30":57,"1.1.31":58,"1.1.32":59,"1.1.33":60,"1.1.34":61,"1.1.35":62,"1.1.36":63,"1.1.37":64,"1.1.38":65,"1.1.39":66,"1.1.40":67,"1.1.41":68,"1.1.42":69,"1.1.43":70,"1.1.44":71,"1.1.45":72,"1.1.46":73,"1.1.47":74,"1.1.48":75,"1.1.49":76,"1.1.50":77,"1.1.51":78,"1.1.52":79,"1.1.53":80,"1.1.54":81,"1.1.55":82,"1.1.56":83,"1.1.57":84,"1.1.58":85,"1.1.59":86,"1.1.60":87,"1.1.61":88,"1.1.62":89,"1.1.63":90,"1.1.64":91,"1.1.65":92,"1.1.66":93,"1.1.67":94,"1.1.68":95,"1.1.69":96,"1.1.70":97,"1.1.71":98,"1.1.72":99,"1.1.73":100,"1.1.74":101,"1.1.75":102,"1.1.76":103,"1.1.77":104,"1.1.78":105,"1.1.79":106,"1.1.80":107,"1.1.81":108,"1.1.82":109,"1.1.83":110,"1.1.84":111,"1.1.85":112,"2.0.0":113,"2.0.1":114,"2.0.2":115,"2.0.3":116,"2.0.4":117,"2.0.5":118,"2.0.6":119,"2.1.0":120,"2.1.1":121,"3.0.0":122,"3.1.0":123,"3.1.1":124,"3.2.0":125,"3.2.1":126,"3.2.2":127,"3.2.3":128,"3.2.4":129,"3.3.0":130,"3.3.1":131,"3.3.2":132,"3.3.3":133,"3.3.4":134,"3.3.6":135,"3.3.7":136,"3.3.8":137,"3.3.9":138,"3.3.10":139,"3.3.11":140,"3.3.12":141,"3.3.13":142,"3.3.14":143,"3.3.15":144,"3.3.16":145,"3.3.17":146,"3.3.18":147,"3.3.19":148,"3.3.20":149,"3.3.21":150,"3.3.22":151,"3.3.23":152,"3.3.24":153,"3.3.25":154,"3.3.27":155,"3.3.28":156,"3.3.29":157,"3.3.30":158},"2026-05-01T12:14:33.480Z","2026-06-09T08:51:50.470Z","2026-05-01T12:14:33.719Z","2026-05-01T12:20:39.950Z","2026-05-01T12:24:43.615Z","2026-05-01T14:40:37.115Z","2026-05-01T14:41:43.662Z","2026-05-01T15:15:24.481Z","2026-05-01T15:49:11.138Z","2026-05-01T15:51:34.961Z","2026-05-05T16:03:06.401Z","2026-05-05T16:20:57.964Z","2026-05-05T16:29:46.242Z","2026-05-05T16:33:55.317Z","2026-05-05T16:36:13.046Z","2026-05-05T16:43:30.409Z","2026-05-05T16:45:26.867Z","2026-05-05T16:52:33.347Z","2026-05-05T16:59:18.322Z","2026-05-05T17:00:52.848Z","2026-05-05T17:07:20.176Z","2026-05-05T17:15:09.498Z","2026-05-05T17:39:25.140Z","2026-05-05T17:40:35.417Z","2026-05-05T17:43:27.131Z","2026-05-05T17:44:49.428Z","2026-05-05T17:52:45.535Z","2026-05-05T17:59:42.428Z","2026-05-05T18:14:08.318Z","2026-05-05T18:21:32.987Z","2026-05-05T18:22:54.067Z","2026-05-05T18:27:52.911Z","2026-05-05T18:36:13.225Z","2026-05-05T18:46:17.227Z","2026-05-05T18:52:22.096Z","2026-05-05T19:40:51.417Z","2026-05-05T19:43:35.135Z","2026-05-05T19:45:31.419Z","2026-05-05T19:52:46.979Z","2026-05-05T19:54:48.026Z","2026-05-05T19:55:42.827Z","2026-05-05T19:57:58.418Z","2026-05-05T20:06:00.593Z","2026-05-05T20:16:35.430Z","2026-05-05T20:18:19.200Z","2026-05-05T22:18:46.434Z","2026-05-05T23:20:00.181Z","2026-05-05T23:55:23.123Z","2026-05-06T00:21:04.616Z","2026-05-06T01:22:14.819Z","2026-05-06T02:23:13.750Z","2026-05-06T03:24:24.613Z","2026-05-06T04:25:30.439Z","2026-05-06T06:27:42.546Z","2026-05-06T07:29:01.302Z","2026-05-06T09:13:10.626Z","2026-05-06T09:13:44.513Z","2026-05-06T09:18:16.517Z","2026-05-06T09:37:45.238Z","2026-05-06T09:45:20.333Z","2026-05-06T09:46:53.109Z","2026-05-06T09:59:43.219Z","2026-05-06T10:05:52.285Z","2026-05-06T10:07:58.123Z","2026-05-06T10:22:13.443Z","2026-05-06T10:28:31.248Z","2026-05-06T10:29:42.164Z","2026-05-06T10:33:39.980Z","2026-05-06T10:35:32.029Z","2026-05-06T10:36:37.176Z","2026-05-06T10:41:08.640Z","2026-05-06T11:37:57.452Z","2026-05-06T11:40:58.039Z","2026-05-06T11:48:14.198Z","2026-05-06T11:48:54.147Z","2026-05-06T11:50:28.106Z","2026-05-06T11:52:55.669Z","2026-05-06T11:54:36.175Z","2026-05-06T11:55:50.889Z","2026-05-06T12:14:05.793Z","2026-05-06T12:15:59.091Z","2026-05-06T12:18:36.619Z","2026-05-06T12:19:49.249Z","2026-05-06T12:40:36.175Z","2026-05-06T12:54:34.871Z","2026-05-06T12:59:23.595Z","2026-05-06T13:02:40.057Z","2026-05-06T13:07:45.177Z","2026-05-09T14:00:07.892Z","2026-05-09T14:41:20.375Z","2026-05-09T14:46:32.853Z","2026-05-09T14:48:21.182Z","2026-05-09T14:52:08.040Z","2026-05-09T14:54:11.665Z","2026-05-09T15:06:20.514Z","2026-05-09T15:28:55.235Z","2026-05-09T15:32:45.736Z","2026-05-10T02:08:31.309Z","2026-05-10T02:27:28.631Z","2026-05-10T02:35:32.677Z","2026-05-10T04:01:09.048Z","2026-05-10T04:13:43.122Z","2026-05-10T04:14:19.675Z","2026-05-10T04:17:52.224Z","2026-05-10T04:22:55.336Z","2026-05-10T04:39:27.820Z","2026-05-10T04:46:40.452Z","2026-05-10T04:54:40.192Z","2026-05-10T05:17:56.480Z","2026-05-10T05:27:24.676Z","2026-05-10T05:35:11.986Z","2026-05-10T05:38:52.628Z","2026-05-10T05:42:38.955Z","2026-05-10T05:43:43.243Z","2026-05-10T05:45:05.717Z","2026-05-10T05:52:14.439Z","2026-05-10T05:55:32.263Z","2026-05-10T05:58:17.102Z","2026-05-10T06:01:47.682Z","2026-05-10T06:02:42.529Z","2026-05-10T06:11:30.459Z","2026-05-10T06:16:55.538Z","2026-05-10T06:17:25.345Z","2026-05-10T13:27:07.255Z","2026-05-10T13:31:06.016Z","2026-05-10T13:33:35.218Z","2026-05-10T13:39:52.833Z","2026-05-10T13:44:16.655Z","2026-05-10T13:54:11.453Z","2026-05-10T13:55:09.758Z","2026-06-08T12:47:37.515Z","2026-06-09T03:35:24.973Z","2026-06-09T08:22:02.572Z","2026-06-09T08:51:50.345Z","MIT","\u003Ch1 id=\"node-red-contrib-modbus-modpackqt\">\u003Ca class=\"header-anchor\" href=\"#node-red-contrib-modbus-modpackqt\">node-red-contrib-modbus-modpackqt\u003C\u002Fa>\u003C\u002Fh1>\n\u003Cp>\u003Cstrong>Modbus commissioning, testing &amp; analysis tools for Node-RED.\u003C\u002Fstrong>\nBy \u003Ca href=\"https:\u002F\u002Fmodpackqt.com\">ModPackQT\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cp>\u003Ca href=\"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fnode-red-contrib-modbus-modpackqt\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fnpm\u002Fv\u002Fnode-red-contrib-modbus-modpackqt.svg\" alt=\"npm version\" \u002F>\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fnodered.org\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FNode--RED-%E2%89%A52.0.0-red\" alt=\"Node-RED\" \u002F>\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopensource.org\u002Flicenses\u002FMIT\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-MIT-green.svg\" alt=\"License: MIT\" \u002F>\u003C\u002Fa>\u003C\u002Fp>\n\u003Cblockquote>\n\u003Cp>\u003Cstrong>100% free, MIT-licensed, no usage limits.\u003C\u002Fstrong> Open the \u003Ca href=\"https:\u002F\u002Fmodpackqt.com\">ModPackQT web console\u003C\u002Fa> for register decoding, device simulation and AI assistance.\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Chr \u002F>\n\u003Ch2 id=\"what-you-get\">\u003Ca class=\"header-anchor\" href=\"#what-you-get\">What you get\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>\u003Cstrong>Modbus master\u003C\u002Fstrong> — read (FC1–FC4) and write (FC5\u002FFC6\u002FFC15\u002FFC16) over \u003Cstrong>TCP\u003C\u002Fstrong> or \u003Cstrong>RTU (serial)\u003C\u002Fstrong>\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Embedded Modbus TCP slave server\u003C\u002Fstrong> — push values from any flow, let PLCs \u002F SCADA \u002F HMIs read them\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Cloud profile pickers\u003C\u002Fstrong> — paste your ModPackQT Account Key into the runtime config and a \u003Cstrong>My Connections\u003C\u002Fstrong> dropdown loads your saved devices, auto-filling host \u002F port \u002F unit. The slave server node has a matching \u003Cstrong>My Slaves\u003C\u002Fstrong> picker. No more retyping IPs across nodes.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Outputs raw register values\u003C\u002Fstrong> — pair with \u003Ca href=\"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fnode-red-contrib-bytes-modpackqt\">\u003Ccode>node-red-contrib-bytes-modpackqt\u003C\u002Fcode>\u003C\u002Fa> to decode int \u002F float \u002F string \u002F bitmask\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Zero external dependencies\u003C\u002Fstrong> — Modbus runs inside the Node-RED process\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Chr \u002F>\n\u003Ch2 id=\"install\">\u003Ca class=\"header-anchor\" href=\"#install\">Install\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>\u003Cstrong>Recommended (one shot):\u003C\u002Fstrong> install both palettes — Modbus + decoders — together.\u003C\u002Fp>\n\u003Cp>Palette manager → Manage palette → Install:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>node-red-contrib-modbus-modpackqt\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Ccode>node-red-contrib-bytes-modpackqt\u003C\u002Fcode>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>npm:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">cd ~\u002F.node-red\nnpm install node-red-contrib-modbus-modpackqt node-red-contrib-bytes-modpackqt\n# then restart Node-RED\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Chr \u002F>\n\u003Ch2 id=\"5-minute-walkthrough\">\u003Ca class=\"header-anchor\" href=\"#5-minute-walkthrough\">5-minute walkthrough\u003C\u002Fa>\u003C\u002Fh2>\n\u003Ch3 id=\"1-read-a-temperature-float-from-a-plc\">\u003Ca class=\"header-anchor\" href=\"#1-read-a-temperature-float-from-a-plc\">1. Read a temperature float from a PLC\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cpre>\u003Ccode>[inject every 5s] → [modbus master read FC3 addr=100 qty=2] → [decode-float32 BE] → [debug]\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Step\u003C\u002Fth>\n\u003Cth>Setting\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>Add a runtime config\u003C\u002Ftd>\n\u003Ctd>TCP, timeout 3000 ms\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Master read\u003C\u002Ftd>\n\u003Ctd>Host \u003Ccode>192.168.1.10\u003C\u002Fcode>, port \u003Ccode>502\u003C\u002Fcode>, unit \u003Ccode>1\u003C\u002Fcode>, FC \u003Ccode>3\u003C\u002Fcode>, address \u003Ccode>100\u003C\u002Fcode>, qty \u003Ccode>2\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>decode-float32\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Endian \u003Ccode>BE\u003C\u002Fcode> (try \u003Ccode>LE_SWAP\u003C\u002Fcode> if value looks wrong — many PLCs use CDAB)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cp>\u003Cstrong>\u003Ccode>msg.payload\u003C\u002Fcode> along the wire:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>After Modbus read: \u003Ccode>[16828, 0]\u003C\u002Fcode> (raw registers)\u003C\u002Fli>\n\u003Cli>After decode-float32: \u003Ccode>23.5\u003C\u002Fcode> (clean float — done)\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3 id=\"2-send-a-setpoint-back\">\u003Ca class=\"header-anchor\" href=\"#2-send-a-setpoint-back\">2. Send a setpoint back\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cpre>\u003Ccode>[inject 23.5] → [encode-float32 BE] → [modbus master write FC16 addr=200]\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>The encoder converts \u003Ccode>23.5\u003C\u002Fcode> → \u003Ccode>[16828, 0]\u003C\u002Fcode>, the write node sends it to the PLC.\u003C\u002Fp>\n\u003Ch3 id=\"3-watch-whats-happening-debug-visibility\">\u003Ca class=\"header-anchor\" href=\"#3-watch-whats-happening-debug-visibility\">3. Watch what's happening (debug visibility)\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cp>Drop a \u003Cstrong>modbus traffic\u003C\u002Fstrong> 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:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-json\">{\n  \"ts\": \"2026-05-09T14:23:01.234Z\",\n  \"direction\": \"read\",\n  \"kind\": \"master\",\n  \"target\": \"192.168.1.10:502\",\n  \"unitId\": 1,\n  \"fc\": 3,\n  \"address\": 100,\n  \"quantity\": 2,\n  \"values\": [16828, 0],\n  \"durationMs\": 12,\n  \"ok\": true\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Filter by direction, function code, or target if you only want a slice.\u003C\u002Fp>\n\u003Ch3 id=\"4-be-a-modbus-slave-let-scada-read-your-values\">\u003Ca class=\"header-anchor\" href=\"#4-be-a-modbus-slave-let-scada-read-your-values\">4. Be a Modbus slave (let SCADA read your values)\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cp>In the runtime config check \u003Cstrong>Enable embedded Modbus TCP slave server\u003C\u002Fstrong>, set port \u003Ccode>1502\u003C\u002Fcode>. Then:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>[any source] → [encode-int32 BE] → [modbus slave write holding addr=0]\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>External masters connecting to \u003Ccode>your-host:1502\u003C\u002Fcode>, unit \u003Ccode>1\u003C\u002Fcode>, FC \u003Ccode>3\u003C\u002Fcode>, address \u003Ccode>0\u003C\u002Fcode>, qty \u003Ccode>2\u003C\u002Fcode> will read the latest value back.\u003C\u002Fp>\n\u003Chr \u002F>\n\u003Ch2 id=\"cookbook-combined-with-the-bytes-palette\">\u003Ca class=\"header-anchor\" href=\"#cookbook-combined-with-the-bytes-palette\">Cookbook (combined with the bytes palette)\u003C\u002Fa>\u003C\u002Fh2>\n\u003Ch3 id=\"decode-a-status-bitmask\">\u003Ca class=\"header-anchor\" href=\"#decode-a-status-bitmask\">Decode a status bitmask\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cpre>\u003Ccode>[master read FC3 addr=50 qty=1] → [decode-bitmask bits=8] → [debug]\n\u002F\u002F payload = [true, true, false, true, false, false, false, false]\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3 id=\"read-a-device-serial-number-string\">\u003Ca class=\"header-anchor\" href=\"#read-a-device-serial-number-string\">Read a device serial number string\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cpre>\u003Ccode>[master read FC3 addr=10 qty=8] → [decode-string BE encoding=utf8 trim=true] → [debug]\n\u002F\u002F payload = \"SN-2025-A0042\"\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3 id=\"bridge-mqtt-modbus\">\u003Ca class=\"header-anchor\" href=\"#bridge-mqtt-modbus\">Bridge MQTT → Modbus\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cpre>\u003Ccode>[mqtt in topic=setpoint] → [encode-float32 BE] → [master write FC16 addr=200]\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3 id=\"bridge-modbus-mqtt\">\u003Ca class=\"header-anchor\" href=\"#bridge-modbus-mqtt\">Bridge Modbus → MQTT\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cpre>\u003Ccode>[poll every 5s] → [master read FC3 addr=100 qty=2] → [decode-float32 BE] → [mqtt out topic=temp]\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3 id=\"mirror-a-remote-plc-into-local-slave-server\">\u003Ca class=\"header-anchor\" href=\"#mirror-a-remote-plc-into-local-slave-server\">Mirror a remote PLC into local slave server\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cpre>\u003Ccode>[poll 1s] → [master read FC3 addr=0 qty=10] → [slave write holding addr=0]\n\u002F\u002F any local SCADA can now read from your Node-RED slave instead of hammering the PLC\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3 id=\"alert-on-modbus-errors\">\u003Ca class=\"header-anchor\" href=\"#alert-on-modbus-errors\">Alert on Modbus errors\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cpre>\u003Ccode>[modbus traffic filter=any] → [switch ok==false] → [email out]\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Chr \u002F>\n\u003Ch2 id=\"available-nodes\">\u003Ca class=\"header-anchor\" href=\"#available-nodes\">Available nodes\u003C\u002Fa>\u003C\u002Fh2>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Node\u003C\u002Fth>\n\u003Cth>Purpose\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>modpackqt-config\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Shared runtime — master mode (TCP\u002FRTU), serial settings, optional slave server\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>modpackqt-master-read\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Read FC1\u002FFC2\u002FFC3\u002FFC4 from a remote Modbus device\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>modpackqt-master-write\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Write FC5\u002FFC6\u002FFC15\u002FFC16 to a remote Modbus device\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>modpackqt-slave-read\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Read from the embedded slave's register store (verify what masters see)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>modpackqt-slave-write\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Push values into the embedded slave's register store\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>modpackqt-traffic\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Passive monitor — emits one message per Modbus op with full visibility into what's happening on the wire\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>modpackqt-master-probe\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Cstrong>Live commissioning probe\u003C\u002Fstrong> for a single Modbus TCP device. One node per device. Click \u003Cstrong>Open in ModPackQT Console\u003C\u002Fstrong> to launch the web tester live-attached.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>modpackqt-slave-probe\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Cstrong>Live simulator probe\u003C\u002Fstrong> for a single fake slave. One node per port. Web console gives you a real-time register editor.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Chr \u002F>\n\u003Ch2 id=\"live-commissioning-with-probe-nodes\">\u003Ca class=\"header-anchor\" href=\"#live-commissioning-with-probe-nodes\">Live commissioning with probe nodes\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>The two \u003Cstrong>probe\u003C\u002Fstrong> nodes (\u003Ccode>modpackqt-master-probe\u003C\u002Fcode>, \u003Ccode>modpackqt-slave-probe\u003C\u002Fcode>) 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 \u003Ca href=\"https:\u002F\u002Fmodpackqt.com\">modpackqt.com web console\u003C\u002Fa> attaches live.\u003C\u002Fp>\n\u003Ch3 id=\"pattern-one-probe-per-device\">\u003Ca class=\"header-anchor\" href=\"#pattern-one-probe-per-device\">Pattern: one probe per device\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cpre>\u003Ccode>┌─────────────────────────┐  ┌─────────────────────────┐  ┌─────────────────────────┐\n│  master-probe           │  │  master-probe           │  │  slave-probe            │\n│  Inverter A             │  │  Energy Meter           │  │  Fake Inverter          │\n│  192.168.1.10:502 #1    │  │  192.168.1.20:502 #5    │  │  Listening :1502 #1     │\n│  [ Open in Console ]    │  │  [ Open in Console ]    │  │  [ Open in Console ]    │\n└─────────────────────────┘  └─────────────────────────┘  └─────────────────────────┘\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Click \u003Cstrong>Open in Console\u003C\u002Fstrong> on any probe → the web console opens with \u003Cstrong>all probes from this Node-RED instance in the sidebar\u003C\u002Fstrong>, the clicked one pre-selected. Switch between devices with one click.\u003C\u002Fp>\n\u003Ch3 id=\"hidden-runtime\">\u003Ca class=\"header-anchor\" href=\"#hidden-runtime\">Hidden runtime\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cp>The first probe deployed starts a small HTTP server on \u003Ccode>127.0.0.1:8502\u003C\u002Fcode>:\u003C\u002Fp>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Endpoint\u003C\u002Fth>\n\u003Cth>Purpose\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>GET \u002Fapi\u002Fhealth\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Runtime health + probe count\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>GET \u002Fapi\u002Fprobes\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>List all registered probes\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>GET \u002Fapi\u002Fprobes\u002F:id\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Probe details\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>POST \u002Fapi\u002Fprobes\u002F:id\u002Fread\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Master probe: read registers \u003Ccode>{ fc, address, quantity }\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>POST \u002Fapi\u002Fprobes\u002F:id\u002Fwrite\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Master probe: write registers \u003Ccode>{ fc, address, values }\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>GET \u002Fapi\u002Fprobes\u002F:id\u002Fstore?type=&amp;address=&amp;quantity=\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Slave probe: inspect register values\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>PUT \u002Fapi\u002Fprobes\u002F:id\u002Fstore\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Slave probe: set register values\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cp>The server \u003Cstrong>auto-stops\u003C\u002Fstrong> when the last probe is removed.\u003C\u002Fp>\n\u003Ch3 id=\"network-access\">\u003Ca class=\"header-anchor\" href=\"#network-access\">Network access\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cp>Default bind is \u003Cstrong>loopback-only\u003C\u002Fstrong> (\u003Ccode>127.0.0.1\u003C\u002Fcode>) — only browsers on the same machine can reach it. To allow remote browsers on your LAN:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">MODPACKQT_PROBE_HOST=0.0.0.0 MODPACKQT_PROBE_PORT=8502 node-red\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Port \u003Ccode>8502\u003C\u002Fcode> falls back to \u003Ccode>8503\u003C\u002Fcode>–\u003Ccode>8506\u003C\u002Fcode> automatically if it's already in use.\u003C\u002Fp>\n\u003Chr \u002F>\n\u003Ch2 id=\"why-this-palette\">\u003Ca class=\"header-anchor\" href=\"#why-this-palette\">Why this palette?\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>These nodes are built for \u003Cstrong>commissioning, testing, and analysis\u003C\u002Fstrong> — 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 \u003Ca href=\"https:\u002F\u002Fmodpackqt.com\">ModPackQT web console\u003C\u002Fa> for AI-assisted register decoding, profile management, and a full visual tester.\u003C\u002Fp>\n\u003Chr \u002F>\n\u003Ch2 id=\"importing-the-example-flow\">\u003Ca class=\"header-anchor\" href=\"#importing-the-example-flow\">Importing the example flow\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>This package ships with a complete demo flow under \u003Ccode>examples\u002Fbasic-flow.json\u003C\u002Fcode> showing every node combined with the bytes palette (master read → decode-float32, encode-float32 → master write, status bitmask, traffic monitor, slave loop).\u003C\u002Fp>\n\u003Cp>Node-RED → Menu → Import → Examples → \u003Cstrong>node-red-contrib-modbus-modpackqt\u003C\u002Fstrong> → basic-flow.\u003C\u002Fp>\n\u003Cp>Make sure \u003Ccode>node-red-contrib-bytes-modpackqt\u003C\u002Fcode> is also installed before importing — the example uses both.\u003C\u002Fp>\n\u003Chr \u002F>\n\u003Ch2 id=\"troubleshooting\">\u003Ca class=\"header-anchor\" href=\"#troubleshooting\">Troubleshooting\u003C\u002Fa>\u003C\u002Fh2>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Issue\u003C\u002Fth>\n\u003Cth>Solution\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>Decoded float looks like garbage\u003C\u002Ftd>\n\u003Ctd>Try a different word order (\u003Ccode>BE\u003C\u002Fcode> ↔ \u003Ccode>LE_SWAP\u003C\u002Fcode>) — common conventions are ABCD and CDAB\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>Serial port not configured for RTU mode\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Open runtime config → set Serial Port (e.g. \u003Ccode>\u002Fdev\u002FttyUSB0\u003C\u002Fcode> or \u003Ccode>COM3\u003C\u002Fcode>)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>EADDRINUSE\u003C\u002Fcode> on slave port\u003C\u002Ftd>\n\u003Ctd>Another process already uses that port. Pick a different one (e.g. \u003Ccode>1502\u003C\u002Fcode>).\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>connect ECONNREFUSED\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Target Modbus device is unreachable. Check IP \u002F port \u002F firewall.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>Embedded slave is disabled\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Open runtime config → check \u003Cstrong>Enable embedded slave server\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Nodes don't appear after install\u003C\u002Ftd>\n\u003Ctd>Fully restart Node-RED.\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Chr \u002F>\n\u003Ch2 id=\"reporting-bugs-getting-updates\">\u003Ca class=\"header-anchor\" href=\"#reporting-bugs-getting-updates\">Reporting bugs &amp; getting updates\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>\u003Cstrong>Bugs \u002F feature requests:\u003C\u002Fstrong> use our \u003Ca href=\"https:\u002F\u002Fmodpackqt.com\u002Fcontact\">contact page\u003C\u002Fa>.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Security issues:\u003C\u002Fstrong> report privately via the \u003Ca href=\"https:\u002F\u002Fmodpackqt.com\u002Fsecurity\">security page\u003C\u002Fa>.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Updates are never automatic.\u003C\u002Fstrong> Node-RED's palette manager will show\n\"update available\" when we publish a new version — you choose when to\nupgrade. Pin a major version (\u003Ccode>^3.0.0\u003C\u002Fcode>) for stability.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Changelog:\u003C\u002Fstrong> the \u003Ccode>CHANGELOG.md\u003C\u002Fcode> file is shipped inside this package. We\nfollow \u003Ca href=\"https:\u002F\u002Fsemver.org\u002F\">semver\u003C\u002Fa> — patch releases for bug fixes only.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Chr \u002F>\n\u003Ch2 id=\"links\">\u003Ca class=\"header-anchor\" href=\"#links\">Links\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fmodpackqt.com\">ModPackQT homepage\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fmodpackqt.com\u002Fnodered\">Node-RED + ModPackQT docs\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fnode-red-contrib-bytes-modpackqt\">Bytes palette (decoders\u002Fencoders)\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fmodpackqt.com\u002Fresources\u002Ftutorial\">Modbus tutorials\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Chr \u002F>\n\u003Ch2 id=\"license-disclaimer\">\u003Ca class=\"header-anchor\" href=\"#license-disclaimer\">License &amp; disclaimer\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>MIT — © ModPackQT. Provided \u003Cstrong>\"as is\" without warranty of any kind\u003C\u002Fstrong>. You are responsible for validating this software in your environment before any use with real equipment.\u003C\u002Fp>\n",1784738654186]