[{"data":1,"prerenderedAt":357},["ShallowReactive",2],{"integration-node-red-contrib-modbus\u002F":3},{"_id":4,"categories":5,"author":10,"description":13,"npmOwners":14,"npmScope":17,"name":4,"ffCertified":18,"downloads":19,"version":21,"updatedAt":22,"tier":23,"maintainers":24,"homepage":29,"bugs":30,"repository":32,"time":35,"lastUpdated":22,"created":36,"license":245,"githubOwner":246,"githubRepo":4,"examples":247,"readme":356},"node-red-contrib-modbus",[6,7,8,9],"catalogue_industrial","catalogue_hardware","catalogue_communication","catalogue",{"name":11,"email":12},"Klaus Landsdorf","klaus.landsdorf@bianco-royal.de","The all in one Modbus TCP, UDP and Serial contribution long term supported package for Node-RED.",[15,16],"biancode","iniationcoder",null,true,{"week":20},11589,"5.60.2","2026-08-14T17:18:34.345Z","recommended",[25,27],{"name":15,"email":26},"klaus.landsdorf@iniationware.com",{"name":16,"email":28},"tm@iniationware.com","https:\u002F\u002Fplus4nodered.com\u002F",{"url":31},"https:\u002F\u002Fgithub.com\u002Fbiancoroyal\u002Fnode-red-contrib-modbus\u002Fissues\u002F",{"type":33,"url":34},"git","git+https:\u002F\u002Fgithub.com\u002FBiancoRoyal\u002Fnode-red-contrib-modbus.git",{"created":36,"modified":22,"0.1.0":36,"0.1.1":37,"0.2.0":38,"0.2.1":39,"0.2.2":40,"0.2.3":41,"0.2.4":42,"0.2.5":43,"0.2.6":44,"0.2.8":45,"0.2.9":46,"0.4.2":47,"0.4.3":48,"0.4.4":49,"0.4.5":50,"0.4.6":51,"0.4.7":52,"0.4.8":53,"0.5.0":54,"0.5.1":55,"0.6.0":56,"0.6.1":57,"0.6.2":58,"0.6.3":59,"0.7.0":60,"0.7.1":61,"0.7.2":62,"0.7.3":63,"0.7.4":64,"0.7.5":65,"0.7.6":66,"0.7.7":67,"0.8.0":68,"0.8.1":69,"0.8.2":70,"0.9.0":71,"0.9.1":72,"0.9.2":73,"0.9.3":74,"0.9.4":75,"0.9.5":76,"0.10.0":77,"0.10.1":78,"0.10.2":79,"0.10.3":80,"0.10.5":81,"0.10.6":82,"0.10.7":83,"0.11.1":84,"0.11.2":85,"0.11.3":86,"0.11.4":87,"0.11.5":88,"0.11.6":89,"0.11.7":90,"0.11.8":91,"0.11.9":92,"0.11.10":93,"0.11.11":94,"0.11.12":95,"0.11.13":96,"0.11.14":97,"0.11.15":98,"0.11.16":99,"0.11.17":100,"0.11.18":101,"0.11.19":102,"0.11.20":103,"0.11.21":104,"0.11.22":105,"0.11.23":106,"0.11.24":107,"0.11.25":108,"0.11.26":109,"0.11.27":110,"1.0.0":111,"1.0.1":112,"1.0.2":113,"1.0.3":114,"1.0.4":115,"1.0.5":116,"1.0.6":117,"1.0.7":118,"1.0.8":119,"1.0.9-alpha":120,"1.0.9-beta":121,"1.0.9-gamma":122,"1.0.9-delta":123,"1.0.9-epsilon":124,"1.0.9-zeta":125,"1.0.9-eta":126,"1.0.9-theta":127,"1.0.9-iota":128,"1.0.9-kappa":129,"1.0.9":130,"1.0.10":131,"1.0.11":132,"1.0.12":133,"1.0.13":134,"1.0.14":135,"1.0.15":136,"1.0.16":137,"1.1.0":138,"1.2.0":139,"1.2.1":140,"1.2.2":141,"2.0.1-beta.0":142,"2.0.1-beta.1":143,"1.3.0":144,"2.0.1":145,"2.1.0":146,"2.1.1":147,"2.2.0":148,"2.2.1":149,"2.2.2":150,"2.2.3":151,"2.3.0":152,"2.3.1":153,"2.3.2":154,"2.4.1":155,"2.5.0":156,"3.0.0":157,"3.0.1":158,"3.0.2":159,"3.0.3":160,"3.0.4":161,"3.0.5":162,"3.1.0":163,"3.2.2":164,"3.3.0":165,"3.3.1":166,"3.3.2":167,"3.3.3":168,"3.4.0":169,"3.5.0":170,"3.6.0":171,"3.6.1":172,"4.0.0":173,"4.0.1":174,"4.1.0":175,"4.1.1":176,"4.1.3":177,"5.1.0-0":178,"5.1.0-1":179,"5.1.0":180,"5.2.0":181,"5.4.0-alpha.0":182,"5.4.0-alpha.2":183,"5.4.0-alpha.3":184,"5.4.0-alpha.4":185,"5.4.0":186,"5.4.1-beta.1":187,"5.5.0-beta.0":188,"5.5.0-beta.1":189,"5.5.0-beta.2":190,"5.5.0":191,"5.5.1":192,"5.6.0":193,"5.7.0":194,"5.8.0":195,"5.9.0":196,"5.10.0":197,"5.10.1":198,"5.11.0-alpha.0":199,"5.11.0":200,"5.12.0":201,"5.13.0":202,"5.13.1":203,"5.13.2":204,"5.13.3":205,"5.14.0":206,"5.14.1":207,"5.15.0":208,"5.16.0":209,"5.20.0":210,"5.21.0":211,"5.21.1":212,"5.21.2":213,"5.22.0":214,"5.23.0":215,"5.23.1":216,"5.23.2":217,"5.23.3":218,"5.24.0":219,"5.25.0":220,"5.26.0":221,"5.27.0":222,"5.27.1":223,"5.27.2":224,"5.28.0":225,"5.29.0":226,"5.30.0":227,"5.31.0":228,"5.40.0":229,"5.41.0":230,"5.42.0":231,"5.43.0":232,"5.44.0":233,"5.44.1":234,"5.45.0":235,"5.45.1":236,"5.45.2":237,"5.46.0":238,"5.50.0":239,"5.50.1":240,"5.51.0":241,"5.60.0":242,"5.60.1":243,"5.60.2":244},"2015-08-27T13:56:13.427Z","2015-08-27T14:19:01.576Z","2015-09-06T11:56:33.528Z","2015-09-06T12:50:58.136Z","2015-09-07T07:32:58.133Z","2015-09-07T14:49:53.007Z","2016-02-16T14:57:25.962Z","2016-02-16T15:21:26.218Z","2016-02-20T16:26:14.542Z","2016-02-20T17:47:51.914Z","2016-02-20T17:56:29.134Z","2016-05-08T10:42:12.486Z","2016-05-09T06:20:14.958Z","2016-05-16T13:30:40.087Z","2016-05-17T21:35:31.770Z","2016-05-18T14:09:14.057Z","2016-05-18T14:57:56.763Z","2016-05-19T18:14:35.342Z","2016-06-08T19:31:36.136Z","2016-06-08T19:44:45.942Z","2016-08-21T08:40:45.602Z","2016-08-21T20:23:26.812Z","2016-08-23T21:35:47.087Z","2016-08-23T21:45:47.694Z","2016-09-17T08:00:06.932Z","2016-09-17T08:45:18.716Z","2016-09-17T08:48:52.451Z","2016-09-17T09:00:42.524Z","2016-09-17T09:13:08.239Z","2016-09-17T12:52:31.217Z","2016-09-29T18:47:38.828Z","2016-09-29T21:46:35.454Z","2016-10-09T10:34:02.780Z","2016-10-10T21:26:00.773Z","2016-10-12T22:15:10.707Z","2016-11-27T17:37:12.298Z","2016-12-04T12:23:20.491Z","2016-12-04T12:34:38.048Z","2016-12-06T20:48:22.789Z","2016-12-07T19:45:47.501Z","2016-12-16T16:16:18.995Z","2016-12-19T08:30:48.981Z","2016-12-19T12:15:55.599Z","2016-12-19T17:16:20.241Z","2016-12-20T11:40:21.603Z","2016-12-20T20:15:24.335Z","2016-12-20T21:36:43.364Z","2016-12-21T13:34:06.813Z","2016-12-21T23:30:19.927Z","2016-12-22T09:04:54.693Z","2016-12-26T14:13:48.525Z","2016-12-29T07:59:23.401Z","2016-12-30T16:13:12.980Z","2016-12-30T21:28:56.231Z","2016-12-31T09:56:43.455Z","2016-12-31T15:50:57.572Z","2017-01-01T17:37:02.815Z","2017-01-01T22:27:20.761Z","2017-01-02T23:20:17.898Z","2017-01-03T16:27:38.216Z","2017-01-03T19:15:37.426Z","2017-01-04T17:55:44.415Z","2017-01-05T21:16:34.097Z","2017-01-06T23:32:08.612Z","2017-01-07T03:19:31.384Z","2017-01-07T17:29:38.907Z","2017-01-09T22:35:54.311Z","2017-01-11T22:02:20.270Z","2017-01-11T23:02:25.825Z","2017-01-12T23:53:59.284Z","2017-01-13T20:53:32.408Z","2017-01-14T00:28:36.508Z","2017-01-14T12:27:21.856Z","2017-01-16T21:33:00.389Z","2017-01-17T20:36:33.089Z","2017-01-18T20:52:08.294Z","2017-01-21T10:40:20.991Z","2017-02-02T22:23:33.186Z","2017-02-03T12:49:18.976Z","2017-02-03T15:58:14.733Z","2017-02-03T17:24:38.146Z","2017-03-02T16:14:22.348Z","2017-03-05T19:13:51.732Z","2017-03-05T19:54:48.946Z","2017-03-05T20:51:54.996Z","2017-03-23T16:18:31.998Z","2017-03-23T17:38:11.102Z","2017-03-23T20:57:16.436Z","2017-03-25T08:59:22.250Z","2017-03-25T09:13:23.351Z","2017-03-25T09:37:22.222Z","2017-03-31T06:05:06.364Z","2017-03-31T14:26:00.539Z","2017-04-01T06:54:24.161Z","2017-04-08T13:50:04.228Z","2017-04-26T11:01:33.511Z","2017-04-27T15:46:50.127Z","2017-05-06T06:56:40.600Z","2017-05-09T20:00:31.376Z","2017-05-09T21:04:54.682Z","2017-05-10T05:05:12.046Z","2017-05-10T05:09:09.447Z","2017-05-16T16:16:14.248Z","2017-07-02T17:52:44.080Z","2017-07-03T05:48:21.794Z","2017-07-19T10:39:07.659Z","2017-09-26T21:49:19.936Z","2017-09-26T22:01:17.325Z","2017-09-29T22:59:19.049Z","2017-10-02T21:04:35.425Z","2017-10-15T11:17:04.193Z","2017-10-22T20:19:23.046Z","2017-11-02T06:57:43.253Z","2017-11-04T16:38:52.706Z","2017-11-08T20:21:14.065Z","2017-11-08T21:30:04.751Z","2017-11-17T18:32:06.995Z","2017-11-21T22:05:38.854Z","2017-11-21T22:52:53.250Z","2017-12-07T20:26:25.313Z","2017-12-19T17:28:33.877Z","2017-12-31T10:09:33.395Z","2018-01-09T20:43:48.705Z","2018-01-10T21:35:22.048Z","2018-01-17T19:27:34.166Z","2018-02-05T20:38:31.078Z","2018-02-05T20:57:29.035Z","2018-02-05T20:59:53.502Z","2018-02-07T15:07:39.148Z","2018-02-20T20:39:38.840Z","2018-02-20T20:46:21.390Z","2018-02-21T19:13:10.430Z","2018-02-22T16:02:52.295Z","2018-03-05T21:47:04.446Z","2018-05-21T07:31:19.337Z","2018-05-28T20:27:24.634Z","2018-06-08T13:42:31.621Z","2018-08-19T21:34:09.306Z","2018-11-08T19:05:21.913Z","2018-11-08T20:04:33.465Z","2018-11-13T19:05:11.390Z","2019-03-15T20:16:50.145Z","2019-11-24T13:27:21.017Z","2019-11-24T21:50:16.316Z","2019-12-03T16:11:00.833Z","2019-12-08T13:39:42.158Z","2020-03-11T18:30:17.497Z","2020-03-26T17:33:29.070Z","2020-03-26T20:03:53.258Z","2020-03-27T10:12:05.104Z","2020-03-28T13:00:58.518Z","2020-03-30T18:01:17.870Z","2020-03-30T21:15:41.605Z","2020-03-31T14:32:36.748Z","2020-04-01T09:52:52.574Z","2020-04-01T15:48:47.382Z","2020-04-01T17:53:29.614Z","2020-04-01T20:10:23.693Z","2020-04-01T23:37:55.627Z","2020-04-02T14:55:20.702Z","2020-04-09T20:16:45.942Z","2020-04-10T12:30:48.397Z","2020-04-10T13:52:41.307Z","2020-05-07T21:50:22.288Z","2020-05-12T18:58:44.902Z","2020-05-17T08:56:16.930Z","2020-05-21T16:03:28.666Z","2020-05-24T15:43:48.230Z","2020-05-26T16:14:36.373Z","2020-07-01T10:48:28.066Z","2021-04-10T19:11:42.018Z","2021-08-07T11:37:34.027Z","2021-11-13T11:19:12.573Z","2021-12-10T18:06:57.783Z","2022-02-12T09:58:17.782Z","2022-02-12T15:28:33.650Z","2022-02-15T14:26:05.582Z","2022-02-15T14:33:58.807Z","2022-07-28T19:57:08.815Z","2022-08-01T10:26:44.078Z","2022-08-03T06:35:18.081Z","2022-09-25T18:17:45.834Z","2022-11-14T15:15:07.721Z","2022-12-06T17:11:02.476Z","2022-12-09T21:22:59.345Z","2023-04-10T06:39:10.767Z","2023-08-28T15:27:37.229Z","2023-08-28T17:28:58.405Z","2023-08-29T13:20:47.417Z","2024-01-28T15:30:42.710Z","2024-02-05T17:03:11.563Z","2024-02-07T08:18:22.645Z","2024-04-23T13:44:38.454Z","2024-06-23T13:05:39.050Z","2024-07-23T13:23:49.350Z","2024-08-13T13:25:29.870Z","2024-11-02T12:51:14.216Z","2025-09-12T08:57:41.230Z","2025-09-16T08:22:20.472Z","2025-10-22T11:19:38.973Z","2025-10-29T13:39:34.798Z","2025-11-04T15:24:30.430Z","2026-07-21T13:37:43.347Z","2026-07-21T18:22:33.647Z","2026-07-22T12:28:23.372Z","2026-07-22T18:26:18.081Z","2026-07-22T19:35:35.877Z","2026-07-30T07:48:06.026Z","2026-08-14T17:18:33.922Z","BSD-3-Clause","BiancoRoyal",[248,254,260,266,272,278,284,290,296,302,308,314,320,326,332,338,344,350],{"name":249,"path":250,"url":251,"downloadUrl":252,"flow":253},"01-Modbus-Basics-Registers-And-FCs","examples\u002F01-Modbus-Basics-Registers-And-FCs.json","https:\u002F\u002Fgithub.com\u002FBiancoRoyal\u002Fnode-red-contrib-modbus\u002Fblob\u002Fmaster\u002Fexamples\u002F01-Modbus-Basics-Registers-And-FCs.json","https:\u002F\u002Fraw.githubusercontent.com\u002FBiancoRoyal\u002Fnode-red-contrib-modbus\u002Fmaster\u002Fexamples\u002F01-Modbus-Basics-Registers-And-FCs.json","[{\"id\":\"7fad1a9c92b145d5\",\"type\":\"tab\",\"label\":\"01 Modbus Basics\",\"disabled\":false,\"info\":\"LEARN: Modbus memory areas and function codes\\n\\nFEATURES IN THIS FLOW\\n- Local Modbus-Server (TCP slave buffers) + Modbus-Client\\n- Modbus-Write (FC6 Holding) and Modbus-Read (FC3)\\n- One Modbus-Response per data source (status stays readable)\\n\\nWHAT THE CONFIG DOES\\n- Client tcpHost\u002FtcpPort → must match Server hostname\u002FserverPort\\n- Write dataType + adr + quantity → which FC and address to write\\n- Read dataType HoldingRegister + adr\u002Fquantity → FC3 range to poll\\n- Unit ID on client\u002Fnodes → slave id (TCP demos use 1)\\n\\nHOW TO RUN\\n1) Deploy and wait until the client is active\\n2) Click inject Write 42 to HR0\\n3) Watch each node's own Modbus-Response status\\n\\nDemo TCP port: 10502\\n\\nAreas (common mapping):\\n- Coils (R\u002FW bits)           FC1 read \u002F FC5, FC15 write\\n- Discrete Inputs (R bits)   FC2 read\\n- Holding Registers (R\u002FW)    FC3 read \u002F FC6, FC16 write\\n- Input Registers (R)        FC4 read\\n\\nAddresses in this package are 0-based (address 0 = first register).\\n\\nConfig nodes are flow-scoped: delete this tab to remove client\u002FIO config.\"},{\"id\":\"92f47d0ed3fa4ef0\",\"type\":\"comment\",\"z\":\"7fad1a9c92b145d5\",\"name\":\"LEARN: Modbus memory areas and function codes\",\"info\":\"LEARN: Modbus memory areas and function codes\\n\\nFEATURES IN THIS FLOW\\n- Local Modbus-Server (TCP slave buffers) + Modbus-Client\\n- Modbus-Write (FC6 Holding) and Modbus-Read (FC3)\\n- One Modbus-Response per data source (status stays readable)\\n\\nWHAT THE CONFIG DOES\\n- Client tcpHost\u002FtcpPort → must match Server hostname\u002FserverPort\\n- Write dataType + adr + quantity → which FC and address to write\\n- Read dataType HoldingRegister + adr\u002Fquantity → FC3 range to poll\\n- Unit ID on client\u002Fnodes → slave id (TCP demos use 1)\\n\\nHOW TO RUN\\n1) Deploy and wait until the client is active\\n2) Click inject Write 42 to HR0\\n3) Watch each node's own Modbus-Response status\\n\\nDemo TCP port: 10502\\n\\nAreas (common mapping):\\n- Coils (R\u002FW bits)           FC1 read \u002F FC5, FC15 write\\n- Discrete Inputs (R bits)   FC2 read\\n- Holding Registers (R\u002FW)    FC3 read \u002F FC6, FC16 write\\n- Input Registers (R)        FC4 read\\n\\nAddresses in this package are 0-based (address 0 = first register).\\n\\nConfig nodes are flow-scoped: delete this tab to remove client\u002FIO config.\",\"x\":200,\"y\":40,\"wires\":[]},{\"id\":\"c443325645314a87\",\"type\":\"modbus-server\",\"z\":\"7fad1a9c92b145d5\",\"name\":\"Basics Server\",\"logEnabled\":false,\"hostname\":\"127.0.0.1\",\"serverPort\":\"10502\",\"responseDelay\":100,\"delayUnit\":\"ms\",\"coilsBufferSize\":10000,\"holdingBufferSize\":10000,\"inputBufferSize\":10000,\"discreteBufferSize\":10000,\"showErrors\":false,\"showStatusActivities\":false,\"x\":140,\"y\":220,\"wires\":[[],[],[],[],[]]},{\"id\":\"b96c6e7f9bd942e6\",\"type\":\"modbus-client\",\"z\":\"7fad1a9c92b145d5\",\"name\":\"Basics Client\",\"clienttype\":\"tcp\",\"bufferCommands\":true,\"stateLogEnabled\":false,\"queueLogEnabled\":false,\"failureLogEnabled\":true,\"tcpHost\":\"127.0.0.1\",\"tcpPort\":\"10502\",\"tcpType\":\"DEFAULT\",\"serialPort\":\"\u002Fdev\u002FttyUSB0\",\"serialType\":\"RTU-BUFFERD\",\"serialBaudrate\":\"9600\",\"serialDatabits\":\"8\",\"serialStopbits\":\"1\",\"serialParity\":\"none\",\"serialConnectionDelay\":\"100\",\"serialAsciiResponseStartDelimiter\":\"0x3A\",\"unit_id\":\"1\",\"commandDelay\":\"1\",\"clientTimeout\":\"1000\",\"reconnectOnTimeout\":true,\"reconnectTimeout\":\"2000\",\"parallelUnitIdsAllowed\":true},{\"id\":\"c7f731ed27b24587\",\"type\":\"inject\",\"z\":\"7fad1a9c92b145d5\",\"name\":\"Write 42 to HR0\",\"props\":[{\"p\":\"payload\"}],\"repeat\":\"\",\"crontab\":\"\",\"once\":false,\"topic\":\"\",\"payload\":\"42\",\"payloadType\":\"num\",\"x\":160,\"y\":340,\"wires\":[[\"c8f4d3cec674436b\"]]},{\"id\":\"c8f4d3cec674436b\",\"type\":\"modbus-write\",\"z\":\"7fad1a9c92b145d5\",\"name\":\"FC6 Holding\",\"showStatusActivities\":true,\"showErrors\":true,\"showWarnings\":true,\"unitid\":\"1\",\"dataType\":\"HoldingRegister\",\"adr\":\"0\",\"quantity\":\"1\",\"server\":\"b96c6e7f9bd942e6\",\"emptyMsgOnFail\":false,\"keepMsgProperties\":false,\"x\":400,\"y\":340,\"wires\":[[\"cf1a16a979484699\"],[\"ff9472d81bb0413a\"]]},{\"id\":\"10eb87fd87ae4f27\",\"type\":\"modbus-read\",\"z\":\"7fad1a9c92b145d5\",\"name\":\"Poll FC3\",\"topic\":\"\",\"showStatusActivities\":true,\"logIOActivities\":false,\"showErrors\":true,\"showWarnings\":true,\"unitid\":\"1\",\"dataType\":\"HoldingRegister\",\"adr\":\"0\",\"quantity\":\"2\",\"rate\":\"2\",\"rateUnit\":\"s\",\"delayOnStart\":true,\"startDelayTime\":\"1\",\"server\":\"b96c6e7f9bd942e6\",\"useIOFile\":false,\"ioFile\":\"\",\"useIOForPayload\":false,\"emptyMsgOnFail\":false,\"keepMsgProperties\":false,\"x\":380,\"y\":440,\"wires\":[[\"f67c1abe02374ad3\"],[\"3457b0e1230e4cb2\"]]},{\"id\":\"ff9472d81bb0413a\",\"type\":\"modbus-response\",\"z\":\"7fad1a9c92b145d5\",\"name\":\"Write response\",\"registerShowMax\":20,\"x\":640,\"y\":420,\"wires\":[]},{\"id\":\"3457b0e1230e4cb2\",\"type\":\"modbus-response\",\"z\":\"7fad1a9c92b145d5\",\"name\":\"Read response\",\"registerShowMax\":20,\"x\":640,\"y\":520,\"wires\":[]},{\"id\":\"cf1a16a979484699\",\"type\":\"debug\",\"z\":\"7fad1a9c92b145d5\",\"name\":\"SEE: FC6 Holding\",\"active\":true,\"tosidebar\":true,\"console\":false,\"tostatus\":false,\"complete\":\"payload\",\"x\":640,\"y\":260,\"wires\":[]},{\"id\":\"f67c1abe02374ad3\",\"type\":\"debug\",\"z\":\"7fad1a9c92b145d5\",\"name\":\"SEE: Poll FC3\",\"active\":true,\"tosidebar\":true,\"console\":false,\"tostatus\":false,\"complete\":\"payload\",\"x\":640,\"y\":360,\"wires\":[]}]",{"name":255,"path":256,"url":257,"downloadUrl":258,"flow":259},"02-Getting-Started-Client-And-Server","examples\u002F02-Getting-Started-Client-And-Server.json","https:\u002F\u002Fgithub.com\u002FBiancoRoyal\u002Fnode-red-contrib-modbus\u002Fblob\u002Fmaster\u002Fexamples\u002F02-Getting-Started-Client-And-Server.json","https:\u002F\u002Fraw.githubusercontent.com\u002FBiancoRoyal\u002Fnode-red-contrib-modbus\u002Fmaster\u002Fexamples\u002F02-Getting-Started-Client-And-Server.json","[{\"id\":\"480586da362f4718\",\"type\":\"tab\",\"label\":\"02 Getting Started\",\"disabled\":false,\"info\":\"GETTING STARTED: first TCP client + server + poll\\n\\nFEATURES IN THIS FLOW\\n- Modbus-Server as local demo slave\\n- Modbus-Client (TCP) as shared connection config\\n- Modbus-Read polling Holding Registers (FC3)\\n- Modbus-Response showing live register values on node status\\n\\nWHAT THE CONFIG DOES\\n- Server serverPort 10503 → TCP listen port\\n- Client tcpPort 10503 → must match server\\n- Read rate\u002FrateUnit → poll interval (here 1 s)\\n- delayOnStart \u002F startDelayTime → wait before first poll after deploy\\n- useIOFile=false → raw numeric payload (no named IO mapping)\\n\\nHOW TO RUN\\n1) Deploy this tab alone (or keep ports unique vs other examples)\\n2) Wait until Modbus-Client shows active \u002F reading\\n3) Watch Modbus-Response status for Holding Register values\\n\\nDemo TCP port: 10503\\n\\nConfig nodes are flow-scoped: delete this tab to remove client\u002FIO config.\"},{\"id\":\"b046c092a1b341aa\",\"type\":\"comment\",\"z\":\"480586da362f4718\",\"name\":\"GETTING STARTED: first TCP client + server + poll\",\"info\":\"GETTING STARTED: first TCP client + server + poll\\n\\nFEATURES IN THIS FLOW\\n- Modbus-Server as local demo slave\\n- Modbus-Client (TCP) as shared connection config\\n- Modbus-Read polling Holding Registers (FC3)\\n- Modbus-Response showing live register values on node status\\n\\nWHAT THE CONFIG DOES\\n- Server serverPort 10503 → TCP listen port\\n- Client tcpPort 10503 → must match server\\n- Read rate\u002FrateUnit → poll interval (here 1 s)\\n- delayOnStart \u002F startDelayTime → wait before first poll after deploy\\n- useIOFile=false → raw numeric payload (no named IO mapping)\\n\\nHOW TO RUN\\n1) Deploy this tab alone (or keep ports unique vs other examples)\\n2) Wait until Modbus-Client shows active \u002F reading\\n3) Watch Modbus-Response status for Holding Register values\\n\\nDemo TCP port: 10503\\n\\nConfig nodes are flow-scoped: delete this tab to remove client\u002FIO config.\",\"x\":200,\"y\":40,\"wires\":[]},{\"id\":\"df52903496024f43\",\"type\":\"modbus-server\",\"z\":\"480586da362f4718\",\"name\":\"Demo Server\",\"logEnabled\":false,\"hostname\":\"127.0.0.1\",\"serverPort\":\"10503\",\"responseDelay\":100,\"delayUnit\":\"ms\",\"coilsBufferSize\":10000,\"holdingBufferSize\":10000,\"inputBufferSize\":10000,\"discreteBufferSize\":10000,\"showErrors\":false,\"showStatusActivities\":false,\"x\":140,\"y\":200,\"wires\":[[],[],[],[],[]]},{\"id\":\"0720181e3eea43a2\",\"type\":\"modbus-client\",\"z\":\"480586da362f4718\",\"name\":\"Demo Client\",\"clienttype\":\"tcp\",\"bufferCommands\":true,\"stateLogEnabled\":false,\"queueLogEnabled\":false,\"failureLogEnabled\":true,\"tcpHost\":\"127.0.0.1\",\"tcpPort\":\"10503\",\"tcpType\":\"DEFAULT\",\"serialPort\":\"\u002Fdev\u002FttyUSB0\",\"serialType\":\"RTU-BUFFERD\",\"serialBaudrate\":\"9600\",\"serialDatabits\":\"8\",\"serialStopbits\":\"1\",\"serialParity\":\"none\",\"serialConnectionDelay\":\"100\",\"serialAsciiResponseStartDelimiter\":\"0x3A\",\"unit_id\":\"1\",\"commandDelay\":\"1\",\"clientTimeout\":\"1000\",\"reconnectOnTimeout\":true,\"reconnectTimeout\":\"2000\",\"parallelUnitIdsAllowed\":true},{\"id\":\"1a1048f67a614452\",\"type\":\"modbus-read\",\"z\":\"480586da362f4718\",\"name\":\"Read HR\",\"topic\":\"hr\",\"showStatusActivities\":true,\"logIOActivities\":false,\"showErrors\":true,\"showWarnings\":true,\"unitid\":\"1\",\"dataType\":\"HoldingRegister\",\"adr\":\"0\",\"quantity\":\"4\",\"rate\":\"1\",\"rateUnit\":\"s\",\"delayOnStart\":true,\"startDelayTime\":\"1\",\"server\":\"0720181e3eea43a2\",\"useIOFile\":false,\"ioFile\":\"\",\"useIOForPayload\":false,\"emptyMsgOnFail\":false,\"keepMsgProperties\":false,\"x\":380,\"y\":280,\"wires\":[[\"39c314d5aecd416b\"],[\"51a77ac2c1a14610\"]]},{\"id\":\"51a77ac2c1a14610\",\"type\":\"modbus-response\",\"z\":\"480586da362f4718\",\"name\":\"\",\"registerShowMax\":20,\"x\":600,\"y\":360,\"wires\":[]},{\"id\":\"39c314d5aecd416b\",\"type\":\"debug\",\"z\":\"480586da362f4718\",\"name\":\"SEE: Read HR\",\"active\":true,\"tosidebar\":true,\"console\":false,\"tostatus\":false,\"complete\":\"payload\",\"x\":600,\"y\":200,\"wires\":[]}]",{"name":261,"path":262,"url":263,"downloadUrl":264,"flow":265},"03-Node-Read-Polling","examples\u002F03-Node-Read-Polling.json","https:\u002F\u002Fgithub.com\u002FBiancoRoyal\u002Fnode-red-contrib-modbus\u002Fblob\u002Fmaster\u002Fexamples\u002F03-Node-Read-Polling.json","https:\u002F\u002Fraw.githubusercontent.com\u002FBiancoRoyal\u002Fnode-red-contrib-modbus\u002Fmaster\u002Fexamples\u002F03-Node-Read-Polling.json","[{\"id\":\"2841c86060174570\",\"type\":\"tab\",\"label\":\"03 Modbus-Read\",\"disabled\":false,\"info\":\"NODE: Modbus-Read (interval polling)\\n\\nFEATURES IN THIS FLOW\\n- Periodic FC1–4 reads without an inject input\\n- Two readers: Holding Registers (FC3) and Coils (FC1)\\n- Dedicated Modbus-Response per reader\\n\\nWHAT THE CONFIG DOES\\n- dataType → Coil \u002F DiscreteInput \u002F HoldingRegister \u002F InputRegister (FC1–4)\\n- adr + quantity → start address and count (0-based)\\n- rate + rateUnit → poll interval\\n- delayOnStart → avoid racing the server right after deploy\\n- unitid → override Unit ID for this node (blank = client default)\\n- showStatusActivities \u002F showErrors \u002F showWarnings → UI + logging\\n\\nHOW TO RUN\\n1) Deploy and wait ~1–2 s\\n2) Compare FC3 vs FC1 Modbus-Response status panes\\n3) Change quantity or rate and redeploy to see the effect\\n\\nDemo TCP port: 10504\\n\\nConfig nodes are flow-scoped: delete this tab to remove client\u002FIO config.\"},{\"id\":\"0d7b9f85d99d468f\",\"type\":\"comment\",\"z\":\"2841c86060174570\",\"name\":\"NODE: Modbus-Read (interval polling)\",\"info\":\"NODE: Modbus-Read (interval polling)\\n\\nFEATURES IN THIS FLOW\\n- Periodic FC1–4 reads without an inject input\\n- Two readers: Holding Registers (FC3) and Coils (FC1)\\n- Dedicated Modbus-Response per reader\\n\\nWHAT THE CONFIG DOES\\n- dataType → Coil \u002F DiscreteInput \u002F HoldingRegister \u002F InputRegister (FC1–4)\\n- adr + quantity → start address and count (0-based)\\n- rate + rateUnit → poll interval\\n- delayOnStart → avoid racing the server right after deploy\\n- unitid → override Unit ID for this node (blank = client default)\\n- showStatusActivities \u002F showErrors \u002F showWarnings → UI + logging\\n\\nHOW TO RUN\\n1) Deploy and wait ~1–2 s\\n2) Compare FC3 vs FC1 Modbus-Response status panes\\n3) Change quantity or rate and redeploy to see the effect\\n\\nDemo TCP port: 10504\\n\\nConfig nodes are flow-scoped: delete this tab to remove client\u002FIO config.\",\"x\":200,\"y\":40,\"wires\":[]},{\"id\":\"b609aa3b9d704f56\",\"type\":\"modbus-server\",\"z\":\"2841c86060174570\",\"name\":\"\",\"logEnabled\":false,\"hostname\":\"127.0.0.1\",\"serverPort\":\"10504\",\"responseDelay\":100,\"delayUnit\":\"ms\",\"coilsBufferSize\":10000,\"holdingBufferSize\":10000,\"inputBufferSize\":10000,\"discreteBufferSize\":10000,\"showErrors\":false,\"showStatusActivities\":false,\"x\":120,\"y\":200,\"wires\":[[],[],[],[],[]]},{\"id\":\"3f6ae42943874541\",\"type\":\"modbus-client\",\"z\":\"2841c86060174570\",\"name\":\"Read Client\",\"clienttype\":\"tcp\",\"bufferCommands\":true,\"stateLogEnabled\":false,\"queueLogEnabled\":false,\"failureLogEnabled\":true,\"tcpHost\":\"127.0.0.1\",\"tcpPort\":\"10504\",\"tcpType\":\"DEFAULT\",\"serialPort\":\"\u002Fdev\u002FttyUSB0\",\"serialType\":\"RTU-BUFFERD\",\"serialBaudrate\":\"9600\",\"serialDatabits\":\"8\",\"serialStopbits\":\"1\",\"serialParity\":\"none\",\"serialConnectionDelay\":\"100\",\"serialAsciiResponseStartDelimiter\":\"0x3A\",\"unit_id\":\"1\",\"commandDelay\":\"1\",\"clientTimeout\":\"1000\",\"reconnectOnTimeout\":true,\"reconnectTimeout\":\"2000\",\"parallelUnitIdsAllowed\":true},{\"id\":\"6e79b816403c4a02\",\"type\":\"modbus-read\",\"z\":\"2841c86060174570\",\"name\":\"FC3 Holding\",\"topic\":\"\",\"showStatusActivities\":true,\"logIOActivities\":false,\"showErrors\":true,\"showWarnings\":true,\"unitid\":\"1\",\"dataType\":\"HoldingRegister\",\"adr\":\"0\",\"quantity\":\"4\",\"rate\":\"1\",\"rateUnit\":\"s\",\"delayOnStart\":true,\"startDelayTime\":\"1\",\"server\":\"3f6ae42943874541\",\"useIOFile\":false,\"ioFile\":\"\",\"useIOForPayload\":false,\"emptyMsgOnFail\":false,\"keepMsgProperties\":false,\"x\":360,\"y\":260,\"wires\":[[\"6d8c6acb1cd540df\"],[\"668e00180c5d4eed\"]]},{\"id\":\"2639362baaad4770\",\"type\":\"modbus-read\",\"z\":\"2841c86060174570\",\"name\":\"FC1 Coils\",\"topic\":\"\",\"showStatusActivities\":true,\"logIOActivities\":false,\"showErrors\":true,\"showWarnings\":true,\"unitid\":\"1\",\"dataType\":\"Coil\",\"adr\":\"0\",\"quantity\":\"8\",\"rate\":\"2\",\"rateUnit\":\"s\",\"delayOnStart\":true,\"startDelayTime\":\"1\",\"server\":\"3f6ae42943874541\",\"useIOFile\":false,\"ioFile\":\"\",\"useIOForPayload\":false,\"emptyMsgOnFail\":false,\"keepMsgProperties\":false,\"x\":360,\"y\":380,\"wires\":[[\"be842905c7f04c07\"],[\"54c8735a533e47e5\"]]},{\"id\":\"668e00180c5d4eed\",\"type\":\"modbus-response\",\"z\":\"2841c86060174570\",\"name\":\"FC3 response\",\"registerShowMax\":20,\"x\":600,\"y\":340,\"wires\":[]},{\"id\":\"54c8735a533e47e5\",\"type\":\"modbus-response\",\"z\":\"2841c86060174570\",\"name\":\"FC1 response\",\"registerShowMax\":20,\"x\":600,\"y\":460,\"wires\":[]},{\"id\":\"6d8c6acb1cd540df\",\"type\":\"debug\",\"z\":\"2841c86060174570\",\"name\":\"SEE: FC3 Holding\",\"active\":true,\"tosidebar\":true,\"console\":false,\"tostatus\":false,\"complete\":\"payload\",\"x\":600,\"y\":180,\"wires\":[]},{\"id\":\"be842905c7f04c07\",\"type\":\"debug\",\"z\":\"2841c86060174570\",\"name\":\"SEE: FC1 Coils\",\"active\":true,\"tosidebar\":true,\"console\":false,\"tostatus\":false,\"complete\":\"payload\",\"x\":600,\"y\":300,\"wires\":[]}]",{"name":267,"path":268,"url":269,"downloadUrl":270,"flow":271},"04-Node-Getter-On-Demand","examples\u002F04-Node-Getter-On-Demand.json","https:\u002F\u002Fgithub.com\u002FBiancoRoyal\u002Fnode-red-contrib-modbus\u002Fblob\u002Fmaster\u002Fexamples\u002F04-Node-Getter-On-Demand.json","https:\u002F\u002Fraw.githubusercontent.com\u002FBiancoRoyal\u002Fnode-red-contrib-modbus\u002Fmaster\u002Fexamples\u002F04-Node-Getter-On-Demand.json","[{\"id\":\"27714930a03e47b5\",\"type\":\"tab\",\"label\":\"04 Modbus-Getter\",\"disabled\":false,\"info\":\"NODE: Modbus-Getter (on-demand read)\\n\\nFEATURES IN THIS FLOW\\n- FC1–4 read only when an input message arrives\\n- Address \u002F quantity fixed in the node editor (not in msg.payload)\\n- Useful for HTTP triggers, UI buttons, and event-driven flows\\n\\nWHAT THE CONFIG DOES\\n- dataType \u002F adr \u002F quantity \u002F unitid → same meaning as Modbus-Read\\n- No rate field → timing comes from upstream inject \u002F HTTP \u002F etc.\\n- emptyMsgOnFail → optional empty message on error\\n- keepMsgProperties → keep topic and other msg fields through the read\\n\\nHOW TO RUN\\n1) Deploy\\n2) Click Trigger read\\n3) Inspect Modbus-Response and optional Debug on output 1\\n\\nDemo TCP port: 10505\\n\\nConfig nodes are flow-scoped: delete this tab to remove client\u002FIO config.\"},{\"id\":\"40c5e5b221a041dc\",\"type\":\"comment\",\"z\":\"27714930a03e47b5\",\"name\":\"NODE: Modbus-Getter (on-demand read)\",\"info\":\"NODE: Modbus-Getter (on-demand read)\\n\\nFEATURES IN THIS FLOW\\n- FC1–4 read only when an input message arrives\\n- Address \u002F quantity fixed in the node editor (not in msg.payload)\\n- Useful for HTTP triggers, UI buttons, and event-driven flows\\n\\nWHAT THE CONFIG DOES\\n- dataType \u002F adr \u002F quantity \u002F unitid → same meaning as Modbus-Read\\n- No rate field → timing comes from upstream inject \u002F HTTP \u002F etc.\\n- emptyMsgOnFail → optional empty message on error\\n- keepMsgProperties → keep topic and other msg fields through the read\\n\\nHOW TO RUN\\n1) Deploy\\n2) Click Trigger read\\n3) Inspect Modbus-Response and optional Debug on output 1\\n\\nDemo TCP port: 10505\\n\\nConfig nodes are flow-scoped: delete this tab to remove client\u002FIO config.\",\"x\":200,\"y\":40,\"wires\":[]},{\"id\":\"890cfd6ff52c4996\",\"type\":\"modbus-server\",\"z\":\"27714930a03e47b5\",\"name\":\"\",\"logEnabled\":false,\"hostname\":\"127.0.0.1\",\"serverPort\":\"10505\",\"responseDelay\":100,\"delayUnit\":\"ms\",\"coilsBufferSize\":10000,\"holdingBufferSize\":10000,\"inputBufferSize\":10000,\"discreteBufferSize\":10000,\"showErrors\":false,\"showStatusActivities\":false,\"x\":120,\"y\":200,\"wires\":[[],[],[],[],[]]},{\"id\":\"e4c7486c46b14064\",\"type\":\"modbus-client\",\"z\":\"27714930a03e47b5\",\"name\":\"Getter Client\",\"clienttype\":\"tcp\",\"bufferCommands\":true,\"stateLogEnabled\":false,\"queueLogEnabled\":false,\"failureLogEnabled\":true,\"tcpHost\":\"127.0.0.1\",\"tcpPort\":\"10505\",\"tcpType\":\"DEFAULT\",\"serialPort\":\"\u002Fdev\u002FttyUSB0\",\"serialType\":\"RTU-BUFFERD\",\"serialBaudrate\":\"9600\",\"serialDatabits\":\"8\",\"serialStopbits\":\"1\",\"serialParity\":\"none\",\"serialConnectionDelay\":\"100\",\"serialAsciiResponseStartDelimiter\":\"0x3A\",\"unit_id\":\"1\",\"commandDelay\":\"1\",\"clientTimeout\":\"1000\",\"reconnectOnTimeout\":true,\"reconnectTimeout\":\"2000\",\"parallelUnitIdsAllowed\":true},{\"id\":\"f981f1bc2fda4c85\",\"type\":\"inject\",\"z\":\"27714930a03e47b5\",\"name\":\"Trigger read\",\"props\":[{\"p\":\"payload\"}],\"repeat\":\"\",\"crontab\":\"\",\"once\":false,\"topic\":\"\",\"payload\":\"\",\"payloadType\":\"date\",\"x\":160,\"y\":300,\"wires\":[[\"9c15915104e64a48\"]]},{\"id\":\"9c15915104e64a48\",\"type\":\"modbus-getter\",\"z\":\"27714930a03e47b5\",\"name\":\"Get HR\",\"showStatusActivities\":true,\"showErrors\":true,\"showWarnings\":true,\"logIOActivities\":false,\"unitid\":\"1\",\"dataType\":\"HoldingRegister\",\"adr\":\"0\",\"quantity\":\"4\",\"server\":\"e4c7486c46b14064\",\"useIOFile\":false,\"ioFile\":\"\",\"useIOForPayload\":false,\"emptyMsgOnFail\":false,\"keepMsgProperties\":false,\"x\":380,\"y\":300,\"wires\":[[\"535dbc303d584c34\"],[\"c1a4a79b95fd486c\"]]},{\"id\":\"c1a4a79b95fd486c\",\"type\":\"modbus-response\",\"z\":\"27714930a03e47b5\",\"name\":\"\",\"registerShowMax\":20,\"x\":600,\"y\":380,\"wires\":[]},{\"id\":\"535dbc303d584c34\",\"type\":\"debug\",\"z\":\"27714930a03e47b5\",\"name\":\"SEE: Get HR\",\"active\":true,\"tosidebar\":true,\"console\":false,\"tostatus\":false,\"complete\":\"payload\",\"x\":600,\"y\":220,\"wires\":[]}]",{"name":273,"path":274,"url":275,"downloadUrl":276,"flow":277},"05-Node-Flex-Getter-Dynamic","examples\u002F05-Node-Flex-Getter-Dynamic.json","https:\u002F\u002Fgithub.com\u002FBiancoRoyal\u002Fnode-red-contrib-modbus\u002Fblob\u002Fmaster\u002Fexamples\u002F05-Node-Flex-Getter-Dynamic.json","https:\u002F\u002Fraw.githubusercontent.com\u002FBiancoRoyal\u002Fnode-red-contrib-modbus\u002Fmaster\u002Fexamples\u002F05-Node-Flex-Getter-Dynamic.json","[{\"id\":\"5ef6d0acb55c4f51\",\"type\":\"tab\",\"label\":\"05 Flex-Getter\",\"disabled\":false,\"info\":\"NODE: Modbus-Flex-Getter (dynamic read)\\n\\nFEATURES IN THIS FLOW\\n- FC \u002F address \u002F quantity \u002F unit id come from msg.payload each time\\n- Same node can issue FC3 Holding and FC1 Coils in one flow\\n- Both unitId and unitid accepted (v5.46+)\\n\\nWHAT THE CONFIG DOES\\n- Node editor mainly selects the Modbus-Client\\n- msg.payload shape: { fc, unitid|unitId, address, quantity }\\n- useIOFile \u002F useIOForPayload → optional named IO mapping (see example 11)\\n- keepMsgProperties → correlation fields survive the round-trip\\n\\nHOW TO RUN\\n1) Deploy\\n2) Click FC3 qty 4 → read Holding Registers\\n3) Click FC1 coils → read coils with a different payload\\n4) Edit the Function nodes to change address\u002Fquantity at runtime\\n\\nDemo TCP port: 10506\\n\\nConfig nodes are flow-scoped: delete this tab to remove client\u002FIO config.\"},{\"id\":\"c16a9d3d9a8a4163\",\"type\":\"comment\",\"z\":\"5ef6d0acb55c4f51\",\"name\":\"NODE: Modbus-Flex-Getter (dynamic read)\",\"info\":\"NODE: Modbus-Flex-Getter (dynamic read)\\n\\nFEATURES IN THIS FLOW\\n- FC \u002F address \u002F quantity \u002F unit id come from msg.payload each time\\n- Same node can issue FC3 Holding and FC1 Coils in one flow\\n- Both unitId and unitid accepted (v5.46+)\\n\\nWHAT THE CONFIG DOES\\n- Node editor mainly selects the Modbus-Client\\n- msg.payload shape: { fc, unitid|unitId, address, quantity }\\n- useIOFile \u002F useIOForPayload → optional named IO mapping (see example 11)\\n- keepMsgProperties → correlation fields survive the round-trip\\n\\nHOW TO RUN\\n1) Deploy\\n2) Click FC3 qty 4 → read Holding Registers\\n3) Click FC1 coils → read coils with a different payload\\n4) Edit the Function nodes to change address\u002Fquantity at runtime\\n\\nDemo TCP port: 10506\\n\\nConfig nodes are flow-scoped: delete this tab to remove client\u002FIO config.\",\"x\":200,\"y\":40,\"wires\":[]},{\"id\":\"7339fdea9c4f41fc\",\"type\":\"modbus-server\",\"z\":\"5ef6d0acb55c4f51\",\"name\":\"\",\"logEnabled\":false,\"hostname\":\"127.0.0.1\",\"serverPort\":\"10506\",\"responseDelay\":100,\"delayUnit\":\"ms\",\"coilsBufferSize\":10000,\"holdingBufferSize\":10000,\"inputBufferSize\":10000,\"discreteBufferSize\":10000,\"showErrors\":false,\"showStatusActivities\":false,\"x\":120,\"y\":200,\"wires\":[[],[],[],[],[]]},{\"id\":\"82db8f537efe4835\",\"type\":\"modbus-client\",\"z\":\"5ef6d0acb55c4f51\",\"name\":\"Flex-Getter Client\",\"clienttype\":\"tcp\",\"bufferCommands\":true,\"stateLogEnabled\":false,\"queueLogEnabled\":false,\"failureLogEnabled\":true,\"tcpHost\":\"127.0.0.1\",\"tcpPort\":\"10506\",\"tcpType\":\"DEFAULT\",\"serialPort\":\"\u002Fdev\u002FttyUSB0\",\"serialType\":\"RTU-BUFFERD\",\"serialBaudrate\":\"9600\",\"serialDatabits\":\"8\",\"serialStopbits\":\"1\",\"serialParity\":\"none\",\"serialConnectionDelay\":\"100\",\"serialAsciiResponseStartDelimiter\":\"0x3A\",\"unit_id\":\"1\",\"commandDelay\":\"1\",\"clientTimeout\":\"1000\",\"reconnectOnTimeout\":true,\"reconnectTimeout\":\"2000\",\"parallelUnitIdsAllowed\":true},{\"id\":\"52b6fbead2224817\",\"type\":\"inject\",\"z\":\"5ef6d0acb55c4f51\",\"name\":\"FC3 qty 4\",\"props\":[{\"p\":\"payload\"}],\"repeat\":\"\",\"crontab\":\"\",\"once\":false,\"topic\":\"\",\"payload\":\"\",\"payloadType\":\"date\",\"x\":150,\"y\":280,\"wires\":[[\"7cdbf40696374605\"]]},{\"id\":\"7cdbf40696374605\",\"type\":\"function\",\"z\":\"5ef6d0acb55c4f51\",\"name\":\"Build FC3\",\"func\":\"msg.payload = { fc: 3, unitid: 1, address: 0, quantity: 4 };\\nreturn msg;\",\"outputs\":1,\"noerr\":0,\"x\":340,\"y\":280,\"wires\":[[\"1a5992e4573c4e3b\"]]},{\"id\":\"47a676ea403f4ffb\",\"type\":\"inject\",\"z\":\"5ef6d0acb55c4f51\",\"name\":\"FC1 coils\",\"props\":[{\"p\":\"payload\"}],\"repeat\":\"\",\"crontab\":\"\",\"once\":false,\"topic\":\"\",\"payload\":\"\",\"payloadType\":\"date\",\"x\":150,\"y\":360,\"wires\":[[\"492ca89a37f04f63\"]]},{\"id\":\"492ca89a37f04f63\",\"type\":\"function\",\"z\":\"5ef6d0acb55c4f51\",\"name\":\"Build FC1\",\"func\":\"msg.payload = { fc: 1, unitid: 1, address: 0, quantity: 8 };\\nreturn msg;\",\"outputs\":1,\"noerr\":0,\"x\":340,\"y\":360,\"wires\":[[\"1a5992e4573c4e3b\"]]},{\"id\":\"1a5992e4573c4e3b\",\"type\":\"modbus-flex-getter\",\"z\":\"5ef6d0acb55c4f51\",\"name\":\"\",\"showStatusActivities\":true,\"showErrors\":true,\"showWarnings\":true,\"logIOActivities\":false,\"server\":\"82db8f537efe4835\",\"useIOFile\":false,\"ioFile\":\"\",\"useIOForPayload\":false,\"emptyMsgOnFail\":false,\"keepMsgProperties\":true,\"delayOnStart\":false,\"startDelayTime\":\"\",\"x\":560,\"y\":320,\"wires\":[[\"8b89ca3abbdd4174\"],[\"e3e08b5db2ad4445\"]]},{\"id\":\"e3e08b5db2ad4445\",\"type\":\"modbus-response\",\"z\":\"5ef6d0acb55c4f51\",\"name\":\"\",\"registerShowMax\":20,\"x\":780,\"y\":400,\"wires\":[]},{\"id\":\"8b89ca3abbdd4174\",\"type\":\"debug\",\"z\":\"5ef6d0acb55c4f51\",\"name\":\"SEE: modbus-flex-getter\",\"active\":true,\"tosidebar\":true,\"console\":false,\"tostatus\":false,\"complete\":\"payload\",\"x\":780,\"y\":240,\"wires\":[]}]",{"name":279,"path":280,"url":281,"downloadUrl":282,"flow":283},"06-Node-Write-And-Flex-Write","examples\u002F06-Node-Write-And-Flex-Write.json","https:\u002F\u002Fgithub.com\u002FBiancoRoyal\u002Fnode-red-contrib-modbus\u002Fblob\u002Fmaster\u002Fexamples\u002F06-Node-Write-And-Flex-Write.json","https:\u002F\u002Fraw.githubusercontent.com\u002FBiancoRoyal\u002Fnode-red-contrib-modbus\u002Fmaster\u002Fexamples\u002F06-Node-Write-And-Flex-Write.json","[{\"id\":\"ea89253899964d7f\",\"type\":\"tab\",\"label\":\"06 Write \u002F Flex-Write\",\"disabled\":false,\"info\":\"NODE: Modbus-Write and Modbus-Flex-Write\\n\\nFEATURES IN THIS FLOW\\n- Modbus-Write: fixed FC in editor; msg.payload is the value\\n- Modbus-Flex-Write: FC\u002Faddress\u002Fquantity\u002Fvalue all from msg.payload\\n- Separate Modbus-Response per writer\\n\\nWHAT THE CONFIG DOES\\n- Write dataType HoldingRegister + quantity 1 → FC6 single register\\n- Write Coil \u002F multiple → FC5 \u002F FC15 (payload bool or array)\\n- Flex-Write payload: { value, fc, unitid, address, quantity }\\n- FC16 with quantity 1 needs value: [n] (array), not a bare number\\n- emptyMsgOnFail \u002F keepMsgProperties → error and correlation behaviour\\n\\nHOW TO RUN\\n1) Deploy\\n2) Click Write 7 (FC6) → single Holding Register 0 = 7\\n3) Click Flex FC16 → writes [10,20,30] starting at address 0\\n4) Read back with example 03\u002F05 or watch Response status\\n\\nDemo TCP port: 10507\\n\\nConfig nodes are flow-scoped: delete this tab to remove client\u002FIO config.\"},{\"id\":\"67616c497afb4527\",\"type\":\"comment\",\"z\":\"ea89253899964d7f\",\"name\":\"NODE: Modbus-Write and Modbus-Flex-Write\",\"info\":\"NODE: Modbus-Write and Modbus-Flex-Write\\n\\nFEATURES IN THIS FLOW\\n- Modbus-Write: fixed FC in editor; msg.payload is the value\\n- Modbus-Flex-Write: FC\u002Faddress\u002Fquantity\u002Fvalue all from msg.payload\\n- Separate Modbus-Response per writer\\n\\nWHAT THE CONFIG DOES\\n- Write dataType HoldingRegister + quantity 1 → FC6 single register\\n- Write Coil \u002F multiple → FC5 \u002F FC15 (payload bool or array)\\n- Flex-Write payload: { value, fc, unitid, address, quantity }\\n- FC16 with quantity 1 needs value: [n] (array), not a bare number\\n- emptyMsgOnFail \u002F keepMsgProperties → error and correlation behaviour\\n\\nHOW TO RUN\\n1) Deploy\\n2) Click Write 7 (FC6) → single Holding Register 0 = 7\\n3) Click Flex FC16 → writes [10,20,30] starting at address 0\\n4) Read back with example 03\u002F05 or watch Response status\\n\\nDemo TCP port: 10507\\n\\nConfig nodes are flow-scoped: delete this tab to remove client\u002FIO config.\",\"x\":200,\"y\":40,\"wires\":[]},{\"id\":\"7ff07f1e0158433f\",\"type\":\"modbus-server\",\"z\":\"ea89253899964d7f\",\"name\":\"\",\"logEnabled\":false,\"hostname\":\"127.0.0.1\",\"serverPort\":\"10507\",\"responseDelay\":100,\"delayUnit\":\"ms\",\"coilsBufferSize\":10000,\"holdingBufferSize\":10000,\"inputBufferSize\":10000,\"discreteBufferSize\":10000,\"showErrors\":false,\"showStatusActivities\":false,\"x\":120,\"y\":200,\"wires\":[[],[],[],[],[]]},{\"id\":\"f212152e4e1844b5\",\"type\":\"modbus-client\",\"z\":\"ea89253899964d7f\",\"name\":\"Write Client\",\"clienttype\":\"tcp\",\"bufferCommands\":true,\"stateLogEnabled\":false,\"queueLogEnabled\":false,\"failureLogEnabled\":true,\"tcpHost\":\"127.0.0.1\",\"tcpPort\":\"10507\",\"tcpType\":\"DEFAULT\",\"serialPort\":\"\u002Fdev\u002FttyUSB0\",\"serialType\":\"RTU-BUFFERD\",\"serialBaudrate\":\"9600\",\"serialDatabits\":\"8\",\"serialStopbits\":\"1\",\"serialParity\":\"none\",\"serialConnectionDelay\":\"100\",\"serialAsciiResponseStartDelimiter\":\"0x3A\",\"unit_id\":\"1\",\"commandDelay\":\"1\",\"clientTimeout\":\"1000\",\"reconnectOnTimeout\":true,\"reconnectTimeout\":\"2000\",\"parallelUnitIdsAllowed\":true},{\"id\":\"868b2171f85542ec\",\"type\":\"inject\",\"z\":\"ea89253899964d7f\",\"name\":\"Write 7 (FC6)\",\"props\":[{\"p\":\"payload\"}],\"repeat\":\"\",\"crontab\":\"\",\"once\":false,\"topic\":\"\",\"payload\":\"7\",\"payloadType\":\"num\",\"x\":160,\"y\":280,\"wires\":[[\"51122c3b12aa4511\"]]},{\"id\":\"51122c3b12aa4511\",\"type\":\"modbus-write\",\"z\":\"ea89253899964d7f\",\"name\":\"FC6\",\"showStatusActivities\":true,\"showErrors\":true,\"showWarnings\":true,\"unitid\":\"1\",\"dataType\":\"HoldingRegister\",\"adr\":\"0\",\"quantity\":\"1\",\"server\":\"f212152e4e1844b5\",\"emptyMsgOnFail\":false,\"keepMsgProperties\":false,\"x\":380,\"y\":280,\"wires\":[[\"86377816ef7e4cdc\"],[\"ffde29eb88ce4b8d\"]]},{\"id\":\"560b000e60e04a51\",\"type\":\"inject\",\"z\":\"ea89253899964d7f\",\"name\":\"Flex FC16\",\"props\":[{\"p\":\"payload\"}],\"repeat\":\"\",\"crontab\":\"\",\"once\":false,\"topic\":\"\",\"payload\":\"\",\"payloadType\":\"date\",\"x\":150,\"y\":400,\"wires\":[[\"6e63eafe7d334dc2\"]]},{\"id\":\"6e63eafe7d334dc2\",\"type\":\"function\",\"z\":\"ea89253899964d7f\",\"name\":\"Build FC16\",\"func\":\"msg.payload = { value: [10, 20, 30], fc: 16, unitid: 1, address: 0, quantity: 3 };\\nreturn msg;\",\"outputs\":1,\"noerr\":0,\"x\":360,\"y\":400,\"wires\":[[\"34278cb39a864a75\"]]},{\"id\":\"34278cb39a864a75\",\"type\":\"modbus-flex-write\",\"z\":\"ea89253899964d7f\",\"name\":\"\",\"showStatusActivities\":true,\"showErrors\":true,\"showWarnings\":true,\"server\":\"f212152e4e1844b5\",\"emptyMsgOnFail\":false,\"keepMsgProperties\":true,\"x\":580,\"y\":400,\"wires\":[[\"f546251768ce4539\"],[\"8418b22518c04e5c\"]]},{\"id\":\"ffde29eb88ce4b8d\",\"type\":\"modbus-response\",\"z\":\"ea89253899964d7f\",\"name\":\"FC6 response\",\"registerShowMax\":20,\"x\":640,\"y\":360,\"wires\":[]},{\"id\":\"8418b22518c04e5c\",\"type\":\"modbus-response\",\"z\":\"ea89253899964d7f\",\"name\":\"FC16 response\",\"registerShowMax\":20,\"x\":800,\"y\":480,\"wires\":[]},{\"id\":\"86377816ef7e4cdc\",\"type\":\"debug\",\"z\":\"ea89253899964d7f\",\"name\":\"SEE: FC6\",\"active\":true,\"tosidebar\":true,\"console\":false,\"tostatus\":false,\"complete\":\"payload\",\"x\":640,\"y\":200,\"wires\":[]},{\"id\":\"f546251768ce4539\",\"type\":\"debug\",\"z\":\"ea89253899964d7f\",\"name\":\"SEE: modbus-flex-write\",\"active\":true,\"tosidebar\":true,\"console\":false,\"tostatus\":false,\"complete\":\"payload\",\"x\":800,\"y\":320,\"wires\":[]}]",{"name":285,"path":286,"url":287,"downloadUrl":288,"flow":289},"07-Node-Flex-Sequencer","examples\u002F07-Node-Flex-Sequencer.json","https:\u002F\u002Fgithub.com\u002FBiancoRoyal\u002Fnode-red-contrib-modbus\u002Fblob\u002Fmaster\u002Fexamples\u002F07-Node-Flex-Sequencer.json","https:\u002F\u002Fraw.githubusercontent.com\u002FBiancoRoyal\u002Fnode-red-contrib-modbus\u002Fmaster\u002Fexamples\u002F07-Node-Flex-Sequencer.json","[{\"id\":\"d171804261214cd3\",\"type\":\"tab\",\"label\":\"07 Flex-Sequencer\",\"disabled\":false,\"info\":\"NODE: Modbus-Flex-Sequencer\\n\\nFEATURES IN THIS FLOW\\n- Runs an ordered list of FC1–4 reads on each trigger\\n- Useful for multi-range polls without wiring many Read nodes\\n\\nWHAT THE CONFIG DOES\\n- sequences (editor) → list of {fc, unitid, address, quantity}\\n- delayOnStart → wait before accepting first trigger after deploy\\n- emptyMsgOnFail \u002F keepMsgProperties → failure and correlation behaviour\\n- Client Queue Commands → recommended when sequences are long\\n\\nHOW TO RUN\\n1) Deploy\\n2) Click Run sequence\\n3) Inspect Modbus-Response for each step's results on the outputs\\n4) Edit the sequence in the node to add another address range\\n\\nDemo TCP port: 10508\\n\\nConfig nodes are flow-scoped: delete this tab to remove client\u002FIO config.\"},{\"id\":\"cbac906c7b8f49f3\",\"type\":\"comment\",\"z\":\"d171804261214cd3\",\"name\":\"NODE: Modbus-Flex-Sequencer\",\"info\":\"NODE: Modbus-Flex-Sequencer\\n\\nFEATURES IN THIS FLOW\\n- Runs an ordered list of FC1–4 reads on each trigger\\n- Useful for multi-range polls without wiring many Read nodes\\n\\nWHAT THE CONFIG DOES\\n- sequences (editor) → list of {fc, unitid, address, quantity}\\n- delayOnStart → wait before accepting first trigger after deploy\\n- emptyMsgOnFail \u002F keepMsgProperties → failure and correlation behaviour\\n- Client Queue Commands → recommended when sequences are long\\n\\nHOW TO RUN\\n1) Deploy\\n2) Click Run sequence\\n3) Inspect Modbus-Response for each step's results on the outputs\\n4) Edit the sequence in the node to add another address range\\n\\nDemo TCP port: 10508\\n\\nConfig nodes are flow-scoped: delete this tab to remove client\u002FIO config.\",\"x\":200,\"y\":40,\"wires\":[]},{\"id\":\"0a151c2f30e4434a\",\"type\":\"modbus-server\",\"z\":\"d171804261214cd3\",\"name\":\"\",\"logEnabled\":false,\"hostname\":\"127.0.0.1\",\"serverPort\":\"10508\",\"responseDelay\":100,\"delayUnit\":\"ms\",\"coilsBufferSize\":10000,\"holdingBufferSize\":10000,\"inputBufferSize\":10000,\"discreteBufferSize\":10000,\"showErrors\":false,\"showStatusActivities\":false,\"x\":120,\"y\":200,\"wires\":[[],[],[],[],[]]},{\"id\":\"3f609a138d13456b\",\"type\":\"modbus-client\",\"z\":\"d171804261214cd3\",\"name\":\"Sequencer Client\",\"clienttype\":\"tcp\",\"bufferCommands\":true,\"stateLogEnabled\":false,\"queueLogEnabled\":false,\"failureLogEnabled\":true,\"tcpHost\":\"127.0.0.1\",\"tcpPort\":\"10508\",\"tcpType\":\"DEFAULT\",\"serialPort\":\"\u002Fdev\u002FttyUSB0\",\"serialType\":\"RTU-BUFFERD\",\"serialBaudrate\":\"9600\",\"serialDatabits\":\"8\",\"serialStopbits\":\"1\",\"serialParity\":\"none\",\"serialConnectionDelay\":\"100\",\"serialAsciiResponseStartDelimiter\":\"0x3A\",\"unit_id\":\"1\",\"commandDelay\":\"1\",\"clientTimeout\":\"1000\",\"reconnectOnTimeout\":true,\"reconnectTimeout\":\"2000\",\"parallelUnitIdsAllowed\":true},{\"id\":\"ed00384b0f934ce4\",\"type\":\"inject\",\"z\":\"d171804261214cd3\",\"name\":\"Run sequence\",\"props\":[{\"p\":\"payload\"}],\"repeat\":\"5\",\"crontab\":\"\",\"once\":true,\"onceDelay\":1,\"topic\":\"\",\"payload\":\"\",\"payloadType\":\"date\",\"x\":180,\"y\":300,\"wires\":[[\"4362d6e7aaa04517\"]]},{\"id\":\"4362d6e7aaa04517\",\"type\":\"modbus-flex-sequencer\",\"z\":\"d171804261214cd3\",\"name\":\"\",\"sequences\":[{\"name\":\"coils\",\"unitid\":\"1\",\"fc\":\"FC1\",\"address\":\"0\",\"quantity\":\"4\"},{\"name\":\"holding\",\"unitid\":\"1\",\"fc\":\"FC3\",\"address\":\"0\",\"quantity\":\"4\"},{\"name\":\"input\",\"unitid\":\"1\",\"fc\":\"FC4\",\"address\":\"0\",\"quantity\":\"2\"}],\"server\":\"3f609a138d13456b\",\"showStatusActivities\":true,\"showErrors\":true,\"showWarnings\":true,\"logIOActivities\":false,\"useIOFile\":false,\"ioFile\":\"\",\"useIOForPayload\":false,\"emptyMsgOnFail\":true,\"keepMsgProperties\":true,\"delayOnStart\":true,\"startDelayTime\":\"1\",\"x\":420,\"y\":300,\"wires\":[[\"59620ba89f894683\"],[\"59a2ba4a28204a36\"]]},{\"id\":\"59a2ba4a28204a36\",\"type\":\"modbus-response\",\"z\":\"d171804261214cd3\",\"name\":\"\",\"registerShowMax\":20,\"x\":660,\"y\":380,\"wires\":[]},{\"id\":\"59620ba89f894683\",\"type\":\"debug\",\"z\":\"d171804261214cd3\",\"name\":\"SEE: modbus-flex-sequencer\",\"active\":true,\"tosidebar\":true,\"console\":false,\"tostatus\":false,\"complete\":\"payload\",\"x\":660,\"y\":220,\"wires\":[]}]",{"name":291,"path":292,"url":293,"downloadUrl":294,"flow":295},"08-Node-Flex-FC-Custom-Maps","examples\u002F08-Node-Flex-FC-Custom-Maps.json","https:\u002F\u002Fgithub.com\u002FBiancoRoyal\u002Fnode-red-contrib-modbus\u002Fblob\u002Fmaster\u002Fexamples\u002F08-Node-Flex-FC-Custom-Maps.json","https:\u002F\u002Fraw.githubusercontent.com\u002FBiancoRoyal\u002Fnode-red-contrib-modbus\u002Fmaster\u002Fexamples\u002F08-Node-Flex-FC-Custom-Maps.json","[{\"id\":\"42b4b17f06604c17\",\"type\":\"tab\",\"label\":\"08 Flex-FC\",\"disabled\":false,\"info\":\"NODE: Modbus-Flex-FC (custom \u002F mapped function codes)\\n\\nFEATURES IN THIS FLOW\\n- Build non-default or vendor FC request\u002Fresponse layouts\\n- Argument maps loaded from extras\u002FargumentMaps\u002F\\n- requestCard \u002F responseCard define field offsets and types\\n\\nWHAT THE CONFIG DOES\\n- mapPath → folder with FC map JSON (defaults shipped in package)\\n- selectedFc → which map entry to use\\n- requestCard fields → values sent in the PDU\\n- responseCard fields → how the reply buffer is decoded\\n- If relative mapPath fails, set absolute path under node_modules\u002F…\u002Fextras\u002FargumentMaps\u002F\\n\\nHOW TO RUN\\n1) Deploy (ensure mapPath resolves — see ArgumentMaps.md)\\n2) Click Trigger FC map\\n3) Inspect Modbus-Response \u002F msg for decoded fields\\n4) Open extras\u002FargumentMaps\u002FArgumentMaps.md to add your own map\\n\\nDemo TCP port: 10509\\n\\nDocs: extras\u002FargumentMaps\u002FArgumentMaps.md\\n\\nConfig nodes are flow-scoped: delete this tab to remove client\u002FIO config.\"},{\"id\":\"e3f96d88af4942f1\",\"type\":\"comment\",\"z\":\"42b4b17f06604c17\",\"name\":\"NODE: Modbus-Flex-FC (custom \u002F mapped function codes)\",\"info\":\"NODE: Modbus-Flex-FC (custom \u002F mapped function codes)\\n\\nFEATURES IN THIS FLOW\\n- Build non-default or vendor FC request\u002Fresponse layouts\\n- Argument maps loaded from extras\u002FargumentMaps\u002F\\n- requestCard \u002F responseCard define field offsets and types\\n\\nWHAT THE CONFIG DOES\\n- mapPath → folder with FC map JSON (defaults shipped in package)\\n- selectedFc → which map entry to use\\n- requestCard fields → values sent in the PDU\\n- responseCard fields → how the reply buffer is decoded\\n- If relative mapPath fails, set absolute path under node_modules\u002F…\u002Fextras\u002FargumentMaps\u002F\\n\\nHOW TO RUN\\n1) Deploy (ensure mapPath resolves — see ArgumentMaps.md)\\n2) Click Trigger FC map\\n3) Inspect Modbus-Response \u002F msg for decoded fields\\n4) Open extras\u002FargumentMaps\u002FArgumentMaps.md to add your own map\\n\\nDemo TCP port: 10509\\n\\nDocs: extras\u002FargumentMaps\u002FArgumentMaps.md\\n\\nConfig nodes are flow-scoped: delete this tab to remove client\u002FIO config.\",\"x\":200,\"y\":40,\"wires\":[]},{\"id\":\"b0543ec70bae495b\",\"type\":\"modbus-server\",\"z\":\"42b4b17f06604c17\",\"name\":\"\",\"logEnabled\":false,\"hostname\":\"127.0.0.1\",\"serverPort\":\"10509\",\"responseDelay\":100,\"delayUnit\":\"ms\",\"coilsBufferSize\":10000,\"holdingBufferSize\":10000,\"inputBufferSize\":10000,\"discreteBufferSize\":10000,\"showErrors\":false,\"showStatusActivities\":false,\"x\":120,\"y\":220,\"wires\":[[],[],[],[],[]]},{\"id\":\"5d02074a01f146b6\",\"type\":\"modbus-client\",\"z\":\"42b4b17f06604c17\",\"name\":\"Flex-FC Client\",\"clienttype\":\"tcp\",\"bufferCommands\":true,\"stateLogEnabled\":false,\"queueLogEnabled\":false,\"failureLogEnabled\":true,\"tcpHost\":\"127.0.0.1\",\"tcpPort\":\"10509\",\"tcpType\":\"DEFAULT\",\"serialPort\":\"\u002Fdev\u002FttyUSB0\",\"serialType\":\"RTU-BUFFERD\",\"serialBaudrate\":\"9600\",\"serialDatabits\":\"8\",\"serialStopbits\":\"1\",\"serialParity\":\"none\",\"serialConnectionDelay\":\"100\",\"serialAsciiResponseStartDelimiter\":\"0x3A\",\"unit_id\":\"1\",\"commandDelay\":\"1\",\"clientTimeout\":\"1000\",\"reconnectOnTimeout\":true,\"reconnectTimeout\":\"2000\",\"parallelUnitIdsAllowed\":true},{\"id\":\"336275ebc79c480c\",\"type\":\"inject\",\"z\":\"42b4b17f06604c17\",\"name\":\"Trigger FC map\",\"props\":[{\"p\":\"payload\"}],\"repeat\":\"\",\"crontab\":\"\",\"once\":false,\"topic\":\"\",\"payload\":\"\",\"payloadType\":\"date\",\"x\":180,\"y\":320,\"wires\":[[\"06ad957c4ae14295\"]]},{\"id\":\"06ad957c4ae14295\",\"type\":\"modbus-flex-fc\",\"z\":\"42b4b17f06604c17\",\"name\":\"Mapped FC03\",\"showStatusActivities\":true,\"showErrors\":true,\"showWarnings\":true,\"unitid\":\"1\",\"server\":\"5d02074a01f146b6\",\"emptyMsgOnFail\":false,\"keepMsgProperties\":false,\"mapPath\":\".\u002Fextras\u002FargumentMaps\u002Fdefaults\u002F\",\"selectedFc\":\"bdd84caa-4191-11ee-989f-4384dc45e6c3\",\"fc\":\"0x03\",\"requestCard\":[{\"name\":\"startingAddress\",\"data\":0,\"offset\":0,\"type\":\"uint16be\"},{\"name\":\"quantityRegisters\",\"data\":2,\"offset\":2,\"type\":\"uint16be\"}],\"responseCard\":[{\"name\":\"byteCount\",\"data\":0,\"offset\":0,\"type\":\"uint8be\"},{\"name\":\"HoldingRegisterValue\",\"data\":0,\"offset\":1,\"type\":\"uint16be\"}],\"lastSelectedFc\":\"bdd84caa-4191-11ee-989f-4384dc45e6c3\",\"x\":420,\"y\":320,\"wires\":[[\"4cf7275c02b240f9\",\"4d396d3a9aca4a13\"]]},{\"id\":\"4cf7275c02b240f9\",\"type\":\"modbus-response\",\"z\":\"42b4b17f06604c17\",\"name\":\"\",\"registerShowMax\":20,\"x\":660,\"y\":400,\"wires\":[]},{\"id\":\"4d396d3a9aca4a13\",\"type\":\"debug\",\"z\":\"42b4b17f06604c17\",\"name\":\"SEE: Mapped FC03\",\"active\":true,\"tosidebar\":true,\"console\":false,\"tostatus\":false,\"complete\":\"payload\",\"x\":660,\"y\":240,\"wires\":[]}]",{"name":297,"path":298,"url":299,"downloadUrl":300,"flow":301},"09-Node-Flex-Connector-Runtime-Switch","examples\u002F09-Node-Flex-Connector-Runtime-Switch.json","https:\u002F\u002Fgithub.com\u002FBiancoRoyal\u002Fnode-red-contrib-modbus\u002Fblob\u002Fmaster\u002Fexamples\u002F09-Node-Flex-Connector-Runtime-Switch.json","https:\u002F\u002Fraw.githubusercontent.com\u002FBiancoRoyal\u002Fnode-red-contrib-modbus\u002Fmaster\u002Fexamples\u002F09-Node-Flex-Connector-Runtime-Switch.json","[{\"id\":\"8d3eed3a30b346f6\",\"type\":\"tab\",\"label\":\"09 Flex-Connector\",\"disabled\":false,\"info\":\"NODE: Modbus-Flex-Connector (runtime endpoint switch)\\n\\nFEATURES IN THIS FLOW\\n- Reconnect the shared Modbus-Client to another TCP (or serial) endpoint at runtime\\n- Two local Modbus-Servers (A=10510, B=10511) to demonstrate switching\\n- Ongoing Modbus-Read continues against whichever endpoint is active\\n\\nWHAT THE CONFIG DOES\\n- Client starts on Server A (tcpPort 10510)\\n- Flex-Connector msg.payload: { connectorType:'TCP', tcpHost, tcpPort }\\n- Serial switch uses connectorType SERIAL + serial* fields (not shown here)\\n- Read node keeps using the same client config — only the socket target changes\\n\\nHOW TO RUN\\n1) Deploy both servers\\n2) Click Switch → Server A, then Switch → Server B\\n3) Watch client status and Read response while switching\\n\\nDemo TCP port: 10510 \u002F 10511\\n\\nConfig nodes are flow-scoped: delete this tab to remove client\u002FIO config.\"},{\"id\":\"a15d7c809d364836\",\"type\":\"comment\",\"z\":\"8d3eed3a30b346f6\",\"name\":\"NODE: Modbus-Flex-Connector (runtime endpoint switch)\",\"info\":\"NODE: Modbus-Flex-Connector (runtime endpoint switch)\\n\\nFEATURES IN THIS FLOW\\n- Reconnect the shared Modbus-Client to another TCP (or serial) endpoint at runtime\\n- Two local Modbus-Servers (A=10510, B=10511) to demonstrate switching\\n- Ongoing Modbus-Read continues against whichever endpoint is active\\n\\nWHAT THE CONFIG DOES\\n- Client starts on Server A (tcpPort 10510)\\n- Flex-Connector msg.payload: { connectorType:'TCP', tcpHost, tcpPort }\\n- Serial switch uses connectorType SERIAL + serial* fields (not shown here)\\n- Read node keeps using the same client config — only the socket target changes\\n\\nHOW TO RUN\\n1) Deploy both servers\\n2) Click Switch → Server A, then Switch → Server B\\n3) Watch client status and Read response while switching\\n\\nDemo TCP port: 10510 \u002F 10511\\n\\nConfig nodes are flow-scoped: delete this tab to remove client\u002FIO config.\",\"x\":200,\"y\":40,\"wires\":[]},{\"id\":\"adf58fe253344ce2\",\"type\":\"modbus-server\",\"z\":\"8d3eed3a30b346f6\",\"name\":\"Server A\",\"logEnabled\":false,\"hostname\":\"127.0.0.1\",\"serverPort\":\"10510\",\"responseDelay\":100,\"delayUnit\":\"ms\",\"coilsBufferSize\":10000,\"holdingBufferSize\":10000,\"inputBufferSize\":10000,\"discreteBufferSize\":10000,\"showErrors\":false,\"showStatusActivities\":false,\"x\":120,\"y\":200,\"wires\":[[],[],[],[],[]]},{\"id\":\"8b34ff8949fb455c\",\"type\":\"modbus-server\",\"z\":\"8d3eed3a30b346f6\",\"name\":\"Server B\",\"logEnabled\":false,\"hostname\":\"127.0.0.1\",\"serverPort\":\"10511\",\"responseDelay\":100,\"delayUnit\":\"ms\",\"coilsBufferSize\":10000,\"holdingBufferSize\":10000,\"inputBufferSize\":10000,\"discreteBufferSize\":10000,\"showErrors\":false,\"showStatusActivities\":false,\"x\":120,\"y\":280,\"wires\":[[],[],[],[],[]]},{\"id\":\"05e836f2dca24e23\",\"type\":\"modbus-client\",\"z\":\"8d3eed3a30b346f6\",\"name\":\"Switchable Client\",\"clienttype\":\"tcp\",\"bufferCommands\":true,\"stateLogEnabled\":false,\"queueLogEnabled\":false,\"failureLogEnabled\":true,\"tcpHost\":\"127.0.0.1\",\"tcpPort\":\"10510\",\"tcpType\":\"DEFAULT\",\"serialPort\":\"\u002Fdev\u002FttyUSB0\",\"serialType\":\"RTU-BUFFERD\",\"serialBaudrate\":\"9600\",\"serialDatabits\":\"8\",\"serialStopbits\":\"1\",\"serialParity\":\"none\",\"serialConnectionDelay\":\"100\",\"serialAsciiResponseStartDelimiter\":\"0x3A\",\"unit_id\":\"1\",\"commandDelay\":\"1\",\"clientTimeout\":\"1000\",\"reconnectOnTimeout\":true,\"reconnectTimeout\":\"2000\",\"parallelUnitIdsAllowed\":true},{\"id\":\"78b8f2d655a94ba2\",\"type\":\"inject\",\"z\":\"8d3eed3a30b346f6\",\"name\":\"Connect A :10510\",\"props\":[{\"p\":\"payload\"}],\"repeat\":\"\",\"crontab\":\"\",\"once\":true,\"onceDelay\":0.5,\"topic\":\"\",\"payload\":\"\",\"payloadType\":\"date\",\"x\":180,\"y\":380,\"wires\":[[\"66d798f7de2f4165\"]]},{\"id\":\"66d798f7de2f4165\",\"type\":\"function\",\"z\":\"8d3eed3a30b346f6\",\"name\":\"TCP A\",\"func\":\"msg.payload = { connectorType: 'TCP', tcpHost: '127.0.0.1', tcpPort: 10510 };\\nreturn msg;\",\"outputs\":1,\"noerr\":0,\"x\":400,\"y\":380,\"wires\":[[\"f1d986697c94428e\"]]},{\"id\":\"05fc08415a35499f\",\"type\":\"inject\",\"z\":\"8d3eed3a30b346f6\",\"name\":\"Connect B :10511\",\"props\":[{\"p\":\"payload\"}],\"repeat\":\"\",\"crontab\":\"\",\"once\":false,\"topic\":\"\",\"payload\":\"\",\"payloadType\":\"date\",\"x\":180,\"y\":460,\"wires\":[[\"8ee2d1791fc04895\"]]},{\"id\":\"8ee2d1791fc04895\",\"type\":\"function\",\"z\":\"8d3eed3a30b346f6\",\"name\":\"TCP B\",\"func\":\"msg.payload = { connectorType: 'TCP', tcpHost: '127.0.0.1', tcpPort: 10511 };\\nreturn msg;\",\"outputs\":1,\"noerr\":0,\"x\":400,\"y\":460,\"wires\":[[\"f1d986697c94428e\"]]},{\"id\":\"f1d986697c94428e\",\"type\":\"modbus-flex-connector\",\"z\":\"8d3eed3a30b346f6\",\"name\":\"\",\"maxReconnectsPerMinute\":4,\"emptyQueue\":true,\"showStatusActivities\":true,\"showErrors\":true,\"server\":\"05e836f2dca24e23\",\"x\":620,\"y\":420,\"wires\":[[]]},{\"id\":\"0f630ed514024968\",\"type\":\"modbus-read\",\"z\":\"8d3eed3a30b346f6\",\"name\":\"Poll active\",\"topic\":\"\",\"showStatusActivities\":true,\"logIOActivities\":false,\"showErrors\":true,\"showWarnings\":true,\"unitid\":\"1\",\"dataType\":\"HoldingRegister\",\"adr\":\"0\",\"quantity\":\"2\",\"rate\":\"1\",\"rateUnit\":\"s\",\"delayOnStart\":true,\"startDelayTime\":\"2\",\"server\":\"05e836f2dca24e23\",\"useIOFile\":false,\"ioFile\":\"\",\"useIOForPayload\":false,\"emptyMsgOnFail\":false,\"keepMsgProperties\":false,\"x\":620,\"y\":520,\"wires\":[[\"288e79b88cc74ce6\"],[\"a98c9994f5934295\"]]},{\"id\":\"a98c9994f5934295\",\"type\":\"modbus-response\",\"z\":\"8d3eed3a30b346f6\",\"name\":\"\",\"registerShowMax\":20,\"x\":840,\"y\":600,\"wires\":[]},{\"id\":\"288e79b88cc74ce6\",\"type\":\"debug\",\"z\":\"8d3eed3a30b346f6\",\"name\":\"SEE: Poll active\",\"active\":true,\"tosidebar\":true,\"console\":false,\"tostatus\":false,\"complete\":\"payload\",\"x\":840,\"y\":440,\"wires\":[]}]",{"name":303,"path":304,"url":305,"downloadUrl":306,"flow":307},"10-Node-Queue-Info-And-Multi-Device","examples\u002F10-Node-Queue-Info-And-Multi-Device.json","https:\u002F\u002Fgithub.com\u002FBiancoRoyal\u002Fnode-red-contrib-modbus\u002Fblob\u002Fmaster\u002Fexamples\u002F10-Node-Queue-Info-And-Multi-Device.json","https:\u002F\u002Fraw.githubusercontent.com\u002FBiancoRoyal\u002Fnode-red-contrib-modbus\u002Fmaster\u002Fexamples\u002F10-Node-Queue-Info-And-Multi-Device.json","[{\"id\":\"d0faaeed04ad4a5e\",\"type\":\"tab\",\"label\":\"10 Queue-Info\",\"disabled\":false,\"info\":\"NODE: Modbus-Queue-Info (+ burst reads)\\n\\nFEATURES IN THIS FLOW\\n- Shows command-queue depth for a Modbus-Client\\n- Burst Flex-Getter reads to fill the queue visibly\\n- Threshold levels for low \u002F high queue warnings\\n\\nWHAT THE CONFIG DOES\\n- Client bufferCommands (Queue Commands) → must be enabled for queuing\\n- queueReadIntervalTime → how often Queue-Info samples depth\\n- lowLowLevel \u002F lowLevel \u002F highLevel \u002F highHighLevel → status thresholds\\n- updateOnAllQueueChanges → emit when depth changes\\n- errorOnHighLevel → raise node error when high threshold hit\\n\\nHOW TO RUN\\n1) Deploy\\n2) Click Burst reads (3 Flex-Getter FC3 requests)\\n3) Watch Queue-Info status \u002F output while the queue drains\\n\\nDemo TCP port: 10512\\n\\nConfig nodes are flow-scoped: delete this tab to remove client\u002FIO config.\"},{\"id\":\"19965b35cd4a4f01\",\"type\":\"comment\",\"z\":\"d0faaeed04ad4a5e\",\"name\":\"NODE: Modbus-Queue-Info (+ burst reads)\",\"info\":\"NODE: Modbus-Queue-Info (+ burst reads)\\n\\nFEATURES IN THIS FLOW\\n- Shows command-queue depth for a Modbus-Client\\n- Burst Flex-Getter reads to fill the queue visibly\\n- Threshold levels for low \u002F high queue warnings\\n\\nWHAT THE CONFIG DOES\\n- Client bufferCommands (Queue Commands) → must be enabled for queuing\\n- queueReadIntervalTime → how often Queue-Info samples depth\\n- lowLowLevel \u002F lowLevel \u002F highLevel \u002F highHighLevel → status thresholds\\n- updateOnAllQueueChanges → emit when depth changes\\n- errorOnHighLevel → raise node error when high threshold hit\\n\\nHOW TO RUN\\n1) Deploy\\n2) Click Burst reads (3 Flex-Getter FC3 requests)\\n3) Watch Queue-Info status \u002F output while the queue drains\\n\\nDemo TCP port: 10512\\n\\nConfig nodes are flow-scoped: delete this tab to remove client\u002FIO config.\",\"x\":200,\"y\":40,\"wires\":[]},{\"id\":\"f9f672f45c80402e\",\"type\":\"modbus-server\",\"z\":\"d0faaeed04ad4a5e\",\"name\":\"\",\"logEnabled\":false,\"hostname\":\"127.0.0.1\",\"serverPort\":\"10512\",\"responseDelay\":100,\"delayUnit\":\"ms\",\"coilsBufferSize\":10000,\"holdingBufferSize\":10000,\"inputBufferSize\":10000,\"discreteBufferSize\":10000,\"showErrors\":false,\"showStatusActivities\":false,\"x\":120,\"y\":200,\"wires\":[[],[],[],[],[]]},{\"id\":\"6848b7b427b84837\",\"type\":\"modbus-client\",\"z\":\"d0faaeed04ad4a5e\",\"name\":\"Queue Client\",\"clienttype\":\"tcp\",\"bufferCommands\":true,\"stateLogEnabled\":false,\"queueLogEnabled\":false,\"failureLogEnabled\":true,\"tcpHost\":\"127.0.0.1\",\"tcpPort\":\"10512\",\"tcpType\":\"DEFAULT\",\"serialPort\":\"\u002Fdev\u002FttyUSB0\",\"serialType\":\"RTU-BUFFERD\",\"serialBaudrate\":\"9600\",\"serialDatabits\":\"8\",\"serialStopbits\":\"1\",\"serialParity\":\"none\",\"serialConnectionDelay\":\"100\",\"serialAsciiResponseStartDelimiter\":\"0x3A\",\"unit_id\":\"1\",\"commandDelay\":\"1\",\"clientTimeout\":\"1000\",\"reconnectOnTimeout\":true,\"reconnectTimeout\":\"2000\",\"parallelUnitIdsAllowed\":true},{\"id\":\"f611525d393a42bc\",\"type\":\"inject\",\"z\":\"d0faaeed04ad4a5e\",\"name\":\"Burst reads\",\"props\":[{\"p\":\"payload\"}],\"repeat\":\"\",\"crontab\":\"\",\"once\":false,\"topic\":\"\",\"payload\":\"\",\"payloadType\":\"date\",\"x\":160,\"y\":300,\"wires\":[[\"f1698a06c5874eea\"]]},{\"id\":\"f1698a06c5874eea\",\"type\":\"function\",\"z\":\"d0faaeed04ad4a5e\",\"name\":\"3 reads\",\"func\":\"const out = [];\\nfor (let i = 0; i \\u003c 3; i++) {\\n  out.push({ payload: { fc: 3, unitid: 1, address: 0, quantity: 2 } });\\n}\\nreturn [out];\\n\",\"outputs\":1,\"noerr\":0,\"x\":360,\"y\":300,\"wires\":[[\"a33e63a2c0114d1f\"]]},{\"id\":\"a33e63a2c0114d1f\",\"type\":\"modbus-flex-getter\",\"z\":\"d0faaeed04ad4a5e\",\"name\":\"\",\"showStatusActivities\":true,\"showErrors\":true,\"showWarnings\":true,\"logIOActivities\":false,\"server\":\"6848b7b427b84837\",\"useIOFile\":false,\"ioFile\":\"\",\"useIOForPayload\":false,\"emptyMsgOnFail\":false,\"keepMsgProperties\":true,\"delayOnStart\":false,\"startDelayTime\":\"\",\"x\":580,\"y\":300,\"wires\":[[\"ef44edb50fea4123\"],[\"15bf96103161463f\"]]},{\"id\":\"b70938f5c12343bc\",\"type\":\"modbus-queue-info\",\"z\":\"d0faaeed04ad4a5e\",\"name\":\"Queue\",\"topic\":\"\",\"unitid\":\"1\",\"queueReadIntervalTime\":\"500\",\"lowLowLevel\":1,\"lowLevel\":5,\"highLevel\":20,\"highHighLevel\":50,\"server\":\"6848b7b427b84837\",\"errorOnHighLevel\":false,\"showStatusActivities\":true,\"updateOnAllQueueChanges\":true,\"updateOnAllUnitQueues\":false,\"x\":560,\"y\":400,\"wires\":[[\"8b3356c0d17542eb\"]]},{\"id\":\"15bf96103161463f\",\"type\":\"modbus-response\",\"z\":\"d0faaeed04ad4a5e\",\"name\":\"\",\"registerShowMax\":20,\"x\":800,\"y\":380,\"wires\":[]},{\"id\":\"ef44edb50fea4123\",\"type\":\"debug\",\"z\":\"d0faaeed04ad4a5e\",\"name\":\"SEE: modbus-flex-getter\",\"active\":true,\"tosidebar\":true,\"console\":false,\"tostatus\":false,\"complete\":\"payload\",\"x\":800,\"y\":220,\"wires\":[]},{\"id\":\"8b3356c0d17542eb\",\"type\":\"debug\",\"z\":\"d0faaeed04ad4a5e\",\"name\":\"SEE: Queue\",\"active\":true,\"tosidebar\":true,\"console\":false,\"tostatus\":false,\"complete\":\"payload\",\"x\":840,\"y\":449,\"wires\":[]}]",{"name":309,"path":310,"url":311,"downloadUrl":312,"flow":313},"11-Node-IO-Config-And-Response-Filter","examples\u002F11-Node-IO-Config-And-Response-Filter.json","https:\u002F\u002Fgithub.com\u002FBiancoRoyal\u002Fnode-red-contrib-modbus\u002Fblob\u002Fmaster\u002Fexamples\u002F11-Node-IO-Config-And-Response-Filter.json","https:\u002F\u002Fraw.githubusercontent.com\u002FBiancoRoyal\u002Fnode-red-contrib-modbus\u002Fmaster\u002Fexamples\u002F11-Node-IO-Config-And-Response-Filter.json","[{\"id\":\"f359cca63f4848e1\",\"type\":\"tab\",\"label\":\"11 IO-Config \u002F Filter\",\"disabled\":false,\"info\":\"NODE: Modbus-IO-Config + Modbus-Response-Filter — named values\\n\\nFEATURES IN THIS FLOW\\n- Give human-readable names to Modbus addresses via an IO JSON file\\n- Modbus-Read with useIOFile + useIOForPayload → payload = [{name, value, …}, …]\\n- Modbus-Response-Filter keeps only one named entry (by exact name string)\\n- Starter file extras\u002FioFileData\u002Fnames-starter.json (easy to edit)\\n- Larger PLC-style sample still available: learning-device.json\\n\\nWHAT THE CONFIG DOES\\n- IO-Config path → NDJSON file (one JSON object per line)\\n- IO-Config addressOffset → optional shift applied to all mappings\\n- Read useIOFile=true + ioFile=this config → apply name mapping\\n- Read useIOForPayload=true → msg.payload becomes named list (not raw ints)\\n- Read logIOActivities=true → debug mapping activity in Node-RED log\\n- Filter filter → exact name string from the IO file (e.g. iTemperature)\\n- Filter registers=0 → REQUIRED for named IO lists (do not use Modbus quantity)\\n- Filter filterResponseBuffer\u002FValues\u002FInput → strip heavy msg fields after filter\\n\\nHOW TO RUN\\n1) Deploy (seed inject fills Holding Registers once)\\n2) Open Debug → IO names (all): see iTemperature, iSetpoint, iCounter, …\\n3) filtered name Debug shows only [{ name: 'iTemperature', value: 42, … }]\\n4) Edit names-starter.json (add a line with type-prefix name), redeploy\\n5) Change Filter name to match your new name and redeploy\\n\\nDemo TCP port: 10513\\n\\nHOW TO MAINTAIN \u002F PROVIDE NAMES (critical)\\n\\nEdit (or copy) an IO file. Each line is one mapping:\\n\\n  {\\\"name\\\":\\\"iTemperature\\\",\\\"valueAddress\\\":\\\"%IW0\\\"}\\n  {\\\"name\\\":\\\"iSetpoint\\\",\\\"valueAddress\\\":\\\"%IW1\\\"}\\n  {\\\"name\\\":\\\"bMotorRunning\\\",\\\"valueAddress\\\":\\\"%IX8.0\\\"}\\n\\nNAME PREFIX = DATA TYPE (first character of name is required!):\\n  i… Integer   w… Word   u… Unsigned   b… Boolean (with %Ix\u002F%Qx)\\n  f…\u002Fr… Float\u002FReal   d… Double   l… Long\\nWithout a known prefix the mapping is SKIPPED → empty payload [].\\nBad:  {\\\"name\\\":\\\"temperature\\\",\\\"valueAddress\\\":\\\"%IW0\\\"}\\nGood: {\\\"name\\\":\\\"iTemperature\\\",\\\"valueAddress\\\":\\\"%IW0\\\"}\\n\\nAddress syntax (CODESYS-style) + which FC to use:\\n  %IW*  → Holding-side words → use FC3 HoldingRegister (this demo)\\n  %QW*  → Input-register side → use FC4 InputRegister\\n  %IX*.* \u002F %QX*.* → bits (coils \u002F discrete)\\n\\nAfter editing the file: Deploy the flow (IO-Config reloads on deploy).\\nOptional: export from PLC\u002FCODESYS CSV and convert — see IO-Config node help.\\nFull demo dump: extras\u002FioFileData\u002Flearning-device.json\\n\\nSeed vs names in this flow:\\n  HR[0]=42 → iTemperature, HR[1]=7 → iSetpoint, HR[2]=3 → iCounter, …\\n\\nConfig nodes are flow-scoped: delete this tab to remove client\u002FIO config.\"},{\"id\":\"2b2e51ba1dd6437b\",\"type\":\"comment\",\"z\":\"f359cca63f4848e1\",\"name\":\"NODE: Modbus-IO-Config + Modbus-Response-Filter — named valu\",\"info\":\"NODE: Modbus-IO-Config + Modbus-Response-Filter — named values\\n\\nFEATURES IN THIS FLOW\\n- Give human-readable names to Modbus addresses via an IO JSON file\\n- Modbus-Read with useIOFile + useIOForPayload → payload = [{name, value, …}, …]\\n- Modbus-Response-Filter keeps only one named entry (by exact name string)\\n- Starter file extras\u002FioFileData\u002Fnames-starter.json (easy to edit)\\n- Larger PLC-style sample still available: learning-device.json\\n\\nWHAT THE CONFIG DOES\\n- IO-Config path → NDJSON file (one JSON object per line)\\n- IO-Config addressOffset → optional shift applied to all mappings\\n- Read useIOFile=true + ioFile=this config → apply name mapping\\n- Read useIOForPayload=true → msg.payload becomes named list (not raw ints)\\n- Read logIOActivities=true → debug mapping activity in Node-RED log\\n- Filter filter → exact name string from the IO file (e.g. iTemperature)\\n- Filter registers=0 → REQUIRED for named IO lists (do not use Modbus quantity)\\n- Filter filterResponseBuffer\u002FValues\u002FInput → strip heavy msg fields after filter\\n\\nHOW TO RUN\\n1) Deploy (seed inject fills Holding Registers once)\\n2) Open Debug → IO names (all): see iTemperature, iSetpoint, iCounter, …\\n3) filtered name Debug shows only [{ name: 'iTemperature', value: 42, … }]\\n4) Edit names-starter.json (add a line with type-prefix name), redeploy\\n5) Change Filter name to match your new name and redeploy\\n\\nDemo TCP port: 10513\\n\\nHOW TO MAINTAIN \u002F PROVIDE NAMES (critical)\\n\\nEdit (or copy) an IO file. Each line is one mapping:\\n\\n  {\\\"name\\\":\\\"iTemperature\\\",\\\"valueAddress\\\":\\\"%IW0\\\"}\\n  {\\\"name\\\":\\\"iSetpoint\\\",\\\"valueAddress\\\":\\\"%IW1\\\"}\\n  {\\\"name\\\":\\\"bMotorRunning\\\",\\\"valueAddress\\\":\\\"%IX8.0\\\"}\\n\\nNAME PREFIX = DATA TYPE (first character of name is required!):\\n  i… Integer   w… Word   u… Unsigned   b… Boolean (with %Ix\u002F%Qx)\\n  f…\u002Fr… Float\u002FReal   d… Double   l… Long\\nWithout a known prefix the mapping is SKIPPED → empty payload [].\\nBad:  {\\\"name\\\":\\\"temperature\\\",\\\"valueAddress\\\":\\\"%IW0\\\"}\\nGood: {\\\"name\\\":\\\"iTemperature\\\",\\\"valueAddress\\\":\\\"%IW0\\\"}\\n\\nAddress syntax (CODESYS-style) + which FC to use:\\n  %IW*  → Holding-side words → use FC3 HoldingRegister (this demo)\\n  %QW*  → Input-register side → use FC4 InputRegister\\n  %IX*.* \u002F %QX*.* → bits (coils \u002F discrete)\\n\\nAfter editing the file: Deploy the flow (IO-Config reloads on deploy).\\nOptional: export from PLC\u002FCODESYS CSV and convert — see IO-Config node help.\\nFull demo dump: extras\u002FioFileData\u002Flearning-device.json\\n\\nSeed vs names in this flow:\\n  HR[0]=42 → iTemperature, HR[1]=7 → iSetpoint, HR[2]=3 → iCounter, …\\n\\nConfig nodes are flow-scoped: delete this tab to remove client\u002FIO config.\",\"x\":160,\"y\":40,\"wires\":[]},{\"id\":\"1a0e47fae7da4f4f\",\"type\":\"comment\",\"z\":\"f359cca63f4848e1\",\"name\":\"HOW TO: add \u002F edit names\",\"info\":\"HOW TO ADD YOUR OWN NAME (quick)\\n\\n1) Open extras\u002FioFileData\u002Fnames-starter.json in an editor\\n2) Add a line — name MUST start with type letter:\\n   {\\\"name\\\":\\\"iLineSpeed\\\",\\\"valueAddress\\\":\\\"%IW2\\\"}\\n   (i=Integer, w=Word, u=Unsigned, b=Boolean, …)\\n3) In Modbus-IO-Config set Path to that file (relative extras\u002F… is OK)\\n4) On Modbus-Read: enable \\\"Use IO File\\\" + \\\"IO's As Payload\\\"\\n5) On Response-Filter: Filter = iLineSpeed, Registers = 0\\n6) Deploy → Debug shows only that named object\\n\\nDo NOT set Registers to the Modbus quantity when filtering named lists.\\nDo NOT use names without a type prefix (payload will be empty []).\\n\",\"x\":160,\"y\":110,\"wires\":[]},{\"id\":\"a744174d8b1147bf\",\"type\":\"comment\",\"z\":\"f359cca63f4848e1\",\"name\":\"CONFIG: Modbus-Read IO flags\",\"info\":\"Modbus-Read flags used here\\n\\n• Use IO File = on → attach IO-Config mapping\\n• IO's As Payload = on → payload is named objects (not [42,7,3,…])\\n• log IO Activities = on → mapping traces in the log\\n• dataType HoldingRegister, adr 0, quantity 12 → FC3 range that covers %IW0..%IW11\\n• FC3 reads %I* names; FC4 would read %Q* names\\n\",\"x\":160,\"y\":180,\"wires\":[]},{\"id\":\"e8e66fdbad1d48c2\",\"type\":\"comment\",\"z\":\"f359cca63f4848e1\",\"name\":\"CONFIG: Response-Filter\",\"info\":\"Modbus-Response-Filter flags used here\\n\\n• filter = iTemperature → keep items where item.name === 'iTemperature'\\n• registers = 0 → skip raw-length check (named list length ≠ Modbus quantity)\\n• filter Response Buffer \u002F Values \u002F Input = on → smaller msg after filter\\n• Lookup button (after Deploy) lists names from the linked IO-Config\\n\",\"x\":160,\"y\":250,\"wires\":[]},{\"id\":\"4c0a82471a0a4a1e\",\"type\":\"modbus-server\",\"z\":\"f359cca63f4848e1\",\"name\":\"IO Demo Server\",\"logEnabled\":false,\"hostname\":\"127.0.0.1\",\"serverPort\":\"10513\",\"responseDelay\":100,\"delayUnit\":\"ms\",\"coilsBufferSize\":10000,\"holdingBufferSize\":10000,\"inputBufferSize\":10000,\"discreteBufferSize\":10000,\"showErrors\":false,\"showStatusActivities\":false,\"x\":160,\"y\":340,\"wires\":[[],[],[],[],[]]},{\"id\":\"601f568eb5d54666\",\"type\":\"modbus-client\",\"z\":\"f359cca63f4848e1\",\"name\":\"IO Client\",\"clienttype\":\"tcp\",\"bufferCommands\":true,\"stateLogEnabled\":false,\"queueLogEnabled\":false,\"failureLogEnabled\":true,\"tcpHost\":\"127.0.0.1\",\"tcpPort\":\"10513\",\"tcpType\":\"DEFAULT\",\"serialPort\":\"\u002Fdev\u002FttyUSB0\",\"serialType\":\"RTU-BUFFERD\",\"serialBaudrate\":\"9600\",\"serialDatabits\":\"8\",\"serialStopbits\":\"1\",\"serialParity\":\"none\",\"serialConnectionDelay\":\"100\",\"serialAsciiResponseStartDelimiter\":\"0x3A\",\"unit_id\":\"1\",\"commandDelay\":\"1\",\"clientTimeout\":\"1000\",\"reconnectOnTimeout\":true,\"reconnectTimeout\":\"2000\",\"parallelUnitIdsAllowed\":true},{\"id\":\"35b49e7518ca4109\",\"type\":\"modbus-io-config\",\"z\":\"f359cca63f4848e1\",\"name\":\"Names starter (edit me)\",\"path\":\"extras\u002FioFileData\u002Fnames-starter.json\",\"format\":\"utf8\",\"addressOffset\":\"\"},{\"id\":\"95f8acf206d4453f\",\"type\":\"inject\",\"z\":\"f359cca63f4848e1\",\"name\":\"Seed HR [42,7,3,…]\",\"props\":[{\"p\":\"payload\"}],\"repeat\":\"\",\"crontab\":\"\",\"once\":true,\"onceDelay\":0.5,\"topic\":\"\",\"payload\":\"\",\"payloadType\":\"date\",\"x\":160,\"y\":440,\"wires\":[[\"c932398afaef4abd\"]]},{\"id\":\"c932398afaef4abd\",\"type\":\"function\",\"z\":\"f359cca63f4848e1\",\"name\":\"holding seed → named HR\",\"func\":\"\u002F\u002F HR0..11 → iTemperature, iSetpoint, iCounter, … (name prefix = type!)\\nmsg.payload = {\\n  value: [42, 7, 3, 9, 0, 11, 0, 13, 0, 0, 0, 15],\\n  register: 'holding',\\n  address: 0,\\n  disableMsgOutput: 1\\n};\\nreturn msg;\",\"outputs\":1,\"noerr\":0,\"x\":400,\"y\":440,\"wires\":[[\"4c0a82471a0a4a1e\"]]},{\"id\":\"41ee37bee362456d\",\"type\":\"modbus-read\",\"z\":\"f359cca63f4848e1\",\"name\":\"Read HR + IO names\",\"topic\":\"\",\"showStatusActivities\":true,\"logIOActivities\":true,\"showErrors\":true,\"showWarnings\":true,\"unitid\":\"1\",\"dataType\":\"HoldingRegister\",\"adr\":\"0\",\"quantity\":\"12\",\"rate\":\"2\",\"rateUnit\":\"s\",\"delayOnStart\":true,\"startDelayTime\":\"2\",\"server\":\"601f568eb5d54666\",\"useIOFile\":true,\"ioFile\":\"35b49e7518ca4109\",\"useIOForPayload\":true,\"emptyMsgOnFail\":false,\"keepMsgProperties\":false,\"x\":400,\"y\":560,\"wires\":[[\"fe96ec1bb7004d51\",\"2bf1875851a84359\"],[\"0a2fbba4e4c943a5\"]]},{\"id\":\"0a2fbba4e4c943a5\",\"type\":\"modbus-response\",\"z\":\"f359cca63f4848e1\",\"name\":\"Read response\",\"registerShowMax\":20,\"x\":900,\"y\":640,\"wires\":[]},{\"id\":\"fe96ec1bb7004d51\",\"type\":\"debug\",\"z\":\"f359cca63f4848e1\",\"name\":\"IO names (all)\",\"active\":true,\"tosidebar\":true,\"console\":false,\"tostatus\":false,\"complete\":\"payload\",\"x\":680,\"y\":500,\"wires\":[]},{\"id\":\"2bf1875851a84359\",\"type\":\"modbus-response-filter\",\"z\":\"f359cca63f4848e1\",\"name\":\"filter: iTemperature\",\"filter\":\"iTemperature\",\"registers\":\"0\",\"ioFile\":\"35b49e7518ca4109\",\"filterResponseBuffer\":true,\"filterValues\":true,\"filterInput\":true,\"showStatusActivities\":false,\"showErrors\":true,\"showWarnings\":true,\"x\":680,\"y\":580,\"wires\":[[\"ed7b907b665d4338\"]]},{\"id\":\"ed7b907b665d4338\",\"type\":\"debug\",\"z\":\"f359cca63f4848e1\",\"name\":\"filtered: iTemperature\",\"active\":true,\"tosidebar\":true,\"console\":false,\"tostatus\":false,\"complete\":\"payload\",\"x\":960,\"y\":580,\"wires\":[]}]",{"name":315,"path":316,"url":317,"downloadUrl":318,"flow":319},"12-Node-Server-Buffer-Slave","examples\u002F12-Node-Server-Buffer-Slave.json","https:\u002F\u002Fgithub.com\u002FBiancoRoyal\u002Fnode-red-contrib-modbus\u002Fblob\u002Fmaster\u002Fexamples\u002F12-Node-Server-Buffer-Slave.json","https:\u002F\u002Fraw.githubusercontent.com\u002FBiancoRoyal\u002Fnode-red-contrib-modbus\u002Fmaster\u002Fexamples\u002F12-Node-Server-Buffer-Slave.json","[{\"id\":\"fa077f7c86b94b15\",\"type\":\"tab\",\"label\":\"12 Server Buffer\",\"disabled\":false,\"info\":\"NODE: Modbus-Server (buffer slave)\\n\\nFEATURES IN THIS FLOW\\n- In-package TCP Modbus slave backed by register buffers\\n- Inject writes into holding \u002F coils \u002F input \u002F discrete buffers\\n- Five outputs mirror activity (not a per-request flow gateway)\\n\\nWHAT THE CONFIG DOES\\n- serverPort \u002F hostname → TCP listen endpoint\\n- coilsBufferSize \u002F holdingBufferSize \u002F … → buffer lengths\\n- Inject payload: { value, register, address, disableMsgOutput }\\n- register: 'holding' | 'coils' | 'input' | 'discrete'\\n\\nHOW TO RUN\\n1) Deploy\\n2) Click Fill holding → writes [11,22,33,44] into holding from address 0\\n3) Attach a Modbus-Client (other examples) to read the buffer back\\n\\nDemo TCP port: 10514\\n\\nNOT a flow-based request\u002Fresponse gateway — see example 15 and GitHub #567.\\n\\nConfig nodes are flow-scoped: delete this tab to remove client\u002FIO config.\"},{\"id\":\"e217e3192e7d450b\",\"type\":\"comment\",\"z\":\"fa077f7c86b94b15\",\"name\":\"NODE: Modbus-Server (buffer slave)\",\"info\":\"NODE: Modbus-Server (buffer slave)\\n\\nFEATURES IN THIS FLOW\\n- In-package TCP Modbus slave backed by register buffers\\n- Inject writes into holding \u002F coils \u002F input \u002F discrete buffers\\n- Five outputs mirror activity (not a per-request flow gateway)\\n\\nWHAT THE CONFIG DOES\\n- serverPort \u002F hostname → TCP listen endpoint\\n- coilsBufferSize \u002F holdingBufferSize \u002F … → buffer lengths\\n- Inject payload: { value, register, address, disableMsgOutput }\\n- register: 'holding' | 'coils' | 'input' | 'discrete'\\n\\nHOW TO RUN\\n1) Deploy\\n2) Click Fill holding → writes [11,22,33,44] into holding from address 0\\n3) Attach a Modbus-Client (other examples) to read the buffer back\\n\\nDemo TCP port: 10514\\n\\nNOT a flow-based request\u002Fresponse gateway — see example 15 and GitHub #567.\\n\\nConfig nodes are flow-scoped: delete this tab to remove client\u002FIO config.\",\"x\":200,\"y\":40,\"wires\":[]},{\"id\":\"34ca20e33ca845a6\",\"type\":\"inject\",\"z\":\"fa077f7c86b94b15\",\"name\":\"Fill holding\",\"props\":[{\"p\":\"payload\"}],\"repeat\":\"\",\"crontab\":\"\",\"once\":false,\"topic\":\"\",\"payload\":\"\",\"payloadType\":\"date\",\"x\":160,\"y\":280,\"wires\":[[\"d2eea9bc9d244f0d\"]]},{\"id\":\"d2eea9bc9d244f0d\",\"type\":\"function\",\"z\":\"fa077f7c86b94b15\",\"name\":\"holding buf\",\"func\":\"msg.payload = { value: [11, 22, 33, 44], register: 'holding', address: 0, disableMsgOutput: 0 };\\nreturn msg;\",\"outputs\":1,\"noerr\":0,\"x\":360,\"y\":280,\"wires\":[[\"a177138146954529\"]]},{\"id\":\"a177138146954529\",\"type\":\"modbus-server\",\"z\":\"fa077f7c86b94b15\",\"name\":\"Buffer Slave\",\"logEnabled\":false,\"hostname\":\"127.0.0.1\",\"serverPort\":\"10514\",\"responseDelay\":100,\"delayUnit\":\"ms\",\"coilsBufferSize\":10000,\"holdingBufferSize\":10000,\"inputBufferSize\":10000,\"discreteBufferSize\":10000,\"showErrors\":true,\"showStatusActivities\":true,\"x\":580,\"y\":280,\"wires\":[[\"c455cdc50d0543b6\"],[\"c455cdc50d0543b6\"],[\"c455cdc50d0543b6\"],[\"c455cdc50d0543b6\"],[\"c455cdc50d0543b6\"]]},{\"id\":\"c455cdc50d0543b6\",\"type\":\"debug\",\"z\":\"fa077f7c86b94b15\",\"name\":\"server outs\",\"active\":true,\"tosidebar\":true,\"console\":false,\"tostatus\":false,\"complete\":\"true\",\"x\":800,\"y\":280,\"wires\":[]}]",{"name":321,"path":322,"url":323,"downloadUrl":324,"flow":325},"13-Pattern-HTTP-To-Modbus","examples\u002F13-Pattern-HTTP-To-Modbus.json","https:\u002F\u002Fgithub.com\u002FBiancoRoyal\u002Fnode-red-contrib-modbus\u002Fblob\u002Fmaster\u002Fexamples\u002F13-Pattern-HTTP-To-Modbus.json","https:\u002F\u002Fraw.githubusercontent.com\u002FBiancoRoyal\u002Fnode-red-contrib-modbus\u002Fmaster\u002Fexamples\u002F13-Pattern-HTTP-To-Modbus.json","[{\"id\":\"9c8e743a8fc74773\",\"type\":\"tab\",\"label\":\"13 HTTP → Modbus\",\"disabled\":false,\"info\":\"PATTERN: HTTP → Modbus\\n\\nFEATURES IN THIS FLOW\\n- HTTP GET endpoint triggers a Modbus-Getter\\n- JSON body returned via http response\\n- Pattern for dashboards \u002F external systems without Modbus stack\\n\\nWHAT THE CONFIG DOES\\n- http in url \u002Fmodbus\u002Flearn\u002Fhr → path clients call\\n- Getter dataType\u002Fadr\u002Fquantity → which registers to read\\n- keepMsgProperties=true → HTTP request context can survive if needed\\n- Function builds { data, topic } JSON body + statusCode 200\\n\\nHOW TO RUN\\n1) Deploy\\n2) GET http:\u002F\u002F\\u003cnode-red-host\\u003e:1880\u002Fmodbus\u002Flearn\u002Fhr\\n3) Expect JSON with Holding Register data\\n\\nDemo TCP port: 10515\\n\\nConfig nodes are flow-scoped: delete this tab to remove client\u002FIO config.\"},{\"id\":\"e17ebba031f84478\",\"type\":\"comment\",\"z\":\"9c8e743a8fc74773\",\"name\":\"PATTERN: HTTP → Modbus\",\"info\":\"PATTERN: HTTP → Modbus\\n\\nFEATURES IN THIS FLOW\\n- HTTP GET endpoint triggers a Modbus-Getter\\n- JSON body returned via http response\\n- Pattern for dashboards \u002F external systems without Modbus stack\\n\\nWHAT THE CONFIG DOES\\n- http in url \u002Fmodbus\u002Flearn\u002Fhr → path clients call\\n- Getter dataType\u002Fadr\u002Fquantity → which registers to read\\n- keepMsgProperties=true → HTTP request context can survive if needed\\n- Function builds { data, topic } JSON body + statusCode 200\\n\\nHOW TO RUN\\n1) Deploy\\n2) GET http:\u002F\u002F\\u003cnode-red-host\\u003e:1880\u002Fmodbus\u002Flearn\u002Fhr\\n3) Expect JSON with Holding Register data\\n\\nDemo TCP port: 10515\\n\\nConfig nodes are flow-scoped: delete this tab to remove client\u002FIO config.\",\"x\":200,\"y\":40,\"wires\":[]},{\"id\":\"ab6ca077367a46fe\",\"type\":\"modbus-server\",\"z\":\"9c8e743a8fc74773\",\"name\":\"\",\"logEnabled\":false,\"hostname\":\"127.0.0.1\",\"serverPort\":\"10515\",\"responseDelay\":100,\"delayUnit\":\"ms\",\"coilsBufferSize\":10000,\"holdingBufferSize\":10000,\"inputBufferSize\":10000,\"discreteBufferSize\":10000,\"showErrors\":false,\"showStatusActivities\":false,\"x\":140,\"y\":180,\"wires\":[[],[],[],[],[]]},{\"id\":\"e4d42fd62acf4730\",\"type\":\"modbus-client\",\"z\":\"9c8e743a8fc74773\",\"name\":\"HTTP Client\",\"clienttype\":\"tcp\",\"bufferCommands\":true,\"stateLogEnabled\":false,\"queueLogEnabled\":false,\"failureLogEnabled\":true,\"tcpHost\":\"127.0.0.1\",\"tcpPort\":\"10515\",\"tcpType\":\"DEFAULT\",\"serialPort\":\"\u002Fdev\u002FttyUSB0\",\"serialType\":\"RTU-BUFFERD\",\"serialBaudrate\":\"9600\",\"serialDatabits\":\"8\",\"serialStopbits\":\"1\",\"serialParity\":\"none\",\"serialConnectionDelay\":\"100\",\"serialAsciiResponseStartDelimiter\":\"0x3A\",\"unit_id\":\"1\",\"commandDelay\":\"1\",\"clientTimeout\":\"1000\",\"reconnectOnTimeout\":true,\"reconnectTimeout\":\"2000\",\"parallelUnitIdsAllowed\":true},{\"id\":\"c77d581657a14449\",\"type\":\"http in\",\"z\":\"9c8e743a8fc74773\",\"name\":\"GET \u002Fmodbus\u002Flearn\u002Fhr\",\"url\":\"\u002Fmodbus\u002Flearn\u002Fhr\",\"method\":\"get\",\"upload\":false,\"swaggerDoc\":\"\",\"x\":180,\"y\":320,\"wires\":[[\"52b52af9c75d4b72\"]]},{\"id\":\"52b52af9c75d4b72\",\"type\":\"modbus-getter\",\"z\":\"9c8e743a8fc74773\",\"name\":\"HR via HTTP\",\"showStatusActivities\":true,\"showErrors\":true,\"showWarnings\":true,\"logIOActivities\":false,\"unitid\":\"1\",\"dataType\":\"HoldingRegister\",\"adr\":\"0\",\"quantity\":\"4\",\"server\":\"e4d42fd62acf4730\",\"useIOFile\":false,\"ioFile\":\"\",\"useIOForPayload\":false,\"emptyMsgOnFail\":false,\"keepMsgProperties\":true,\"x\":420,\"y\":320,\"wires\":[[\"fc002ec8c29e497f\",\"c8cf71f5a0484872\"],[\"3764bd4ada0a452f\"]]},{\"id\":\"fc002ec8c29e497f\",\"type\":\"function\",\"z\":\"9c8e743a8fc74773\",\"name\":\"HTTP body\",\"func\":\"msg.payload = { data: msg.payload, topic: msg.topic };\\nmsg.statusCode = 200;\\nreturn msg;\",\"outputs\":1,\"noerr\":0,\"x\":680,\"y\":280,\"wires\":[[\"c4cbcafa569a4e76\"]]},{\"id\":\"c4cbcafa569a4e76\",\"type\":\"http response\",\"z\":\"9c8e743a8fc74773\",\"name\":\"HTTP 200 JSON\",\"statusCode\":\"\",\"headers\":{},\"x\":920,\"y\":280,\"wires\":[]},{\"id\":\"3764bd4ada0a452f\",\"type\":\"modbus-response\",\"z\":\"9c8e743a8fc74773\",\"name\":\"Getter response\",\"registerShowMax\":20,\"x\":680,\"y\":400,\"wires\":[]},{\"id\":\"c8cf71f5a0484872\",\"type\":\"debug\",\"z\":\"9c8e743a8fc74773\",\"name\":\"SEE: HR via HTTP\",\"active\":true,\"tosidebar\":true,\"console\":false,\"tostatus\":false,\"complete\":\"payload\",\"x\":680,\"y\":240,\"wires\":[]}]",{"name":327,"path":328,"url":329,"downloadUrl":330,"flow":331},"14-Pattern-Serial-RTU-Client","examples\u002F14-Pattern-Serial-RTU-Client.json","https:\u002F\u002Fgithub.com\u002FBiancoRoyal\u002Fnode-red-contrib-modbus\u002Fblob\u002Fmaster\u002Fexamples\u002F14-Pattern-Serial-RTU-Client.json","https:\u002F\u002Fraw.githubusercontent.com\u002FBiancoRoyal\u002Fnode-red-contrib-modbus\u002Fmaster\u002Fexamples\u002F14-Pattern-Serial-RTU-Client.json","[{\"id\":\"cfff84c5bc1747e8\",\"type\":\"tab\",\"label\":\"14 Serial RTU\",\"disabled\":false,\"info\":\"PATTERN: Serial RTU client (educational)\\n\\nFEATURES IN THIS FLOW\\n- Modbus-Client type = serial (RTU-BUFFERD)\\n- Flex-Getter payload same shape as TCP demos\\n- Shows required serial settings without needing CI hardware\\n\\nWHAT THE CONFIG DOES\\n- serialPort → \u002Fdev\u002FttyUSB0, COMx, … (must exist on your host)\\n- serialBaudrate \u002F databits \u002F stopbits \u002F parity → match the device\\n- serialType RTU-BUFFERD → usual choice for RTU\\n- unit_id on client → default slave; override per Flex-Getter payload\\n\\nHOW TO RUN\\n1) Set serialPort to your adapter\\n2) Deploy (client stays inactive without a real port — expected)\\n3) When the port is up, click Read HR to issue FC3\\n\\nNot for CI without hardware. TCP learning: examples 02–13.\\n\\nConfig nodes are flow-scoped: delete this tab to remove client\u002FIO config.\"},{\"id\":\"9188c01b209d4554\",\"type\":\"comment\",\"z\":\"cfff84c5bc1747e8\",\"name\":\"PATTERN: Serial RTU client (educational)\",\"info\":\"PATTERN: Serial RTU client (educational)\\n\\nFEATURES IN THIS FLOW\\n- Modbus-Client type = serial (RTU-BUFFERD)\\n- Flex-Getter payload same shape as TCP demos\\n- Shows required serial settings without needing CI hardware\\n\\nWHAT THE CONFIG DOES\\n- serialPort → \u002Fdev\u002FttyUSB0, COMx, … (must exist on your host)\\n- serialBaudrate \u002F databits \u002F stopbits \u002F parity → match the device\\n- serialType RTU-BUFFERD → usual choice for RTU\\n- unit_id on client → default slave; override per Flex-Getter payload\\n\\nHOW TO RUN\\n1) Set serialPort to your adapter\\n2) Deploy (client stays inactive without a real port — expected)\\n3) When the port is up, click Read HR to issue FC3\\n\\nNot for CI without hardware. TCP learning: examples 02–13.\\n\\nConfig nodes are flow-scoped: delete this tab to remove client\u002FIO config.\",\"x\":200,\"y\":40,\"wires\":[]},{\"id\":\"e0d86899b92b4c65\",\"type\":\"modbus-client\",\"z\":\"cfff84c5bc1747e8\",\"name\":\"Serial Client\",\"clienttype\":\"serial\",\"bufferCommands\":true,\"stateLogEnabled\":false,\"queueLogEnabled\":false,\"failureLogEnabled\":true,\"tcpHost\":\"127.0.0.1\",\"tcpPort\":\"502\",\"tcpType\":\"DEFAULT\",\"serialPort\":\"\u002Fdev\u002FttyUSB0\",\"serialType\":\"RTU-BUFFERD\",\"serialBaudrate\":\"9600\",\"serialDatabits\":\"8\",\"serialStopbits\":\"1\",\"serialParity\":\"none\",\"serialConnectionDelay\":\"100\",\"serialAsciiResponseStartDelimiter\":\"0x3A\",\"unit_id\":\"1\",\"commandDelay\":\"1\",\"clientTimeout\":\"1000\",\"reconnectOnTimeout\":true,\"reconnectTimeout\":\"2000\",\"parallelUnitIdsAllowed\":true},{\"id\":\"6fbc21a86a064591\",\"type\":\"inject\",\"z\":\"cfff84c5bc1747e8\",\"name\":\"Read HR (when port up)\",\"props\":[{\"p\":\"payload\"}],\"repeat\":\"\",\"crontab\":\"\",\"once\":false,\"topic\":\"\",\"payload\":\"\",\"payloadType\":\"date\",\"x\":200,\"y\":280,\"wires\":[[\"c8db96ee013b463f\"]]},{\"id\":\"c8db96ee013b463f\",\"type\":\"function\",\"z\":\"cfff84c5bc1747e8\",\"name\":\"FC3 payload\",\"func\":\"msg.payload = { fc: 3, unitid: 1, address: 0, quantity: 2 };\\nreturn msg;\",\"outputs\":1,\"noerr\":0,\"x\":420,\"y\":280,\"wires\":[[\"9f50337700844eef\"]]},{\"id\":\"9f50337700844eef\",\"type\":\"modbus-flex-getter\",\"z\":\"cfff84c5bc1747e8\",\"name\":\"\",\"showStatusActivities\":true,\"showErrors\":true,\"showWarnings\":true,\"logIOActivities\":false,\"server\":\"e0d86899b92b4c65\",\"useIOFile\":false,\"ioFile\":\"\",\"useIOForPayload\":false,\"emptyMsgOnFail\":false,\"keepMsgProperties\":true,\"delayOnStart\":false,\"startDelayTime\":\"\",\"x\":640,\"y\":280,\"wires\":[[\"b3f1600ae2814b02\"],[\"3bc74b29e8b24200\"]]},{\"id\":\"3bc74b29e8b24200\",\"type\":\"modbus-response\",\"z\":\"cfff84c5bc1747e8\",\"name\":\"\",\"registerShowMax\":20,\"x\":860,\"y\":360,\"wires\":[]},{\"id\":\"b3f1600ae2814b02\",\"type\":\"debug\",\"z\":\"cfff84c5bc1747e8\",\"name\":\"SEE: modbus-flex-getter\",\"active\":true,\"tosidebar\":true,\"console\":false,\"tostatus\":false,\"complete\":\"payload\",\"x\":860,\"y\":200,\"wires\":[]}]",{"name":333,"path":334,"url":335,"downloadUrl":336,"flow":337},"15-Pattern-Gateway-With-Buffer-Server","examples\u002F15-Pattern-Gateway-With-Buffer-Server.json","https:\u002F\u002Fgithub.com\u002FBiancoRoyal\u002Fnode-red-contrib-modbus\u002Fblob\u002Fmaster\u002Fexamples\u002F15-Pattern-Gateway-With-Buffer-Server.json","https:\u002F\u002Fraw.githubusercontent.com\u002FBiancoRoyal\u002Fnode-red-contrib-modbus\u002Fmaster\u002Fexamples\u002F15-Pattern-Gateway-With-Buffer-Server.json","[{\"id\":\"6bda7708cf8a4b48\",\"type\":\"tab\",\"label\":\"15 Gateway (buffer)\",\"disabled\":false,\"info\":\"PATTERN: Gateway with buffer server (what works TODAY)\\n\\nFEATURES IN THIS FLOW\\n- Modbus-Server as a buffer-backed 'cache' slave\\n- Flow inject fills holding buffers; external or local clients read them\\n- Shows the boundary of the in-package server (no per-request flow replies)\\n\\nWHAT THE CONFIG DOES\\n- Server buffers hold the last written values (FC3\u002FFC6 style access from clients)\\n- Inject payload register\u002Faddress\u002Fvalue → writes into the buffer\\n- Local Modbus-Read demonstrates reading the cache back\\n\\nHOW TO RUN\\n1) Deploy\\n2) Click Cache HR values\\n3) Watch Read \u002F Debug for buffered values\\n4) Point an external Modbus master at 127.0.0.1:10516 to read the same buffers\\n\\nDemo TCP port: 10516\\n\\nYou CANNOT craft protocol responses per inbound request in the flow.\\nDynamic Server \u002F Gateway = GitHub #567 → planned SEPARATE package.\\nSee docs\u002Fp4nr\u002Fcapabilities\u002Fmodbus-dynamic-server-gateway.md\\n\\nConfig nodes are flow-scoped: delete this tab to remove client\u002FIO config.\"},{\"id\":\"28e65f018a4d42d3\",\"type\":\"comment\",\"z\":\"6bda7708cf8a4b48\",\"name\":\"PATTERN: Gateway with buffer server (what works TODAY)\",\"info\":\"PATTERN: Gateway with buffer server (what works TODAY)\\n\\nFEATURES IN THIS FLOW\\n- Modbus-Server as a buffer-backed 'cache' slave\\n- Flow inject fills holding buffers; external or local clients read them\\n- Shows the boundary of the in-package server (no per-request flow replies)\\n\\nWHAT THE CONFIG DOES\\n- Server buffers hold the last written values (FC3\u002FFC6 style access from clients)\\n- Inject payload register\u002Faddress\u002Fvalue → writes into the buffer\\n- Local Modbus-Read demonstrates reading the cache back\\n\\nHOW TO RUN\\n1) Deploy\\n2) Click Cache HR values\\n3) Watch Read \u002F Debug for buffered values\\n4) Point an external Modbus master at 127.0.0.1:10516 to read the same buffers\\n\\nDemo TCP port: 10516\\n\\nYou CANNOT craft protocol responses per inbound request in the flow.\\nDynamic Server \u002F Gateway = GitHub #567 → planned SEPARATE package.\\nSee docs\u002Fp4nr\u002Fcapabilities\u002Fmodbus-dynamic-server-gateway.md\\n\\nConfig nodes are flow-scoped: delete this tab to remove client\u002FIO config.\",\"x\":200,\"y\":40,\"wires\":[]},{\"id\":\"457f77e79c144f24\",\"type\":\"inject\",\"z\":\"6bda7708cf8a4b48\",\"name\":\"Cache HR values\",\"props\":[{\"p\":\"payload\"}],\"repeat\":\"10\",\"crontab\":\"\",\"once\":true,\"onceDelay\":0.5,\"topic\":\"\",\"payload\":\"\",\"payloadType\":\"date\",\"x\":180,\"y\":280,\"wires\":[[\"4ea0633d78874a0f\"]]},{\"id\":\"4ea0633d78874a0f\",\"type\":\"function\",\"z\":\"6bda7708cf8a4b48\",\"name\":\"simulate cache\",\"func\":\"msg.payload = {\\n  value: [100, 200, 300],\\n  register: 'holding',\\n  address: 0,\\n  disableMsgOutput: 0\\n};\\nreturn msg;\",\"outputs\":1,\"noerr\":0,\"x\":400,\"y\":280,\"wires\":[[\"15e90e7d8d0445c2\"]]},{\"id\":\"15e90e7d8d0445c2\",\"type\":\"modbus-server\",\"z\":\"6bda7708cf8a4b48\",\"name\":\"Edge cache slave\",\"logEnabled\":false,\"hostname\":\"127.0.0.1\",\"serverPort\":\"10516\",\"responseDelay\":100,\"delayUnit\":\"ms\",\"coilsBufferSize\":10000,\"holdingBufferSize\":10000,\"inputBufferSize\":10000,\"discreteBufferSize\":10000,\"showErrors\":true,\"showStatusActivities\":true,\"x\":640,\"y\":280,\"wires\":[[\"0093f8230f9a40a3\"],[\"0093f8230f9a40a3\"],[\"0093f8230f9a40a3\"],[\"0093f8230f9a40a3\"],[\"0093f8230f9a40a3\"]]},{\"id\":\"0093f8230f9a40a3\",\"type\":\"debug\",\"z\":\"6bda7708cf8a4b48\",\"name\":\"server activity\",\"active\":true,\"tosidebar\":true,\"console\":false,\"tostatus\":false,\"complete\":\"true\",\"x\":880,\"y\":240,\"wires\":[]},{\"id\":\"5e21d3d4d2a0480b\",\"type\":\"modbus-client\",\"z\":\"6bda7708cf8a4b48\",\"name\":\"Local verify client\",\"clienttype\":\"tcp\",\"bufferCommands\":true,\"stateLogEnabled\":false,\"queueLogEnabled\":false,\"failureLogEnabled\":true,\"tcpHost\":\"127.0.0.1\",\"tcpPort\":\"10516\",\"tcpType\":\"DEFAULT\",\"serialPort\":\"\u002Fdev\u002FttyUSB0\",\"serialType\":\"RTU-BUFFERD\",\"serialBaudrate\":\"9600\",\"serialDatabits\":\"8\",\"serialStopbits\":\"1\",\"serialParity\":\"none\",\"serialConnectionDelay\":\"100\",\"serialAsciiResponseStartDelimiter\":\"0x3A\",\"unit_id\":\"1\",\"commandDelay\":\"1\",\"clientTimeout\":\"1000\",\"reconnectOnTimeout\":true,\"reconnectTimeout\":\"2000\",\"parallelUnitIdsAllowed\":true},{\"id\":\"4ad4734d4bcf4d86\",\"type\":\"modbus-read\",\"z\":\"6bda7708cf8a4b48\",\"name\":\"Verify cache FC3\",\"topic\":\"\",\"showStatusActivities\":true,\"logIOActivities\":false,\"showErrors\":true,\"showWarnings\":true,\"unitid\":\"1\",\"dataType\":\"HoldingRegister\",\"adr\":\"0\",\"quantity\":\"3\",\"rate\":\"5\",\"rateUnit\":\"s\",\"delayOnStart\":true,\"startDelayTime\":\"2\",\"server\":\"5e21d3d4d2a0480b\",\"useIOFile\":false,\"ioFile\":\"\",\"useIOForPayload\":false,\"emptyMsgOnFail\":false,\"keepMsgProperties\":false,\"x\":640,\"y\":420,\"wires\":[[\"b85250d7114e4988\"],[\"47eb90f558f04c57\"]]},{\"id\":\"47eb90f558f04c57\",\"type\":\"modbus-response\",\"z\":\"6bda7708cf8a4b48\",\"name\":\"\",\"registerShowMax\":20,\"x\":880,\"y\":500,\"wires\":[]},{\"id\":\"b85250d7114e4988\",\"type\":\"debug\",\"z\":\"6bda7708cf8a4b48\",\"name\":\"SEE: Verify cache FC3\",\"active\":true,\"tosidebar\":true,\"console\":false,\"tostatus\":false,\"complete\":\"payload\",\"x\":880,\"y\":340,\"wires\":[]}]",{"name":339,"path":340,"url":341,"downloadUrl":342,"flow":343},"16-Bugfix-Shared-Client-Disable-Isolation","examples\u002F16-Bugfix-Shared-Client-Disable-Isolation.json","https:\u002F\u002Fgithub.com\u002FBiancoRoyal\u002Fnode-red-contrib-modbus\u002Fblob\u002Fmaster\u002Fexamples\u002F16-Bugfix-Shared-Client-Disable-Isolation.json","https:\u002F\u002Fraw.githubusercontent.com\u002FBiancoRoyal\u002Fnode-red-contrib-modbus\u002Fmaster\u002Fexamples\u002F16-Bugfix-Shared-Client-Disable-Isolation.json","[{\"id\":\"98f2926c35304635\",\"type\":\"tab\",\"label\":\"16 Shared-Client #423\",\"disabled\":false,\"info\":\"BUGFIX DEMO: shared Modbus-Client — disable one Flex-Getter (#423)\\n\\nFEATURES IN THIS FLOW\\n- Two Modbus-Flex-Getter nodes share ONE Modbus-Client\\n- Keeper Flex-Getter keeps polling while you disable the other\\n- Shows fix for GitHub #423 \u002F #487 (disable one must not STOP siblings)\\n\\nWHAT THE CONFIG DOES\\n- Both Flex-Getters → same Client (tcpPort 10517)\\n- showStatusActivities=true → you see connected \u002F closed on the node\\n- Keeper inject repeats every 2 s → continuous SEE: debug traffic\\n- DISABLE ME inject is manual only (for optional compare)\\n\\nHOW TO RUN\\n1) Deploy — wait until both Flex-Getters look active\u002Fconnected\\n2) Watch Debug SEE: KEEP — payload arrays every ~2 s\\n3) Select node «DISABLE ME (#423)» → Disable → Deploy (should finish quickly, not ~15 s)\\n4) PASS: SEE: KEEP still receives data; KEEP node stays active (not closed)\\n5) FAIL (old bug): KEEP goes closed \u002F Debug stops when DISABLE ME is disabled\\n6) Optional: re-enable DISABLE ME, or delete it — KEEP must still run\\n\\nDemo TCP port: 10517\\n\\nRelated: docs\u002Fp4nr\u002Fcapabilities\u002Fshared-client-deregister-isolation.md\\nConsumers on a *different* Client are unrelated — this tab uses one shared client on purpose.\\n\\nConfig nodes are flow-scoped: delete this tab to remove client\u002FIO config.\"},{\"id\":\"3ab9fd5638364d28\",\"type\":\"comment\",\"z\":\"98f2926c35304635\",\"name\":\"BUGFIX DEMO: shared Modbus-Client — disable one Flex-Getter \",\"info\":\"BUGFIX DEMO: shared Modbus-Client — disable one Flex-Getter (#423)\\n\\nFEATURES IN THIS FLOW\\n- Two Modbus-Flex-Getter nodes share ONE Modbus-Client\\n- Keeper Flex-Getter keeps polling while you disable the other\\n- Shows fix for GitHub #423 \u002F #487 (disable one must not STOP siblings)\\n\\nWHAT THE CONFIG DOES\\n- Both Flex-Getters → same Client (tcpPort 10517)\\n- showStatusActivities=true → you see connected \u002F closed on the node\\n- Keeper inject repeats every 2 s → continuous SEE: debug traffic\\n- DISABLE ME inject is manual only (for optional compare)\\n\\nHOW TO RUN\\n1) Deploy — wait until both Flex-Getters look active\u002Fconnected\\n2) Watch Debug SEE: KEEP — payload arrays every ~2 s\\n3) Select node «DISABLE ME (#423)» → Disable → Deploy (should finish quickly, not ~15 s)\\n4) PASS: SEE: KEEP still receives data; KEEP node stays active (not closed)\\n5) FAIL (old bug): KEEP goes closed \u002F Debug stops when DISABLE ME is disabled\\n6) Optional: re-enable DISABLE ME, or delete it — KEEP must still run\\n\\nDemo TCP port: 10517\\n\\nRelated: docs\u002Fp4nr\u002Fcapabilities\u002Fshared-client-deregister-isolation.md\\nConsumers on a *different* Client are unrelated — this tab uses one shared client on purpose.\\n\\nConfig nodes are flow-scoped: delete this tab to remove client\u002FIO config.\",\"x\":200,\"y\":40,\"wires\":[]},{\"id\":\"b0d038cf63b546b3\",\"type\":\"modbus-server\",\"z\":\"98f2926c35304635\",\"name\":\"Shared-Client Demo Server\",\"logEnabled\":false,\"hostname\":\"127.0.0.1\",\"serverPort\":\"10517\",\"responseDelay\":100,\"delayUnit\":\"ms\",\"coilsBufferSize\":10000,\"holdingBufferSize\":10000,\"inputBufferSize\":10000,\"discreteBufferSize\":10000,\"showErrors\":false,\"showStatusActivities\":false,\"x\":140,\"y\":200,\"wires\":[[],[],[],[],[]]},{\"id\":\"66d38cf9e0204762\",\"type\":\"modbus-client\",\"z\":\"98f2926c35304635\",\"name\":\"SHARED Client (both getters)\",\"clienttype\":\"tcp\",\"bufferCommands\":true,\"stateLogEnabled\":false,\"queueLogEnabled\":false,\"failureLogEnabled\":true,\"tcpHost\":\"127.0.0.1\",\"tcpPort\":\"10517\",\"tcpType\":\"DEFAULT\",\"serialPort\":\"\u002Fdev\u002FttyUSB0\",\"serialType\":\"RTU-BUFFERD\",\"serialBaudrate\":\"9600\",\"serialDatabits\":\"8\",\"serialStopbits\":\"1\",\"serialParity\":\"none\",\"serialConnectionDelay\":\"100\",\"serialAsciiResponseStartDelimiter\":\"0x3A\",\"unit_id\":\"1\",\"commandDelay\":\"1\",\"clientTimeout\":\"1000\",\"reconnectOnTimeout\":true,\"reconnectTimeout\":\"2000\",\"parallelUnitIdsAllowed\":true},{\"id\":\"64028107bd9a48f8\",\"type\":\"inject\",\"z\":\"98f2926c35304635\",\"name\":\"KEEP poll every 2s\",\"props\":[{\"p\":\"payload\"}],\"repeat\":\"2\",\"crontab\":\"\",\"once\":true,\"onceDelay\":1.5,\"topic\":\"\",\"payload\":\"\",\"payloadType\":\"date\",\"x\":180,\"y\":320,\"wires\":[[\"1e9856a169a34820\"]]},{\"id\":\"1e9856a169a34820\",\"type\":\"function\",\"z\":\"98f2926c35304635\",\"name\":\"FC3 qty 2\",\"func\":\"msg.payload = { fc: 3, unitid: 1, address: 0, quantity: 2 };\\nreturn msg;\",\"outputs\":1,\"noerr\":0,\"x\":400,\"y\":320,\"wires\":[[\"c8b0aecd6a314926\"]]},{\"id\":\"c8b0aecd6a314926\",\"type\":\"modbus-flex-getter\",\"z\":\"98f2926c35304635\",\"name\":\"KEEP — leave enabled\",\"showStatusActivities\":true,\"showErrors\":true,\"showWarnings\":true,\"logIOActivities\":false,\"server\":\"66d38cf9e0204762\",\"useIOFile\":false,\"ioFile\":\"\",\"useIOForPayload\":false,\"emptyMsgOnFail\":false,\"keepMsgProperties\":true,\"delayOnStart\":true,\"startDelayTime\":\"1\",\"x\":640,\"y\":320,\"wires\":[[\"5def1a7d94204e28\"],[\"5ab26a242d714a15\"]]},{\"id\":\"5ab26a242d714a15\",\"type\":\"modbus-response\",\"z\":\"98f2926c35304635\",\"name\":\"KEEP response\",\"registerShowMax\":20,\"x\":920,\"y\":400,\"wires\":[]},{\"id\":\"4532469640d1474f\",\"type\":\"inject\",\"z\":\"98f2926c35304635\",\"name\":\"Optional read (DISABLE ME path)\",\"props\":[{\"p\":\"payload\"}],\"repeat\":\"\",\"crontab\":\"\",\"once\":false,\"topic\":\"\",\"payload\":\"\",\"payloadType\":\"date\",\"x\":220,\"y\":500,\"wires\":[[\"200b334ea89e4f06\"]]},{\"id\":\"200b334ea89e4f06\",\"type\":\"function\",\"z\":\"98f2926c35304635\",\"name\":\"FC3 qty 4\",\"func\":\"msg.payload = { fc: 3, unitid: 1, address: 0, quantity: 4 };\\nreturn msg;\",\"outputs\":1,\"noerr\":0,\"x\":440,\"y\":500,\"wires\":[[\"2c6487c19acc4265\"]]},{\"id\":\"2c6487c19acc4265\",\"type\":\"modbus-flex-getter\",\"z\":\"98f2926c35304635\",\"name\":\"DISABLE ME (#423)\",\"showStatusActivities\":true,\"showErrors\":true,\"showWarnings\":true,\"logIOActivities\":false,\"server\":\"66d38cf9e0204762\",\"useIOFile\":false,\"ioFile\":\"\",\"useIOForPayload\":false,\"emptyMsgOnFail\":false,\"keepMsgProperties\":true,\"delayOnStart\":true,\"startDelayTime\":\"1\",\"x\":680,\"y\":500,\"wires\":[[\"6e02bc6de0bf41fa\"],[\"95e2aaaebf9f4890\"]]},{\"id\":\"95e2aaaebf9f4890\",\"type\":\"modbus-response\",\"z\":\"98f2926c35304635\",\"name\":\"DISABLE ME response\",\"registerShowMax\":20,\"x\":960,\"y\":580,\"wires\":[]},{\"id\":\"5def1a7d94204e28\",\"type\":\"debug\",\"z\":\"98f2926c35304635\",\"name\":\"SEE: KEEP — leave enabled\",\"active\":true,\"tosidebar\":true,\"console\":false,\"tostatus\":false,\"complete\":\"payload\",\"x\":920,\"y\":240,\"wires\":[]},{\"id\":\"6e02bc6de0bf41fa\",\"type\":\"debug\",\"z\":\"98f2926c35304635\",\"name\":\"SEE: DISABLE ME (#423)\",\"active\":true,\"tosidebar\":true,\"console\":false,\"tostatus\":false,\"complete\":\"payload\",\"x\":960,\"y\":469,\"wires\":[]}]",{"name":345,"path":346,"url":347,"downloadUrl":348,"flow":349},"17-Node-Coils-Discrete-And-Bit-Writes","examples\u002F17-Node-Coils-Discrete-And-Bit-Writes.json","https:\u002F\u002Fgithub.com\u002FBiancoRoyal\u002Fnode-red-contrib-modbus\u002Fblob\u002Fmaster\u002Fexamples\u002F17-Node-Coils-Discrete-And-Bit-Writes.json","https:\u002F\u002Fraw.githubusercontent.com\u002FBiancoRoyal\u002Fnode-red-contrib-modbus\u002Fmaster\u002Fexamples\u002F17-Node-Coils-Discrete-And-Bit-Writes.json","[{\"id\":\"a17tab0000000001\",\"type\":\"tab\",\"label\":\"17 Coils Discrete Bits\",\"disabled\":false,\"info\":\"NODE: Coils, Discrete Inputs, FC5\u002FFC15 writes\\n\\nFEATURES IN THIS FLOW\\n- Modbus-Write Coil (FC5) and multi-coil (FC15 via Flex-Write)\\n- Modbus-Read DiscreteInput (FC2) and Coil (FC1)\\n- Local modbus-server buffer for bit areas\\n\\nWHAT THE CONFIG DOES\\n- Write dataType Coil + quantity 1 → FC5\\n- Flex-Write fc 15 with boolean array → FC15\\n- Read dataType DiscreteInput → FC2; Coil → FC1\\n- Flow-scoped client on 127.0.0.1:10518\\n\\nHOW TO RUN\\n1) Deploy\\n2) Click Write Coil TRUE (FC5) then Read FC1\\n3) Click Flex FC15 then compare FC1 Debug\\n4) Watch FC2 Discrete poll (may stay false unless you inject discrete buffer via server tools \u002F example 12)\\n\\nDemo TCP port: 10518\\n\\nConfig nodes are flow-scoped: delete this tab to remove client\u002FIO config.\"},{\"id\":\"a17cmt0000000001\",\"type\":\"comment\",\"z\":\"a17tab0000000001\",\"name\":\"NODE: Coils \u002F Discrete \u002F Bit writes\",\"info\":\"NODE: Coils, Discrete Inputs, FC5\u002FFC15 writes\\n\\nFEATURES IN THIS FLOW\\n- Modbus-Write Coil (FC5) and multi-coil (FC15 via Flex-Write)\\n- Modbus-Read DiscreteInput (FC2) and Coil (FC1)\\n- Local modbus-server buffer for bit areas\\n\\nWHAT THE CONFIG DOES\\n- Write dataType Coil + quantity 1 → FC5\\n- Flex-Write fc 15 with boolean array → FC15\\n- Read dataType DiscreteInput → FC2; Coil → FC1\\n- Flow-scoped client on 127.0.0.1:10518\\n\\nHOW TO RUN\\n1) Deploy\\n2) Click Write Coil TRUE (FC5) then Read FC1\\n3) Click Flex FC15 then compare FC1 Debug\\n4) Watch FC2 Discrete poll (may stay false unless you inject discrete buffer via server tools \u002F example 12)\\n\\nDemo TCP port: 10518\\n\\nConfig nodes are flow-scoped: delete this tab to remove client\u002FIO config.\",\"x\":220,\"y\":40,\"wires\":[]},{\"id\":\"a17server00000001\",\"type\":\"modbus-server\",\"z\":\"a17tab0000000001\",\"name\":\"\",\"logEnabled\":false,\"hostname\":\"127.0.0.1\",\"serverPort\":\"10518\",\"responseDelay\":100,\"delayUnit\":\"ms\",\"coilsBufferSize\":10000,\"holdingBufferSize\":10000,\"inputBufferSize\":10000,\"discreteBufferSize\":10000,\"showErrors\":false,\"showStatusActivities\":false,\"x\":120,\"y\":160,\"wires\":[[],[],[],[],[]]},{\"id\":\"a17client00000001\",\"type\":\"modbus-client\",\"z\":\"a17tab0000000001\",\"name\":\"Bits Client\",\"clienttype\":\"tcp\",\"bufferCommands\":true,\"stateLogEnabled\":false,\"queueLogEnabled\":false,\"failureLogEnabled\":true,\"tcpHost\":\"127.0.0.1\",\"tcpPort\":\"10518\",\"tcpType\":\"DEFAULT\",\"serialPort\":\"\u002Fdev\u002FttyUSB0\",\"serialType\":\"RTU-BUFFERD\",\"serialBaudrate\":\"9600\",\"serialDatabits\":\"8\",\"serialStopbits\":\"1\",\"serialParity\":\"none\",\"serialConnectionDelay\":\"100\",\"serialAsciiResponseStartDelimiter\":\"0x3A\",\"unit_id\":\"1\",\"commandDelay\":\"1\",\"clientTimeout\":\"1000\",\"reconnectOnTimeout\":true,\"reconnectTimeout\":\"2000\",\"parallelUnitIdsAllowed\":true},{\"id\":\"a17injfc5\",\"type\":\"inject\",\"z\":\"a17tab0000000001\",\"name\":\"Write Coil TRUE (FC5)\",\"props\":[{\"p\":\"payload\"}],\"repeat\":\"\",\"crontab\":\"\",\"once\":false,\"topic\":\"\",\"payload\":\"true\",\"payloadType\":\"bool\",\"x\":180,\"y\":280,\"wires\":[[\"a17writefc5\"]]},{\"id\":\"a17writefc5\",\"type\":\"modbus-write\",\"z\":\"a17tab0000000001\",\"name\":\"FC5 Coil\",\"showStatusActivities\":true,\"showErrors\":true,\"showWarnings\":true,\"unitid\":\"1\",\"dataType\":\"Coil\",\"adr\":\"0\",\"quantity\":\"1\",\"server\":\"a17client00000001\",\"emptyMsgOnFail\":false,\"keepMsgProperties\":false,\"x\":420,\"y\":280,\"wires\":[[\"a17dbgfc5\"],[\"a17respfc5\"]]},{\"id\":\"a17respfc5\",\"type\":\"modbus-response\",\"z\":\"a17tab0000000001\",\"name\":\"FC5 response\",\"registerShowMax\":20,\"x\":640,\"y\":320,\"wires\":[]},{\"id\":\"a17dbgfc5\",\"type\":\"debug\",\"z\":\"a17tab0000000001\",\"name\":\"SEE: FC5\",\"active\":true,\"tosidebar\":true,\"console\":false,\"tostatus\":false,\"complete\":\"payload\",\"x\":620,\"y\":240,\"wires\":[]},{\"id\":\"a17injfc15\",\"type\":\"inject\",\"z\":\"a17tab0000000001\",\"name\":\"Flex FC15\",\"props\":[{\"p\":\"payload\"}],\"repeat\":\"\",\"crontab\":\"\",\"once\":false,\"topic\":\"\",\"payload\":\"\",\"payloadType\":\"date\",\"x\":150,\"y\":400,\"wires\":[[\"a17fnfc15\"]]},{\"id\":\"a17fnfc15\",\"type\":\"function\",\"z\":\"a17tab0000000001\",\"name\":\"Build FC15\",\"func\":\"msg.payload = { value: [true, false, true, true], fc: 15, unitid: 1, address: 0, quantity: 4 };\\nreturn msg;\",\"outputs\":1,\"noerr\":0,\"x\":360,\"y\":400,\"wires\":[[\"a17flexw\"]]},{\"id\":\"a17flexw\",\"type\":\"modbus-flex-write\",\"z\":\"a17tab0000000001\",\"name\":\"\",\"showStatusActivities\":true,\"showErrors\":true,\"showWarnings\":true,\"server\":\"a17client00000001\",\"emptyMsgOnFail\":false,\"keepMsgProperties\":true,\"x\":580,\"y\":400,\"wires\":[[\"a17dbgfc15\"],[\"a17respfc15\"]]},{\"id\":\"a17respfc15\",\"type\":\"modbus-response\",\"z\":\"a17tab0000000001\",\"name\":\"FC15 response\",\"registerShowMax\":20,\"x\":820,\"y\":440,\"wires\":[]},{\"id\":\"a17dbgfc15\",\"type\":\"debug\",\"z\":\"a17tab0000000001\",\"name\":\"SEE: FC15\",\"active\":true,\"tosidebar\":true,\"console\":false,\"tostatus\":false,\"complete\":\"payload\",\"x\":800,\"y\":360,\"wires\":[]},{\"id\":\"a17readfc1\",\"type\":\"modbus-read\",\"z\":\"a17tab0000000001\",\"name\":\"FC1 Coils\",\"showStatusActivities\":true,\"logIOActivities\":false,\"showErrors\":true,\"showWarnings\":true,\"unitid\":\"1\",\"dataType\":\"Coil\",\"adr\":\"0\",\"quantity\":\"8\",\"rate\":\"2\",\"rateUnit\":\"s\",\"delayOnStart\":true,\"startDelayTime\":\"1\",\"server\":\"a17client00000001\",\"useIOFile\":false,\"ioFile\":\"\",\"useIOForPayload\":false,\"emptyMsgOnFail\":false,\"x\":400,\"y\":520,\"wires\":[[\"a17dbgfc1\"],[\"a17respfc1\"]]},{\"id\":\"a17respfc1\",\"type\":\"modbus-response\",\"z\":\"a17tab0000000001\",\"name\":\"FC1 response\",\"registerShowMax\":20,\"x\":640,\"y\":560,\"wires\":[]},{\"id\":\"a17dbgfc1\",\"type\":\"debug\",\"z\":\"a17tab0000000001\",\"name\":\"SEE: FC1\",\"active\":true,\"tosidebar\":true,\"console\":false,\"tostatus\":false,\"complete\":\"payload\",\"x\":620,\"y\":480,\"wires\":[]},{\"id\":\"a17readfc2\",\"type\":\"modbus-read\",\"z\":\"a17tab0000000001\",\"name\":\"FC2 Discrete\",\"showStatusActivities\":true,\"logIOActivities\":false,\"showErrors\":true,\"showWarnings\":true,\"unitid\":\"1\",\"dataType\":\"DiscreteInput\",\"adr\":\"0\",\"quantity\":\"8\",\"rate\":\"2\",\"rateUnit\":\"s\",\"delayOnStart\":true,\"startDelayTime\":\"1\",\"server\":\"a17client00000001\",\"useIOFile\":false,\"ioFile\":\"\",\"useIOForPayload\":false,\"emptyMsgOnFail\":false,\"x\":410,\"y\":640,\"wires\":[[\"a17dbgfc2\"],[\"a17respfc2\"]]},{\"id\":\"a17respfc2\",\"type\":\"modbus-response\",\"z\":\"a17tab0000000001\",\"name\":\"FC2 response\",\"registerShowMax\":20,\"x\":650,\"y\":680,\"wires\":[]},{\"id\":\"a17dbgfc2\",\"type\":\"debug\",\"z\":\"a17tab0000000001\",\"name\":\"SEE: FC2\",\"active\":true,\"tosidebar\":true,\"console\":false,\"tostatus\":false,\"complete\":\"payload\",\"x\":630,\"y\":600,\"wires\":[]}]",{"name":351,"path":352,"url":353,"downloadUrl":354,"flow":355},"18-Pattern-Ops-Timeout-And-Reconnect","examples\u002F18-Pattern-Ops-Timeout-And-Reconnect.json","https:\u002F\u002Fgithub.com\u002FBiancoRoyal\u002Fnode-red-contrib-modbus\u002Fblob\u002Fmaster\u002Fexamples\u002F18-Pattern-Ops-Timeout-And-Reconnect.json","https:\u002F\u002Fraw.githubusercontent.com\u002FBiancoRoyal\u002Fnode-red-contrib-modbus\u002Fmaster\u002Fexamples\u002F18-Pattern-Ops-Timeout-And-Reconnect.json","[{\"id\":\"a18tab0000000001\",\"type\":\"tab\",\"label\":\"18 Ops Timeout Reconnect\",\"disabled\":false,\"info\":\"PATTERN: Ops — timeout, logs, reconnect\\n\\nFEATURES IN THIS FLOW\\n- Client with failure\u002Fstate-oriented logging enabled\\n- Flex-Getter polling Holding Registers\\n- Comment describes how to disturb and recover the local server\\n- Teaches 5.60.1+ reconnect honesty (Timed out \u002F network blips)\\n\\nWHAT THE CONFIG DOES\\n- reconnectOnTimeout=true, clientTimeout=1000, reconnectTimeout=2000\\n- failureLogEnabled \u002F showErrors for visibility\\n- emptyMsgOnFail on Flex-Getter optional for downstream handling\\n- Demo server on 10519\\n\\nHOW TO RUN\\n1) Deploy; wait until client active and SEE: values update\\n2) Disable the Modbus-Server node and Deploy (or stop binding briefly)\\n3) Observe timeout \u002F inactive behaviour in status and Debug\\n4) Re-enable the Modbus-Server and Deploy\\n5) Confirm Flex-Getter recovers without restarting Node-RED\\n\\nDemo TCP port: 10519\\n\\nConfig nodes are flow-scoped: delete this tab to remove client\u002FIO config.\"},{\"id\":\"a18cmt0000000001\",\"type\":\"comment\",\"z\":\"a18tab0000000001\",\"name\":\"PATTERN: Ops timeout \\u0026 reconnect\",\"info\":\"PATTERN: Ops — timeout, logs, reconnect\\n\\nFEATURES IN THIS FLOW\\n- Client with failure\u002Fstate-oriented logging enabled\\n- Flex-Getter polling Holding Registers\\n- Comment describes how to disturb and recover the local server\\n- Teaches 5.60.1+ reconnect honesty (Timed out \u002F network blips)\\n\\nWHAT THE CONFIG DOES\\n- reconnectOnTimeout=true, clientTimeout=1000, reconnectTimeout=2000\\n- failureLogEnabled \u002F showErrors for visibility\\n- emptyMsgOnFail on Flex-Getter optional for downstream handling\\n- Demo server on 10519\\n\\nHOW TO RUN\\n1) Deploy; wait until client active and SEE: values update\\n2) Disable the Modbus-Server node and Deploy (or stop binding briefly)\\n3) Observe timeout \u002F inactive behaviour in status and Debug\\n4) Re-enable the Modbus-Server and Deploy\\n5) Confirm Flex-Getter recovers without restarting Node-RED\\n\\nDemo TCP port: 10519\\n\\nConfig nodes are flow-scoped: delete this tab to remove client\u002FIO config.\",\"x\":230,\"y\":40,\"wires\":[]},{\"id\":\"a18server00000001\",\"type\":\"modbus-server\",\"z\":\"a18tab0000000001\",\"name\":\"Ops Demo Server\",\"logEnabled\":false,\"hostname\":\"127.0.0.1\",\"serverPort\":\"10519\",\"responseDelay\":100,\"delayUnit\":\"ms\",\"coilsBufferSize\":2000,\"holdingBufferSize\":2000,\"inputBufferSize\":2000,\"discreteBufferSize\":2000,\"showErrors\":true,\"showStatusActivities\":true,\"x\":160,\"y\":160,\"wires\":[[],[],[],[],[]]},{\"id\":\"a18client00000001\",\"type\":\"modbus-client\",\"z\":\"a18tab0000000001\",\"name\":\"Ops Client\",\"clienttype\":\"tcp\",\"bufferCommands\":true,\"stateLogEnabled\":true,\"queueLogEnabled\":false,\"failureLogEnabled\":true,\"tcpHost\":\"127.0.0.1\",\"tcpPort\":\"10519\",\"tcpType\":\"DEFAULT\",\"serialPort\":\"\u002Fdev\u002FttyUSB0\",\"serialType\":\"RTU-BUFFERD\",\"serialBaudrate\":\"9600\",\"serialDatabits\":\"8\",\"serialStopbits\":\"1\",\"serialParity\":\"none\",\"serialConnectionDelay\":\"100\",\"serialAsciiResponseStartDelimiter\":\"0x3A\",\"unit_id\":\"1\",\"commandDelay\":\"5\",\"clientTimeout\":\"1000\",\"reconnectOnTimeout\":true,\"reconnectTimeout\":\"2000\",\"parallelUnitIdsAllowed\":true,\"showErrors\":true,\"showWarnings\":true,\"showLogs\":true},{\"id\":\"a18inj\",\"type\":\"inject\",\"z\":\"a18tab0000000001\",\"name\":\"Poll trigger 1s\",\"props\":[{\"p\":\"payload\"}],\"repeat\":\"1\",\"crontab\":\"\",\"once\":true,\"onceDelay\":\"1\",\"topic\":\"\",\"payload\":\"\",\"payloadType\":\"date\",\"x\":160,\"y\":280,\"wires\":[[\"a18fn\"]]},{\"id\":\"a18fn\",\"type\":\"function\",\"z\":\"a18tab0000000001\",\"name\":\"FC3 payload\",\"func\":\"msg.payload = { fc: 3, unitid: 1, address: 0, quantity: 4 };\\nreturn msg;\",\"outputs\":1,\"noerr\":0,\"x\":360,\"y\":280,\"wires\":[[\"a18flex\"]]},{\"id\":\"a18flex\",\"type\":\"modbus-flex-getter\",\"z\":\"a18tab0000000001\",\"name\":\"\",\"showStatusActivities\":true,\"showErrors\":true,\"showWarnings\":true,\"logIOActivities\":false,\"server\":\"a18client00000001\",\"useIOFile\":false,\"ioFile\":\"\",\"useIOForPayload\":false,\"emptyMsgOnFail\":true,\"keepMsgProperties\":true,\"delayOnStart\":true,\"startDelayTime\":\"1\",\"x\":580,\"y\":280,\"wires\":[[\"a18dbg\"],[\"a18resp\"]]},{\"id\":\"a18resp\",\"type\":\"modbus-response\",\"z\":\"a18tab0000000001\",\"name\":\"Ops response\",\"registerShowMax\":20,\"x\":820,\"y\":320,\"wires\":[]},{\"id\":\"a18dbg\",\"type\":\"debug\",\"z\":\"a18tab0000000001\",\"name\":\"SEE: ops values\",\"active\":true,\"tosidebar\":true,\"console\":false,\"tostatus\":false,\"complete\":\"payload\",\"x\":820,\"y\":240,\"wires\":[]}]","\u003Cp>\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FPlatform-Node--RED-red.png\" alt=\"Platform Node-RED\" \u002F>\n\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FContribution-Modbus-orange.png\" alt=\"Contribution Modbus\" \u002F>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Fnode-red-contrib-modbus\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Fnode-red-contrib-modbus\u002Fall\u002Fbadge.svg?label=financial+contributors\" alt=\"Financial Contributors on Open Collective\" \u002F>\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fnode-red-contrib-modbus\">\u003Cimg src=\"https:\u002F\u002Fbadge.fury.io\u002Fjs\u002Fnode-red-contrib-modbus.png\" alt=\"NPM version\" \u002F>\u003C\u002Fa>\n\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FNode.js-%3E%3D22-green.png\" alt=\"Node.js\" \u002F>\n\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FNode--RED-%3E%3D4-red.png\" alt=\"Node-RED\" \u002F>\n\u003Ca href=\"http:\u002F\u002Fstandardjs.com\u002F\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fcode%20style-standard-brightgreen.svg\" alt=\"Standard - JavaScript Style Guide\" \u002F>\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fnpm-stat.com\u002Fcharts.html?package=node-red-contrib-modbus\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fnpm\u002Fdm\u002Fnode-red-contrib-modbus.svg\" alt=\"NPM download\" \u002F>\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FBiancoRoyal\u002Fnode-red-contrib-modbus\u002Factions\u002Fworkflows\u002Fbuild.yml\">\u003Cimg src=\"https:\u002F\u002Fgithub.com\u002FBiancoRoyal\u002Fnode-red-contrib-modbus\u002Factions\u002Fworkflows\u002Fbuild.yml\u002Fbadge.svg\" alt=\"Build and publish\" \u002F>\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fwww.codacy.com\u002Fgh\u002FBiancoRoyal\u002Fnode-red-contrib-modbus?utm_source=github.com&amp;utm_medium=referral&amp;utm_content=BiancoRoyal\u002Fnode-red-contrib-modbus&amp;utm_campaign=Badge_Grade\">\u003Cimg src=\"https:\u002F\u002Fapi.codacy.com\u002Fproject\u002Fbadge\u002FGrade\u002F6cbeb40ab5604b3ab99e6badc9469e8a\" alt=\"Codacy Badge\" \u002F>\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fgitpod.io\u002F#https:\u002F\u002Fgithub.com\u002FBiancoRoyal\u002Fnode-red-contrib-modbus\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FGitpod-ready--to--code-blue?logo=gitpod\" alt=\"Gitpod Ready-to-Code\" \u002F>\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fclaude.ai\u002Fcode\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FSupported%20with-Claude%20Code%20Pro-d97706?logo=anthropic&amp;logoColor=white\" alt=\"Supported with Claude Code Pro\" \u002F>\u003C\u002Fa>\u003C\u002Fp>\n\u003Ch1 id=\"node-red-contrib-modbus\">\u003Ca class=\"header-anchor\" href=\"#node-red-contrib-modbus\">node-red-contrib-modbus\u003C\u002Fa>\u003C\u002Fh1>\n\u003Ch3 id=\"the-all-in-one-modbus-tcp-and-serial-contribution-package-for-node-red\">\u003Ca class=\"header-anchor\" href=\"#the-all-in-one-modbus-tcp-and-serial-contribution-package-for-node-red\">The all-in-one Modbus TCP and Serial contribution package for Node-RED\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cp>\u003Ca href=\"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fnode-red-contrib-modbus\">\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002FBiancoRoyal\u002Fnode-red-contrib-modbus\u002Fmaster\u002Fimages\u002Fmodbus-icon64.png\" alt=\"nodemodbus64\" \u002F>\u003C\u002Fa>\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Public LTS line:\u003C\u002Fstrong> \u003Cstrong>v5.x\u003C\u002Fstrong> (current: \u003Cstrong>5.60.2\u003C\u002Fstrong>) · License \u003Cstrong>BSD-3-Clause\u003C\u002Fstrong> · Repo: \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FBiancoRoyal\u002Fnode-red-contrib-modbus\">GitHub\u003C\u002Fa>\u003C\u002Fp>\n\u003Cp>If you like this package, please \u003Cstrong>give us a star on \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FBiancoRoyal\u002Fnode-red-contrib-modbus\">GitHub\u003C\u002Fa>\u003C\u002Fstrong>.\u003C\u002Fp>\n\u003Cblockquote>\n\u003Cp>\u003Cstrong>AI-assisted maintenance:\u003C\u002Fstrong> This project is \u003Cstrong>actively developed and supported with \u003Ca href=\"https:\u002F\u002Fclaude.ai\u002Fcode\">Claude Code Pro\u003C\u002Fa>\u003C\u002Fstrong> (Anthropic). Issue triage, specs, tests, and patches on the v5 LTS line are routinely done with Claude Code as part of the maintainer workflow — alongside human review before release.\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Chr \u002F>\n\u003Ch2 id=\"requirements\">\u003Ca class=\"header-anchor\" href=\"#requirements\">Requirements\u003C\u002Fa>\u003C\u002Fh2>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>\u003C\u002Fth>\n\u003Cth>Minimum\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>Node.js\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>&gt;= 22\u003C\u002Fcode> (\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FBiancoRoyal\u002Fnode-red-contrib-modbus\u002Fblob\u002Fmaster\u002Fpackage.json\">\u003Ccode>package.json\u003C\u002Fcode> engines\u003C\u002Fa>)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>Node-RED\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>&gt;= 4\u003C\u002Fcode> (\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FBiancoRoyal\u002Fnode-red-contrib-modbus\u002Fblob\u002Fmaster\u002Fpackage.json\">\u003Ccode>node-red.version\u003C\u002Fcode>\u003C\u002Fa>)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>Install\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>Palette Manager or \u003Ccode>npm install node-red-contrib-modbus\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cp>Older Node.js \u002F Node-RED combinations: see historical notes in \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FBiancoRoyal\u002Fnode-red-contrib-modbus\u002Fblob\u002Fmaster\u002FHISTORY.md\">HISTORY.md\u003C\u002Fa>. Prefer staying on current LTS Node.js with this release line.\u003C\u002Fp>\n\u003Chr \u002F>\n\u003Ch2 id=\"whats-in-the-package-v5\">\u003Ca class=\"header-anchor\" href=\"#whats-in-the-package-v5\">What’s in the package (v5)\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>TCP \u002F serial Modbus \u003Cstrong>client\u003C\u002Fstrong> nodes plus an in-package \u003Cstrong>buffer Modbus TCP server\u003C\u002Fstrong> for demos and tests.\u003C\u002Fp>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Palette node\u003C\u002Fth>\n\u003Cth>Role\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>Modbus-Client\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>Config: TCP or Serial, queue, reconnect (XState FSM)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>Modbus-Read\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>Periodic FC1–4 poll\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>Modbus-Getter\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>On-demand FC1–4 read\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>Modbus-Flex-Getter\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>Payload-driven FC1–4 read\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>Modbus-Write\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>FC5 \u002F 6 \u002F 15 \u002F 16 write\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>Modbus-Flex-Write\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>Payload-driven write\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>Modbus-Flex-Sequencer\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>Ordered multi-range reads\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>Modbus-Flex-FC\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>Custom FC maps (\u003Ccode>extras\u002FargumentMaps\u003C\u002Fcode>)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>Modbus-Flex-Connector\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>Runtime reconnect \u002F endpoint switch\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>Modbus-Queue-Info\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>Client queue depth \u002F reset\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>Modbus-Response\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>Status display for responses\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>Modbus-IO-Config\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>Named IO JSON mapping\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>Modbus-Response-Filter\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>Filter IO payload by name\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>Modbus-Server\u003C\u002Fstrong>\u003C\u002Ftd>\n\u003Ctd>Buffer-backed TCP slave (jsmodbus)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cp>\u003Cstrong>Not in v5:\u003C\u002Fstrong> TLS client (\u003Ccode>Modbus-Client-TLS\u003C\u002Fcode> is v6), flow-based dynamic request\u002Fresponse gateway (\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FBiancoRoyal\u002Fnode-red-contrib-modbus\u002Fissues\u002F567\">#567\u003C\u002Fa> → separate package recommendation), \u003Ccode>modbus-flex-server\u003C\u002Fcode> (own package — see below).\u003C\u002Fp>\n\u003Ch3 id=\"highlights-since-546--in-5500\">\u003Ca class=\"header-anchor\" href=\"#highlights-since-546--in-5500\">Highlights since 5.46 \u002F in 5.50.0\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>Client \u003Cstrong>FSM \u002F reconnect \u002F queue\u003C\u002Fstrong> hardening (from 5.46.x)\u003C\u002Fli>\n\u003Cli>Safer \u003Cstrong>unit ID\u003C\u002Fstrong> handling (\u003Ccode>unitId\u003C\u002Fcode> \u002F \u003Ccode>unitid\u003C\u002Fcode>, including unit \u003Ccode>0\u003C\u002Fcode>)\u003C\u002Fli>\n\u003Cli>Modbus address\u002Fquantity validation improvements\u003C\u002Fli>\n\u003Cli>Numbered \u003Cstrong>learning examples\u003C\u002Fstrong> \u003Ccode>01\u003C\u002Fcode>…\u003Ccode>18\u003C\u002Fcode> + \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FBiancoRoyal\u002Fnode-red-contrib-modbus\u002Fblob\u002Fmaster\u002Fdocs\u002FLEARNING-PATH.md\">Learning Path docs\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Requires Node-RED \u003Ccode>&gt;= 4\u003C\u002Fcode>\u003C\u002Fstrong> and \u003Cstrong>Node.js \u003Ccode>&gt;= 22\u003C\u002Fcode>\u003C\u002Fstrong>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>See \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FBiancoRoyal\u002Fnode-red-contrib-modbus\u002Fblob\u002Fmaster\u002FCHANGELOG.md\">CHANGELOG.md\u003C\u002Fa> for the full list.\u003C\u002Fp>\n\u003Chr \u002F>\n\u003Ch2 id=\"how-to-use--learning-path\">\u003Ca class=\"header-anchor\" href=\"#how-to-use--learning-path\">How to use \u002F Learning Path\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>\u003Cstrong>Recommended:\u003C\u002Fstrong> use the in-package \u003Cstrong>numbered learning examples\u003C\u002Fstrong> (\u003Ccode>01\u003C\u002Fcode> … \u003Ccode>15\u003C\u002Fcode>).\u003C\u002Fp>\n\u003Col>\n\u003Cli>Install this package and restart Node-RED.\u003C\u002Fli>\n\u003Cli>Open \u003Cstrong>Menu → Import → Examples → \u003Ccode>node-red-contrib-modbus\u003C\u002Fcode>\u003C\u002Fstrong>.\u003C\u002Fli>\n\u003Cli>Work through the flows in order (or jump to a single node tutorial).\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Doc\u003C\u002Fth>\n\u003Cth>Content\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FBiancoRoyal\u002Fnode-red-contrib-modbus\u002Fblob\u002Fmaster\u002Fdocs\u002FLEARNING-PATH.md\">\u003Cstrong>Learning Path guide\u003C\u002Fstrong>\u003C\u002Fa>\u003C\u002Ftd>\n\u003Ctd>Stages, Modbus cheat sheet, node ↔ example map\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FBiancoRoyal\u002Fnode-red-contrib-modbus\u002Fblob\u002Fmaster\u002Fexamples\u002FREADME.md\">\u003Cstrong>Examples index\u003C\u002Fstrong>\u003C\u002Fa>\u003C\u002Ftd>\n\u003Ctd>Full file list, TCP ports, IO path, old→new mapping\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FBiancoRoyal\u002Fnode-red-contrib-modbus\u002Fblob\u002Fmaster\u002Fdocs\u002FREADME.md\">Docs hub\u003C\u002Fa>\u003C\u002Ftd>\n\u003Ctd>All documentation entry points\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cp>Each example tab has an English \u003Cstrong>comment\u003C\u002Fstrong> node with run instructions. Node sidebar help points at the matching example filename.\u003C\u002Fp>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Learn…\u003C\u002Fth>\n\u003Cth>Import example\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>Modbus registers &amp; FCs\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>01-Modbus-Basics-Registers-And-FCs\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>First TCP client + server\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>02-Getting-Started-Client-And-Server\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Polling \u002F on-demand \u002F flex read-write\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>03\u003C\u002Fcode> … \u003Ccode>06\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Sequencer, Flex-FC, Connector, Queue, IO\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>07\u003C\u002Fcode> … \u003Ccode>11\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Buffer server &amp; patterns (HTTP, serial, gateway)\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>12\u003C\u002Fcode> … \u003Ccode>15\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cp>Also: \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FBiancoRoyal\u002Fnode-red-contrib-modbus\u002Fwiki\u002FDEBUG\">Wiki \u002F DEBUG\u003C\u002Fa> · \u003Ca href=\"http:\u002F\u002Fbit.ly\u002F2jzwjqP\">YouTube Playlist\u003C\u002Fa> · \u003Ca href=\"https:\u002F\u002Fleanpub.com\u002Fp4nr-contribution-modbus\u002F\">Leanpub Modbus book\u003C\u002Fa> · optional older flow on \u003Ca href=\"https:\u002F\u002Fflows.nodered.org\u002Fflow\u002Fbf06a87e84395e4bce276714c6f5f884\">flows.nodered.org\u003C\u002Fa>\u003C\u002Fp>\n\u003Cp>\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002FBiancoRoyal\u002Fnode-red-contrib-modbus\u002Fmaster\u002Fimages\u002FScreenshot01V210.png\" alt=\"Flow Example\" \u002F>\u003C\u002Fp>\n\u003Chr \u002F>\n\u003Ch2 id=\"install\">\u003Ca class=\"header-anchor\" href=\"#install\">Install\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>In your Node-RED user directory (typically \u003Ccode>~\u002F.node-red\u003C\u002Fcode>):\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">npm install node-red-contrib-modbus\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Global (less common):\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">npm install -g node-red-contrib-modbus\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>If native modules fail to build:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">npm install node-red-contrib-modbus --unsafe-perm --build-from-source\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>List published versions:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">npm show node-red-contrib-modbus versions\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Install a specific version (example):\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">npm install node-red-contrib-modbus@5.45.2\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3 id=\"runtime-libraries\">\u003Ca class=\"header-anchor\" href=\"#runtime-libraries\">Runtime libraries\u003C\u002Fa>\u003C\u002Fh3>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Package\u003C\u002Fth>\n\u003Cth>Role in this contrib\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fopenp4nr\u002Fmodbus-serial\">\u003Ccode>@openp4nr\u002Fmodbus-serial\u003C\u002Fcode>\u003C\u002Fa>\u003C\u002Ftd>\n\u003Ctd>Modbus client I\u002FO (TCP \u002F serial \u002F ASCII, etc.)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ca href=\"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fjsmodbus\">\u003Ccode>jsmodbus\u003C\u002Fcode>\u003C\u002Fa>\u003C\u002Ftd>\n\u003Ctd>In-package \u003Cstrong>Modbus-Server\u003C\u002Fstrong> (buffer slave)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ca href=\"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@xstate\u002Ffsm\">\u003Ccode>@xstate\u002Ffsm\u003C\u002Fcode>\u003C\u002Fa>\u003C\u002Ftd>\n\u003Ctd>Client connection state machine\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ca href=\"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fserialport\">\u003Ccode>serialport\u003C\u002Fcode>\u003C\u002Fa> \u002F \u003Ccode>@serialport\u002Flist\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Cstrong>Optional\u003C\u002Fstrong> — list serial ports in the UI (not the runtime Modbus stack)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cp>If TCP fails, verify connectivity with a plain Modbus client first. If serial fails, verify the port with \u003Ca href=\"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fserialport\">\u003Ccode>serialport\u003C\u002Fcode>\u003C\u002Fa> first.\u003C\u002Fp>\n\u003Cp>Logging uses the \u003Ca href=\"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fdebug\">\u003Ccode>debug\u003C\u002Fcode>\u003C\u002Fa> package (not winston — winston is a v6 direction):\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">DEBUG=contribModbus*,modbus-serial node-red -v\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>More options: \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FBiancoRoyal\u002Fnode-red-contrib-modbus\u002Fwiki\u002FDEBUG\">Wiki DEBUG\u003C\u002Fa>.\u003C\u002Fp>\n\u003Chr \u002F>\n\u003Ch2 id=\"modbus-flex-server-separate-package\">\u003Ca class=\"header-anchor\" href=\"#modbus-flex-server-separate-package\">Modbus Flex Server (separate package)\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>\u003Cstrong>Modbus-Flex-Server\u003C\u002Fstrong> was moved out of this package (vm2 \u002F maintenance boundary). Install the dedicated contrib if you still need it. Further package splits (client vs server) remain a longer-term v6 architecture topic; \u003Cstrong>v5 keeps \u003Ccode>Modbus-Server\u003C\u002Fcode> in this package\u003C\u002Fstrong> as the buffer slave for demos and tests.\u003C\u002Fp>\n\u003Chr \u002F>\n\u003Ch2 id=\"p4nr-b2b-community\">\u003Ca class=\"header-anchor\" href=\"#p4nr-b2b-community\">P4NR B2B Community\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>The \u003Ca href=\"https:\u002F\u002Fplus4nodered.com\u002F\">P4NR B2B Community\u003C\u002Fa> (driven by \u003Ca href=\"https:\u002F\u002Finiationware.com\u002F\">Iniationware\u003C\u002Fa>) supports development and commercial help around Modbus for Node-RED. Bianco Royal partners with P4NR.\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fplus4nodered.com\u002F\">PLUS for Node-RED International\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fplus4nodered.com\u002Fde\u002F\">PLUS for Node-RED Germany\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3 id=\"leanpub-live-book\">\u003Ca class=\"header-anchor\" href=\"#leanpub-live-book\">Leanpub live book\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cp>The \u003Ca href=\"https:\u002F\u002Fleanpub.com\u002Fp4nr-contribution-modbus\u002F\">Online Leanpub Book\u003C\u002Fa> (Edition 2 for \u003Cstrong>5.60+\u003C\u002Fstrong>, Node-RED 5 \u002F Node.js 24) covers v5.x nodes and options in depth (“buy once, update forever”). For a free start in this repo, use the \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FBiancoRoyal\u002Fnode-red-contrib-modbus\u002Fblob\u002Fmaster\u002Fdocs\u002FLEARNING-PATH.md\">\u003Cstrong>Learning Path\u003C\u002Fstrong>\u003C\u002Fa> (examples \u003Ccode>01\u003C\u002Fcode>–\u003Ccode>18\u003C\u002Fcode>).\u003C\u002Fp>\n\u003Chr \u002F>\n\u003Ch2 id=\"errors--status\">\u003Ca class=\"header-anchor\" href=\"#errors--status\">Errors &amp; status\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>From v5.22 onward, client and server nodes catch many network and protocol errors so Node-RED should not crash for those handled cases. Always watch \u003Cstrong>node status\u003C\u002Fstrong>, \u003Cstrong>Catch\u003C\u002Fstrong> nodes, and optional empty-msg-on-fail settings in your flows.\u003C\u002Fp>\n\u003Chr \u002F>\n\u003Ch2 id=\"contributing\">\u003Ca class=\"header-anchor\" href=\"#contributing\">Contributing\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>Contributors welcome. Fork the repo and open PRs against \u003Cstrong>\u003Ccode>develop\u003C\u002Fcode>\u003C\u002Fstrong> (or discuss via issues). For larger features, see the maintainer pipeline under \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FBiancoRoyal\u002Fnode-red-contrib-modbus\u002Fblob\u002Fmaster\u002Fdocs\u002Fp4nr\u002FREADME.md\">\u003Ccode>docs\u002Fp4nr\u002F\u003C\u002Fcode>\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cp>Useful scripts (see \u003Ccode>package.json\u003C\u002Fcode>):\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">npm run build          # lint + gulp → modbus\u002F\nnpm test               # Mocha (parallel)\nnpm run test:units\nnpm run coverage\nnpm run dev-link       # local link into Node-RED\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2 id=\"authors\">\u003Ca class=\"header-anchor\" href=\"#authors\">Authors\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>Since April 2016 by \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fbiancode\">Klaus Landsdorf\u003C\u002Fa> and the community.\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Contribution since 2016: \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FBiancoRoyal\u002Fnode-red-contrib-modbus\u002Fgraphs\u002Fcontributors\">Contributors\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>License change 2016: \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fjayharper\">Jason D. Harper\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>Started early 2015: \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fmikakaraila\">Mika Karaila\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FBiancoRoyal\u002Fnode-red-contrib-modbus\u002Fblob\u002Fmaster\u002FHISTORY.md\">Version history\u003C\u002Fa> · \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FBiancoRoyal\u002Fnode-red-contrib-modbus\u002Fblob\u002Fmaster\u002FCHANGELOG.md\">CHANGELOG\u003C\u002Fa>\u003C\u002Fp>\n\u003Chr \u002F>\n\u003Ch2 id=\"contributors\">\u003Ca class=\"header-anchor\" href=\"#contributors\">Contributors\u003C\u002Fa>\u003C\u002Fh2>\n\u003Ch3 id=\"code-contributors\">\u003Ca class=\"header-anchor\" href=\"#code-contributors\">Code Contributors\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cp>This project exists thanks to all the people who contribute. [\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FBiancoRoyal\u002Fnode-red-contrib-modbus\u002Fblob\u002Fmaster\u002FCONTRIBUTING.md\">Contribute\u003C\u002Fa>].\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FBiancoRoyal\u002Fnode-red-contrib-modbus\u002Fgraphs\u002Fcontributors\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Fnode-red-contrib-modbus\u002Fcontributors.svg?width=890&amp;button=false\" \u002F>\u003C\u002Fa>\u003C\u002Fp>\n\u003Ch3 id=\"financial-contributors\">\u003Ca class=\"header-anchor\" href=\"#financial-contributors\">Financial Contributors\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cp>Become a financial contributor and help us sustain our community. [\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Fnode-red-contrib-modbus\u002Fcontribute\">Contribute\u003C\u002Fa>]\u003C\u002Fp>\n\u003Ch4 id=\"individuals\">\u003Ca class=\"header-anchor\" href=\"#individuals\">Individuals\u003C\u002Fa>\u003C\u002Fh4>\n\u003Cp>\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Fnode-red-contrib-modbus\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Fnode-red-contrib-modbus\u002Findividuals.svg?width=890\" \u002F>\u003C\u002Fa>\u003C\u002Fp>\n\u003Ch4 id=\"organizations\">\u003Ca class=\"header-anchor\" href=\"#organizations\">Organizations\u003C\u002Fa>\u003C\u002Fh4>\n\u003Cp>Support this project with your organization. Your logo will show up here with a link to your website. [\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Fnode-red-contrib-modbus\u002Fcontribute\">Contribute\u003C\u002Fa>]\u003C\u002Fp>\n\u003Cp>\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Fnode-red-contrib-modbus\u002Forganization\u002F0\u002Fwebsite\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Fnode-red-contrib-modbus\u002Forganization\u002F0\u002Favatar.svg\" \u002F>\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Fnode-red-contrib-modbus\u002Forganization\u002F1\u002Fwebsite\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Fnode-red-contrib-modbus\u002Forganization\u002F1\u002Favatar.svg\" \u002F>\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Fnode-red-contrib-modbus\u002Forganization\u002F2\u002Fwebsite\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Fnode-red-contrib-modbus\u002Forganization\u002F2\u002Favatar.svg\" \u002F>\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Fnode-red-contrib-modbus\u002Forganization\u002F3\u002Fwebsite\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Fnode-red-contrib-modbus\u002Forganization\u002F3\u002Favatar.svg\" \u002F>\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Fnode-red-contrib-modbus\u002Forganization\u002F4\u002Fwebsite\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Fnode-red-contrib-modbus\u002Forganization\u002F4\u002Favatar.svg\" \u002F>\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Fnode-red-contrib-modbus\u002Forganization\u002F5\u002Fwebsite\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Fnode-red-contrib-modbus\u002Forganization\u002F5\u002Favatar.svg\" \u002F>\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Fnode-red-contrib-modbus\u002Forganization\u002F6\u002Fwebsite\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Fnode-red-contrib-modbus\u002Forganization\u002F6\u002Favatar.svg\" \u002F>\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Fnode-red-contrib-modbus\u002Forganization\u002F7\u002Fwebsite\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Fnode-red-contrib-modbus\u002Forganization\u002F7\u002Favatar.svg\" \u002F>\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Fnode-red-contrib-modbus\u002Forganization\u002F8\u002Fwebsite\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Fnode-red-contrib-modbus\u002Forganization\u002F8\u002Favatar.svg\" \u002F>\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Fnode-red-contrib-modbus\u002Forganization\u002F9\u002Fwebsite\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Fnode-red-contrib-modbus\u002Forganization\u002F9\u002Favatar.svg\" \u002F>\u003C\u002Fa>\u003C\u002Fp>\n",1792251378761]