[{"data":1,"prerenderedAt":3161},["ShallowReactive",2],{"docs-\u002Fdocs\u002Fflowfuse-nodes\u002Fedge\u002Fmodbus\u002F":3,"featureCatalog":1708,"docs-nav":2111},{"id":4,"title":5,"body":6,"description":16,"editUrl":1699,"extension":1700,"layout":1701,"meta":1702,"metaTitle":5,"navGroup":1701,"navGroupOrder":1701,"navOrder":1144,"navTitle":5,"navigation":1201,"originalPath":1701,"path":1703,"redirect":1701,"seo":1704,"stem":1705,"updated":1706,"version":1701,"__hash__":1707},"docs\u002Fdocs\u002Fflowfuse-nodes\u002Fedge\u002Fmodbus.md","Modbus",{"type":7,"value":8,"toc":1673},"minimark",[9,13,17,31,36,63,68,110,113,125,129,132,153,156,184,187,319,356,363,384,416,420,423,427,446,450,519,523,528,655,667,671,677,808,823,839,842,845,849,884,898,908,924,928,931,962,965,968,996,999,1011,1025,1028,1031,1034,1037,1040,1051,1054,1392,1404,1407,1410,1428,1431,1434,1437,1451,1467,1470,1473,1477,1480,1554,1557,1561,1663,1669],[10,11,5],"h1",{"id":12},"modbus",[14,15,16],"p",{},"Connect a FlowFuse instance to Modbus TCP and Serial devices — PLCs, sensors, meters, drives, and gateways. Poll or read coils and registers, write setpoints and commands, and simulate a Modbus server for testing, all from within your flows.",[14,18,19,20,24,25,30],{},"This is a ",[21,22,23],"strong",{},"FlowFuse Certified Node",". Unlike community nodes, which vary in quality and can go unmaintained without warning, FlowFuse vets Certified Nodes for quality, security, and support, and maintains them on an ongoing basis. ",[26,27,29],"a",{"href":28},"\u002Fblog\u002F2025\u002F07\u002Fcertified-nodes-v2\u002F","Read more about Certified Nodes",".",[32,33,35],"h2",{"id":34},"get-the-certified-node-in-flowfuse","Get the Certified Node in FlowFuse",[37,38,42,47],"div",{"className":39},[40,41],"ff-callout","ff-callout--note",[14,43,46],{"className":44},[45],"ff-callout__title","Note",[37,48,51],{"className":49},[50],"ff-callout__content",[14,52,53,54,57,58,62],{},"The Modbus package is not available by default. It is part of the FlowFuse Edge Certified Nodes catalogue, which is part of the ",[21,55,56],{},"FlowFuse Edge"," offering. Please contact our sales team at ",[26,59,61],{"href":60},"\u002Fcontact-us\u002F","Contact us"," to learn more or to request access.",[64,65,67],"h3",{"id":66},"installation-steps","Installation steps",[69,70,71,75,78,84,91,98,105],"ol",{},[72,73,74],"li",{},"Open your instance in the FlowFuse editor.",[72,76,77],{},"Click the menu icon (☰) in the top-right corner.",[72,79,80,81,30],{},"Select ",[21,82,83],{},"Manage palette",[72,85,86,87,90],{},"Go to the ",[21,88,89],{},"Install"," tab.",[72,92,93,94,97],{},"Switch to the ",[21,95,96],{},"FlowFuse Edge Certified Nodes"," category.",[72,99,100,101,30],{},"Search for ",[102,103,104],"code",{},"@flowfuse-certified-nodes\u002Fmodbus",[72,106,107,108,30],{},"Click ",[21,109,89],{},[14,111,112],{},"The Modbus nodes then appear in your palette, ready to drag onto the canvas.",[37,114,116,119],{"className":115},[40,41],[14,117,46],{"className":118},[45],[37,120,122],{"className":121},[50],[14,123,124],{},"If your device or hosted instance was already running before Modbus was enabled for your team, it won't show the package in the Install tab search. Restart the instance or device first, then repeat the steps above.",[32,126,128],{"id":127},"what-is-modbus","What is Modbus?",[14,130,131],{},"Modbus is one of the oldest and most widely supported industrial communication protocols, implemented by an enormous range of PLCs, sensors, power meters, VFDs, and gateways. It comes in several transports, all supported side by side:",[133,134,135,141,147],"ul",{},[72,136,137,140],{},[21,138,139],{},"Modbus TCP"," — Modbus messages over a standard Ethernet\u002FIP network, typically on port 502. The framing can be the default MBAP header or RTU-buffered.",[72,142,143,146],{},[21,144,145],{},"Modbus UDP"," — the same message format over UDP instead of TCP, for the devices and gateways that expect it. Support varies by device.",[72,148,149,152],{},[21,150,151],{},"Modbus Serial"," — Modbus RTU (binary) or ASCII framing over RS-232\u002FRS-485.",[14,154,155],{},"Modbus-Client also offers TELNET and C701 modes for TCP-to-serial gateways.",[37,157,159,162],{"className":158},[40,41],[14,160,46],{"className":161},[45],[37,163,165],{"className":164},[50],[14,166,167,168,171,172,175,176,179,180,183],{},"Modbus now uses ",[21,169,170],{},"client"," for the device making requests and ",[21,173,174],{},"server"," for the device answering them. Older device manuals and tools use ",[21,177,178],{},"master"," and ",[21,181,182],{},"slave"," for the same two roles — a Modbus master is a client, a Modbus slave is a server. This package follows the newer terminology, so the FlowFuse instance is the client and the PLC, meter, or drive it polls is the server.",[14,185,186],{},"Every Modbus device exposes its data as one of four addressable table types, and every read or write targets one of them:",[188,189,190,215],"table",{},[191,192,193],"thead",{},[194,195,196,200,203,206,209,212],"tr",{},[197,198,199],"th",{},"Table",[197,201,202],{},"FC (read)",[197,204,205],{},"FC (write)",[197,207,208],{},"Access",[197,210,211],{},"Manual-style reference",[197,213,214],{},"Typical use",[216,217,218,245,270,295],"tbody",{},[194,219,220,224,227,230,233,242],{},[221,222,223],"td",{},"Coils",[221,225,226],{},"1",[221,228,229],{},"5, 15",[221,231,232],{},"Read\u002Fwrite, 1 bit",[221,234,235,238,239],{},[102,236,237],{},"0xxxx"," \u002F ",[102,240,241],{},"00001+",[221,243,244],{},"Digital outputs — relays, enable flags",[194,246,247,250,253,256,259,267],{},[221,248,249],{},"Discrete Inputs",[221,251,252],{},"2",[221,254,255],{},"—",[221,257,258],{},"Read-only, 1 bit",[221,260,261,238,264],{},[102,262,263],{},"1xxxx",[102,265,266],{},"10001+",[221,268,269],{},"Digital inputs — switches, limit sensors",[194,271,272,275,278,281,284,292],{},[221,273,274],{},"Holding Registers",[221,276,277],{},"3",[221,279,280],{},"6, 16",[221,282,283],{},"Read\u002Fwrite, 16-bit",[221,285,286,238,289],{},[102,287,288],{},"4xxxx",[102,290,291],{},"40001+",[221,293,294],{},"Setpoints, configuration, read\u002Fwrite process values",[194,296,297,300,303,305,308,316],{},[221,298,299],{},"Input Registers",[221,301,302],{},"4",[221,304,255],{},[221,306,307],{},"Read-only, 16-bit",[221,309,310,238,313],{},[102,311,312],{},"3xxxx",[102,314,315],{},"30001+",[221,317,318],{},"Read-only measurements — sensor readings",[37,320,322,325],{"className":321},[40,41],[14,323,46],{"className":324},[45],[37,326,328],{"className":327},[50],[14,329,330,333,334,337,338,341,342,345,346,349,350,352,353,355],{},[21,331,332],{},"Register addressing"," Addresses in this package are raw, zero-based protocol addresses. Device manuals often number the same register differently. A manual that lists a holding register as ",[102,335,336],{},"40001"," (or ",[102,339,340],{},"4x0001",", or ",[102,343,344],{},"400001"," on devices with more than 9,999 registers) is describing the register at address ",[102,347,348],{},"0",". Other manuals number within the table starting at ",[102,351,226],{},", so their \"register 1\" is also address ",[102,354,348],{},". Check which convention your device's register map uses before entering an address — an off-by-one here is the most common cause of reading the wrong value, and an address one past the end of the table returns Illegal Data Address.",[14,357,358,359,362],{},"A device is also identified by a ",[21,360,361],{},"Unit ID"," (also called station address, or slave ID in older documentation), which matters when several logical devices share one connection — for example several RTU devices on the same RS-485 bus, or several logical devices behind one TCP gateway.",[14,364,365,366,369,370,373,374,376,377,379,380,383],{},"On a serial bus, valid device addresses are ",[21,367,368],{},"1–247",". Address ",[21,371,372],{},"0 is the broadcast address"," — a write sent to unit 0 goes to every device on the bus and none of them reply, so a read addressed to unit 0 will always time out. Addresses 248–255 are reserved. Native Modbus TCP devices often ignore the unit ID altogether (",[102,375,348],{},", ",[102,378,226],{},", and ",[102,381,382],{},"255"," are all common), but it matters as soon as a gateway sits in front of serial devices.",[37,385,387,390],{"className":386},[40,41],[14,388,46],{"className":389},[45],[37,391,393],{"className":392},[50],[14,394,395,396,399,400,410,411,415],{},"Modbus itself moves only raw bits and 16-bit words — the protocol carries no data-type information. A read returns an ",[21,397,398],{},"array"," of booleans (coils\u002Fdiscrete inputs) or ",[21,401,402,403,405,406,409],{},"raw 16-bit register values, each ",[102,404,348],{},"–",[102,407,408],{},"65535",","," (input\u002Fholding registers). Anything larger or more structured — 32-bit integers, floating-point values, scaled measurements — spans multiple registers: the device packs it across them, and you reconstruct it in your flow. See ",[26,412,414],{"href":413},"#decoding-register-values","Decoding register values"," for how to do this.",[32,417,419],{"id":418},"use-case","Use case",[14,421,422],{},"Most Modbus devices already hold the data a plant needs — tank levels, motor status, energy readings, setpoints — but that data is normally only visible to a single SCADA package or the device's own local panel. This certified node package turns a FlowFuse instance into a Modbus client (and, where useful, a Modbus server), so that data becomes ordinary flow data you can route, transform, and act on alongside everything else in Node-RED.",[64,424,426],{"id":425},"example-bringing-a-legacy-plcs-data-onto-mqtt","Example: bringing a legacy PLC's data onto MQTT",[14,428,429,430,433,434,437,438,441,442,445],{},"An older PLC exposes tank level, pump status, and a fault word through its holding registers, with no other way off the machine except a proprietary HMI cable. A single ",[21,431,432],{},"Modbus-Client"," connection points at the PLC over TCP. A ",[21,435,436],{},"Modbus-Read"," node polls the holding registers on a fixed interval, emitting the raw register values as an array. Because those registers represent more than plain 16-bit integers (tank level as a float spanning two registers, a fault word to be split bit by bit), a downstream ",[21,439,440],{},"function node"," — or a dedicated buffer-parser node — decodes the raw buffer into named, typed values. Those values are published to the plant's MQTT broker, so dashboards and historians see live data from a PLC that was never designed to leave the panel. A ",[21,443,444],{},"Modbus-Flex-Write"," node, gated behind an operator confirmation on a dashboard, lets the same flow push a new setpoint back down to the PLC.",[64,447,449],{"id":448},"where-this-shows-up-in-practice","Where this shows up in practice",[133,451,452,462,472,481,491,501,509],{},[72,453,454,457,458,461],{},[21,455,456],{},"Polling process data",": use ",[26,459,436],{"href":460},"#modbus-read"," to cyclically poll coils and registers at a fixed rate and feed the results straight into a Unified Namespace, historian, or dashboard.",[72,463,464,457,467,471],{},[21,465,466],{},"On-demand reads",[26,468,470],{"href":469},"#modbus-getter-and-modbus-flex-getter","Modbus-Getter"," to read a value only when triggered by an incoming message, instead of continuously polling.",[72,473,474,457,477,480],{},[21,475,476],{},"Dynamic, message-driven addressing",[26,478,479],{"href":469},"Modbus-Flex-Getter"," when the table, address, quantity, or unit ID needs to change per message, for example a generic \"read any register on any configured device\" flow.",[72,482,483,457,486,490],{},[21,484,485],{},"Ordered multi-range reads",[26,487,489],{"href":488},"#modbus-flex-sequencer","Modbus-Flex-Sequencer"," to read several different ranges in a defined order through one node, instead of wiring up many separate reads.",[72,492,493,457,496,500],{},[21,494,495],{},"Writing setpoints and commands",[26,497,499],{"href":498},"#modbus-write-and-modbus-flex-write","Modbus-Write and Modbus-Flex-Write"," to set coils or holding registers from a dashboard form, an MES, or a calculated value elsewhere in the flow.",[72,502,503,506,507,30],{},[21,504,505],{},"Decoding raw registers",": turn raw 16-bit register arrays into signed\u002Funsigned integers, 32-bit values, or floating-point numbers — see ",[26,508,414],{"href":413},[72,510,511,457,514,518],{},[21,512,513],{},"Testing and simulation",[26,515,517],{"href":516},"#modbus-server","Modbus-Server"," to run a buffer-backed Modbus server, so you can build and test a flow against a virtual device before any real hardware is available.",[32,520,522],{"id":521},"the-node-set","The Node Set",[14,524,525,526,30],{},"Each node performs one Modbus operation and reuses the shared connection you configure once on ",[21,527,432],{},[188,529,530,540],{},[191,531,532],{},[194,533,534,537],{},[197,535,536],{},"Node",[197,538,539],{},"Purpose",[216,541,542,550,557,564,571,578,586,593,601,609,617,632,640,647],{},[194,543,544,547],{},[221,545,546],{},"Modbus-Client (config)",[221,548,549],{},"Defines the connection — TCP host\u002Fport (with default\u002FRTU-buffered\u002FUDP\u002FTELNET\u002FC701 framing) or serial port\u002Fbaud rate, timeout, and reconnect behaviour. Every other node references it.",[194,551,552,554],{},[221,553,436],{},[221,555,556],{},"Polls a fixed table\u002Faddress\u002Fquantity on a repeating interval and emits the raw result on every poll.",[194,558,559,561],{},[221,560,470],{},[221,562,563],{},"Reads a fixed table\u002Faddress\u002Fquantity, but only when triggered by an incoming message rather than on a timer.",[194,565,566,568],{},[221,567,479],{},[221,569,570],{},"Like Modbus-Getter, but the table, address, quantity, and unit ID are taken from the incoming message, so one node can serve many different reads.",[194,572,573,575],{},[221,574,489],{},[221,576,577],{},"Reads several configured ranges in a defined order through a single node.",[194,579,580,583],{},[221,581,582],{},"Modbus-Write",[221,584,585],{},"Writes a single coil or holding register, or a block of them, using addressing fixed on the node.",[194,587,588,590],{},[221,589,444],{},[221,591,592],{},"Like Modbus-Write, but the target table, address, and value(s) are taken from the incoming message.",[194,594,595,598],{},[221,596,597],{},"Modbus-Flex-Fc",[221,599,600],{},"Sends custom or less-common function codes using configurable argument maps, for devices that need function codes beyond the standard read\u002Fwrite set.",[194,602,603,606],{},[221,604,605],{},"Modbus-Flex-Connector",[221,607,608],{},"Changes the connection endpoint (host\u002Fport or serial settings) at runtime from an incoming message, to reconnect or switch devices without redeploying.",[194,610,611,614],{},[221,612,613],{},"Modbus-Response",[221,615,616],{},"Displays the status and content of a Modbus response in the editor, as a diagnostic\u002Finspection aid downstream of a read.",[194,618,619,622],{},[221,620,621],{},"Modbus-IO-Config (config)",[221,623,624,625,376,628,631],{},"Holds a JSON IO file mapping IEC-style addresses (",[102,626,627],{},"%QW0",[102,629,630],{},"%IX8.0",", …) to typed names, where a name's first letter sets its data type. Read nodes can attach it to their output.",[194,633,634,637],{},[221,635,636],{},"Modbus-Response-Filter",[221,638,639],{},"Filters an IO-mapped payload down to named values, so downstream nodes receive only the fields they need.",[194,641,642,644],{},[221,643,517],{},[221,645,646],{},"Runs a buffer-backed Modbus TCP server inside Node-RED, so it responds to reads and writes from an external Modbus client — useful for testing and simulation.",[194,648,649,652],{},[221,650,651],{},"Modbus-Queue-Info",[221,653,654],{},"Reports (and can reset) the internal request queue depth for a connection, useful for spotting a device that can't keep up with the configured poll rate.",[37,656,658,661],{"className":657},[40,41],[14,659,46],{"className":660},[45],[37,662,664],{"className":663},[50],[14,665,666],{},"All nodes that share the same Modbus-Client connection share one underlying socket\u002Fserial port and are queued through it in order, so a device is never sent two requests at once. A busy queue (see Modbus-Queue-Info) usually means the poll rate is faster than the device can respond to.",[32,668,670],{"id":669},"configure-a-modbus-client-connection","Configure a Modbus Client Connection",[14,672,673,674,676],{},"Every node in this package uses a ",[21,675,432],{}," configuration node to communicate with a Modbus device. Create the connection once, then reuse it across every Read, Getter, Write, and Server node that connects to the same device or bus.",[69,678,679,685,699,755,798],{},[72,680,681,682,684],{},"Drag any Modbus node (for example, ",[21,683,436],{},") onto the canvas and double-click it.",[72,686,687,688,691,692,695,696,698],{},"Next to the ",[21,689,690],{},"Server"," field, click the ",[21,693,694],{},"+"," icon to create a new ",[21,697,432],{}," configuration.",[72,700,701,702,705,706],{},"Select the connection ",[21,703,704],{},"Type",":\n",[133,707,708,738],{},[72,709,710,713,714,717,718,721,722,376,725,376,728,376,731,341,734,737],{},[21,711,712],{},"TCP"," — Enter the device's IP address and port (default: ",[102,715,716],{},"502","). Then choose the ",[21,719,720],{},"TCP Type",": ",[21,723,724],{},"Default",[21,726,727],{},"RTU Buffered",[21,729,730],{},"UDP",[21,732,733],{},"TELNET",[21,735,736],{},"C701"," (for TCP-to-serial gateways).",[72,739,740,238,743,746,747,750,751,754],{},[21,741,742],{},"Serial",[21,744,745],{},"Serial Expert"," — Select the serial port, baud rate, parity, data bits, stop bits, and the Modbus framing (",[21,748,749],{},"RTU"," or ",[21,752,753],{},"ASCII",").",[72,756,757,758],{},"Configure the remaining connection settings:\n",[133,759,760,781,790],{},[72,761,762,764,765,767,768,405,770,773,774,776,777,405,779,30],{},[21,763,361],{}," — Default: ",[102,766,226],{},". Serial devices use ",[102,769,226],{},[102,771,772],{},"247"," (",[102,775,348],{}," is broadcast); TCP accepts ",[102,778,348],{},[102,780,382],{},[72,782,783,764,786,789],{},[21,784,785],{},"Timeout",[102,787,788],{},"1000"," ms",[72,791,792,764,795,789],{},[21,793,794],{},"Reconnect Timeout",[102,796,797],{},"2000",[72,799,107,800,803,804,807],{},[21,801,802],{},"Done",", then ",[21,805,806],{},"Deploy"," the flow.",[37,809,811,814],{"className":810},[40,41],[14,812,46],{"className":813},[45],[37,815,817],{"className":816},[50],[14,818,819,820,30],{},"The connection is shared. Changing its parameters affects every node that uses it, and you must redeploy the flow for connection changes to take effect. To change the endpoint at runtime without redeploying, see ",[26,821,605],{"href":822},"#modbus-flex-connector",[37,824,826,829],{"className":825},[40,41],[14,827,46],{"className":828},[45],[37,830,832],{"className":831},[50],[14,833,834,835,838],{},"Keep host\u002FIP addresses and serial port paths in FlowFuse Environment Variables (your instance's ",[21,836,837],{},"Settings → Environment",") rather than hard-coding them in the connection, so the same flow can be promoted across instances that reach the device differently.",[32,840,436],{"id":841},"modbus-read",[14,843,844],{},"The Modbus-Read node polls a fixed location on a repeating interval — the node acts continuously once deployed, with no input needed.",[64,846,848],{"id":847},"configuration","Configuration",[133,850,851,857,867,873,879],{},[72,852,853,856],{},[21,854,855],{},"FC (Function Code)"," — which table to read: Coils, Discrete Inputs, Holding Registers, or Input Registers (FC 1–4).",[72,858,859,862,863,866],{},[21,860,861],{},"Address"," — the starting zero-based address in that table — see ",[26,864,332],{"href":865},"#what-is-modbus"," if your device manual or documentation uses 4xxxx-style numbering.",[72,868,869,872],{},[21,870,871],{},"Quantity"," — how many consecutive coils\u002Fregisters to read in one request.",[72,874,875,878],{},[21,876,877],{},"Poll rate"," — how often to repeat the read (milliseconds).",[72,880,881,883],{},[21,882,361],{}," — overrides the connection's default unit ID for this node, when needed.",[14,885,886,887,890,891,405,893,895,896,30],{},"Each poll emits a message carrying the raw values on ",[102,888,889],{},"msg.payload"," (an array of booleans for coils\u002Fdiscrete inputs, or an array of raw 16-bit register values, each ",[102,892,348],{},[102,894,408],{},", for registers) and the raw response buffer. If the register values represent something other than plain 16-bit integers, decode the buffer downstream — see ",[26,897,414],{"href":413},[899,900,905],"pre",{"className":901,"code":903,"language":904},[902],"language-text","[Modbus-Read] (polls every 1000ms)  →  [function \u002F buffer-parser]  →  [Debug]\n","text",[102,906,903],{"__ignoreMap":907},"",[37,909,911,914],{"className":910},[40,41],[14,912,46],{"className":913},[45],[37,915,917],{"className":916},[50],[14,918,919,920,923],{},"Set the poll rate no faster than the device can reliably answer. A rate that outpaces the device causes requests to back up in the queue, check ",[26,921,651],{"href":922},"#modbus-queue-info"," if reads start arriving late or with gaps.",[32,925,927],{"id":926},"modbus-getter-and-modbus-flex-getter","Modbus-Getter and Modbus-Flex-Getter",[14,929,930],{},"Use these nodes instead of Modbus-Read when a read should happen on demand rather than on a timer.",[133,932,933,938],{},[72,934,935,937],{},[21,936,470],{}," — configuration (FC, address, quantity, unit ID) is fixed on the node, exactly like Modbus-Read, but the node only reads when it receives an input message. Useful for occasional, event-driven reads, for example reading a value only when a dashboard page opens.",[72,939,940,942,943,945,946,376,949,376,952,379,955,958,959,961],{},[21,941,479],{}," — the same operation, but every parameter is taken from the incoming message (",[102,944,889],{}," carries ",[102,947,948],{},"fc",[102,950,951],{},"address",[102,953,954],{},"quantity",[102,956,957],{},"unitid",") instead of the node's own configuration, so one node can serve reads against many different addresses, tables, or devices. The result comes back on ",[102,960,889],{}," (an array of values) with the request parameters echoed alongside it, so a Flex-Getter response can be routed and identified even when many different reads share the same node.",[14,963,964],{},"Both getter nodes support read function codes 1, 2, 3, and 4.",[32,966,489],{"id":967},"modbus-flex-sequencer",[14,969,970,971,376,973,975,976,405,979,750,982,405,984,986,987,379,989,991,992,995],{},"Modbus-Flex-Sequencer reads several configured ranges in order through a single node, triggered by any incoming message. Each range in the sequence is defined by ",[102,972,957],{},[102,974,948],{}," (function code, given as ",[102,977,978],{},"FC1",[102,980,981],{},"FC4",[102,983,226],{},[102,985,302],{},"), ",[102,988,951],{},[102,990,954],{},", and supports read function codes 1–4 only. The sequence is configured as a list on the node, but can be overridden per-message by supplying ",[102,993,994],{},"msg.sequences",". It is useful when a device's data of interest is spread across several non-contiguous ranges (or tables) that you would otherwise have to read with several separate nodes and then recombine. Each range is read in turn over the shared connection, respecting the same queue as every other node on that connection.",[32,997,499],{"id":998},"modbus-write-and-modbus-flex-write",[133,1000,1001,1006],{},[72,1002,1003,1005],{},[21,1004,582],{}," — the target table (Coils or Holding Registers), address, and quantity are fixed on the node; the value(s) to write come from the incoming message. Uses write function codes FC 5\u002F6 (single coil\u002Fregister) and FC 15\u002F16 (multiple).",[72,1007,1008,1010],{},[21,1009,444],{}," — the table, address, and value(s) are all taken from the incoming message, so a single node can write to different coils\u002Fregisters depending on what triggers it.",[37,1012,1015,1019],{"className":1013},[40,1014],"ff-callout--warning",[14,1016,1018],{"className":1017},[45],"Warning",[37,1020,1022],{"className":1021},[50],[14,1023,1024],{},"Writes to production equipment change real-world state. Gate write nodes behind validation or an operator confirmation step before deploying to a live instance.",[32,1026,597],{"id":1027},"modbus-flex-fc",[14,1029,1030],{},"Some devices expose data through function codes outside the standard read\u002Fwrite set. Modbus-Flex-Fc lets you send those custom or less-common function codes using configurable argument maps, so you can talk to a device whose behaviour isn't covered by the ordinary Read\u002FWrite\u002FGetter nodes. This is an advanced node — you'll need the exact request format from the device's Modbus documentation.",[32,1032,605],{"id":1033},"modbus-flex-connector",[14,1035,1036],{},"Modbus-Flex-Connector changes the active connection's endpoint at runtime from an incoming message — for example switching the target host\u002Fport or serial settings, or forcing a reconnect — without editing the Modbus-Client config and redeploying. This is useful for flows that must talk to one of several devices in turn over a single set of nodes, or that need to recover a connection programmatically.",[32,1038,414],{"id":1039},"decoding-register-values",[14,1041,1042,1043,1046,1047,1050],{},"Modbus registers are just 16-bit words — the protocol itself carries no data-type information, so a temperature reading, a setpoint, and a status word are all indistinguishable raw integers until you interpret them. A read node therefore hands your flow an ",[21,1044,1045],{},"array of raw 16-bit register values"," (or booleans for coils and discrete inputs). Turning those into meaningful values — signed integers, 32-bit integers or floats spanning two registers, scaled measurements, or a status word split into individual bits — is done ",[21,1048,1049],{},"downstream in your flow",", not by the Modbus read node itself.",[14,1052,1053],{},"There are a few common approaches:",[133,1055,1056,1340,1350],{},[72,1057,1058,1061,1062,1064,1065,1068,1069,1332,1335,1336,1339],{},[21,1059,1060],{},"A function node"," — reconstruct the value in JavaScript. ",[102,1063,889],{}," is an array of numbers, not a Buffer, so ",[102,1066,1067],{},"Buffer"," methods aren't available on it directly. Either read the raw bytes from the response buffer the node attaches to the message, or build a Buffer from the values first, writing each register big-endian to match the wire order:",[899,1070,1074],{"className":1071,"code":1072,"language":1073,"meta":907,"style":907},"language-js shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","const input = msg.payload  \u002F\u002F array of 16-bit register values\nconst buf = Buffer.alloc(input.length * 2)\ninput.forEach((reg, i) => buf.writeUInt16BE(reg, i * 2))\n\nmsg.payload = {}  \u002F\u002F decode into a new object\nmsg.payload.temperature = buf.readFloatBE(0)   \u002F\u002F registers 0–1 as a 32-bit float\nmsg.payload.counter = buf.readUInt32BE(4)      \u002F\u002F registers 2–3 as a 32-bit unsigned int\nmsg.payload.setpoint = buf.readInt16BE(8)      \u002F\u002F register 4 as a signed 16-bit int\nreturn msg\n","js",[102,1075,1076,1105,1142,1196,1203,1222,1256,1289,1322],{"__ignoreMap":907},[1077,1078,1081,1085,1089,1093,1096,1098,1101],"span",{"class":1079,"line":1080},"line",1,[1077,1082,1084],{"class":1083},"spNyl","const",[1077,1086,1088],{"class":1087},"sTEyZ"," input ",[1077,1090,1092],{"class":1091},"sMK4o","=",[1077,1094,1095],{"class":1087}," msg",[1077,1097,30],{"class":1091},[1077,1099,1100],{"class":1087},"payload  ",[1077,1102,1104],{"class":1103},"sHwdD","\u002F\u002F array of 16-bit register values\n",[1077,1106,1108,1110,1113,1115,1118,1120,1124,1127,1129,1132,1135,1139],{"class":1079,"line":1107},2,[1077,1109,1084],{"class":1083},[1077,1111,1112],{"class":1087}," buf ",[1077,1114,1092],{"class":1091},[1077,1116,1117],{"class":1087}," Buffer",[1077,1119,30],{"class":1091},[1077,1121,1123],{"class":1122},"s2Zo4","alloc",[1077,1125,1126],{"class":1087},"(input",[1077,1128,30],{"class":1091},[1077,1130,1131],{"class":1087},"length ",[1077,1133,1134],{"class":1091},"*",[1077,1136,1138],{"class":1137},"sbssI"," 2",[1077,1140,1141],{"class":1087},")\n",[1077,1143,1145,1148,1150,1153,1156,1158,1162,1164,1167,1170,1173,1176,1178,1181,1184,1186,1189,1191,1193],{"class":1079,"line":1144},3,[1077,1146,1147],{"class":1087},"input",[1077,1149,30],{"class":1091},[1077,1151,1152],{"class":1122},"forEach",[1077,1154,1155],{"class":1087},"(",[1077,1157,1155],{"class":1091},[1077,1159,1161],{"class":1160},"sHdIc","reg",[1077,1163,409],{"class":1091},[1077,1165,1166],{"class":1160}," i",[1077,1168,1169],{"class":1091},")",[1077,1171,1172],{"class":1083}," =>",[1077,1174,1175],{"class":1087}," buf",[1077,1177,30],{"class":1091},[1077,1179,1180],{"class":1122},"writeUInt16BE",[1077,1182,1183],{"class":1087},"(reg",[1077,1185,409],{"class":1091},[1077,1187,1188],{"class":1087}," i ",[1077,1190,1134],{"class":1091},[1077,1192,1138],{"class":1137},[1077,1194,1195],{"class":1087},"))\n",[1077,1197,1199],{"class":1079,"line":1198},4,[1077,1200,1202],{"emptyLinePlaceholder":1201},true,"\n",[1077,1204,1206,1209,1211,1214,1216,1219],{"class":1079,"line":1205},5,[1077,1207,1208],{"class":1087},"msg",[1077,1210,30],{"class":1091},[1077,1212,1213],{"class":1087},"payload ",[1077,1215,1092],{"class":1091},[1077,1217,1218],{"class":1091}," {}",[1077,1220,1221],{"class":1103},"  \u002F\u002F decode into a new object\n",[1077,1223,1225,1227,1229,1232,1234,1237,1239,1241,1243,1246,1248,1250,1253],{"class":1079,"line":1224},6,[1077,1226,1208],{"class":1087},[1077,1228,30],{"class":1091},[1077,1230,1231],{"class":1087},"payload",[1077,1233,30],{"class":1091},[1077,1235,1236],{"class":1087},"temperature ",[1077,1238,1092],{"class":1091},[1077,1240,1175],{"class":1087},[1077,1242,30],{"class":1091},[1077,1244,1245],{"class":1122},"readFloatBE",[1077,1247,1155],{"class":1087},[1077,1249,348],{"class":1137},[1077,1251,1252],{"class":1087},")   ",[1077,1254,1255],{"class":1103},"\u002F\u002F registers 0–1 as a 32-bit float\n",[1077,1257,1259,1261,1263,1265,1267,1270,1272,1274,1276,1279,1281,1283,1286],{"class":1079,"line":1258},7,[1077,1260,1208],{"class":1087},[1077,1262,30],{"class":1091},[1077,1264,1231],{"class":1087},[1077,1266,30],{"class":1091},[1077,1268,1269],{"class":1087},"counter ",[1077,1271,1092],{"class":1091},[1077,1273,1175],{"class":1087},[1077,1275,30],{"class":1091},[1077,1277,1278],{"class":1122},"readUInt32BE",[1077,1280,1155],{"class":1087},[1077,1282,302],{"class":1137},[1077,1284,1285],{"class":1087},")      ",[1077,1287,1288],{"class":1103},"\u002F\u002F registers 2–3 as a 32-bit unsigned int\n",[1077,1290,1292,1294,1296,1298,1300,1303,1305,1307,1309,1312,1314,1317,1319],{"class":1079,"line":1291},8,[1077,1293,1208],{"class":1087},[1077,1295,30],{"class":1091},[1077,1297,1231],{"class":1087},[1077,1299,30],{"class":1091},[1077,1301,1302],{"class":1087},"setpoint ",[1077,1304,1092],{"class":1091},[1077,1306,1175],{"class":1087},[1077,1308,30],{"class":1091},[1077,1310,1311],{"class":1122},"readInt16BE",[1077,1313,1155],{"class":1087},[1077,1315,1316],{"class":1137},"8",[1077,1318,1285],{"class":1087},[1077,1320,1321],{"class":1103},"\u002F\u002F register 4 as a signed 16-bit int\n",[1077,1323,1325,1329],{"class":1079,"line":1324},9,[1077,1326,1328],{"class":1327},"s7zQu","return",[1077,1330,1331],{"class":1087}," msg\n",[1333,1334],"br",{},"Avoid ",[102,1337,1338],{},"Buffer.from(new Uint16Array(msg.payload).buffer)"," — that uses the host's byte order, which may be little-endian depending on where Node-RED runs, and silently gives you byte-swapped values.",[72,1341,1342,1345,1346,1349],{},[21,1343,1344],{},"A buffer-parser node"," — a dedicated parsing node (such as ",[102,1347,1348],{},"node-red-contrib-buffer-parser",") accepts the values array directly, so you don't have to deal with the Buffer question at all. It lets you declare each field's type and endianness in configuration rather than in code, which is convenient when a single response contains many differently-typed fields.",[72,1351,1352,1355,1356,1359,1360,376,1362,1364,1365,1368,1369,1372,1373,1376,1377,1380,1381,1384,1385,1388,1389,1391],{},[21,1353,1354],{},"The package's built-in IO mapping"," — a ",[21,1357,1358],{},"Modbus-IO-Config"," node holds a JSON file that maps IEC-style addresses (",[102,1361,627],{},[102,1363,630],{},", and so on) to names, where the first character of each name selects the data type (",[102,1366,1367],{},"i"," integer, ",[102,1370,1371],{},"w"," word, ",[102,1374,1375],{},"u"," unsigned, ",[102,1378,1379],{},"b"," boolean, ",[102,1382,1383],{},"f","\u002F",[102,1386,1387],{},"r"," float, and so on). A read node can attach that mapping to its output, and ",[21,1390,636],{}," narrows the result down to the named fields a downstream node needs. This is convenient when your address list originates from a PLC export.",[37,1393,1395,1398],{"className":1394},[40,41],[14,1396,46],{"className":1397},[45],[37,1399,1401],{"className":1400},[50],[14,1402,1403],{},"Choose the data type and word order that matches how the device packs its data, which is usually documented in the device's Modbus register map. If a decoded value looks wildly wrong (for example a temperature reading in the millions), the most common cause is a word-order mismatch on a multi-register value. Try the other byte\u002Fword order before assuming the device or wiring is at fault.",[32,1405,613],{"id":1406},"modbus-response",[14,1408,1409],{},"The Modbus-Response node displays the status and content of a Modbus response in the editor. Placed downstream of a read node, it is an inspection\u002Fdiagnostic aid that shows what came back, which is helpful while building and debugging a flow.",[37,1411,1413,1416],{"className":1412},[40,41],[14,1414,46],{"className":1415},[45],[37,1417,1419],{"className":1418},[50],[14,1420,1421,1422,1425,1426,30],{},"Modbus-Response is for ",[21,1423,1424],{},"display and inspection"," — it does not convert raw registers into typed values. To turn raw registers into integers, floats, or scaled measurements, decode them in your flow as described in ",[26,1427,414],{"href":413},[32,1429,517],{"id":1430},"modbus-server",[14,1432,1433],{},"The Modbus-Server node runs a buffer-backed Modbus TCP server inside your FlowFuse instance, responding to reads and writes initiated by an external Modbus client (a PLC, SCADA system, or test tool). Fixed-size in-memory buffers back the holding registers, coils, input registers, and discrete inputs, which suits development and testing rather than full device emulation.",[14,1435,1436],{},"This is primarily useful for:",[133,1438,1439,1445],{},[72,1440,1441,1444],{},[21,1442,1443],{},"Testing flows without hardware"," — stand up a server so a Modbus-Read\u002FWrite flow can be built and verified before real hardware is available.",[72,1446,1447,1450],{},[21,1448,1449],{},"Local integration testing"," — exercise read and write paths end to end against a server running in the same instance.",[37,1452,1454,1457],{"className":1453},[40,41],[14,1455,46],{"className":1456},[45],[37,1458,1460],{"className":1459},[50],[14,1461,1462,1463,1466],{},"The in-package Modbus-Server is a ",[21,1464,1465],{},"buffer-backed server for demos and tests",". It is not intended to replicate a specific device's complete register-map behaviour. For more elaborate simulation needs, a dedicated Modbus simulation tool is a better fit.",[32,1468,651],{"id":1469},"modbus-queue-info",[14,1471,1472],{},"Each Modbus-Client connection processes its requests through a single ordered queue. Modbus-Queue-Info reports the current depth of that queue (and can reset it), which is the quickest way to spot a connection whose poll rate is faster than the device — or shared bus — can service. A queue that grows over time means requests are arriving faster than replies, and the poll rate should be lowered.",[32,1474,1476],{"id":1475},"network-requirements","Network Requirements",[14,1478,1479],{},"When the certified node runs inside a corporate or industrial network, allow the following outbound connections through your firewall or URL-filtering proxy. Share this section with your IT or OT\u002Fsecurity team.",[188,1481,1482,1500],{},[191,1483,1484],{},[194,1485,1486,1489,1492,1495,1497],{},[197,1487,1488],{},"Hostname \u002F Target",[197,1490,1491],{},"Port",[197,1493,1494],{},"Protocol",[197,1496,539],{},[197,1498,1499],{},"Required?",[216,1501,1502,1519,1535],{},[194,1503,1504,1507,1510,1513,1516],{},[221,1505,1506],{},"Your Modbus TCP\u002FUDP device(s)",[221,1508,1509],{},"typically 502",[221,1511,1512],{},"TCP \u002F UDP",[221,1514,1515],{},"Modbus TCP\u002FUDP data plane",[221,1517,1518],{},"Yes, for TCP\u002FUDP connections",[194,1520,1521,1524,1526,1529,1532],{},[221,1522,1523],{},"Local serial port",[221,1525,255],{},[221,1527,1528],{},"RS-232 \u002F RS-485",[221,1530,1531],{},"Modbus RTU\u002FASCII data plane",[221,1533,1534],{},"Yes, for Serial connections",[194,1536,1537,1542,1545,1548,1551],{},[221,1538,1539],{},[102,1540,1541],{},"registry.npmjs.org",[221,1543,1544],{},"443",[221,1546,1547],{},"HTTPS",[221,1549,1550],{},"Package installation (one-time, via the palette)",[221,1552,1553],{},"Standard Node-RED requirement",[14,1555,1556],{},"The Modbus TCP\u002FUDP port (default 502) is configurable per device; update the firewall rule if your device uses a non-default port. The certified node does not make any external licence-check or activation calls — licensing is managed through FlowFuse.",[32,1558,1560],{"id":1559},"troubleshooting","Troubleshooting",[188,1562,1563,1573],{},[191,1564,1565],{},[194,1566,1567,1570],{},[197,1568,1569],{},"Symptom",[197,1571,1572],{},"What to check",[216,1574,1575,1583,1591,1599,1607,1615,1623,1633,1644,1652],{},[194,1576,1577,1580],{},[221,1578,1579],{},"Connection never establishes",[221,1581,1582],{},"Verify the IP\u002Fport (TCP\u002FUDP) or serial port\u002Fbaud rate\u002Fparity (Serial) match the device, and that the device is reachable on the network or physically wired.",[194,1584,1585,1588],{},[221,1586,1587],{},"Illegal Function (exception code 1)",[221,1589,1590],{},"The device does not support the function code you're using — check its register map for which FCs it implements.",[194,1592,1593,1596],{},[221,1594,1595],{},"Illegal Data Address (exception code 2)",[221,1597,1598],{},"The address (or address + quantity) falls outside the device's supported range for that table.",[194,1600,1601,1604],{},[221,1602,1603],{},"Illegal Data Value (exception code 3)",[221,1605,1606],{},"The value being written is out of range for the target register\u002Fcoil.",[194,1608,1609,1612],{},[221,1610,1611],{},"Slave Device Failure (exception code 4)",[221,1613,1614],{},"The protocol's name for a server-side fault — an internal fault on the device itself. Check the device's own diagnostics.",[194,1616,1617,1620],{},[221,1618,1619],{},"Requests time out intermittently",[221,1621,1622],{},"Lower the poll rate, check for other clients competing for the same device, and confirm the timeout setting is generous enough for the device's actual response time.",[194,1624,1625,1628],{},[221,1626,1627],{},"Decoded values look wrong (huge, negative, or garbled)",[221,1629,1630,1631,30],{},"Check the data type and byte\u002Fword order used in your decoding step against the device's documented register format — see ",[26,1632,414],{"href":413},[194,1634,1635,1638],{},[221,1636,1637],{},"Requests appear delayed or bunched up",[221,1639,1640,1641,1643],{},"Check ",[26,1642,651],{"href":922}," — the poll rate is likely faster than the device (or shared bus) can keep up with.",[194,1645,1646,1649],{},[221,1647,1648],{},"Serial connection works from a test tool but not from FlowFuse",[221,1650,1651],{},"Confirm no other process holds the serial port open, and that the FlowFuse instance's OS user has permission to access it.",[194,1653,1654,1657],{},[221,1655,1656],{},"Multiple devices on one connection interfere with each other",[221,1658,1659,1660,1662],{},"Confirm each node\u002Fdevice uses the correct ",[21,1661,361],{}," — a wrong unit ID silently talks to the wrong logical device on a shared bus or gateway.",[14,1664,1665,1666,30],{},"For help enabling the Modbus Certified Node, licensing, or anything else, ",[26,1667,1668],{"href":60},"contact FlowFuse",[1670,1671,1672],"style",{},"html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":907,"searchDepth":1198,"depth":1198,"links":1674},[1675,1678,1679,1683,1684,1685,1688,1689,1690,1691,1692,1693,1694,1695,1696,1697,1698],{"id":34,"depth":1107,"text":35,"children":1676},[1677],{"id":66,"depth":1144,"text":67},{"id":127,"depth":1107,"text":128},{"id":418,"depth":1107,"text":419,"children":1680},[1681,1682],{"id":425,"depth":1144,"text":426},{"id":448,"depth":1144,"text":449},{"id":521,"depth":1107,"text":522},{"id":669,"depth":1107,"text":670},{"id":841,"depth":1107,"text":436,"children":1686},[1687],{"id":847,"depth":1144,"text":848},{"id":926,"depth":1107,"text":927},{"id":967,"depth":1107,"text":489},{"id":998,"depth":1107,"text":499},{"id":1027,"depth":1107,"text":597},{"id":1033,"depth":1107,"text":605},{"id":1039,"depth":1107,"text":414},{"id":1406,"depth":1107,"text":613},{"id":1430,"depth":1107,"text":517},{"id":1469,"depth":1107,"text":651},{"id":1475,"depth":1107,"text":1476},{"id":1559,"depth":1107,"text":1560},"https:\u002F\u002Fgithub.com\u002FFlowFuse\u002Fwebsite\u002Fedit\u002Fmain\u002Fnuxt\u002Fcontent-guides\u002Fflowfuse-nodes\u002Fedge\u002Fmodbus.md","md",null,{},"\u002Fdocs\u002Fflowfuse-nodes\u002Fedge\u002Fmodbus",{"title":5,"description":16},"docs\u002Fflowfuse-nodes\u002Fedge\u002Fmodbus","2026-09-08 11:02:51 +0200","wDGjTleE8PKj8_T6qC2oeLmDy5L5uhL48sNt2X4HdJI",{"id":1709,"extension":1710,"meta":1711,"sections":1712,"stem":2109,"__hash__":2110},"featureCatalog\u002Ffeature-catalog.yml","yml",{},[1713,1774,1875,1936,2013,2091],{"id":1714,"title":1715,"features":1716},"ai-automation","AI & Automation",[1717,1727,1737,1747,1753,1763,1769],{"id":1718,"title":1719,"description":1720,"docsLink":1721,"changelog":1722,"tiers":1726},"flowfuse-expert-ai","FlowFuse Expert AI","Build industrial apps with agents, and query the state of the factory with an agent. Adapt your current hardware and machines so agentic work can be done against them, without ripping and replacing what's already on the plant floor.","\u002Fdocs\u002Fuser\u002Fexpert\u002F",[1723],{"url":1724,"release":1725},"\u002Fchangelog\u002F2026\u002F02\u002Fff-expert-update-banner\u002F","2.28",{"edge":1201,"hub":1201,"fleet":1201},{"id":1728,"title":1729,"description":1730,"docsLink":1731,"changelog":1732,"subfeature":1201,"showOnPricing":1735,"tiers":1736},"flowfuse-expert-support-mode","Support Mode","Chat-based assistance for FlowFuse and Node-RED, including Node-RED instance management through natural language.","\u002Fdocs\u002Fuser\u002Fexpert\u002Fchat\u002F#support-mode",[1733],{"url":1734,"release":1725},"\u002Fchangelog\u002F2026\u002F02\u002Fff-expert-debug-log-context\u002F",false,{"edge":1201,"hub":1201,"fleet":1201},{"id":1738,"title":1739,"description":1740,"docsLink":1741,"changelog":1742,"subfeature":1201,"showOnPricing":1735,"tiers":1746},"flowfuse-expert-application-building","Application Building","Describe what you want to build and FlowFuse Expert assembles it on your workspace, adding tabs, wiring nodes, and configuring properties.","\u002Fdocs\u002Fuser\u002Fexpert\u002Fchat\u002F",[1743],{"url":1744,"release":1745},"\u002Fchangelog\u002F2026\u002F05\u002Fexpert-application-building\u002F","2.30",{"edge":1201,"hub":1201,"fleet":1201},{"id":1748,"title":1749,"description":1750,"docsLink":1751,"subfeature":1201,"beta":1201,"showOnPricing":1735,"tiers":1752},"flowfuse-expert-insights-mode","Insights Mode","Connects FlowFuse Expert to MCP servers in your Node-RED instances, enabling real-time data queries and actions through a single chat interface.","\u002Fdocs\u002Fuser\u002Fexpert\u002Fchat\u002F#insights-mode",{"edge":1201,"hub":1201,"fleet":1201},{"id":1754,"title":1755,"description":1756,"docsLink":1757,"changelog":1758,"tiers":1762},"third-party-agents","Connect Your Own AI Agent","Point the AI agent your company already uses at FlowFuse, so it can query your teams and instances and build Node-RED applications, with you deciding which teams it reaches and whether it can make changes.","\u002Fdocs\u002Fuser\u002Fexpert\u002Fthird-party-agents\u002F",[1759],{"url":1760,"release":1761},"\u002Fchangelog\u002F2026\u002F08\u002Fconnect-your-own-ai-agent\u002F","3.0",{"edge":1201,"hub":1201,"fleet":1201},{"id":1764,"title":1765,"description":1766,"docsLink":1767,"tiers":1768},"mcp-servers","Agentic Operations","Expose your Node-RED flows as tools an AI agent can call directly, so agents can query the state of the factory or trigger actions without custom integration work.","\u002Fdocs\u002Fflowfuse-nodes\u002Fmcp\u002F",{"edge":1201,"hub":1201,"fleet":1201},{"id":1770,"title":1771,"description":1772,"tiers":1773},"onnx-integration","ONNX Integration","Run trained machine learning models directly in your flows, including on edge hardware, without sending data out to an external inference service.",{"edge":1201,"hub":1201,"fleet":1201},{"id":1775,"title":1776,"features":1777},"build","Build",[1778,1784,1790,1800,1806,1812,1816,1822,1828,1836,1842,1846,1850,1859,1867],{"id":1779,"title":1780,"description":1781,"docsLink":1782,"tiers":1783},"edge-development","Edge Development","Develop and test Node-RED flows directly on edge devices with a remote editor proxy.","\u002Fdocs\u002Fdevice-agent\u002Fquickstart\u002F",{"edge":1201,"hub":1735,"fleet":1201},{"id":1785,"title":1786,"description":1787,"docsLink":1788,"tiers":1789},"private-npm-registry","Custom Node-RED Nodes","Create and manage your own private npm registry for Node-RED nodes, so you can share custom nodes across your team and devices without publishing them publicly.","\u002Fdocs\u002Fuser\u002Fcustom-npm-packages\u002F",{"edge":1201,"hub":1201,"fleet":1201},{"id":1791,"title":1792,"description":1793,"docsLink":1794,"changelog":1795,"tiers":1799},"flowfuse-tables","FlowFuse Tables","A managed PostgreSQL database for every application, so you can store and query structured data without standing up and maintaining your own database.","\u002Fdocs\u002Fuser\u002Fff-tables\u002F",[1796],{"url":1797,"release":1798},"\u002Fchangelog\u002F2026\u002F07\u002Fexpert-tables-automation\u002F","2.33",{"edge":1201,"hub":1201,"fleet":1201},{"id":1801,"title":1802,"description":1803,"docsLink":1804,"tiers":1805},"persistent-files","File Storage","Store and retrieve files from your Node-RED flows, with automatic replication and backup across your devices and hosted instances.","\u002Fdocs\u002Finstall\u002Ffile-storage\u002F",{"edge":1201,"hub":1201,"fleet":1201},{"id":1807,"title":1808,"description":1809,"docsLink":1810,"showOnPricing":1735,"tiers":1811},"persistent-context","Persistent Context","In-memory values defined in a Node-RED flow persist across project restarts and upgrades.","\u002Fdocs\u002Fuser\u002Fpersistent-context\u002F",{"edge":1201,"hub":1201,"fleet":1201},{"id":1813,"title":1814,"showOnPricing":1735,"tiers":1815},"static-assets","Static Assets",{"edge":1201,"hub":1201,"fleet":1201},{"id":1817,"title":1818,"description":1819,"docsLink":1820,"tiers":1821},"team-library","Team Library","Set up standard nodes and flows that can be shared with all team members across your organisation.","\u002Fdocs\u002Fuser\u002Fshared-library\u002F",{"edge":1201,"hub":1201,"fleet":1201},{"id":1823,"title":1824,"description":1825,"docsLink":1826,"tiers":1827},"personalised-multi-user-dashboards","Personalised Multi-User Dashboards","Build applications that provide unique data to each logged-in user using personalised multi-user dashboards.","https:\u002F\u002Fdashboard.flowfuse.com\u002Fuser\u002Fmulti-tenancy.html",{"edge":1201,"hub":1201,"fleet":1201},{"id":1829,"title":1830,"description":1831,"changelog":1832,"subfeature":1201,"showOnPricing":1735,"tiers":1835},"dashboards-view","Dashboards View","Browse and open every dashboard across your team from a dedicated Dashboards view, at both team and application level, without leaving FlowFuse.",[1833],{"url":1834,"release":1798},"\u002Fchangelog\u002F2026\u002F07\u002Fteam-and-application-dashboards\u002F",{"edge":1201,"hub":1201,"fleet":1201},{"id":1837,"title":1838,"description":1839,"docsLink":1840,"tiers":1841},"blueprints-converge","Blueprints","Ready-made starting points for your apps, from cross-team Converge templates to OT and IT specific blueprints.","\u002Fdocs\u002Fuser\u002Fconcepts\u002F#blueprint",{"edge":1201,"hub":1201,"fleet":1201},{"id":1843,"title":1844,"subfeature":1201,"showOnPricing":1735,"tiers":1845},"blueprints-ot-apps","Blueprints - OT APPS",{"edge":1201,"hub":1735,"fleet":1201},{"id":1847,"title":1848,"subfeature":1201,"showOnPricing":1735,"tiers":1849},"blueprints-it-apps","Blueprints - IT APPS",{"edge":1735,"hub":1201,"fleet":1735},{"id":1851,"title":1852,"description":1853,"changelog":1854,"showOnPricing":1735,"tiers":1858},"immersive-editor-snapshots","Snapshot Details in Immersive Editor","View and manage snapshot details directly inside the immersive editor without leaving your editing session.",[1855],{"url":1856,"release":1857},"\u002Fchangelog\u002F2026\u002F03\u002Fsnapshot-detail-modal-immersive-editor\u002F","2.29",{"edge":1201,"hub":1201,"fleet":1201},{"id":1860,"title":1861,"description":1862,"changelog":1863,"showOnPricing":1735,"tiers":1866},"immersive-editor-drawer","Customisable Immersive Editor Drawer","Pin, move, resize, or full-screen the immersive editor drawer. Your preferences are remembered between sessions.",[1864],{"url":1865,"release":1745},"\u002Fchangelog\u002F2026\u002F04\u002Fimmersive-editor-drawer\u002F",{"edge":1201,"hub":1201,"fleet":1201},{"id":1868,"title":1869,"description":1870,"changelog":1871,"showOnPricing":1735,"tiers":1874},"embedded-editor-tab-title","Embedded Editor Browser Tab Title","The browser tab title updates to reflect the active Node-RED canvas tab when working in the embedded editor.",[1872],{"url":1873,"release":1857},"\u002Fchangelog\u002F2026\u002F03\u002Fembedded-editor-tab-title\u002F",{"edge":1201,"hub":1201,"fleet":1201},{"id":1876,"title":806,"features":1877},"deploy",[1878,1884,1893,1899,1905,1911,1917,1923,1928],{"id":1879,"title":1880,"description":1881,"docsLink":1882,"tiers":1883},"hosted-instances","Cloud Instances","Run Node-RED instances managed and hosted by FlowFuse.","\u002Fdocs\u002Fuser\u002Fintroduction\u002F#creating-a-node-red-instance",{"edge":1201,"hub":1201,"fleet":1201},{"id":1885,"title":1886,"description":1887,"docsLink":1888,"changelog":1889,"tiers":1892},"edge-devices","Edge Instances","Deploy and mange your Node-RED instances on edge PLCs and gateways, with full visibility and control from the cloud.","\u002Fdocs\u002Fdevice-agent\u002Fintroduction\u002F",[1890],{"url":1891,"release":1725},"\u002Fchangelog\u002F2026\u002F02\u002Fdevice-agent-nodejs-options\u002F",{"edge":1201,"hub":1735,"fleet":1201},{"id":1894,"title":1895,"description":1896,"docsLink":1897,"tiers":1898},"custom-hostnames","Custom Hostnames","Access your Node-RED application via your own domain name.","\u002Fdocs\u002Fuser\u002Fcustom-hostnames\u002F",{"edge":1735,"hub":1201,"fleet":1735},{"id":1900,"title":1901,"description":1902,"docsLink":1903,"tiers":1904},"mqtt-broker","MQTT Broker","Manage and create MQTT clients to transport data for efficient messaging and communication within your applications.","\u002Fdocs\u002Fuser\u002Fteambroker\u002F",{"edge":1201,"hub":1735,"fleet":1201},{"id":1906,"title":1907,"description":1908,"docsLink":1909,"showOnPricing":1735,"tiers":1910},"project-nodes","Project Nodes aka seamless project comms","FlowFuse Project Nodes enable the passing of data and messages between your Node-RED projects.","\u002Fdocs\u002Fuser\u002Fprojectnodes\u002F",{"edge":1201,"hub":1201,"fleet":1201},{"id":1912,"title":1913,"description":1914,"docsLink":1915,"tiers":1916},"devops-pipelines","DevOps Pipelines","Set up different environments for development, testing, and production Node-RED instances to support a full software delivery lifecycle.","\u002Fdocs\u002Fuser\u002Fdevops-pipelines\u002F",{"edge":1201,"hub":1201,"fleet":1201},{"id":1918,"title":1919,"description":1920,"docsLink":1921,"tiers":1922},"git-integration","Git Integration","Back up your flows to a remote Git repository through a DevOps Pipeline. Supports GitHub and Azure DevOps repositories.","\u002Fdocs\u002Fuser\u002Fdevops-pipelines\u002F#git-repository-stage",{"edge":1735,"hub":1201,"fleet":1735},{"id":1924,"title":1925,"description":1926,"docsLink":1921,"subfeature":1201,"showOnPricing":1735,"tiers":1927},"git-integration-github","GitHub","Push and pull snapshots to GitHub repositories through DevOps Pipeline Git Stages.",{"edge":1735,"hub":1201,"fleet":1735},{"id":1929,"title":1930,"description":1931,"docsLink":1921,"changelog":1932,"subfeature":1201,"showOnPricing":1735,"tiers":1935},"git-integration-azure","Azure DevOps","Push and pull snapshots to Azure DevOps repositories through DevOps Pipeline Git Stages.",[1933],{"url":1934,"release":1857},"\u002Fchangelog\u002F2026\u002F03\u002Fazure-dev-ops-gitops\u002F",{"edge":1735,"hub":1201,"fleet":1735},{"id":1937,"title":1938,"features":1939},"operate-maintain","Operate & Maintain",[1940,1946,1952,1957,1965,1969,1973,1978,1984,1990,1995,2001,2005,2009],{"id":1941,"title":1942,"description":1943,"docsLink":1944,"tiers":1945},"snapshots","Snapshots & Version History","Automatic snapshots on remote devices and hosted instances, plus a full version history timeline so you can roll back to any prior state.","\u002Fdocs\u002Fuser\u002Fsnapshots\u002F",{"edge":1201,"hub":1201,"fleet":1201},{"id":1947,"title":1948,"description":1949,"docsLink":1950,"subfeature":1201,"showOnPricing":1735,"tiers":1951},"auto-snapshot-remote","Auto Snapshot (Remote)","Automatically capture a snapshot every time a remote instance is deployed, so you always have a recoverable history of what was running on each device.","\u002Fdocs\u002Fuser\u002Fsnapshots\u002F#auto-snapshots",{"edge":1201,"hub":1201,"fleet":1201},{"id":1953,"title":1954,"description":1955,"docsLink":1950,"subfeature":1201,"showOnPricing":1735,"tiers":1956},"auto-snapshot-hosted","Auto Snapshot (Hosted)","Automatically capture a snapshot every time a hosted instance is deployed, so you always have a recoverable history of what was running.",{"edge":1201,"hub":1201,"fleet":1201},{"id":1958,"title":1959,"description":1960,"changelog":1961,"subfeature":1201,"showOnPricing":1735,"tiers":1964},"snapshot-comparison","Snapshot Comparison","Compare two snapshots side-by-side with a navigable diff view. Step through every changed, added, or deleted node and see property and code diffs.",[1962],{"url":1963,"release":1857},"\u002Fchangelog\u002F2026\u002F04\u002Fsnapshot-diff-viewer\u002F",{"edge":1201,"hub":1201,"fleet":1201},{"id":1966,"title":1967,"subfeature":1201,"showOnPricing":1735,"tiers":1968},"version-history-timeline","Version History Timeline",{"edge":1201,"hub":1201,"fleet":1201},{"id":1970,"title":1971,"tiers":1972},"unlimited-workflow-executions","Unlimited Workflow Executions",{"edge":1201,"hub":1201,"fleet":1201},{"id":1974,"title":1975,"description":1976,"tiers":1977},"device-fleet-updates","Device Fleet Updates","Connect to edge devices to quickly assess and update logic. Debug one device and roll out improvements to your fleet in minutes, securely without requiring full device access for your whole organisation.",{"edge":1201,"hub":1735,"fleet":1201},{"id":1979,"title":1980,"description":1981,"docsLink":1982,"tiers":1983},"device-group-management","Device Group Management","Logically group devices assigned to an application and integrate device groups into your DevOps Pipeline for coordinated fleet updates.","\u002Fdocs\u002Fuser\u002Fdevice-groups\u002F",{"edge":1201,"hub":1735,"fleet":1201},{"id":1985,"title":1986,"description":1987,"docsLink":1988,"tiers":1989},"high-availability","High Availability","Leverage horizontal scaling for reliable and scalable processing of your data through Node-RED.","\u002Fdocs\u002Fuser\u002Fhigh-availability\u002F",{"edge":1735,"hub":1201,"fleet":1735},{"id":1991,"title":1992,"description":1993,"tiers":1994},"performance-monitoring","Performance Monitoring & Alerts","Track CPU, memory, and event loop performance across your instances and devices, with email alerts when something needs your attention.",{"edge":1201,"hub":1201,"fleet":1201},{"id":1996,"title":1997,"description":1998,"docsLink":1999,"subfeature":1201,"showOnPricing":1735,"tiers":2000},"instance-monitoring","Instance Monitoring","Enable alerts to be sent via email when your Node-RED instances encounter issues.","\u002Fdocs\u002Fuser\u002Finstance-settings\u002F#alerts",{"edge":1201,"hub":1201,"fleet":1201},{"id":2002,"title":2003,"subfeature":1201,"showOnPricing":1735,"tiers":2004},"email-alerts","Email Alerts",{"edge":1201,"hub":1201,"fleet":1201},{"id":2006,"title":2007,"showOnPricing":1735,"tiers":2008},"api-debug-length-limit","API\u002FDebug Length Limit",{"edge":1201,"hub":1201,"fleet":1201},{"id":2010,"title":2011,"tiers":2012},"protected-instances","Protected Instances",{"edge":1735,"hub":1201,"fleet":1735},{"id":2014,"title":2015,"features":2016},"govern-secure","Govern and Secure",[2017,2026,2032,2037,2042,2048,2054,2060,2068,2074,2080,2086],{"id":2018,"title":2019,"description":2020,"docsLink":2021,"changelog":2022,"tiers":2025},"single-sign-on","Single Sign-On (SSO)","Configure FlowFuse to work with your own SSO provider, allowing users to access FlowFuse with a single set of login credentials.","\u002Fdocs\u002Fadmin\u002Fsso\u002F",[2023],{"url":2024,"release":1798},"\u002Fchangelog\u002F2026\u002F07\u002Fapplication-sso-groups\u002F",{"edge":1201,"hub":1201,"fleet":1201},{"id":2027,"title":2028,"description":2029,"docsLink":2030,"tiers":2031},"two-factor-authentication","Two-Factor Authentication","Two-factor authentication adds an extra layer of security to your FlowFuse account.","\u002Fdocs\u002Fuser\u002Fuser-settings\u002F#two-factor-authentication",{"edge":1201,"hub":1201,"fleet":1201},{"id":2033,"title":2034,"description":2035,"docsLink":28,"tiers":2036},"certified-nodes-it","Certified Nodes - IT","IT certified node bundle includes: Redis, MQTT, HTTP Request, AI nodes (Gemini, Claude, ChatGPT, Ollama), MCP Server",{"edge":1735,"hub":1201,"fleet":1201},{"id":2038,"title":2039,"description":2040,"tiers":2041},"certified-nodes-ot","Certified OT Connections - OPC-UA, Modbus, etc.","OT certified node bundle includes: OPC-UA, Modbus TCP & RTU, RTSP, EtherNet\u002FIP, AI nodes (Gemini, Claude, ChatGPT, Ollama), MCP Server",{"edge":1201,"hub":1735,"fleet":1735},{"id":2043,"title":2044,"description":2045,"docsLink":2046,"tiers":2047},"audit-log","Audit Log","Keep track of everything going on in your Node-RED instances and FlowFuse. Audit Logs provide details on what actions have taken place, when they happened, and who did them.","\u002Fdocs\u002Fuser\u002Flogs\u002F#audit-log",{"edge":1201,"hub":1201,"fleet":1201},{"id":2049,"title":2050,"description":2051,"docsLink":2052,"tiers":2053},"role-based-access-control","Role-Based Access Control","Control who can do what at both the team and application level, from viewers to admins.","\u002Fdocs\u002Fuser\u002Frole-based-access-control\u002F",{"edge":1201,"hub":1201,"fleet":1201},{"id":2055,"title":2056,"description":2057,"docsLink":2058,"subfeature":1201,"showOnPricing":1735,"tiers":2059},"application-level-rbac","Application-Level RBAC","Fine-grained access control per application, allowing team members to have different permission levels across different applications without requiring separate teams.","\u002Fdocs\u002Fuser\u002Frole-based-access-control\u002F#application-level-rbac",{"edge":1201,"hub":1201,"fleet":1201},{"id":2061,"title":2062,"description":2063,"changelog":2064,"subfeature":1201,"showOnPricing":1735,"tiers":2067},"scoped-personal-access-tokens","Scoped Personal Access Tokens","Restrict a Personal Access Token to specific teams, limit it to read-only operations, or control whether it carries admin privileges.",[2065],{"url":2066,"release":1798},"\u002Fchangelog\u002F2026\u002F07\u002Fscoped-pats\u002F",{"edge":1201,"hub":1201,"fleet":1201},{"id":2069,"title":2070,"description":2071,"docsLink":2072,"showOnPricing":1735,"tiers":2073},"team-members","Team Members","Invite multiple team members to collaborate on the same Node-RED flows.","\u002Fdocs\u002Fuser\u002Fteam\u002F#teams",{"edge":1201,"hub":1201,"fleet":1201},{"id":2075,"title":2076,"description":2077,"docsLink":2078,"showOnPricing":1735,"tiers":2079},"endpoint-security","Endpoint Security","Secure HTTP endpoints for hosted Node-RED instances using FlowFuse credentials.","\u002Fdocs\u002Fuser\u002Finstance-settings\u002F#security",{"edge":1201,"hub":1201,"fleet":1201},{"id":2081,"title":2082,"description":2083,"docsLink":2084,"tiers":2085},"baa-for-hipaa","BAA for HIPAA","FlowFuse can sign a Business Associate Agreement to ensure proper safeguarding of protected health information handled on your behalf.","\u002Fhandbook\u002Fsales\u002Fsubscription-agreement-1.6\u002F",{"edge":1735,"hub":1201,"fleet":1735},{"id":2087,"title":2088,"description":2089,"tiers":2090},"sbom","Software Bill of Materials","A complete list of all software components used in your Node-RED instances and hosted applications, including version numbers and license information.",{"edge":1735,"hub":1201,"fleet":1735},{"id":2092,"title":2093,"features":2094},"support","Support",[2095,2100,2104],{"id":2096,"title":2097,"docsLink":2098,"tiers":2099},"installation-support","Installation Support","\u002Fdocs\u002Finstall\u002Fintroduction\u002F#do-you-need-help-installation-service",{"edge":1201,"hub":1201,"fleet":1201},{"id":2101,"title":2102,"showOnPricing":1735,"tiers":2103},"live-chat-support","Live Chat Support",{"edge":1201,"hub":1201,"fleet":1201},{"id":2105,"title":2106,"docsLink":2107,"tiers":2108},"enterprise-support","Enterprise Support","\u002Fdocs\u002Fpremium-support\u002F",{"edge":1201,"hub":1201,"fleet":1201},"feature-catalog","v5NjPsqOkQexQ0Fk82nqY6ZEXj128lclDvrIkmsKbpM",[2112,2198,2435,2505,2518,2658,2668,2749],{"name":2113,"order":2114,"children":2115},"Application Guide",0,[2116,2164],{"title":2117,"path":2118,"group":2113,"groupOrder":2114,"order":1080,"children":2119},"Building FlowFuse applications","\u002Fdocs\u002Fapplication-guide",[2120,2124,2136,2140,2156],{"title":2121,"path":2122,"order":1080,"children":2123},"Foundations","\u002Fdocs\u002Fapplication-guide\u002Ffoundations",[],{"title":2125,"path":2126,"order":1107,"children":2127},"App delivery methods","\u002Fdocs\u002Fapplication-guide\u002Fapp-delivery-methods",[2128,2132],{"title":2129,"path":2130,"order":1080,"children":2131},"Hardware apps","\u002Fdocs\u002Fapplication-guide\u002Fapp-delivery-methods\u002Fhardware-apps",[],{"title":2133,"path":2134,"order":1107,"children":2135},"Software apps","\u002Fdocs\u002Fapplication-guide\u002Fapp-delivery-methods\u002Fsoftware-apps",[],{"title":2137,"path":2138,"order":1144,"children":2139},"Data plane","\u002Fdocs\u002Fapplication-guide\u002Fdata-plane",[],{"title":2141,"path":2142,"order":1198,"children":2143},"Architectures","\u002Fdocs\u002Fapplication-guide\u002Farchitectures",[2144,2148,2152],{"title":2145,"path":2146,"order":1080,"children":2147},"IT architectures","\u002Fdocs\u002Fapplication-guide\u002Farchitectures\u002Fit",[],{"title":2149,"path":2150,"order":1107,"children":2151},"OT architectures","\u002Fdocs\u002Fapplication-guide\u002Farchitectures\u002Fot",[],{"title":2153,"path":2154,"order":1144,"children":2155},"IIoT architectures","\u002Fdocs\u002Fapplication-guide\u002Farchitectures\u002Fiiot",[],{"title":2157,"path":2158,"order":1205,"children":2159},"Worked examples","\u002Fdocs\u002Fapplication-guide\u002Fworked-examples",[2160],{"title":2161,"path":2162,"order":1080,"children":2163},"OEE, end to end","\u002Fdocs\u002Fapplication-guide\u002Fworked-examples\u002Foee",[],{"title":2165,"path":2166,"group":2113,"groupOrder":2114,"order":1107,"children":2167},"Designing Node-RED flows","\u002Fdocs\u002Fnode-red-guide",[2168,2171,2187],{"title":2121,"path":2169,"order":1080,"children":2170},"\u002Fdocs\u002Fnode-red-guide\u002Ffoundations",[],{"title":2172,"path":2173,"order":1107,"children":2174},"Patterns","\u002Fdocs\u002Fnode-red-guide\u002Fpatterns",[2175,2179,2183],{"title":2176,"path":2177,"order":1080,"children":2178},"Design patterns","\u002Fdocs\u002Fnode-red-guide\u002Fpatterns\u002Fdesign-patterns",[],{"title":2180,"path":2181,"order":1107,"children":2182},"Handling data","\u002Fdocs\u002Fnode-red-guide\u002Fpatterns\u002Fhandling-data",[],{"title":2184,"path":2185,"order":1144,"children":2186},"Good form","\u002Fdocs\u002Fnode-red-guide\u002Fpatterns\u002Fgood-form",[],{"title":2157,"path":2188,"order":1144,"children":2189},"\u002Fdocs\u002Fnode-red-guide\u002Fworked-examples",[2190,2194],{"title":2191,"path":2192,"order":1080,"children":2193},"OEE - Edge Aggregator","\u002Fdocs\u002Fnode-red-guide\u002Fworked-examples\u002Foee-edge-aggregator",[],{"title":2195,"path":2196,"order":1107,"children":2197},"OEE - Central Dashboard","\u002Fdocs\u002Fnode-red-guide\u002Fworked-examples\u002Foee-central-dashboard",[],{"name":2199,"order":1080,"children":2200},"FlowFuse User Manuals",[2201,2326,2330,2342],{"title":2202,"path":2203,"group":2199,"groupOrder":1080,"order":1080,"children":2204,"link":1735},"Using FlowFuse","\u002Fdocs\u002Fuser",[2205,2209,2213,2217,2221,2226,2230,2233,2237,2241,2244,2248,2264,2268,2272,2276,2280,2283,2287,2291,2295,2299,2303,2306,2310,2314,2318,2322],{"title":2206,"path":2207,"order":1080,"children":2208},"Getting Started","\u002Fdocs\u002Fuser\u002Fintroduction",[],{"title":2210,"path":2211,"order":1080,"children":2212},"Static asset service","\u002Fdocs\u002Fuser\u002Fstatic-asset-service",[],{"title":2214,"path":2215,"order":1107,"children":2216},"Bill of Materials","\u002Fdocs\u002Fuser\u002Fbill-of-materials",[],{"title":2218,"path":2219,"order":1107,"children":2220},"FlowFuse Concepts","\u002Fdocs\u002Fuser\u002Fconcepts",[],{"title":2222,"path":2223,"order":2224,"children":2225},"Instance States","\u002Fdocs\u002Fuser\u002Finstance-states",10,[],{"title":2227,"path":2228,"order":1701,"children":2229},"Changing the Stack","\u002Fdocs\u002Fuser\u002Fchangestack",[],{"title":1895,"path":2231,"order":1701,"children":2232},"\u002Fdocs\u002Fuser\u002Fcustom-hostnames",[],{"title":2234,"path":2235,"order":1701,"children":2236},"Custom Node Packages","\u002Fdocs\u002Fuser\u002Fcustom-npm-packages",[],{"title":2238,"path":2239,"order":1701,"children":2240},"Dashboards","\u002Fdocs\u002Fuser\u002Fdashboards",[],{"title":1913,"path":2242,"order":1701,"children":2243},"\u002Fdocs\u002Fuser\u002Fdevops-pipelines",[],{"title":2245,"path":2246,"order":1701,"children":2247},"Environment Variables","\u002Fdocs\u002Fuser\u002Fenvvar",[],{"title":2249,"path":2250,"order":1701,"children":2251},"FlowFuse Expert","\u002Fdocs\u002Fuser\u002Fexpert",[2252,2256,2260],{"title":2253,"path":2254,"order":1701,"children":2255},"AI in Node-RED","\u002Fdocs\u002Fuser\u002Fexpert\u002Fnode-red-embedded-ai",[],{"title":2257,"path":2258,"order":1701,"children":2259},"Chat Interface","\u002Fdocs\u002Fuser\u002Fexpert\u002Fchat",[],{"title":2261,"path":2262,"order":1701,"children":2263},"Connect Your Own Agent","\u002Fdocs\u002Fuser\u002Fexpert\u002Fthird-party-agents",[],{"title":2265,"path":2266,"order":1701,"children":2267},"FlowFuse File Nodes","\u002Fdocs\u002Fuser\u002Ffilenodes",[],{"title":2269,"path":2270,"order":1701,"children":2271},"FlowFuse MQTT Nodes","\u002Fdocs\u002Fuser\u002Fmqtt-nodes",[],{"title":2273,"path":2274,"order":1701,"children":2275},"FlowFuse Persistent Context","\u002Fdocs\u002Fuser\u002Fpersistent-context",[],{"title":2277,"path":2278,"order":1701,"children":2279},"FlowFuse Project Nodes","\u002Fdocs\u002Fuser\u002Fprojectnodes",[],{"title":1792,"path":2281,"order":1701,"children":2282},"\u002Fdocs\u002Fuser\u002Fff-tables",[],{"title":2284,"path":2285,"order":1701,"children":2286},"Groups","\u002Fdocs\u002Fuser\u002Fdevice-groups",[],{"title":2288,"path":2289,"order":1701,"children":2290},"High Availability mode","\u002Fdocs\u002Fuser\u002Fhigh-availability",[],{"title":2292,"path":2293,"order":1701,"children":2294},"HTTP Access Tokens","\u002Fdocs\u002Fuser\u002Fhttp-access-tokens",[],{"title":2296,"path":2297,"order":1701,"children":2298},"Instance Settings","\u002Fdocs\u002Fuser\u002Finstance-settings",[],{"title":2300,"path":2301,"order":1701,"children":2302},"Logging","\u002Fdocs\u002Fuser\u002Flogs",[],{"title":2050,"path":2304,"order":1701,"children":2305},"\u002Fdocs\u002Fuser\u002Frole-based-access-control",[],{"title":2307,"path":2308,"order":1701,"children":2309},"Shared Team Library","\u002Fdocs\u002Fuser\u002Fshared-library",[],{"title":2311,"path":2312,"order":1701,"children":2313},"Snapshots","\u002Fdocs\u002Fuser\u002Fsnapshots",[],{"title":2315,"path":2316,"order":1701,"children":2317},"Team Broker","\u002Fdocs\u002Fuser\u002Fteambroker",[],{"title":2319,"path":2320,"order":1701,"children":2321},"Teams","\u002Fdocs\u002Fuser\u002Fteam",[],{"title":2323,"path":2324,"order":1701,"children":2325},"User Settings","\u002Fdocs\u002Fuser\u002Fuser-settings",[],{"title":2327,"path":2328,"group":2199,"groupOrder":1080,"order":1107,"children":2329},"FlowFuse API","\u002Fdocs\u002Fapi",[],{"title":2331,"path":2332,"group":2199,"groupOrder":1080,"order":1144,"children":2333,"link":1735},"Migrating a Node-RED project to FlowFuse","\u002Fdocs\u002Fmigration",[2334,2338],{"title":2335,"path":2336,"order":1080,"children":2337},"Introduction","\u002Fdocs\u002Fmigration\u002Fintroduction",[],{"title":2339,"path":2340,"order":1701,"children":2341},"Node-RED Tools plugin","\u002Fdocs\u002Fmigration\u002Fnode-red-tools",[],{"title":2343,"path":2344,"group":2199,"groupOrder":1080,"order":1198,"children":2345},"FlowFuse Node-RED nodes","\u002Fdocs\u002Fflowfuse-nodes",[2346,2371,2391,2398,2416,2427],{"title":2347,"path":2348,"order":1080,"children":2349},"AI","\u002Fdocs\u002Fflowfuse-nodes\u002Fai",[2350,2354,2359,2363,2367],{"title":2351,"path":2352,"order":1205,"children":2353},"LLM Nodes","\u002Fdocs\u002Fflowfuse-nodes\u002Fai\u002Fllm-nodes",[],{"title":2355,"path":2356,"order":2357,"children":2358},"Depth Estimation","\u002Fdocs\u002Fflowfuse-nodes\u002Fai\u002Fdepth-estimation",50,[],{"title":2360,"path":2361,"order":2357,"children":2362},"Image Classification","\u002Fdocs\u002Fflowfuse-nodes\u002Fai\u002Fimage-classification",[],{"title":2364,"path":2365,"order":2357,"children":2366},"Object Detection","\u002Fdocs\u002Fflowfuse-nodes\u002Fai\u002Fobject-detection",[],{"title":2368,"path":2369,"order":2357,"children":2370},"ONXX","\u002Fdocs\u002Fflowfuse-nodes\u002Fai\u002Fonxx",[],{"title":2372,"path":2373,"order":1107,"children":2374},"MCP","\u002Fdocs\u002Fflowfuse-nodes\u002Fmcp",[2375,2379,2383,2387],{"title":2376,"path":2377,"order":2357,"children":2378},"MCP Prompt","\u002Fdocs\u002Fflowfuse-nodes\u002Fmcp\u002Fmcp-prompt",[],{"title":2380,"path":2381,"order":2357,"children":2382},"MCP Resource","\u002Fdocs\u002Fflowfuse-nodes\u002Fmcp\u002Fmcp-resource",[],{"title":2384,"path":2385,"order":2357,"children":2386},"MCP Responses","\u002Fdocs\u002Fflowfuse-nodes\u002Fmcp\u002Fmcp-response",[],{"title":2388,"path":2389,"order":2357,"children":2390},"MCP Tool","\u002Fdocs\u002Fflowfuse-nodes\u002Fmcp\u002Fmcp-tool",[],{"title":1792,"path":2392,"order":1144,"children":2393},"\u002Fdocs\u002Fflowfuse-nodes\u002Fflowfuse-tables",[2394],{"title":2395,"path":2396,"order":2357,"children":2397},"Query","\u002Fdocs\u002Fflowfuse-nodes\u002Fflowfuse-tables\u002Fquery",[],{"title":2399,"path":2400,"order":1198,"children":2401},"Edge","\u002Fdocs\u002Fflowfuse-nodes\u002Fedge",[2402,2406,2410,2412],{"title":2403,"path":2404,"order":1080,"children":2405},"RTSP Video Feed","\u002Fdocs\u002Fflowfuse-nodes\u002Fedge\u002Frtsp",[],{"title":2407,"path":2408,"order":1107,"children":2409},"CIP Suite, EtherNet\u002FIP Nodes","\u002Fdocs\u002Fflowfuse-nodes\u002Fedge\u002Fcip-suite",[],{"title":5,"path":1703,"order":1144,"children":2411},[],{"title":2413,"path":2414,"order":2357,"children":2415},"OPC UA","\u002Fdocs\u002Fflowfuse-nodes\u002Fedge\u002Fopcua",[],{"title":2269,"path":2417,"order":1205,"children":2418},"\u002Fdocs\u002Fflowfuse-nodes\u002Fmqtt",[2419,2423],{"title":2420,"path":2421,"order":2357,"children":2422},"MQTT In","\u002Fdocs\u002Fflowfuse-nodes\u002Fmqtt\u002Fmqtt-in",[],{"title":2424,"path":2425,"order":2357,"children":2426},"MQTT Out","\u002Fdocs\u002Fflowfuse-nodes\u002Fmqtt\u002Fmqtt-out",[],{"title":2428,"path":2429,"order":1205,"children":2430},"Hub","\u002Fdocs\u002Fflowfuse-nodes\u002Fhub",[2431],{"title":2432,"path":2433,"order":1080,"children":2434},"Redis","\u002Fdocs\u002Fflowfuse-nodes\u002Fhub\u002Fredis",[],{"name":2436,"order":1107,"children":2437},"Device Agent",[2438,2486],{"title":2436,"path":2439,"group":2436,"groupOrder":1107,"order":1080,"children":2440,"link":1735},"\u002Fdocs\u002Fdevice-agent",[2441,2445,2449,2474,2478,2482],{"title":2442,"path":2443,"order":1080,"children":2444},"FlowFuse Device Agent Introduction","\u002Fdocs\u002Fdevice-agent\u002Fintroduction",[],{"title":2446,"path":2447,"order":1107,"children":2448},"Quick Start","\u002Fdocs\u002Fdevice-agent\u002Fquickstart",[],{"title":2450,"path":2451,"group":2452,"order":1144,"children":2453,"link":1735},"Installation","\u002Fdocs\u002Fdevice-agent\u002Finstall","DeviceAgentInstallation",[2454,2458,2462,2466,2470],{"title":2455,"path":2456,"group":2452,"order":1080,"children":2457},"Overview","\u002Fdocs\u002Fdevice-agent\u002Finstall\u002Foverview",[],{"title":2459,"path":2460,"group":2452,"order":1107,"children":2461},"Device Agent Installer","\u002Fdocs\u002Fdevice-agent\u002Finstall\u002Fdevice-agent-installer",[],{"title":2463,"path":2464,"group":2452,"order":1144,"children":2465},"Docker Install","\u002Fdocs\u002Fdevice-agent\u002Finstall\u002Fdocker",[],{"title":2467,"path":2468,"group":2452,"order":1198,"children":2469},"Kubernetes Install","\u002Fdocs\u002Fdevice-agent\u002Finstall\u002Fkubernetes",[],{"title":2471,"path":2472,"group":2452,"order":1205,"children":2473},"Manual Install with NPM","\u002Fdocs\u002Fdevice-agent\u002Finstall\u002Fmanual",[],{"title":2475,"path":2476,"order":1198,"children":2477},"Register your Remote Instance","\u002Fdocs\u002Fdevice-agent\u002Fregister",[],{"title":2479,"path":2480,"order":1205,"children":2481},"Running the Agent","\u002Fdocs\u002Fdevice-agent\u002Frunning",[],{"title":2483,"path":2484,"order":1224,"children":2485},"Deploying your Flows","\u002Fdocs\u002Fdevice-agent\u002Fdeploy",[],{"title":2487,"path":2488,"group":2436,"groupOrder":1107,"order":1107,"children":2489,"link":1735},"Hardware Guides","\u002Fdocs\u002Fhardware",[2490,2493,2497,2501],{"title":2455,"path":2491,"order":1080,"children":2492},"\u002Fdocs\u002Fhardware\u002Fintroduction",[],{"title":2494,"path":2495,"order":1107,"children":2496},"ctrlX - Node-RED","\u002Fdocs\u002Fhardware\u002Fctrlx-node-red",[],{"title":2498,"path":2499,"order":1144,"children":2500},"ctrlX - Device Agent","\u002Fdocs\u002Fhardware\u002Fctrlx-device-agent",[],{"title":2502,"path":2503,"order":1144,"children":2504},"Raspberry Pi with Raspbian","\u002Fdocs\u002Fhardware\u002Fraspbian",[],{"name":2506,"order":1144,"children":2507},"FlowFuse Cloud",[2508],{"title":2506,"path":2509,"group":2506,"groupOrder":1144,"order":1144,"children":2510,"link":1735},"\u002Fdocs\u002Fcloud",[2511,2514],{"title":2335,"path":2512,"order":1080,"children":2513},"\u002Fdocs\u002Fcloud\u002Fintroduction",[],{"title":2515,"path":2516,"order":1701,"children":2517},"FlowFuse Cloud Billing","\u002Fdocs\u002Fcloud\u002Fbilling",[],{"name":2519,"order":1198,"children":2520},"FlowFuse Self-Hosted",[2521,2524,2599,2611],{"title":2446,"path":2522,"group":2519,"groupOrder":1198,"order":1080,"children":2523},"\u002Fdocs\u002Fquick-start",[],{"title":2525,"path":2526,"group":2519,"groupOrder":1198,"order":1107,"children":2527,"link":1735},"Installing FlowFuse","\u002Fdocs\u002Finstall",[2528,2531,2535,2539,2559,2563,2567,2571],{"title":2455,"path":2529,"order":1080,"children":2530},"\u002Fdocs\u002Finstall\u002Fintroduction",[],{"title":2532,"path":2533,"order":1701,"children":2534},"Configuring FlowFuse","\u002Fdocs\u002Finstall\u002Fconfiguration",[],{"title":2536,"path":2537,"order":1701,"children":2538},"DNS Setup","\u002Fdocs\u002Finstall\u002Fdns-setup",[],{"title":2540,"path":2541,"order":1701,"children":2542},"Docker install","\u002Fdocs\u002Finstall\u002Fdocker",[2543,2547,2551,2555],{"title":2544,"path":2545,"order":1701,"children":2546},"Add Project Stacks on Docker","\u002Fdocs\u002Finstall\u002Fdocker\u002Fstacks",[],{"title":2548,"path":2549,"order":1701,"children":2550},"Docker Engine on Windows","\u002Fdocs\u002Finstall\u002Fdocker\u002Fwindows-docker-ce",[],{"title":2552,"path":2553,"order":1701,"children":2554},"Docker from AWS Market Place","\u002Fdocs\u002Finstall\u002Fdocker\u002Faws-marketplace",[],{"title":2556,"path":2557,"order":1701,"children":2558},"Docker on Digital Ocean","\u002Fdocs\u002Finstall\u002Fdocker\u002Fdigital-ocean",[],{"title":2560,"path":2561,"order":1701,"children":2562},"Email configuration","\u002Fdocs\u002Finstall\u002Femail-providers",[],{"title":2564,"path":2565,"order":1701,"children":2566},"First Run Setup","\u002Fdocs\u002Finstall\u002Ffirst-run",[],{"title":2568,"path":2569,"order":1701,"children":2570},"FlowFuse File Storage","\u002Fdocs\u002Finstall\u002Ffile-storage",[],{"title":2572,"path":2573,"order":1701,"children":2574},"Install FlowFuse on Kubernetes","\u002Fdocs\u002Finstall\u002Fkubernetes",[2575,2579,2583,2587,2591,2595],{"title":2576,"path":2577,"order":1701,"children":2578},"AWS EKS Installation","\u002Fdocs\u002Finstall\u002Fkubernetes\u002Faws",[],{"title":2580,"path":2581,"order":1701,"children":2582},"AWS EKS Installation with Terraform and Helm","\u002Fdocs\u002Finstall\u002Fkubernetes\u002Faws-terraform",[],{"title":2584,"path":2585,"order":1701,"children":2586},"Digital Ocean Kubernetes Installation","\u002Fdocs\u002Finstall\u002Fkubernetes\u002Fdigital-ocean",[],{"title":2588,"path":2589,"order":1701,"children":2590},"Ingress Controller Migration","\u002Fdocs\u002Finstall\u002Fkubernetes\u002Fingress-controller-migration",[],{"title":2592,"path":2593,"order":1701,"children":2594},"Kubernetes Project Stacks","\u002Fdocs\u002Finstall\u002Fkubernetes\u002Fstacks",[],{"title":2596,"path":2597,"order":1701,"children":2598},"OpenShift Installation","\u002Fdocs\u002Finstall\u002Fkubernetes\u002Fopenshift",[],{"title":2600,"path":2601,"group":2519,"groupOrder":1198,"order":1144,"children":2602},"Upgrading FlowFuse","\u002Fdocs\u002Fupgrade",[2603,2607],{"title":2604,"path":2605,"order":1701,"children":2606},"Installing a license","\u002Fdocs\u002Fupgrade\u002Fopen-source-to-premium",[],{"title":2608,"path":2609,"order":1701,"children":2610},"Upgrading the Node-RED version","\u002Fdocs\u002Fupgrade\u002Fnodered-version",[],{"title":2612,"path":2613,"group":2519,"groupOrder":1198,"order":1198,"children":2614,"link":1735},"Administering FlowFuse","\u002Fdocs\u002Fadmin",[2615,2618,2630,2638,2642,2646,2650,2654],{"title":2612,"path":2616,"order":1080,"children":2617},"\u002Fdocs\u002Fadmin\u002Fintroduction",[],{"title":2619,"path":2620,"order":1701,"children":2621},"Configuring Single Sign-On (SSO)","\u002Fdocs\u002Fadmin\u002Fsso",[2622,2626],{"title":2623,"path":2624,"order":1701,"children":2625},"LDAP SSO","\u002Fdocs\u002Fadmin\u002Fsso\u002Fldap",[],{"title":2627,"path":2628,"order":1701,"children":2629},"SAML SSO","\u002Fdocs\u002Fadmin\u002Fsso\u002Fsaml",[],{"title":2631,"path":2632,"order":1701,"children":2633,"link":1735},"Hardening","\u002Fdocs\u002Fadmin\u002Fhardening",[2634],{"title":2635,"path":2636,"order":1701,"children":2637},"Kubernetes Hardening","\u002Fdocs\u002Fadmin\u002Fhardening\u002Fkubernetes",[],{"title":2639,"path":2640,"order":1701,"children":2641},"Monitoring","\u002Fdocs\u002Fadmin\u002Fmonitoring",[],{"title":2643,"path":2644,"order":1701,"children":2645},"Observability","\u002Fdocs\u002Fadmin\u002Fobservability",[],{"title":2647,"path":2648,"order":1701,"children":2649},"Soft Launch Enablement","\u002Fdocs\u002Fadmin\u002Ffeature-flags",[],{"title":2651,"path":2652,"order":1701,"children":2653},"Telemetry","\u002Fdocs\u002Fadmin\u002Ftelemetry",[],{"title":2655,"path":2656,"order":1701,"children":2657},"User Management","\u002Fdocs\u002Fadmin\u002Fuser-management",[],{"name":2093,"order":1205,"children":2659},[2660,2664],{"title":2661,"path":2662,"group":2093,"groupOrder":1205,"order":1144,"children":2663},"Premium Support","\u002Fdocs\u002Fpremium-support",[],{"title":2665,"path":2666,"group":2093,"groupOrder":1205,"order":1701,"children":2667},"Debugging Node-RED issues","\u002Fdocs\u002Fdebugging",[],{"name":2669,"order":1224,"children":2670},"Contributing",[2671],{"title":2672,"path":2673,"group":2669,"groupOrder":1224,"order":1701,"children":2674,"link":1735},"Contributing to FlowFuse","\u002Fdocs\u002Fcontribute",[2675,2678,2682,2686,2690,2694,2698,2706,2742,2745],{"title":2335,"path":2676,"order":1080,"children":2677},"\u002Fdocs\u002Fcontribute\u002Fintroduction",[],{"title":2679,"path":2680,"order":1701,"children":2681},"Adding Template Settings","\u002Fdocs\u002Fcontribute\u002Fadding-template-settings",[],{"title":2683,"path":2684,"order":1701,"children":2685},"API Design","\u002Fdocs\u002Fcontribute\u002Fapi-design",[],{"title":2687,"path":2688,"order":1701,"children":2689},"Creating debug stack containers","\u002Fdocs\u002Fcontribute\u002Fcreating-debug-stack-containers",[],{"title":2691,"path":2692,"order":1701,"children":2693},"Database migrations","\u002Fdocs\u002Fcontribute\u002Fdb-migrations",[],{"title":2695,"path":2696,"order":1701,"children":2697},"FlowFuse Architecture","\u002Fdocs\u002Fcontribute\u002Farchitecture",[],{"title":2699,"path":2700,"order":1701,"children":2701},"Local Install","\u002Fdocs\u002Fcontribute\u002Flocal",[2702],{"title":2703,"path":2704,"order":1701,"children":2705},"Local Stacks","\u002Fdocs\u002Fcontribute\u002Flocal\u002Fstacks",[],{"title":2707,"path":2708,"order":1701,"children":2709},"State Flows","\u002Fdocs\u002Fcontribute\u002Fworkflows",[2710,2714,2718,2722,2726,2730,2734,2738],{"title":2711,"path":2712,"order":1701,"children":2713},"Device Editor","\u002Fdocs\u002Fcontribute\u002Fworkflows\u002Fdevice-editor",[],{"title":2715,"path":2716,"order":1701,"children":2717},"Instance states","\u002Fdocs\u002Fcontribute\u002Fworkflows\u002Fproject-states",[],{"title":2719,"path":2720,"order":1701,"children":2721},"Invite External Users","\u002Fdocs\u002Fcontribute\u002Fworkflows\u002Finvite-external-user",[],{"title":2723,"path":2724,"order":1701,"children":2725},"Project Creation","\u002Fdocs\u002Fcontribute\u002Fworkflows\u002Fproject-create",[],{"title":2727,"path":2728,"order":1701,"children":2729},"Reset Password Flow","\u002Fdocs\u002Fcontribute\u002Fworkflows\u002Fpassword-reset",[],{"title":2731,"path":2732,"order":1701,"children":2733},"Team creation Flow","\u002Fdocs\u002Fcontribute\u002Fworkflows\u002Fteam-create",[],{"title":2735,"path":2736,"order":1701,"children":2737},"User Login Flows","\u002Fdocs\u002Fcontribute\u002Fworkflows\u002Flogin",[],{"title":2739,"path":2740,"order":1701,"children":2741},"User Sign up Flow","\u002Fdocs\u002Fcontribute\u002Fworkflows\u002Fsignup",[],{"title":2315,"path":2743,"order":1701,"children":2744},"\u002Fdocs\u002Fcontribute\u002Fteam-broker",[],{"title":2746,"path":2747,"order":1701,"children":2748},"Working with Feature Flags","\u002Fdocs\u002Fcontribute\u002Ffeature-flags",[],{"name":2750,"order":1258,"children":2751},"Node-RED",[2752],{"title":2753,"path":2754,"group":2750,"groupOrder":1258,"order":1080,"children":2755},"Using Node-RED","\u002Fdocs\u002Fnode-red",[2756,2828,3006,3033,3072,3088,3104,3132,3152,3156],{"title":2757,"path":2758,"order":1107,"children":2759},"Getting started","\u002Fdocs\u002Fnode-red\u002Fgetting-started",[2760,2780,2784,2788,2792,2796,2800,2804,2808],{"title":2761,"path":2762,"order":1080,"children":2763},"Editor","\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Feditor",[2764,2768,2772,2776],{"title":2765,"path":2766,"order":2357,"children":2767},"Header","\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Feditor\u002Fheader",[],{"title":2769,"path":2770,"order":2357,"children":2771},"Palette","\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Feditor\u002Fpalette",[],{"title":2773,"path":2774,"order":2357,"children":2775},"Sidebar","\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Feditor\u002Fsidebar",[],{"title":2777,"path":2778,"order":2357,"children":2779},"Workspace","\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Feditor\u002Fworkspace",[],{"title":2781,"path":2782,"order":1107,"children":2783},"Port Configuration","\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Fnode-red-port",[],{"title":2785,"path":2786,"order":1144,"children":2787},"Node-RED Library","\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Flibrary",[],{"title":2789,"path":2790,"order":1144,"children":2791},"Update Node-RED","\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Fupdate-node-red",[],{"title":2793,"path":2794,"order":1198,"children":2795},"Node-RED On Android","\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Fnode-red-android",[],{"title":2797,"path":2798,"order":1205,"children":2799},"Working with Messages","\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Fnode-red-messages",[],{"title":2801,"path":2802,"order":1224,"children":2803},"String","\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Fstring",[],{"title":2805,"path":2806,"order":1258,"children":2807},"Date & Time","\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Fdate-and-time",[],{"title":2809,"path":2810,"order":1291,"children":2811},"Programming","\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Fprogramming",[2812,2816,2820,2824],{"title":2813,"path":2814,"order":2357,"children":2815},"Data Tranformation","\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Fprogramming\u002Fdata-tranformation",[],{"title":2817,"path":2818,"order":2357,"children":2819},"Debugging","\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Fprogramming\u002Fdebugging-flows",[],{"title":2821,"path":2822,"order":2357,"children":2823},"If-Else","\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Fprogramming\u002Fif-else",[],{"title":2825,"path":2826,"order":2357,"children":2827},"Loop","\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Fprogramming\u002Floop",[],{"title":2829,"path":2830,"order":1144,"children":2831},"Core nodes","\u002Fdocs\u002Fnode-red\u002Fcore-nodes",[2832,2868,2908,2950,2970,2994],{"title":2833,"path":2834,"order":1080,"children":2835},"Common nodes","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fcommon",[2836,2840,2844,2848,2852,2856,2860,2864],{"title":2837,"path":2838,"order":1080,"children":2839},"Inject","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fcommon\u002Finject",[],{"title":2841,"path":2842,"order":1107,"children":2843},"Debug","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fcommon\u002Fdebug",[],{"title":2845,"path":2846,"order":1144,"children":2847},"Complete","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fcommon\u002Fcomplete",[],{"title":2849,"path":2850,"order":1198,"children":2851},"Catch","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fcommon\u002Fcatch",[],{"title":2853,"path":2854,"order":1205,"children":2855},"Status","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fcommon\u002Fstatus",[],{"title":2857,"path":2858,"order":1224,"children":2859},"Link","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fcommon\u002Flink",[],{"title":2861,"path":2862,"order":1258,"children":2863},"Comment","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fcommon\u002Fcomment",[],{"title":2865,"path":2866,"order":1291,"children":2867},"Unknown","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fcommon\u002Funknown",[],{"title":2869,"path":2870,"order":1107,"children":2871},"Function nodes","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Ffunction",[2872,2876,2880,2884,2888,2892,2896,2900,2904],{"title":2873,"path":2874,"order":1080,"children":2875},"Function","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Ffunction\u002Ffunction",[],{"title":2877,"path":2878,"order":1107,"children":2879},"Switch","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Ffunction\u002Fswitch",[],{"title":2881,"path":2882,"order":1144,"children":2883},"Change","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Ffunction\u002Fchange",[],{"title":2885,"path":2886,"order":1198,"children":2887},"Range","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Ffunction\u002Frange",[],{"title":2889,"path":2890,"order":1205,"children":2891},"Template","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Ffunction\u002Ftemplate",[],{"title":2893,"path":2894,"order":1224,"children":2895},"Delay","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Ffunction\u002Fdelay",[],{"title":2897,"path":2898,"order":1258,"children":2899},"Trigger","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Ffunction\u002Ftrigger",[],{"title":2901,"path":2902,"order":1291,"children":2903},"Exec","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Ffunction\u002Fexec",[],{"title":2905,"path":2906,"order":1324,"children":2907},"Filter","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Ffunction\u002Ffilter",[],{"title":2909,"path":2910,"order":1144,"children":2911},"Network nodes","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fnetwork",[2912,2916,2920,2923,2926,2930,2934,2938,2942,2946],{"title":2913,"path":2914,"order":1080,"children":2915},"TLS","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fnetwork\u002Ftls",[],{"title":2917,"path":2918,"order":1107,"children":2919},"HTTP Proxy","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fnetwork\u002Fhttp-proxy",[],{"title":2420,"path":2921,"order":1144,"children":2922},"\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fnetwork\u002Fmqtt-in",[],{"title":2424,"path":2924,"order":1198,"children":2925},"\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fnetwork\u002Fmqtt-out",[],{"title":2927,"path":2928,"order":1205,"children":2929},"HTTP in","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fnetwork\u002Fhttp-in",[],{"title":2931,"path":2932,"order":1224,"children":2933},"HTTP request","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fnetwork\u002Fhttp-request",[],{"title":2935,"path":2936,"order":1258,"children":2937},"WebSocket","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fnetwork\u002Fwebsocket",[],{"title":2939,"path":2940,"order":1291,"children":2941},"TCP in","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fnetwork\u002Ftcp-in",[],{"title":2943,"path":2944,"order":1324,"children":2945},"UDP In","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fnetwork\u002Fudp-in",[],{"title":2947,"path":2948,"order":2224,"children":2949},"UDP Out","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fnetwork\u002Fudp-out",[],{"title":2951,"path":2952,"order":1198,"children":2953},"Sequence nodes","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fsequence",[2954,2958,2962,2966],{"title":2955,"path":2956,"order":1080,"children":2957},"Split","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fsequence\u002Fsplit",[],{"title":2959,"path":2960,"order":1107,"children":2961},"Sort","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fsequence\u002Fsort",[],{"title":2963,"path":2964,"order":1144,"children":2965},"Batch","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fsequence\u002Fbatch",[],{"title":2967,"path":2968,"order":1198,"children":2969},"Join","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fsequence\u002Fjoin",[],{"title":2971,"path":2972,"order":1205,"children":2973},"Parser nodes","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fparsers",[2974,2978,2982,2986,2990],{"title":2975,"path":2976,"order":1080,"children":2977},"CSV","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fparsers\u002Fcsv",[],{"title":2979,"path":2980,"order":1107,"children":2981},"HTML","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fparsers\u002Fhtml",[],{"title":2983,"path":2984,"order":1144,"children":2985},"JSON","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fparsers\u002Fjson",[],{"title":2987,"path":2988,"order":1198,"children":2989},"XML","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fparsers\u002Fxml",[],{"title":2991,"path":2992,"order":1205,"children":2993},"YAML","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fparsers\u002Fyaml",[],{"title":2995,"path":2996,"order":1224,"children":2997},"Storage nodes","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fstorage",[2998,3002],{"title":2999,"path":3000,"order":1080,"children":3001},"Write File","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fstorage\u002Fwrite-file",[],{"title":3003,"path":3004,"order":1107,"children":3005},"Read File","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fstorage\u002Fread-file",[],{"title":3007,"path":3008,"order":1198,"children":3009},"Communication protocols","\u002Fdocs\u002Fnode-red\u002Fprotocol",[3010,3014,3018,3021,3025,3029],{"title":3011,"path":3012,"order":2357,"children":3013},"AMQP","\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Famqp",[],{"title":3015,"path":3016,"order":2357,"children":3017},"LwM2M","\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Flwm2m",[],{"title":5,"path":3019,"order":2357,"children":3020},"\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Fmodbus",[],{"title":3022,"path":3023,"order":2357,"children":3024},"MQTT","\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Fmqtt",[],{"title":3026,"path":3027,"order":2357,"children":3028},"OPC-UA","\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Fopc-ua",[],{"title":3030,"path":3031,"order":2357,"children":3032},"Websocket","\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Fwebsocket",[],{"title":3034,"path":3035,"order":1205,"children":3036},"Databases","\u002Fdocs\u002Fnode-red\u002Fdatabase",[3037,3041,3045,3049,3053,3057,3061,3064,3068],{"title":3038,"path":3039,"order":2357,"children":3040},"DynamoDB","\u002Fdocs\u002Fnode-red\u002Fdatabase\u002Fdynamodb",[],{"title":3042,"path":3043,"order":2357,"children":3044},"Firebase","\u002Fdocs\u002Fnode-red\u002Fdatabase\u002Ffirebase",[],{"title":3046,"path":3047,"order":2357,"children":3048},"InfluxDB","\u002Fdocs\u002Fnode-red\u002Fdatabase\u002Finfluxdb",[],{"title":3050,"path":3051,"order":2357,"children":3052},"MongoDB","\u002Fdocs\u002Fnode-red\u002Fdatabase\u002Fmongodb",[],{"title":3054,"path":3055,"order":2357,"children":3056},"MySQL","\u002Fdocs\u002Fnode-red\u002Fdatabase\u002Fmysql",[],{"title":3058,"path":3059,"order":2357,"children":3060},"PostgreSQL","\u002Fdocs\u002Fnode-red\u002Fdatabase\u002Fpostgresql",[],{"title":2432,"path":3062,"order":2357,"children":3063},"\u002Fdocs\u002Fnode-red\u002Fdatabase\u002Fredis",[],{"title":3065,"path":3066,"order":2357,"children":3067},"SQLite","\u002Fdocs\u002Fnode-red\u002Fdatabase\u002Fsqlite",[],{"title":3069,"path":3070,"order":2357,"children":3071},"TimescaleDB","\u002Fdocs\u002Fnode-red\u002Fdatabase\u002Ftimescaledb",[],{"title":3073,"path":3074,"order":1224,"children":3075},"Integration technologies","\u002Fdocs\u002Fnode-red\u002Fintegration-technologies",[3076,3080,3084],{"title":3077,"path":3078,"order":2357,"children":3079},"GraphQL API","\u002Fdocs\u002Fnode-red\u002Fintegration-technologies\u002Fgraphql",[],{"title":3081,"path":3082,"order":2357,"children":3083},"REST API","\u002Fdocs\u002Fnode-red\u002Fintegration-technologies\u002Frest",[],{"title":3085,"path":3086,"order":2357,"children":3087},"Webhook","\u002Fdocs\u002Fnode-red\u002Fintegration-technologies\u002Fwebhook",[],{"title":3089,"path":3090,"order":1258,"children":3091},"Notification services","\u002Fdocs\u002Fnode-red\u002Fnotification",[3092,3096,3100],{"title":3093,"path":3094,"order":2357,"children":3095},"Discord","\u002Fdocs\u002Fnode-red\u002Fnotification\u002Fdiscord",[],{"title":3097,"path":3098,"order":2357,"children":3099},"Email","\u002Fdocs\u002Fnode-red\u002Fnotification\u002Femail",[],{"title":3101,"path":3102,"order":2357,"children":3103},"Telegram","\u002Fdocs\u002Fnode-red\u002Fnotification\u002Ftelegram",[],{"title":3105,"path":3106,"order":1291,"children":3107},"Hardware","\u002Fdocs\u002Fnode-red\u002Fhardware",[3108,3112,3116,3120,3124,3128],{"title":3109,"path":3110,"order":2357,"children":3111},"BLIIOT ARMxy BL340","\u002Fdocs\u002Fnode-red\u002Fhardware\u002Farmxy-bl340",[],{"title":3113,"path":3114,"order":2357,"children":3115},"Opto-22 Groov Epic","\u002Fdocs\u002Fnode-red\u002Fhardware\u002Fopto-22-groove-rio-7-mm2001-10",[],{"title":3117,"path":3118,"order":2357,"children":3119},"Raspberry Pi 4","\u002Fdocs\u002Fnode-red\u002Fhardware\u002Fraspberry-pi-4",[],{"title":3121,"path":3122,"order":2357,"children":3123},"Raspberry Pi 5","\u002Fdocs\u002Fnode-red\u002Fhardware\u002Fraspberry-pi-5",[],{"title":3125,"path":3126,"order":2357,"children":3127},"Robustel EG5120","\u002Fdocs\u002Fnode-red\u002Fhardware\u002Frobustel-eg5120",[],{"title":3129,"path":3130,"order":2357,"children":3131},"Siemens IoT2050","\u002Fdocs\u002Fnode-red\u002Fhardware\u002Fsiemens-iot-2050",[],{"title":3133,"path":3134,"order":1324,"children":3135},"Peripheral devices","\u002Fdocs\u002Fnode-red\u002Fperipheral",[3136,3140,3144,3148],{"title":3137,"path":3138,"order":2357,"children":3139},"Arduino","\u002Fdocs\u002Fnode-red\u002Fperipheral\u002Fardiuno",[],{"title":3141,"path":3142,"order":2357,"children":3143},"Barcode Scanner","\u002Fdocs\u002Fnode-red\u002Fperipheral\u002Fbarcodescanner",[],{"title":3145,"path":3146,"order":2357,"children":3147},"ESP32","\u002Fdocs\u002Fnode-red\u002Fperipheral\u002Fesp32",[],{"title":3149,"path":3150,"order":2357,"children":3151},"Webcam","\u002Fdocs\u002Fnode-red\u002Fperipheral\u002Fwebcam",[],{"title":3153,"path":3154,"order":2224,"children":3155},"Terminology","\u002Fdocs\u002Fnode-red\u002Fterminology",[],{"title":3157,"path":3158,"order":3159,"children":3160},"Keyboard shortcuts","\u002Fdocs\u002Fnode-red\u002Fkeyboard",11,[],1788888652307]