[{"data":1,"prerenderedAt":3948},["ShallowReactive",2],{"blog-\u002Fblog\u002F2026\u002F03\u002Fhow-to-monitor-industrial-network-usign-snmp":3,"featureCatalog":3019,"changelog-titles":3413,"blog-all-for-related":3947},{"id":4,"title":5,"authors":6,"body":8,"cta":2995,"date":2999,"description":3000,"extension":3001,"features":3002,"image":3003,"lastUpdated":3004,"meta":3005,"navigation":816,"path":3011,"release":3002,"seo":3012,"sitemap":3013,"stem":3014,"subtitle":3015,"tags":3016,"tldr":3002,"video":3002,"__hash__":3018},"blog\u002Fblog\u002F2026\u002F03\u002Fhow-to-monitor-industrial-network-usign-snmp.md","How to Monitor Industrial Network Health Using SNMP",[7],"sumit-shinde",{"type":9,"value":10,"toc":2986},"minimark",[11,15,18,21,24,29,32,74,78,94,105,108,128,143,147,155,185,188,220,230,242,246,249,279,340,361,415,421,439,450,732,735,746,1249,1262,1270,1273,1446,1449,1453,1456,1466,1559,1570,1578,1593,1647,1658,2330,2348,2351,2580,2583,2587,2590,2599,2613,2657,2668,2845,2853,2866,2869,2954,2957,2966,2970,2973,2976,2979,2982],[12,13,14],"p",{},"Industrial networks fail quietly. A saturated uplink, a flapping interface, or a device nearing its resource ceiling degrades silently until a line goes down or a control loop breaks.",[12,16,17],{},"SNMP exists precisely to prevent that. Decades proven, it remains the most reliable protocol for extracting health telemetry from switches, routers, PLCs, and RTUs. No agents, no overhead, runs on everything.",[12,19,20],{},"The gap has always been implementation. Most teams either over-engineer it with heavyweight NMS platforms or under-engineer it with brittle scripts. Neither is acceptable when network visibility is an uptime and safety concern.",[12,22,23],{},"This guide walks through building a production-grade SNMP monitoring pipeline with FlowFuse, polling device metrics, discovering interfaces, and feeding telemetry into a FlowFuse Dashboard where your team can act on it.",[25,26,28],"h2",{"id":27},"prerequisites","Prerequisites",[12,30,31],{},"Before getting started, make sure you have the following in place:",[33,34,35,56,68],"ul",{},[36,37,38,42,43,50,51,55],"li",{},[39,40,41],"strong",{},"FlowFuse:"," A running FlowFuse instance on your edge device. If you do not have an account yet, ",[44,45,49],"a",{"href":46,"rel":47},"https:\u002F\u002Fapp.flowfuse.com\u002Faccount\u002Fcreate",[48],"nofollow","sign up"," to get started and follow this ",[44,52,54],{"href":53},"\u002Fblog\u002F2025\u002F09\u002Finstalling-node-red\u002F","guide to get Node-RED running",".",[36,57,58,61,62,67],{},[39,59,60],{},"An SNMP-enabled device:"," Any managed switch, router, PLC, or RTU with SNMP enabled and UDP port 161 accessible from your FlowFuse instance. If you do not have a real device available, you can run a local SNMP agent for testing, see ",[44,63,66],{"href":64,"rel":65},"http:\u002F\u002Fwww.net-snmp.org\u002Fdownload.html",[48],"net-snmp.org"," for installation instructions for your platform.",[36,69,70,73],{},[39,71,72],{},"UDP port 161 access:"," Confirm your community string and ensure firewall rules permit SNMP polling from your FlowFuse host to the target device.",[25,75,77],{"id":76},"understanding-snmp","Understanding SNMP",[12,79,80,85,86,89,90,93],{},[44,81,84],{"href":82,"rel":83},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSimple_Network_Management_Protocol",[48],"SNMP"," operates on a simple manager-agent model. The ",[39,87,88],{},"manager"," (your FlowFuse instance) sends requests to the ",[39,91,92],{},"agent"," (a network device or server running an SNMP daemon) and the agent responds with the requested data. All communication happens over UDP port 161.",[12,95,96,97,100,101,104],{},"Data on the agent is organized in a ",[39,98,99],{},"Management Information Base (MIB)",", a hierarchical tree of objects, each identified by an ",[39,102,103],{},"Object Identifier (OID)",". Every piece of information you can query from a device, its uptime, interface status, traffic counters, CPU load, has a unique OID.",[12,106,107],{},"There are three operations you will use in this guide:",[33,109,110,116,122],{},[36,111,112,115],{},[39,113,114],{},"GET:"," Fetch the value of a specific OID from a device.",[36,117,118,121],{},[39,119,120],{},"WALK:"," Traverse an entire OID subtree and return all values beneath it. Useful for querying all interfaces at once.",[36,123,124,127],{},[39,125,126],{},"SUBTREE:"," Fetch a specific OID subtree and everything beneath it. More targeted than a full walk.",[12,129,130,131,134,135,138,139,142],{},"SNMP also has versions. ",[39,132,133],{},"SNMPv1"," and ",[39,136,137],{},"v2c"," use a plain-text community string as authentication. ",[39,140,141],{},"SNMPv3"," adds user-based authentication and encryption. For production industrial environments, v3 is the right choice. For this guide, we use v2c to keep the focus on the implementation.",[25,144,146],{"id":145},"installing-snmp-package-in-flowfuse","Installing SNMP Package in FlowFuse",[12,148,149,150,154],{},"The ",[151,152,153],"code",{},"node-red-node-snmp"," package provides a set of nodes for communicating with SNMP-enabled devices directly from your flows. Before building the monitoring pipeline, install it into your FlowFuse instance.",[156,157,158,161,167,174,179],"ol",{},[36,159,160],{},"Open your FlowFuse instance and navigate to the Node-RED editor.",[36,162,163,164,55],{},"Click the hamburger menu in the top-right corner and select ",[39,165,166],{},"Manage Palette",[36,168,169,170,173],{},"Go to the ",[39,171,172],{},"Install"," tab.",[36,175,176,177,55],{},"Search for ",[151,178,153],{},[36,180,181,182,184],{},"Click ",[39,183,172],{}," and wait for the installation to complete.",[12,186,187],{},"Once installed, you will see the following nodes available in your palette under the network category:",[33,189,190,196,202,208,214],{},[36,191,192,195],{},[39,193,194],{},"snmp",", fetch one or more specific OIDs",[36,197,198,201],{},[39,199,200],{},"snmp walker",", walk from a given OID to the end of the MIB tree",[36,203,204,207],{},[39,205,206],{},"snmp subtree",", fetch a specific OID subtree and everything beneath it",[36,209,210,213],{},[39,211,212],{},"snmp table",", fetch structured SNMP table data",[36,215,216,219],{},[39,217,218],{},"snmp set",", write values back to a device",[12,221,222,227],{},[223,224],"img",{"alt":225,"src":226},"SNMP nodes available in the Node-RED palette after installing node-red-node-snmp","\u002Fblog\u002F2026\u002F03\u002Fimages\u002Fsnmp-nodes.png",[228,229,225],"em",{},[12,231,232,233,235,236,238,239,241],{},"For this guide we will be working with ",[39,234,194],{},", ",[39,237,200],{},", and ",[39,240,206],{},". These three cover the core read operations needed for network health monitoring.",[25,243,245],{"id":244},"polling-device-metrics-with-snmp-get","Polling Device Metrics with SNMP GET",[12,247,248],{},"The snmp node sends a GET request to the agent and returns the values of the OIDs you specify. You can pass a single OID or a comma-separated list, the node fetches all of them in one request and returns the results as an array. This is the right operation when you know exactly what you want to fetch, system uptime, device name, description.",[12,250,251,252,255,256,259,260,265,266,269,270,273,274,55],{},"We will poll three key system OIDs in a single GET request every five seconds. All three sit under the ",[151,253,254],{},"system"," group (",[151,257,258],{},"1.3.6.1.2.1.1","), which is part of ",[44,261,264],{"href":262,"rel":263},"https:\u002F\u002Fwww.rfc-editor.org\u002Frfc\u002Frfc1213.html",[48],"MIB-II",", the standard MIB supported by virtually every SNMP-enabled device. Standard OIDs are consistent across vendors, so the same OID returns ",[151,267,268],{},"sysUpTime"," whether you are querying a Cisco switch, a Siemens PLC, or a Linux server. Vendor-specific metrics live under ",[151,271,272],{},"1.3.6.1.4.1"," and vary by device, you will need the vendor's MIB file for those. For browsing standard OIDs, see the ",[44,275,278],{"href":276,"rel":277},"https:\u002F\u002Fwww.alvestrand.no\u002Fobjectid\u002F1.3.6.1.2.1.1.html",[48],"OID reference for the system group",[280,281,282,298],"table",{},[283,284,285],"thead",{},[286,287,288,292,295],"tr",{},[289,290,291],"th",{},"OID",[289,293,294],{},"Name",[289,296,297],{},"What it returns",[299,300,301,314,327],"tbody",{},[286,302,303,309,311],{},[304,305,306],"td",{},[151,307,308],{},"1.3.6.1.2.1.1.3.0",[304,310,268],{},[304,312,313],{},"How long the device has been running, in timeticks",[286,315,316,321,324],{},[304,317,318],{},[151,319,320],{},"1.3.6.1.2.1.1.5.0",[304,322,323],{},"sysName",[304,325,326],{},"The configured hostname of the device",[286,328,329,334,337],{},[304,330,331],{},[151,332,333],{},"1.3.6.1.2.1.1.1.0",[304,335,336],{},"sysDescr",[304,338,339],{},"A full description of the hardware and OS",[156,341,342,356],{},[36,343,344,345,348,349,352,353,55],{},"Drag an ",[39,346,347],{},"inject"," node onto the canvas and double click it. Set the repeat interval to ",[39,350,351],{},"every 5 seconds"," and click ",[39,354,355],{},"Done",[36,357,344,358,360],{},[39,359,194],{}," node onto the canvas and double click it to configure:",[280,362,363,373],{},[283,364,365],{},[286,366,367,370],{},[289,368,369],{},"Field",[289,371,372],{},"Value",[299,374,375,386,396,405],{},[286,376,377,380],{},[304,378,379],{},"Host",[304,381,382,383],{},"IP address of your target device, e.g. ",[151,384,385],{},"192.168.1.1",[286,387,388,391],{},[304,389,390],{},"Community",[304,392,393],{},[151,394,395],{},"public",[286,397,398,401],{},[304,399,400],{},"Version",[304,402,403],{},[151,404,137],{},[286,406,407,410],{},[304,408,409],{},"OIDs",[304,411,412],{},[151,413,414],{},"1.3.6.1.2.1.1.3.0,1.3.6.1.2.1.1.5.0,1.3.6.1.2.1.1.1.0",[416,417,418],"blockquote",{},[12,419,420],{},"Note: OIDs in the list must be comma-separated with no spaces between them.",[156,422,424,428],{"start":423},3,[36,425,181,426,55],{},[39,427,355],{},[36,429,430,431,434,435,438],{},"Drag a ",[39,432,433],{},"debug"," node onto the canvas, connect it to the snmp node output, and click ",[39,436,437],{},"Deploy"," to verify the raw response first.",[12,440,441,442,134,444,446,447,449],{},"You will notice the response is not immediately human-readable. OctetString values such as ",[151,443,323],{},[151,445,336],{}," come back as byte arrays, and ",[151,448,268],{}," arrives as a raw TimeTicks integer:",[451,452,457],"pre",{"className":453,"code":454,"language":455,"meta":456,"style":456},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","[\n  { \"oid\": \"1.3.6.1.2.1.1.3.0\", \"type\": 67, \"value\": 317537, \"tstr\": \"TimeTicks\" },\n  { \"oid\": \"1.3.6.1.2.1.1.5.0\", \"type\": 4, \"value\": [34, 116, 101, 115, 116, ...], \"tstr\": \"OctetString\" },\n  { \"oid\": \"1.3.6.1.2.1.1.1.0\", \"type\": 4, \"value\": [68, 97, 114, 119, 105, ...], \"tstr\": \"OctetString\" }\n]\n","json","",[151,458,459,468,545,637,726],{"__ignoreMap":456},[460,461,464],"span",{"class":462,"line":463},"line",1,[460,465,467],{"class":466},"sMK4o","[\n",[460,469,471,474,477,481,484,487,489,492,494,497,499,502,504,506,510,512,514,517,519,521,524,526,528,531,533,535,537,540,542],{"class":462,"line":470},2,[460,472,473],{"class":466},"  {",[460,475,476],{"class":466}," \"",[460,478,480],{"class":479},"spNyl","oid",[460,482,483],{"class":466},"\"",[460,485,486],{"class":466},":",[460,488,476],{"class":466},[460,490,308],{"class":491},"sfazB",[460,493,483],{"class":466},[460,495,496],{"class":466},",",[460,498,476],{"class":466},[460,500,501],{"class":479},"type",[460,503,483],{"class":466},[460,505,486],{"class":466},[460,507,509],{"class":508},"sbssI"," 67",[460,511,496],{"class":466},[460,513,476],{"class":466},[460,515,516],{"class":479},"value",[460,518,483],{"class":466},[460,520,486],{"class":466},[460,522,523],{"class":508}," 317537",[460,525,496],{"class":466},[460,527,476],{"class":466},[460,529,530],{"class":479},"tstr",[460,532,483],{"class":466},[460,534,486],{"class":466},[460,536,476],{"class":466},[460,538,539],{"class":491},"TimeTicks",[460,541,483],{"class":466},[460,543,544],{"class":466}," },\n",[460,546,547,549,551,553,555,557,559,561,563,565,567,569,571,573,576,578,580,582,584,586,589,592,594,597,599,602,604,607,609,611,613,617,620,622,624,626,628,630,633,635],{"class":462,"line":423},[460,548,473],{"class":466},[460,550,476],{"class":466},[460,552,480],{"class":479},[460,554,483],{"class":466},[460,556,486],{"class":466},[460,558,476],{"class":466},[460,560,320],{"class":491},[460,562,483],{"class":466},[460,564,496],{"class":466},[460,566,476],{"class":466},[460,568,501],{"class":479},[460,570,483],{"class":466},[460,572,486],{"class":466},[460,574,575],{"class":508}," 4",[460,577,496],{"class":466},[460,579,476],{"class":466},[460,581,516],{"class":479},[460,583,483],{"class":466},[460,585,486],{"class":466},[460,587,588],{"class":466}," [",[460,590,591],{"class":508},"34",[460,593,496],{"class":466},[460,595,596],{"class":508}," 116",[460,598,496],{"class":466},[460,600,601],{"class":508}," 101",[460,603,496],{"class":466},[460,605,606],{"class":508}," 115",[460,608,496],{"class":466},[460,610,596],{"class":508},[460,612,496],{"class":466},[460,614,616],{"class":615},"sTEyZ"," ...",[460,618,619],{"class":466},"],",[460,621,476],{"class":466},[460,623,530],{"class":479},[460,625,483],{"class":466},[460,627,486],{"class":466},[460,629,476],{"class":466},[460,631,632],{"class":491},"OctetString",[460,634,483],{"class":466},[460,636,544],{"class":466},[460,638,640,642,644,646,648,650,652,654,656,658,660,662,664,666,668,670,672,674,676,678,680,683,685,688,690,693,695,698,700,703,705,707,709,711,713,715,717,719,721,723],{"class":462,"line":639},4,[460,641,473],{"class":466},[460,643,476],{"class":466},[460,645,480],{"class":479},[460,647,483],{"class":466},[460,649,486],{"class":466},[460,651,476],{"class":466},[460,653,333],{"class":491},[460,655,483],{"class":466},[460,657,496],{"class":466},[460,659,476],{"class":466},[460,661,501],{"class":479},[460,663,483],{"class":466},[460,665,486],{"class":466},[460,667,575],{"class":508},[460,669,496],{"class":466},[460,671,476],{"class":466},[460,673,516],{"class":479},[460,675,483],{"class":466},[460,677,486],{"class":466},[460,679,588],{"class":466},[460,681,682],{"class":508},"68",[460,684,496],{"class":466},[460,686,687],{"class":508}," 97",[460,689,496],{"class":466},[460,691,692],{"class":508}," 114",[460,694,496],{"class":466},[460,696,697],{"class":508}," 119",[460,699,496],{"class":466},[460,701,702],{"class":508}," 105",[460,704,496],{"class":466},[460,706,616],{"class":615},[460,708,619],{"class":466},[460,710,476],{"class":466},[460,712,530],{"class":479},[460,714,483],{"class":466},[460,716,486],{"class":466},[460,718,476],{"class":466},[460,720,632],{"class":491},[460,722,483],{"class":466},[460,724,725],{"class":466}," }\n",[460,727,729],{"class":462,"line":728},5,[460,730,731],{"class":466},"]\n",[12,733,734],{},"We need a function node to convert byte arrays to strings and TimeTicks to a readable uptime format.",[156,736,737,743],{"start":728},[36,738,430,739,742],{},[39,740,741],{},"function"," node onto the canvas and insert it between the snmp node and the debug node.",[36,744,745],{},"Double click it and add the following code:",[451,747,751],{"className":748,"code":749,"language":750,"meta":456,"style":456},"language-javascript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","const parsed = msg.payload.map(item => {\n    let value = item.value;\n\n    if (item.tstr === \"OctetString\") {\n        value = Buffer.from(value).toString(\"utf8\").replace(\u002F\"\u002Fg, \"\");\n    }\n\n    if (item.tstr === \"TimeTicks\") {\n        const totalSeconds = Math.floor(value \u002F 100);\n        const days = Math.floor(totalSeconds \u002F 86400);\n        const hours = Math.floor((totalSeconds % 86400) \u002F 3600);\n        const minutes = Math.floor((totalSeconds % 3600) \u002F 60);\n        const seconds = totalSeconds % 60;\n        value = `${days}d ${hours}h ${minutes}m ${seconds}s`;\n    }\n\n    return { oid: item.oid, name: item.tstr, value };\n});\n\nmsg.payload = parsed;\nreturn msg;\n","javascript",[151,752,753,791,812,818,849,913,919,924,949,982,1012,1049,1084,1102,1157,1162,1167,1207,1216,1221,1239],{"__ignoreMap":456},[460,754,755,758,761,764,767,769,772,774,778,781,785,788],{"class":462,"line":463},[460,756,757],{"class":479},"const",[460,759,760],{"class":615}," parsed ",[460,762,763],{"class":466},"=",[460,765,766],{"class":615}," msg",[460,768,55],{"class":466},[460,770,771],{"class":615},"payload",[460,773,55],{"class":466},[460,775,777],{"class":776},"s2Zo4","map",[460,779,780],{"class":615},"(",[460,782,784],{"class":783},"sHdIc","item",[460,786,787],{"class":479}," =>",[460,789,790],{"class":466}," {\n",[460,792,793,796,799,802,805,807,809],{"class":462,"line":470},[460,794,795],{"class":479},"    let",[460,797,798],{"class":615}," value",[460,800,801],{"class":466}," =",[460,803,804],{"class":615}," item",[460,806,55],{"class":466},[460,808,516],{"class":615},[460,810,811],{"class":466},";\n",[460,813,814],{"class":462,"line":423},[460,815,817],{"emptyLinePlaceholder":816},true,"\n",[460,819,820,824,828,830,832,834,837,839,841,843,846],{"class":462,"line":639},[460,821,823],{"class":822},"s7zQu","    if",[460,825,827],{"class":826},"swJcz"," (",[460,829,784],{"class":615},[460,831,55],{"class":466},[460,833,530],{"class":615},[460,835,836],{"class":466}," ===",[460,838,476],{"class":466},[460,840,632],{"class":491},[460,842,483],{"class":466},[460,844,845],{"class":826},") ",[460,847,848],{"class":466},"{\n",[460,850,851,854,856,859,861,864,866,868,871,873,876,878,880,883,885,887,889,892,894,897,899,901,904,906,909,911],{"class":462,"line":728},[460,852,853],{"class":615},"        value",[460,855,801],{"class":466},[460,857,858],{"class":615}," Buffer",[460,860,55],{"class":466},[460,862,863],{"class":776},"from",[460,865,780],{"class":826},[460,867,516],{"class":615},[460,869,870],{"class":826},")",[460,872,55],{"class":466},[460,874,875],{"class":776},"toString",[460,877,780],{"class":826},[460,879,483],{"class":466},[460,881,882],{"class":491},"utf8",[460,884,483],{"class":466},[460,886,870],{"class":826},[460,888,55],{"class":466},[460,890,891],{"class":776},"replace",[460,893,780],{"class":826},[460,895,896],{"class":466},"\u002F",[460,898,483],{"class":491},[460,900,896],{"class":466},[460,902,903],{"class":508},"g",[460,905,496],{"class":466},[460,907,908],{"class":466}," \"\"",[460,910,870],{"class":826},[460,912,811],{"class":466},[460,914,916],{"class":462,"line":915},6,[460,917,918],{"class":466},"    }\n",[460,920,922],{"class":462,"line":921},7,[460,923,817],{"emptyLinePlaceholder":816},[460,925,927,929,931,933,935,937,939,941,943,945,947],{"class":462,"line":926},8,[460,928,823],{"class":822},[460,930,827],{"class":826},[460,932,784],{"class":615},[460,934,55],{"class":466},[460,936,530],{"class":615},[460,938,836],{"class":466},[460,940,476],{"class":466},[460,942,539],{"class":491},[460,944,483],{"class":466},[460,946,845],{"class":826},[460,948,848],{"class":466},[460,950,952,955,958,960,963,965,968,970,972,975,978,980],{"class":462,"line":951},9,[460,953,954],{"class":479},"        const",[460,956,957],{"class":615}," totalSeconds",[460,959,801],{"class":466},[460,961,962],{"class":615}," Math",[460,964,55],{"class":466},[460,966,967],{"class":776},"floor",[460,969,780],{"class":826},[460,971,516],{"class":615},[460,973,974],{"class":466}," \u002F",[460,976,977],{"class":508}," 100",[460,979,870],{"class":826},[460,981,811],{"class":466},[460,983,985,987,990,992,994,996,998,1000,1003,1005,1008,1010],{"class":462,"line":984},10,[460,986,954],{"class":479},[460,988,989],{"class":615}," days",[460,991,801],{"class":466},[460,993,962],{"class":615},[460,995,55],{"class":466},[460,997,967],{"class":776},[460,999,780],{"class":826},[460,1001,1002],{"class":615},"totalSeconds",[460,1004,974],{"class":466},[460,1006,1007],{"class":508}," 86400",[460,1009,870],{"class":826},[460,1011,811],{"class":466},[460,1013,1015,1017,1020,1022,1024,1026,1028,1031,1033,1036,1038,1040,1042,1045,1047],{"class":462,"line":1014},11,[460,1016,954],{"class":479},[460,1018,1019],{"class":615}," hours",[460,1021,801],{"class":466},[460,1023,962],{"class":615},[460,1025,55],{"class":466},[460,1027,967],{"class":776},[460,1029,1030],{"class":826},"((",[460,1032,1002],{"class":615},[460,1034,1035],{"class":466}," %",[460,1037,1007],{"class":508},[460,1039,845],{"class":826},[460,1041,896],{"class":466},[460,1043,1044],{"class":508}," 3600",[460,1046,870],{"class":826},[460,1048,811],{"class":466},[460,1050,1052,1054,1057,1059,1061,1063,1065,1067,1069,1071,1073,1075,1077,1080,1082],{"class":462,"line":1051},12,[460,1053,954],{"class":479},[460,1055,1056],{"class":615}," minutes",[460,1058,801],{"class":466},[460,1060,962],{"class":615},[460,1062,55],{"class":466},[460,1064,967],{"class":776},[460,1066,1030],{"class":826},[460,1068,1002],{"class":615},[460,1070,1035],{"class":466},[460,1072,1044],{"class":508},[460,1074,845],{"class":826},[460,1076,896],{"class":466},[460,1078,1079],{"class":508}," 60",[460,1081,870],{"class":826},[460,1083,811],{"class":466},[460,1085,1087,1089,1092,1094,1096,1098,1100],{"class":462,"line":1086},13,[460,1088,954],{"class":479},[460,1090,1091],{"class":615}," seconds",[460,1093,801],{"class":466},[460,1095,957],{"class":615},[460,1097,1035],{"class":466},[460,1099,1079],{"class":508},[460,1101,811],{"class":466},[460,1103,1105,1107,1109,1112,1115,1118,1121,1124,1127,1129,1132,1134,1137,1139,1142,1144,1147,1149,1152,1155],{"class":462,"line":1104},14,[460,1106,853],{"class":615},[460,1108,801],{"class":466},[460,1110,1111],{"class":466}," `${",[460,1113,1114],{"class":615},"days",[460,1116,1117],{"class":466},"}",[460,1119,1120],{"class":491},"d ",[460,1122,1123],{"class":466},"${",[460,1125,1126],{"class":615},"hours",[460,1128,1117],{"class":466},[460,1130,1131],{"class":491},"h ",[460,1133,1123],{"class":466},[460,1135,1136],{"class":615},"minutes",[460,1138,1117],{"class":466},[460,1140,1141],{"class":491},"m ",[460,1143,1123],{"class":466},[460,1145,1146],{"class":615},"seconds",[460,1148,1117],{"class":466},[460,1150,1151],{"class":491},"s",[460,1153,1154],{"class":466},"`",[460,1156,811],{"class":466},[460,1158,1160],{"class":462,"line":1159},15,[460,1161,918],{"class":466},[460,1163,1165],{"class":462,"line":1164},16,[460,1166,817],{"emptyLinePlaceholder":816},[460,1168,1170,1173,1176,1179,1181,1183,1185,1187,1189,1192,1194,1196,1198,1200,1202,1204],{"class":462,"line":1169},17,[460,1171,1172],{"class":822},"    return",[460,1174,1175],{"class":466}," {",[460,1177,1178],{"class":826}," oid",[460,1180,486],{"class":466},[460,1182,804],{"class":615},[460,1184,55],{"class":466},[460,1186,480],{"class":615},[460,1188,496],{"class":466},[460,1190,1191],{"class":826}," name",[460,1193,486],{"class":466},[460,1195,804],{"class":615},[460,1197,55],{"class":466},[460,1199,530],{"class":615},[460,1201,496],{"class":466},[460,1203,798],{"class":615},[460,1205,1206],{"class":466}," };\n",[460,1208,1210,1212,1214],{"class":462,"line":1209},18,[460,1211,1117],{"class":466},[460,1213,870],{"class":615},[460,1215,811],{"class":466},[460,1217,1219],{"class":462,"line":1218},19,[460,1220,817],{"emptyLinePlaceholder":816},[460,1222,1224,1227,1229,1232,1234,1237],{"class":462,"line":1223},20,[460,1225,1226],{"class":615},"msg",[460,1228,55],{"class":466},[460,1230,1231],{"class":615},"payload ",[460,1233,763],{"class":466},[460,1235,1236],{"class":615}," parsed",[460,1238,811],{"class":466},[460,1240,1242,1245,1247],{"class":462,"line":1241},21,[460,1243,1244],{"class":822},"return",[460,1246,766],{"class":615},[460,1248,811],{"class":466},[416,1250,1251],{},[12,1252,1253,1256,1257,1261],{},[39,1254,1255],{},"Tip:"," If you need different parsing logic for additional OID types or want to transform the output differently, you do not have to write it from scratch. FlowFuse's ",[44,1258,1260],{"href":1259},"\u002Fdocs\u002Fuser\u002Fexpert\u002Fnode-red-embedded-ai\u002F#function-code-generation","AI-powered function generation"," lets you describe what you need in plain English and generates the function node code for you directly inside the editor.",[156,1263,1264],{"start":921},[36,1265,181,1266,352,1268,55],{},[39,1267,355],{},[39,1269,437],{},[12,1271,1272],{},"The debug panel will now show clean, readable output:",[451,1274,1276],{"className":453,"code":1275,"language":455,"meta":456,"style":456},"[\n  { \"oid\": \"1.3.6.1.2.1.1.3.0\", \"name\": \"TimeTicks\", \"value\": \"0d 0h 52m 55s\" },\n  { \"oid\": \"1.3.6.1.2.1.1.5.0\", \"name\": \"OctetString\", \"value\": \"test-device\" },\n  { \"oid\": \"1.3.6.1.2.1.1.1.0\", \"name\": \"OctetString\", \"value\": \"Linux core-switch-01 5.15.0 #1 SMP x86_64\" }\n]\n",[151,1277,1278,1282,1336,1389,1442],{"__ignoreMap":456},[460,1279,1280],{"class":462,"line":463},[460,1281,467],{"class":466},[460,1283,1284,1286,1288,1290,1292,1294,1296,1298,1300,1302,1304,1307,1309,1311,1313,1315,1317,1319,1321,1323,1325,1327,1329,1332,1334],{"class":462,"line":470},[460,1285,473],{"class":466},[460,1287,476],{"class":466},[460,1289,480],{"class":479},[460,1291,483],{"class":466},[460,1293,486],{"class":466},[460,1295,476],{"class":466},[460,1297,308],{"class":491},[460,1299,483],{"class":466},[460,1301,496],{"class":466},[460,1303,476],{"class":466},[460,1305,1306],{"class":479},"name",[460,1308,483],{"class":466},[460,1310,486],{"class":466},[460,1312,476],{"class":466},[460,1314,539],{"class":491},[460,1316,483],{"class":466},[460,1318,496],{"class":466},[460,1320,476],{"class":466},[460,1322,516],{"class":479},[460,1324,483],{"class":466},[460,1326,486],{"class":466},[460,1328,476],{"class":466},[460,1330,1331],{"class":491},"0d 0h 52m 55s",[460,1333,483],{"class":466},[460,1335,544],{"class":466},[460,1337,1338,1340,1342,1344,1346,1348,1350,1352,1354,1356,1358,1360,1362,1364,1366,1368,1370,1372,1374,1376,1378,1380,1382,1385,1387],{"class":462,"line":423},[460,1339,473],{"class":466},[460,1341,476],{"class":466},[460,1343,480],{"class":479},[460,1345,483],{"class":466},[460,1347,486],{"class":466},[460,1349,476],{"class":466},[460,1351,320],{"class":491},[460,1353,483],{"class":466},[460,1355,496],{"class":466},[460,1357,476],{"class":466},[460,1359,1306],{"class":479},[460,1361,483],{"class":466},[460,1363,486],{"class":466},[460,1365,476],{"class":466},[460,1367,632],{"class":491},[460,1369,483],{"class":466},[460,1371,496],{"class":466},[460,1373,476],{"class":466},[460,1375,516],{"class":479},[460,1377,483],{"class":466},[460,1379,486],{"class":466},[460,1381,476],{"class":466},[460,1383,1384],{"class":491},"test-device",[460,1386,483],{"class":466},[460,1388,544],{"class":466},[460,1390,1391,1393,1395,1397,1399,1401,1403,1405,1407,1409,1411,1413,1415,1417,1419,1421,1423,1425,1427,1429,1431,1433,1435,1438,1440],{"class":462,"line":639},[460,1392,473],{"class":466},[460,1394,476],{"class":466},[460,1396,480],{"class":479},[460,1398,483],{"class":466},[460,1400,486],{"class":466},[460,1402,476],{"class":466},[460,1404,333],{"class":491},[460,1406,483],{"class":466},[460,1408,496],{"class":466},[460,1410,476],{"class":466},[460,1412,1306],{"class":479},[460,1414,483],{"class":466},[460,1416,486],{"class":466},[460,1418,476],{"class":466},[460,1420,632],{"class":491},[460,1422,483],{"class":466},[460,1424,496],{"class":466},[460,1426,476],{"class":466},[460,1428,516],{"class":479},[460,1430,483],{"class":466},[460,1432,486],{"class":466},[460,1434,476],{"class":466},[460,1436,1437],{"class":491},"Linux core-switch-01 5.15.0 #1 SMP x86_64",[460,1439,483],{"class":466},[460,1441,725],{"class":466},[460,1443,1444],{"class":462,"line":728},[460,1445,731],{"class":466},[12,1447,1448],{},"With system metrics polling cleanly, the next section covers using the snmp walker node to discover and monitor all network interfaces on the device.",[25,1450,1452],{"id":1451},"discovering-interfaces-with-snmp-walker","Discovering Interfaces with SNMP Walker",[12,1454,1455],{},"The snmp walker node traverses the MIB tree starting from a given OID and returns every object beneath it. Unlike GET where you specify exact OIDs, walker is useful when you do not know the full OID path in advance, for example, discovering all network interfaces on a device without knowing how many exist or what their index numbers are.",[12,1457,1458,1459,827,1462,1465],{},"Network interfaces on any SNMP device live under the ",[151,1460,1461],{},"ifTable",[151,1463,1464],{},"1.3.6.1.2.1.2.2","). Walking this subtree returns every interface along with its name, operational status, speed, and traffic counters, one entry per interface regardless of how many the device has.",[280,1467,1468,1478],{},[283,1469,1470],{},[286,1471,1472,1474,1476],{},[289,1473,291],{},[289,1475,294],{},[289,1477,297],{},[299,1479,1480,1493,1512,1533,1546],{},[286,1481,1482,1487,1490],{},[304,1483,1484],{},[151,1485,1486],{},"1.3.6.1.2.1.2.2.1.1",[304,1488,1489],{},"ifIndex",[304,1491,1492],{},"Unique index number for each interface",[286,1494,1495,1500,1503],{},[304,1496,1497],{},[151,1498,1499],{},"1.3.6.1.2.1.2.2.1.2",[304,1501,1502],{},"ifDescr",[304,1504,1505,1506,235,1509],{},"Interface name, e.g. ",[151,1507,1508],{},"eth0",[151,1510,1511],{},"GigabitEthernet0\u002F1",[286,1513,1514,1519,1522],{},[304,1515,1516],{},[151,1517,1518],{},"1.3.6.1.2.1.2.2.1.8",[304,1520,1521],{},"ifOperStatus",[304,1523,1524,1525,1528,1529,1532],{},"Operational status, ",[151,1526,1527],{},"1"," = up, ",[151,1530,1531],{},"2"," = down",[286,1534,1535,1540,1543],{},[304,1536,1537],{},[151,1538,1539],{},"1.3.6.1.2.1.2.2.1.10",[304,1541,1542],{},"ifInOctets",[304,1544,1545],{},"Total inbound bytes on the interface",[286,1547,1548,1553,1556],{},[304,1549,1550],{},[151,1551,1552],{},"1.3.6.1.2.1.2.2.1.16",[304,1554,1555],{},"ifOutOctets",[304,1557,1558],{},"Total outbound bytes on the interface",[12,1560,1561,1562,1564,1565,55],{},"Walking from ",[151,1563,1464],{}," returns all of the above for every interface in one request. For the full ifTable OID reference see ",[44,1566,1569],{"href":1567,"rel":1568},"https:\u002F\u002Fwww.alvestrand.no\u002Fobjectid\u002F1.3.6.1.2.1.2.2.html",[48],"alvestrand.no\u002Fobjectid\u002F1.3.6.1.2.1.2.2",[416,1571,1572],{},[12,1573,1574,1577],{},[39,1575,1576],{},"Note:"," The walker node requires a device with a populated interface table. If you are using a lightweight test agent, increase the timeout in the walker node configuration to at least 30 seconds. On resource-constrained devices that cannot handle bulk requests, use the snmp subtree node instead.",[156,1579,1580,1589],{},[36,1581,344,1582,348,1584,352,1587,55],{},[39,1583,347],{},[39,1585,1586],{},"every 10 seconds",[39,1588,355],{},[36,1590,344,1591,360],{},[39,1592,200],{},[280,1594,1595,1603],{},[283,1596,1597],{},[286,1598,1599,1601],{},[289,1600,369],{},[289,1602,372],{},[299,1604,1605,1613,1621,1629,1637],{},[286,1606,1607,1609],{},[304,1608,379],{},[304,1610,382,1611],{},[151,1612,385],{},[286,1614,1615,1617],{},[304,1616,390],{},[304,1618,1619],{},[151,1620,395],{},[286,1622,1623,1625],{},[304,1624,400],{},[304,1626,1627],{},[151,1628,137],{},[286,1630,1631,1633],{},[304,1632,291],{},[304,1634,1635],{},[151,1636,1464],{},[286,1638,1639,1642],{},[304,1640,1641],{},"Timeout",[304,1643,1644],{},[151,1645,1646],{},"30",[156,1648,1649,1653],{"start":423},[36,1650,181,1651,55],{},[39,1652,355],{},[36,1654,430,1655,1657],{},[39,1656,741],{}," node onto the canvas and insert it between the walker node and a debug node. Double click it and add the following code to parse the response into a readable structure:",[451,1659,1661],{"className":748,"code":1660,"language":750,"meta":456,"style":456},"const interfaces = {};\n\nmsg.payload.forEach(item => {\n    if (!item.oid.startsWith(\"1.3.6.1.2.1.2.2.1.\")) return;\n\n    const parts = item.oid.split(\".\");\n    const ifIndex = parts[parts.length - 1];\n    const subOid = parts.slice(0, -1).join(\".\");\n\n    if (!interfaces[ifIndex]) interfaces[ifIndex] = { index: ifIndex };\n\n    let value = item.value;\n\n    const oidMap = {\n        \"1.3.6.1.2.1.2.2.1.1\": \"ifIndex\",\n        \"1.3.6.1.2.1.2.2.1.2\": \"ifDescr\",\n        \"1.3.6.1.2.1.2.2.1.8\": \"ifOperStatus\",\n        \"1.3.6.1.2.1.2.2.1.10\": \"ifInOctets\",\n        \"1.3.6.1.2.1.2.2.1.16\": \"ifOutOctets\"\n    };\n\n    if (oidMap[subOid]) {\n        if (subOid === \"1.3.6.1.2.1.2.2.1.2\") {\n            const data = value.data || value;\n            value = Buffer.from(data).toString(\"utf8\").replace(\u002F\"\u002Fg, \"\").trim();\n        } else if (subOid === \"1.3.6.1.2.1.2.2.1.8\") {\n            value = value === 1 ? \"up\" : \"down\";\n        }\n        interfaces[ifIndex][oidMap[subOid]] = value;\n    }\n});\n\nmsg.payload = Object.values(interfaces).filter(i => i.ifDescr);\nreturn msg;\n",[151,1662,1663,1675,1679,1700,1736,1740,1773,1806,1852,1856,1896,1900,1916,1920,1931,1951,1969,1987,2005,2022,2027,2031,2050,2072,2097,2161,2189,2224,2230,2258,2263,2272,2277,2321],{"__ignoreMap":456},[460,1664,1665,1667,1670,1672],{"class":462,"line":463},[460,1666,757],{"class":479},[460,1668,1669],{"class":615}," interfaces ",[460,1671,763],{"class":466},[460,1673,1674],{"class":466}," {};\n",[460,1676,1677],{"class":462,"line":470},[460,1678,817],{"emptyLinePlaceholder":816},[460,1680,1681,1683,1685,1687,1689,1692,1694,1696,1698],{"class":462,"line":423},[460,1682,1226],{"class":615},[460,1684,55],{"class":466},[460,1686,771],{"class":615},[460,1688,55],{"class":466},[460,1690,1691],{"class":776},"forEach",[460,1693,780],{"class":615},[460,1695,784],{"class":783},[460,1697,787],{"class":479},[460,1699,790],{"class":466},[460,1701,1702,1704,1706,1709,1711,1713,1715,1717,1720,1722,1724,1727,1729,1732,1734],{"class":462,"line":639},[460,1703,823],{"class":822},[460,1705,827],{"class":826},[460,1707,1708],{"class":466},"!",[460,1710,784],{"class":615},[460,1712,55],{"class":466},[460,1714,480],{"class":615},[460,1716,55],{"class":466},[460,1718,1719],{"class":776},"startsWith",[460,1721,780],{"class":826},[460,1723,483],{"class":466},[460,1725,1726],{"class":491},"1.3.6.1.2.1.2.2.1.",[460,1728,483],{"class":466},[460,1730,1731],{"class":826},")) ",[460,1733,1244],{"class":822},[460,1735,811],{"class":466},[460,1737,1738],{"class":462,"line":728},[460,1739,817],{"emptyLinePlaceholder":816},[460,1741,1742,1745,1748,1750,1752,1754,1756,1758,1761,1763,1765,1767,1769,1771],{"class":462,"line":915},[460,1743,1744],{"class":479},"    const",[460,1746,1747],{"class":615}," parts",[460,1749,801],{"class":466},[460,1751,804],{"class":615},[460,1753,55],{"class":466},[460,1755,480],{"class":615},[460,1757,55],{"class":466},[460,1759,1760],{"class":776},"split",[460,1762,780],{"class":826},[460,1764,483],{"class":466},[460,1766,55],{"class":491},[460,1768,483],{"class":466},[460,1770,870],{"class":826},[460,1772,811],{"class":466},[460,1774,1775,1777,1780,1782,1784,1787,1790,1792,1795,1798,1801,1804],{"class":462,"line":921},[460,1776,1744],{"class":479},[460,1778,1779],{"class":615}," ifIndex",[460,1781,801],{"class":466},[460,1783,1747],{"class":615},[460,1785,1786],{"class":826},"[",[460,1788,1789],{"class":615},"parts",[460,1791,55],{"class":466},[460,1793,1794],{"class":615},"length",[460,1796,1797],{"class":466}," -",[460,1799,1800],{"class":508}," 1",[460,1802,1803],{"class":826},"]",[460,1805,811],{"class":466},[460,1807,1808,1810,1813,1815,1817,1819,1822,1824,1827,1829,1831,1833,1835,1837,1840,1842,1844,1846,1848,1850],{"class":462,"line":926},[460,1809,1744],{"class":479},[460,1811,1812],{"class":615}," subOid",[460,1814,801],{"class":466},[460,1816,1747],{"class":615},[460,1818,55],{"class":466},[460,1820,1821],{"class":776},"slice",[460,1823,780],{"class":826},[460,1825,1826],{"class":508},"0",[460,1828,496],{"class":466},[460,1830,1797],{"class":466},[460,1832,1527],{"class":508},[460,1834,870],{"class":826},[460,1836,55],{"class":466},[460,1838,1839],{"class":776},"join",[460,1841,780],{"class":826},[460,1843,483],{"class":466},[460,1845,55],{"class":491},[460,1847,483],{"class":466},[460,1849,870],{"class":826},[460,1851,811],{"class":466},[460,1853,1854],{"class":462,"line":951},[460,1855,817],{"emptyLinePlaceholder":816},[460,1857,1858,1860,1862,1864,1867,1869,1871,1874,1876,1878,1880,1883,1885,1887,1890,1892,1894],{"class":462,"line":984},[460,1859,823],{"class":822},[460,1861,827],{"class":826},[460,1863,1708],{"class":466},[460,1865,1866],{"class":615},"interfaces",[460,1868,1786],{"class":826},[460,1870,1489],{"class":615},[460,1872,1873],{"class":826},"]) ",[460,1875,1866],{"class":615},[460,1877,1786],{"class":826},[460,1879,1489],{"class":615},[460,1881,1882],{"class":826},"] ",[460,1884,763],{"class":466},[460,1886,1175],{"class":466},[460,1888,1889],{"class":826}," index",[460,1891,486],{"class":466},[460,1893,1779],{"class":615},[460,1895,1206],{"class":466},[460,1897,1898],{"class":462,"line":1014},[460,1899,817],{"emptyLinePlaceholder":816},[460,1901,1902,1904,1906,1908,1910,1912,1914],{"class":462,"line":1051},[460,1903,795],{"class":479},[460,1905,798],{"class":615},[460,1907,801],{"class":466},[460,1909,804],{"class":615},[460,1911,55],{"class":466},[460,1913,516],{"class":615},[460,1915,811],{"class":466},[460,1917,1918],{"class":462,"line":1086},[460,1919,817],{"emptyLinePlaceholder":816},[460,1921,1922,1924,1927,1929],{"class":462,"line":1104},[460,1923,1744],{"class":479},[460,1925,1926],{"class":615}," oidMap",[460,1928,801],{"class":466},[460,1930,790],{"class":466},[460,1932,1933,1936,1938,1940,1942,1944,1946,1948],{"class":462,"line":1159},[460,1934,1935],{"class":466},"        \"",[460,1937,1486],{"class":826},[460,1939,483],{"class":466},[460,1941,486],{"class":466},[460,1943,476],{"class":466},[460,1945,1489],{"class":491},[460,1947,483],{"class":466},[460,1949,1950],{"class":466},",\n",[460,1952,1953,1955,1957,1959,1961,1963,1965,1967],{"class":462,"line":1164},[460,1954,1935],{"class":466},[460,1956,1499],{"class":826},[460,1958,483],{"class":466},[460,1960,486],{"class":466},[460,1962,476],{"class":466},[460,1964,1502],{"class":491},[460,1966,483],{"class":466},[460,1968,1950],{"class":466},[460,1970,1971,1973,1975,1977,1979,1981,1983,1985],{"class":462,"line":1169},[460,1972,1935],{"class":466},[460,1974,1518],{"class":826},[460,1976,483],{"class":466},[460,1978,486],{"class":466},[460,1980,476],{"class":466},[460,1982,1521],{"class":491},[460,1984,483],{"class":466},[460,1986,1950],{"class":466},[460,1988,1989,1991,1993,1995,1997,1999,2001,2003],{"class":462,"line":1209},[460,1990,1935],{"class":466},[460,1992,1539],{"class":826},[460,1994,483],{"class":466},[460,1996,486],{"class":466},[460,1998,476],{"class":466},[460,2000,1542],{"class":491},[460,2002,483],{"class":466},[460,2004,1950],{"class":466},[460,2006,2007,2009,2011,2013,2015,2017,2019],{"class":462,"line":1218},[460,2008,1935],{"class":466},[460,2010,1552],{"class":826},[460,2012,483],{"class":466},[460,2014,486],{"class":466},[460,2016,476],{"class":466},[460,2018,1555],{"class":491},[460,2020,2021],{"class":466},"\"\n",[460,2023,2024],{"class":462,"line":1223},[460,2025,2026],{"class":466},"    };\n",[460,2028,2029],{"class":462,"line":1241},[460,2030,817],{"emptyLinePlaceholder":816},[460,2032,2034,2036,2038,2041,2043,2046,2048],{"class":462,"line":2033},22,[460,2035,823],{"class":822},[460,2037,827],{"class":826},[460,2039,2040],{"class":615},"oidMap",[460,2042,1786],{"class":826},[460,2044,2045],{"class":615},"subOid",[460,2047,1873],{"class":826},[460,2049,848],{"class":466},[460,2051,2053,2056,2058,2060,2062,2064,2066,2068,2070],{"class":462,"line":2052},23,[460,2054,2055],{"class":822},"        if",[460,2057,827],{"class":826},[460,2059,2045],{"class":615},[460,2061,836],{"class":466},[460,2063,476],{"class":466},[460,2065,1499],{"class":491},[460,2067,483],{"class":466},[460,2069,845],{"class":826},[460,2071,848],{"class":466},[460,2073,2075,2078,2081,2083,2085,2087,2090,2093,2095],{"class":462,"line":2074},24,[460,2076,2077],{"class":479},"            const",[460,2079,2080],{"class":615}," data",[460,2082,801],{"class":466},[460,2084,798],{"class":615},[460,2086,55],{"class":466},[460,2088,2089],{"class":615},"data",[460,2091,2092],{"class":466}," ||",[460,2094,798],{"class":615},[460,2096,811],{"class":466},[460,2098,2100,2103,2105,2107,2109,2111,2113,2115,2117,2119,2121,2123,2125,2127,2129,2131,2133,2135,2137,2139,2141,2143,2145,2147,2149,2151,2153,2156,2159],{"class":462,"line":2099},25,[460,2101,2102],{"class":615},"            value",[460,2104,801],{"class":466},[460,2106,858],{"class":615},[460,2108,55],{"class":466},[460,2110,863],{"class":776},[460,2112,780],{"class":826},[460,2114,2089],{"class":615},[460,2116,870],{"class":826},[460,2118,55],{"class":466},[460,2120,875],{"class":776},[460,2122,780],{"class":826},[460,2124,483],{"class":466},[460,2126,882],{"class":491},[460,2128,483],{"class":466},[460,2130,870],{"class":826},[460,2132,55],{"class":466},[460,2134,891],{"class":776},[460,2136,780],{"class":826},[460,2138,896],{"class":466},[460,2140,483],{"class":491},[460,2142,896],{"class":466},[460,2144,903],{"class":508},[460,2146,496],{"class":466},[460,2148,908],{"class":466},[460,2150,870],{"class":826},[460,2152,55],{"class":466},[460,2154,2155],{"class":776},"trim",[460,2157,2158],{"class":826},"()",[460,2160,811],{"class":466},[460,2162,2164,2167,2170,2173,2175,2177,2179,2181,2183,2185,2187],{"class":462,"line":2163},26,[460,2165,2166],{"class":466},"        }",[460,2168,2169],{"class":822}," else",[460,2171,2172],{"class":822}," if",[460,2174,827],{"class":826},[460,2176,2045],{"class":615},[460,2178,836],{"class":466},[460,2180,476],{"class":466},[460,2182,1518],{"class":491},[460,2184,483],{"class":466},[460,2186,845],{"class":826},[460,2188,848],{"class":466},[460,2190,2192,2194,2196,2198,2200,2202,2205,2207,2210,2212,2215,2217,2220,2222],{"class":462,"line":2191},27,[460,2193,2102],{"class":615},[460,2195,801],{"class":466},[460,2197,798],{"class":615},[460,2199,836],{"class":466},[460,2201,1800],{"class":508},[460,2203,2204],{"class":466}," ?",[460,2206,476],{"class":466},[460,2208,2209],{"class":491},"up",[460,2211,483],{"class":466},[460,2213,2214],{"class":466}," :",[460,2216,476],{"class":466},[460,2218,2219],{"class":491},"down",[460,2221,483],{"class":466},[460,2223,811],{"class":466},[460,2225,2227],{"class":462,"line":2226},28,[460,2228,2229],{"class":466},"        }\n",[460,2231,2233,2236,2238,2240,2243,2245,2247,2249,2252,2254,2256],{"class":462,"line":2232},29,[460,2234,2235],{"class":615},"        interfaces",[460,2237,1786],{"class":826},[460,2239,1489],{"class":615},[460,2241,2242],{"class":826},"][",[460,2244,2040],{"class":615},[460,2246,1786],{"class":826},[460,2248,2045],{"class":615},[460,2250,2251],{"class":826},"]] ",[460,2253,763],{"class":466},[460,2255,798],{"class":615},[460,2257,811],{"class":466},[460,2259,2261],{"class":462,"line":2260},30,[460,2262,918],{"class":466},[460,2264,2266,2268,2270],{"class":462,"line":2265},31,[460,2267,1117],{"class":466},[460,2269,870],{"class":615},[460,2271,811],{"class":466},[460,2273,2275],{"class":462,"line":2274},32,[460,2276,817],{"emptyLinePlaceholder":816},[460,2278,2280,2282,2284,2286,2288,2291,2293,2296,2299,2301,2304,2306,2309,2311,2314,2316,2319],{"class":462,"line":2279},33,[460,2281,1226],{"class":615},[460,2283,55],{"class":466},[460,2285,1231],{"class":615},[460,2287,763],{"class":466},[460,2289,2290],{"class":615}," Object",[460,2292,55],{"class":466},[460,2294,2295],{"class":776},"values",[460,2297,2298],{"class":615},"(interfaces)",[460,2300,55],{"class":466},[460,2302,2303],{"class":776},"filter",[460,2305,780],{"class":615},[460,2307,2308],{"class":783},"i",[460,2310,787],{"class":479},[460,2312,2313],{"class":615}," i",[460,2315,55],{"class":466},[460,2317,2318],{"class":615},"ifDescr)",[460,2320,811],{"class":466},[460,2322,2324,2326,2328],{"class":462,"line":2323},34,[460,2325,1244],{"class":822},[460,2327,766],{"class":615},[460,2329,811],{"class":466},[156,2331,2332,2336,2341,2344],{"start":728},[36,2333,181,2334,55],{},[39,2335,355],{},[36,2337,430,2338,2340],{},[39,2339,433],{}," node onto the canvas and connect it to the function node output.",[36,2342,2343],{},"Connect the inject node output to the walker node input, and the walker node output to the function node input.",[36,2345,181,2346,55],{},[39,2347,437],{},[12,2349,2350],{},"The debug panel will show a clean array of interface objects like this:",[451,2352,2354],{"className":453,"code":2353,"language":455,"meta":456,"style":456},"[\n  {\n    \"index\": \"1\",\n    \"ifIndex\": 1,\n    \"ifDescr\": \"lo\",\n    \"ifOperStatus\": \"up\",\n    \"ifInOctets\": 20526,\n    \"ifOutOctets\": 20526\n  },\n  {\n    \"index\": \"2\",\n    \"ifIndex\": 2,\n    \"ifDescr\": \"enp0s1\",\n    \"ifOperStatus\": \"up\",\n    \"ifInOctets\": 48159944,\n    \"ifOutOctets\": 4263495\n  }\n]\n",[151,2355,2356,2360,2365,2385,2399,2418,2436,2451,2464,2469,2473,2491,2506,2525,2543,2558,2571,2576],{"__ignoreMap":456},[460,2357,2358],{"class":462,"line":463},[460,2359,467],{"class":466},[460,2361,2362],{"class":462,"line":470},[460,2363,2364],{"class":466},"  {\n",[460,2366,2367,2370,2373,2375,2377,2379,2381,2383],{"class":462,"line":423},[460,2368,2369],{"class":466},"    \"",[460,2371,2372],{"class":479},"index",[460,2374,483],{"class":466},[460,2376,486],{"class":466},[460,2378,476],{"class":466},[460,2380,1527],{"class":491},[460,2382,483],{"class":466},[460,2384,1950],{"class":466},[460,2386,2387,2389,2391,2393,2395,2397],{"class":462,"line":639},[460,2388,2369],{"class":466},[460,2390,1489],{"class":479},[460,2392,483],{"class":466},[460,2394,486],{"class":466},[460,2396,1800],{"class":508},[460,2398,1950],{"class":466},[460,2400,2401,2403,2405,2407,2409,2411,2414,2416],{"class":462,"line":728},[460,2402,2369],{"class":466},[460,2404,1502],{"class":479},[460,2406,483],{"class":466},[460,2408,486],{"class":466},[460,2410,476],{"class":466},[460,2412,2413],{"class":491},"lo",[460,2415,483],{"class":466},[460,2417,1950],{"class":466},[460,2419,2420,2422,2424,2426,2428,2430,2432,2434],{"class":462,"line":915},[460,2421,2369],{"class":466},[460,2423,1521],{"class":479},[460,2425,483],{"class":466},[460,2427,486],{"class":466},[460,2429,476],{"class":466},[460,2431,2209],{"class":491},[460,2433,483],{"class":466},[460,2435,1950],{"class":466},[460,2437,2438,2440,2442,2444,2446,2449],{"class":462,"line":921},[460,2439,2369],{"class":466},[460,2441,1542],{"class":479},[460,2443,483],{"class":466},[460,2445,486],{"class":466},[460,2447,2448],{"class":508}," 20526",[460,2450,1950],{"class":466},[460,2452,2453,2455,2457,2459,2461],{"class":462,"line":926},[460,2454,2369],{"class":466},[460,2456,1555],{"class":479},[460,2458,483],{"class":466},[460,2460,486],{"class":466},[460,2462,2463],{"class":508}," 20526\n",[460,2465,2466],{"class":462,"line":951},[460,2467,2468],{"class":466},"  },\n",[460,2470,2471],{"class":462,"line":984},[460,2472,2364],{"class":466},[460,2474,2475,2477,2479,2481,2483,2485,2487,2489],{"class":462,"line":1014},[460,2476,2369],{"class":466},[460,2478,2372],{"class":479},[460,2480,483],{"class":466},[460,2482,486],{"class":466},[460,2484,476],{"class":466},[460,2486,1531],{"class":491},[460,2488,483],{"class":466},[460,2490,1950],{"class":466},[460,2492,2493,2495,2497,2499,2501,2504],{"class":462,"line":1051},[460,2494,2369],{"class":466},[460,2496,1489],{"class":479},[460,2498,483],{"class":466},[460,2500,486],{"class":466},[460,2502,2503],{"class":508}," 2",[460,2505,1950],{"class":466},[460,2507,2508,2510,2512,2514,2516,2518,2521,2523],{"class":462,"line":1086},[460,2509,2369],{"class":466},[460,2511,1502],{"class":479},[460,2513,483],{"class":466},[460,2515,486],{"class":466},[460,2517,476],{"class":466},[460,2519,2520],{"class":491},"enp0s1",[460,2522,483],{"class":466},[460,2524,1950],{"class":466},[460,2526,2527,2529,2531,2533,2535,2537,2539,2541],{"class":462,"line":1104},[460,2528,2369],{"class":466},[460,2530,1521],{"class":479},[460,2532,483],{"class":466},[460,2534,486],{"class":466},[460,2536,476],{"class":466},[460,2538,2209],{"class":491},[460,2540,483],{"class":466},[460,2542,1950],{"class":466},[460,2544,2545,2547,2549,2551,2553,2556],{"class":462,"line":1159},[460,2546,2369],{"class":466},[460,2548,1542],{"class":479},[460,2550,483],{"class":466},[460,2552,486],{"class":466},[460,2554,2555],{"class":508}," 48159944",[460,2557,1950],{"class":466},[460,2559,2560,2562,2564,2566,2568],{"class":462,"line":1164},[460,2561,2369],{"class":466},[460,2563,1555],{"class":479},[460,2565,483],{"class":466},[460,2567,486],{"class":466},[460,2569,2570],{"class":508}," 4263495\n",[460,2572,2573],{"class":462,"line":1169},[460,2574,2575],{"class":466},"  }\n",[460,2577,2578],{"class":462,"line":1209},[460,2579,731],{"class":466},[12,2581,2582],{},"Each entry represents one interface with its current operational status and traffic counters. In the next section we will use the snmp subtree node to fetch interface data more precisely by targeting a specific OID subtree.",[25,2584,2586],{"id":2585},"fetching-interface-data-with-snmp-subtree","Fetching Interface Data with SNMP Subtree",[12,2588,2589],{},"The snmp subtree node is similar to walker but more targeted. Where walker reads from a given OID to the end of the entire MIB tree, subtree fetches everything beneath a specific OID and stops there. This makes it more predictable and efficient when you know the exact branch you want.",[12,2591,2592,2593,2595,2596,2598],{},"For network health monitoring, a practical use of subtree is pulling all operational status values for every interface in one shot by targeting ",[151,2594,1521],{}," directly at ",[151,2597,1518],{},". This gives you a clean up\u002Fdown status for every interface on the device without pulling traffic counters or other data you do not need at that moment.",[156,2600,2601,2609],{},[36,2602,344,2603,348,2605,352,2607,55],{},[39,2604,347],{},[39,2606,1586],{},[39,2608,355],{},[36,2610,344,2611,360],{},[39,2612,206],{},[280,2614,2615,2623],{},[283,2616,2617],{},[286,2618,2619,2621],{},[289,2620,369],{},[289,2622,372],{},[299,2624,2625,2633,2641,2649],{},[286,2626,2627,2629],{},[304,2628,379],{},[304,2630,382,2631],{},[151,2632,385],{},[286,2634,2635,2637],{},[304,2636,390],{},[304,2638,2639],{},[151,2640,395],{},[286,2642,2643,2645],{},[304,2644,400],{},[304,2646,2647],{},[151,2648,137],{},[286,2650,2651,2653],{},[304,2652,291],{},[304,2654,2655],{},[151,2656,1518],{},[156,2658,2659,2663],{"start":423},[36,2660,181,2661,55],{},[39,2662,355],{},[36,2664,430,2665,2667],{},[39,2666,741],{}," node onto the canvas and insert it between the subtree node and a debug node. Double click it and add the following code to parse the interface status values:",[451,2669,2671],{"className":748,"code":2670,"language":750,"meta":456,"style":456},"const statuses = msg.payload.map(item => {\n    const parts = item.oid.split(\".\");\n    const ifIndex = parts[parts.length - 1];\n    return {\n        ifIndex: ifIndex,\n        ifOperStatus: item.value === 1 ? \"up\" : \"down\"\n    };\n});\n\nmsg.payload = statuses;\nreturn msg;\n",[151,2672,2673,2700,2730,2756,2762,2773,2806,2810,2818,2822,2837],{"__ignoreMap":456},[460,2674,2675,2677,2680,2682,2684,2686,2688,2690,2692,2694,2696,2698],{"class":462,"line":463},[460,2676,757],{"class":479},[460,2678,2679],{"class":615}," statuses ",[460,2681,763],{"class":466},[460,2683,766],{"class":615},[460,2685,55],{"class":466},[460,2687,771],{"class":615},[460,2689,55],{"class":466},[460,2691,777],{"class":776},[460,2693,780],{"class":615},[460,2695,784],{"class":783},[460,2697,787],{"class":479},[460,2699,790],{"class":466},[460,2701,2702,2704,2706,2708,2710,2712,2714,2716,2718,2720,2722,2724,2726,2728],{"class":462,"line":470},[460,2703,1744],{"class":479},[460,2705,1747],{"class":615},[460,2707,801],{"class":466},[460,2709,804],{"class":615},[460,2711,55],{"class":466},[460,2713,480],{"class":615},[460,2715,55],{"class":466},[460,2717,1760],{"class":776},[460,2719,780],{"class":826},[460,2721,483],{"class":466},[460,2723,55],{"class":491},[460,2725,483],{"class":466},[460,2727,870],{"class":826},[460,2729,811],{"class":466},[460,2731,2732,2734,2736,2738,2740,2742,2744,2746,2748,2750,2752,2754],{"class":462,"line":423},[460,2733,1744],{"class":479},[460,2735,1779],{"class":615},[460,2737,801],{"class":466},[460,2739,1747],{"class":615},[460,2741,1786],{"class":826},[460,2743,1789],{"class":615},[460,2745,55],{"class":466},[460,2747,1794],{"class":615},[460,2749,1797],{"class":466},[460,2751,1800],{"class":508},[460,2753,1803],{"class":826},[460,2755,811],{"class":466},[460,2757,2758,2760],{"class":462,"line":639},[460,2759,1172],{"class":822},[460,2761,790],{"class":466},[460,2763,2764,2767,2769,2771],{"class":462,"line":728},[460,2765,2766],{"class":826},"        ifIndex",[460,2768,486],{"class":466},[460,2770,1779],{"class":615},[460,2772,1950],{"class":466},[460,2774,2775,2778,2780,2782,2784,2786,2788,2790,2792,2794,2796,2798,2800,2802,2804],{"class":462,"line":915},[460,2776,2777],{"class":826},"        ifOperStatus",[460,2779,486],{"class":466},[460,2781,804],{"class":615},[460,2783,55],{"class":466},[460,2785,516],{"class":615},[460,2787,836],{"class":466},[460,2789,1800],{"class":508},[460,2791,2204],{"class":466},[460,2793,476],{"class":466},[460,2795,2209],{"class":491},[460,2797,483],{"class":466},[460,2799,2214],{"class":466},[460,2801,476],{"class":466},[460,2803,2219],{"class":491},[460,2805,2021],{"class":466},[460,2807,2808],{"class":462,"line":921},[460,2809,2026],{"class":466},[460,2811,2812,2814,2816],{"class":462,"line":926},[460,2813,1117],{"class":466},[460,2815,870],{"class":615},[460,2817,811],{"class":466},[460,2819,2820],{"class":462,"line":951},[460,2821,817],{"emptyLinePlaceholder":816},[460,2823,2824,2826,2828,2830,2832,2835],{"class":462,"line":984},[460,2825,1226],{"class":615},[460,2827,55],{"class":466},[460,2829,1231],{"class":615},[460,2831,763],{"class":466},[460,2833,2834],{"class":615}," statuses",[460,2836,811],{"class":466},[460,2838,2839,2841,2843],{"class":462,"line":1014},[460,2840,1244],{"class":822},[460,2842,766],{"class":615},[460,2844,811],{"class":466},[416,2846,2847],{},[12,2848,2849,1256,2851,1261],{},[39,2850,1255],{},[44,2852,1260],{"href":1259},[156,2854,2855,2859,2862],{"start":728},[36,2856,181,2857,55],{},[39,2858,355],{},[36,2860,2861],{},"Connect the inject node to the subtree node, the subtree node to the function node, and the function node to a debug node.",[36,2863,181,2864,55],{},[39,2865,437],{},[12,2867,2868],{},"The debug panel will show a concise status array for every interface:",[451,2870,2872],{"className":453,"code":2871,"language":455,"meta":456,"style":456},"[\n  { \"ifIndex\": \"1\", \"ifOperStatus\": \"up\" },\n  { \"ifIndex\": \"2\", \"ifOperStatus\": \"down\" }\n]\n",[151,2873,2874,2878,2914,2950],{"__ignoreMap":456},[460,2875,2876],{"class":462,"line":463},[460,2877,467],{"class":466},[460,2879,2880,2882,2884,2886,2888,2890,2892,2894,2896,2898,2900,2902,2904,2906,2908,2910,2912],{"class":462,"line":470},[460,2881,473],{"class":466},[460,2883,476],{"class":466},[460,2885,1489],{"class":479},[460,2887,483],{"class":466},[460,2889,486],{"class":466},[460,2891,476],{"class":466},[460,2893,1527],{"class":491},[460,2895,483],{"class":466},[460,2897,496],{"class":466},[460,2899,476],{"class":466},[460,2901,1521],{"class":479},[460,2903,483],{"class":466},[460,2905,486],{"class":466},[460,2907,476],{"class":466},[460,2909,2209],{"class":491},[460,2911,483],{"class":466},[460,2913,544],{"class":466},[460,2915,2916,2918,2920,2922,2924,2926,2928,2930,2932,2934,2936,2938,2940,2942,2944,2946,2948],{"class":462,"line":423},[460,2917,473],{"class":466},[460,2919,476],{"class":466},[460,2921,1489],{"class":479},[460,2923,483],{"class":466},[460,2925,486],{"class":466},[460,2927,476],{"class":466},[460,2929,1531],{"class":491},[460,2931,483],{"class":466},[460,2933,496],{"class":466},[460,2935,476],{"class":466},[460,2937,1521],{"class":479},[460,2939,483],{"class":466},[460,2941,486],{"class":466},[460,2943,476],{"class":466},[460,2945,2219],{"class":491},[460,2947,483],{"class":466},[460,2949,725],{"class":466},[460,2951,2952],{"class":462,"line":639},[460,2953,731],{"class":466},[12,2955,2956],{},"This is the most efficient way to run a continuous interface health check, one subtree poll every 10 seconds tells you the operational state of every interface on the device without fetching data you do not need.",[12,2958,2959,2960,2965],{},"With all three polling operations in place, the next step is wiring this data into a ",[44,2961,2964],{"href":2962,"rel":2963},"https:\u002F\u002Fdashboard.flowfuse.com\u002F",[48],"FlowFuse Dashboard"," so the information is visible at a glance.",[25,2967,2969],{"id":2968},"wrapping-up","Wrapping Up",[12,2971,2972],{},"Industrial networks don't announce their problems. They accumulate them silently until a line goes down, a control loop breaks, or production stops.",[12,2974,2975],{},"The pipeline you've built here changes that. GET, Walker, and Subtree give you precise, continuous visibility into every device on your network. FlowFuse delivers it without the infrastructure overhead of a full NMS platform or the maintenance burden of hand-rolled scripts.",[12,2977,2978],{},"Wire the telemetry into a FlowFuse Dashboard. Set threshold-based alerts. Extend your OID coverage to vendor-specific metrics as your requirements grow. The foundation is in place. Everything else is iteration.",[12,2980,2981],{},"Unmonitored networks are a liability. Now yours isn't.",[2983,2984,2985],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}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);}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}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 pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}",{"title":456,"searchDepth":639,"depth":639,"links":2987},[2988,2989,2990,2991,2992,2993,2994],{"id":27,"depth":470,"text":28},{"id":76,"depth":470,"text":77},{"id":145,"depth":470,"text":146},{"id":244,"depth":470,"text":245},{"id":1451,"depth":470,"text":1452},{"id":2585,"depth":470,"text":2586},{"id":2968,"depth":470,"text":2969},{"type":2996,"title":2997,"description":2998},"demo","See FlowFuse SNMP Monitoring in Action","Book a demo to see how FlowFuse can give you production-grade visibility into your industrial network without the infrastructure complexity.","2026-03-20","Learn how to monitor industrial network health using SNMP and FlowFuse. Poll OIDs, visualize device telemetry, and detect failures before they impact operations.","md",null,"\u002Fblog\u002F2026\u002F03\u002Fimages\u002Fsnmp-tile.png","2026-06-19",{"keywords":3006,"excerpt":3007},"SNMP monitoring, industrial network health, FlowFuse, Node-RED SNMP, network telemetry, OID polling, industrial IoT",{"type":9,"value":3008},[3009],[12,3010,14],{},"\u002Fblog\u002F2026\u002F03\u002Fhow-to-monitor-industrial-network-usign-snmp",{"title":5,"description":3000},{"loc":3011},"blog\u002F2026\u002F03\u002Fhow-to-monitor-industrial-network-usign-snmp","Build production-grade SNMP monitoring pipelines with FlowFuse",[3017],"flowfuse","1lcaqegkkWyvgcSUswVjkxo1Q7SCslRI2JHE4U5VVho",{"id":3020,"extension":3021,"meta":3022,"sections":3023,"stem":3411,"__hash__":3412},"featureCatalog\u002Ffeature-catalog.yml","yml",{},[3024,3075,3176,3237,3314,3393],{"id":3025,"title":3026,"features":3027},"ai-automation","AI & Automation",[3028,3038,3048,3058,3064,3070],{"id":3029,"title":3030,"description":3031,"docsLink":3032,"changelog":3033,"tiers":3037},"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",[3034],{"url":3035,"release":3036},"\u002Fchangelog\u002F2026\u002F02\u002Fff-expert-update-banner\u002F","2.28",{"edge":816,"hub":816,"fleet":816},{"id":3039,"title":3040,"description":3041,"docsLink":3042,"changelog":3043,"subfeature":816,"showOnPricing":3046,"tiers":3047},"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",[3044],{"url":3045,"release":3036},"\u002Fchangelog\u002F2026\u002F02\u002Fff-expert-debug-log-context\u002F",false,{"edge":816,"hub":816,"fleet":816},{"id":3049,"title":3050,"description":3051,"docsLink":3052,"changelog":3053,"subfeature":816,"showOnPricing":3046,"tiers":3057},"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",[3054],{"url":3055,"release":3056},"\u002Fchangelog\u002F2026\u002F05\u002Fexpert-application-building\u002F","2.30",{"edge":816,"hub":816,"fleet":816},{"id":3059,"title":3060,"description":3061,"docsLink":3062,"subfeature":816,"beta":816,"showOnPricing":3046,"tiers":3063},"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":816,"hub":816,"fleet":816},{"id":3065,"title":3066,"description":3067,"docsLink":3068,"tiers":3069},"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.","\u002Fnode-red\u002Fflowfuse\u002Fmcp\u002F",{"edge":816,"hub":816,"fleet":816},{"id":3071,"title":3072,"description":3073,"tiers":3074},"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":816,"hub":816,"fleet":816},{"id":3076,"title":3077,"features":3078},"build","Build",[3079,3085,3091,3101,3107,3113,3117,3123,3129,3137,3143,3147,3151,3160,3168],{"id":3080,"title":3081,"description":3082,"docsLink":3083,"tiers":3084},"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":816,"hub":3046,"fleet":816},{"id":3086,"title":3087,"description":3088,"docsLink":3089,"tiers":3090},"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":816,"hub":816,"fleet":816},{"id":3092,"title":3093,"description":3094,"docsLink":3095,"changelog":3096,"tiers":3100},"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",[3097],{"url":3098,"release":3099},"\u002Fchangelog\u002F2026\u002F07\u002Fexpert-tables-automation\u002F","2.33",{"edge":816,"hub":816,"fleet":816},{"id":3102,"title":3103,"description":3104,"docsLink":3105,"tiers":3106},"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":816,"hub":816,"fleet":816},{"id":3108,"title":3109,"description":3110,"docsLink":3111,"showOnPricing":3046,"tiers":3112},"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":816,"hub":816,"fleet":816},{"id":3114,"title":3115,"showOnPricing":3046,"tiers":3116},"static-assets","Static Assets",{"edge":816,"hub":816,"fleet":816},{"id":3118,"title":3119,"description":3120,"docsLink":3121,"tiers":3122},"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":816,"hub":816,"fleet":816},{"id":3124,"title":3125,"description":3126,"docsLink":3127,"tiers":3128},"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":816,"hub":816,"fleet":816},{"id":3130,"title":3131,"description":3132,"changelog":3133,"subfeature":816,"showOnPricing":3046,"tiers":3136},"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.",[3134],{"url":3135,"release":3099},"\u002Fchangelog\u002F2026\u002F07\u002Fteam-and-application-dashboards\u002F",{"edge":816,"hub":816,"fleet":816},{"id":3138,"title":3139,"description":3140,"docsLink":3141,"tiers":3142},"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":816,"hub":816,"fleet":816},{"id":3144,"title":3145,"subfeature":816,"showOnPricing":3046,"tiers":3146},"blueprints-ot-apps","Blueprints - OT APPS",{"edge":816,"hub":3046,"fleet":816},{"id":3148,"title":3149,"subfeature":816,"showOnPricing":3046,"tiers":3150},"blueprints-it-apps","Blueprints - IT APPS",{"edge":3046,"hub":816,"fleet":3046},{"id":3152,"title":3153,"description":3154,"changelog":3155,"showOnPricing":3046,"tiers":3159},"immersive-editor-snapshots","Snapshot Details in Immersive Editor","View and manage snapshot details directly inside the immersive editor without leaving your editing session.",[3156],{"url":3157,"release":3158},"\u002Fchangelog\u002F2026\u002F03\u002Fsnapshot-detail-modal-immersive-editor\u002F","2.29",{"edge":816,"hub":816,"fleet":816},{"id":3161,"title":3162,"description":3163,"changelog":3164,"showOnPricing":3046,"tiers":3167},"immersive-editor-drawer","Customisable Immersive Editor Drawer","Pin, move, resize, or full-screen the immersive editor drawer. Your preferences are remembered between sessions.",[3165],{"url":3166,"release":3056},"\u002Fchangelog\u002F2026\u002F04\u002Fimmersive-editor-drawer\u002F",{"edge":816,"hub":816,"fleet":816},{"id":3169,"title":3170,"description":3171,"changelog":3172,"showOnPricing":3046,"tiers":3175},"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.",[3173],{"url":3174,"release":3158},"\u002Fchangelog\u002F2026\u002F03\u002Fembedded-editor-tab-title\u002F",{"edge":816,"hub":816,"fleet":816},{"id":3177,"title":437,"features":3178},"deploy",[3179,3185,3194,3200,3206,3212,3218,3224,3229],{"id":3180,"title":3181,"description":3182,"docsLink":3183,"tiers":3184},"hosted-instances","Cloud Instances","Run Node-RED instances managed and hosted by FlowFuse.","\u002Fdocs\u002Fuser\u002Fintroduction\u002F#creating-a-node-red-instance",{"edge":816,"hub":816,"fleet":816},{"id":3186,"title":3187,"description":3188,"docsLink":3189,"changelog":3190,"tiers":3193},"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",[3191],{"url":3192,"release":3036},"\u002Fchangelog\u002F2026\u002F02\u002Fdevice-agent-nodejs-options\u002F",{"edge":816,"hub":3046,"fleet":816},{"id":3195,"title":3196,"description":3197,"docsLink":3198,"tiers":3199},"custom-hostnames","Custom Hostnames","Access your Node-RED application via your own domain name.","\u002Fdocs\u002Fuser\u002Fcustom-hostnames\u002F",{"edge":3046,"hub":816,"fleet":3046},{"id":3201,"title":3202,"description":3203,"docsLink":3204,"tiers":3205},"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":816,"hub":3046,"fleet":816},{"id":3207,"title":3208,"description":3209,"docsLink":3210,"showOnPricing":3046,"tiers":3211},"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":816,"hub":816,"fleet":816},{"id":3213,"title":3214,"description":3215,"docsLink":3216,"tiers":3217},"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":816,"hub":816,"fleet":816},{"id":3219,"title":3220,"description":3221,"docsLink":3222,"tiers":3223},"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":3046,"hub":816,"fleet":3046},{"id":3225,"title":3226,"description":3227,"docsLink":3222,"subfeature":816,"showOnPricing":3046,"tiers":3228},"git-integration-github","GitHub","Push and pull snapshots to GitHub repositories through DevOps Pipeline Git Stages.",{"edge":3046,"hub":816,"fleet":3046},{"id":3230,"title":3231,"description":3232,"docsLink":3222,"changelog":3233,"subfeature":816,"showOnPricing":3046,"tiers":3236},"git-integration-azure","Azure DevOps","Push and pull snapshots to Azure DevOps repositories through DevOps Pipeline Git Stages.",[3234],{"url":3235,"release":3158},"\u002Fchangelog\u002F2026\u002F03\u002Fazure-dev-ops-gitops\u002F",{"edge":3046,"hub":816,"fleet":3046},{"id":3238,"title":3239,"features":3240},"operate-maintain","Operate & Maintain",[3241,3247,3253,3258,3266,3270,3274,3279,3285,3291,3296,3302,3306,3310],{"id":3242,"title":3243,"description":3244,"docsLink":3245,"tiers":3246},"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":816,"hub":816,"fleet":816},{"id":3248,"title":3249,"description":3250,"docsLink":3251,"subfeature":816,"showOnPricing":3046,"tiers":3252},"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":816,"hub":816,"fleet":816},{"id":3254,"title":3255,"description":3256,"docsLink":3251,"subfeature":816,"showOnPricing":3046,"tiers":3257},"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":816,"hub":816,"fleet":816},{"id":3259,"title":3260,"description":3261,"changelog":3262,"subfeature":816,"showOnPricing":3046,"tiers":3265},"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.",[3263],{"url":3264,"release":3158},"\u002Fchangelog\u002F2026\u002F04\u002Fsnapshot-diff-viewer\u002F",{"edge":816,"hub":816,"fleet":816},{"id":3267,"title":3268,"subfeature":816,"showOnPricing":3046,"tiers":3269},"version-history-timeline","Version History Timeline",{"edge":816,"hub":816,"fleet":816},{"id":3271,"title":3272,"tiers":3273},"unlimited-workflow-executions","Unlimited Workflow Executions",{"edge":816,"hub":816,"fleet":816},{"id":3275,"title":3276,"description":3277,"tiers":3278},"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":816,"hub":3046,"fleet":816},{"id":3280,"title":3281,"description":3282,"docsLink":3283,"tiers":3284},"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":816,"hub":3046,"fleet":816},{"id":3286,"title":3287,"description":3288,"docsLink":3289,"tiers":3290},"high-availability","High Availability","Leverage horizontal scaling for reliable and scalable processing of your data through Node-RED.","\u002Fdocs\u002Fuser\u002Fhigh-availability\u002F",{"edge":3046,"hub":816,"fleet":3046},{"id":3292,"title":3293,"description":3294,"tiers":3295},"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":816,"hub":816,"fleet":816},{"id":3297,"title":3298,"description":3299,"docsLink":3300,"subfeature":816,"showOnPricing":3046,"tiers":3301},"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":816,"hub":816,"fleet":816},{"id":3303,"title":3304,"subfeature":816,"showOnPricing":3046,"tiers":3305},"email-alerts","Email Alerts",{"edge":816,"hub":816,"fleet":816},{"id":3307,"title":3308,"showOnPricing":3046,"tiers":3309},"api-debug-length-limit","API\u002FDebug Length Limit",{"edge":816,"hub":816,"fleet":816},{"id":3311,"title":3312,"tiers":3313},"protected-instances","Protected Instances",{"edge":3046,"hub":816,"fleet":3046},{"id":3315,"title":3316,"features":3317},"govern-secure","Govern and Secure",[3318,3327,3333,3339,3344,3350,3356,3362,3370,3376,3382,3388],{"id":3319,"title":3320,"description":3321,"docsLink":3322,"changelog":3323,"tiers":3326},"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",[3324],{"url":3325,"release":3099},"\u002Fchangelog\u002F2026\u002F07\u002Fapplication-sso-groups\u002F",{"edge":816,"hub":816,"fleet":816},{"id":3328,"title":3329,"description":3330,"docsLink":3331,"tiers":3332},"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":816,"hub":816,"fleet":816},{"id":3334,"title":3335,"description":3336,"docsLink":3337,"tiers":3338},"certified-nodes-it","Certified Nodes - IT","IT certified node bundle includes: Redis, MQTT, HTTP Request, AI nodes (Gemini, Claude, ChatGPT, Ollama), MCP Server","\u002Fblog\u002F2025\u002F07\u002Fcertified-nodes-v2\u002F",{"edge":3046,"hub":816,"fleet":816},{"id":3340,"title":3341,"description":3342,"tiers":3343},"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":816,"hub":3046,"fleet":3046},{"id":3345,"title":3346,"description":3347,"docsLink":3348,"tiers":3349},"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":816,"hub":816,"fleet":816},{"id":3351,"title":3352,"description":3353,"docsLink":3354,"tiers":3355},"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":816,"hub":816,"fleet":816},{"id":3357,"title":3358,"description":3359,"docsLink":3360,"subfeature":816,"showOnPricing":3046,"tiers":3361},"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":816,"hub":816,"fleet":816},{"id":3363,"title":3364,"description":3365,"changelog":3366,"subfeature":816,"showOnPricing":3046,"tiers":3369},"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.",[3367],{"url":3368,"release":3099},"\u002Fchangelog\u002F2026\u002F07\u002Fscoped-pats\u002F",{"edge":816,"hub":816,"fleet":816},{"id":3371,"title":3372,"description":3373,"docsLink":3374,"showOnPricing":3046,"tiers":3375},"team-members","Team Members","Invite multiple team members to collaborate on the same Node-RED flows.","\u002Fdocs\u002Fuser\u002Fteam\u002F#teams",{"edge":816,"hub":816,"fleet":816},{"id":3377,"title":3378,"description":3379,"docsLink":3380,"showOnPricing":3046,"tiers":3381},"endpoint-security","Endpoint Security","Secure HTTP endpoints for hosted Node-RED instances using FlowFuse credentials.","\u002Fdocs\u002Fuser\u002Finstance-settings\u002F#security",{"edge":816,"hub":816,"fleet":816},{"id":3383,"title":3384,"description":3385,"docsLink":3386,"tiers":3387},"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.5\u002F",{"edge":3046,"hub":816,"fleet":3046},{"id":3389,"title":3390,"description":3391,"tiers":3392},"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":3046,"hub":816,"fleet":3046},{"id":3394,"title":3395,"features":3396},"support","Support",[3397,3402,3406],{"id":3398,"title":3399,"docsLink":3400,"tiers":3401},"installation-support","Installation Support","\u002Fdocs\u002Finstall\u002Fintroduction\u002F#do-you-need-help-installation-service",{"edge":816,"hub":816,"fleet":816},{"id":3403,"title":3404,"showOnPricing":3046,"tiers":3405},"live-chat-support","Live Chat Support",{"edge":816,"hub":816,"fleet":816},{"id":3407,"title":3408,"docsLink":3409,"tiers":3410},"enterprise-support","Enterprise Support","\u002Fdocs\u002Fpremium-support\u002F",{"edge":816,"hub":816,"fleet":816},"feature-catalog","0AnkhTIPCECCwP9NmbTWP5HvRYx4FTSao4lG93-HaWM",[3414,3417,3420,3423,3426,3429,3431,3434,3437,3440,3443,3445,3448,3451,3454,3457,3460,3463,3466,3469,3472,3475,3478,3481,3484,3487,3490,3493,3496,3499,3502,3505,3508,3511,3514,3517,3520,3523,3526,3529,3532,3535,3538,3541,3544,3547,3550,3553,3556,3558,3561,3564,3567,3570,3573,3576,3579,3581,3584,3587,3590,3593,3596,3598,3601,3604,3607,3610,3613,3616,3619,3622,3625,3628,3630,3633,3636,3639,3642,3645,3648,3651,3654,3657,3660,3663,3666,3669,3672,3674,3677,3680,3683,3686,3689,3692,3695,3698,3701,3704,3707,3710,3713,3716,3719,3722,3725,3728,3730,3733,3736,3739,3742,3745,3748,3751,3753,3756,3759,3762,3765,3768,3771,3774,3777,3780,3783,3786,3789,3792,3795,3798,3801,3804,3807,3810,3813,3816,3819,3822,3825,3828,3831,3834,3837,3840,3843,3846,3849,3852,3855,3858,3861,3864,3867,3870,3873,3876,3879,3882,3885,3888,3891,3894,3897,3900,3903,3905,3908,3911,3914,3917,3920,3923,3926,3929,3932,3935,3938,3941,3944],{"path":3415,"title":3416},"\u002Fchangelog\u002F2023\u002F09\u002Fcustom-node-support","Custom Node Support",{"path":3418,"title":3419},"\u002Fchangelog\u002F2023\u002F09\u002Fdevops-actions","DevOps Pipeline with action selection",{"path":3421,"title":3422},"\u002Fchangelog\u002F2023\u002F09\u002Fintroduction-enterprise-tier","Introducing the Enterprise Tier",{"path":3424,"title":3425},"\u002Fchangelog\u002F2023\u002F09\u002Fpipeline-api","API Endpoint for DevOps Pipeline",{"path":3427,"title":3428},"\u002Fchangelog\u002F2023\u002F09\u002Fsnapshots-devices","Usability improvements to Device Management",{"path":3430,"title":3139},"\u002Fchangelog\u002F2023\u002F10\u002Fblueprints",{"path":3432,"title":3433},"\u002Fchangelog\u002F2023\u002F10\u002Fcertified-nodes","Certified Nodes",{"path":3435,"title":3436},"\u002Fchangelog\u002F2023\u002F10\u002Fdevice-snapshot-selection","Enhanced Snapshot Selection",{"path":3438,"title":3439},"\u002Fchangelog\u002F2023\u002F10\u002Fpath-bug-fix","Device Agent path bug fix",{"path":3441,"title":3442},"\u002Fchangelog\u002F2023\u002F10\u002Fresource-alerts","Resource Monitoring in Audit Log",{"path":3444,"title":3329},"\u002Fchangelog\u002F2023\u002F11\u002F2fa",{"path":3446,"title":3447},"\u002Fchangelog\u002F2023\u002F11\u002Fdefault-editor","Device Editor enabled by default",{"path":3449,"title":3450},"\u002Fchangelog\u002F2023\u002F11\u002Fdevices-in-pipelines","Devices in DevOps Pipelines",{"path":3452,"title":3453},"\u002Fchangelog\u002F2023\u002F11\u002Fproject-nodes-devices","Project Nodes for Devices",{"path":3455,"title":3456},"\u002Fchangelog\u002F2023\u002F12\u002Fbilling","No Credit Card required for billing",{"path":3458,"title":3459},"\u002Fchangelog\u002F2023\u002F12\u002Fblueprint-selection","Blueprint Selection Update",{"path":3461,"title":3462},"\u002Fchangelog\u002F2023\u002F12\u002Fdevice-groups","Device Groups",{"path":3464,"title":3465},"\u002Fchangelog\u002F2023\u002F12\u002Femail-alerting-node-red-crash","Email Alerts for Audit Log Events",{"path":3467,"title":3468},"\u002Fchangelog\u002F2023\u002F12\u002Fnode-red-updated","Node-RED 3.1.3 now available",{"path":3470,"title":3471},"\u002Fchangelog\u002F2024\u002F01\u002Fdevice-audit-log","Introducing the Device Auditlog Feature",{"path":3473,"title":3474},"\u002Fchangelog\u002F2024\u002F01\u002Fdevice-groups-snapshot","Device Groups - Automatic snapshot assignment",{"path":3476,"title":3477},"\u002Fchangelog\u002F2024\u002F01\u002Ffleet-mode","Renaming \"Default Device Mode\" to \"Fleet Mode\"",{"path":3479,"title":3480},"\u002Fchangelog\u002F2024\u002F01\u002Fhelm-v2","Helm Chart v2.0",{"path":3482,"title":3483},"\u002Fchangelog\u002F2024\u002F01\u002Fnew-blueprints","New Blueprints added",{"path":3485,"title":3486},"\u002Fchangelog\u002F2024\u002F01\u002Fsecurity-updates","Security Updates",{"path":3488,"title":3489},"\u002Fchangelog\u002F2024\u002F01\u002Fsso-team-membership","Managing Team Membership via SSO",{"path":3491,"title":3492},"\u002Fchangelog\u002F2024\u002F01\u002Fstreamlined-device-assignment","Streamlined Device assignment",{"path":3494,"title":3495},"\u002Fchangelog\u002F2024\u002F02\u002Fdevice-auto-snapshot","Device Auto Snapshots",{"path":3497,"title":3498},"\u002Fchangelog\u002F2024\u002F02\u002Fdevice-instance-audit-logs","Device Instance Audit Logging",{"path":3500,"title":3501},"\u002Fchangelog\u002F2024\u002F02\u002Fdevice-onboarding-improvements","Device Onboarding Improvements",{"path":3503,"title":3504},"\u002Fchangelog\u002F2024\u002F02\u002Fdevice-pricing-change","Pricing change for Devices",{"path":3506,"title":3507},"\u002Fchangelog\u002F2024\u002F02\u002Finstance-auto-snapshots","Instance Auto Snapshots",{"path":3509,"title":3510},"\u002Fchangelog\u002F2024\u002F02\u002Fpostgresql-upgrade","PostgreSQL Version update",{"path":3512,"title":3513},"\u002Fchangelog\u002F2024\u002F03\u002Fbearer-token-authentication","Bearer Token Authentication for Node-RED Instances",{"path":3515,"title":3516},"\u002Fchangelog\u002F2024\u002F03\u002Finstance-protection-mode","Instance Protection Mode",{"path":3518,"title":3519},"\u002Fchangelog\u002F2024\u002F03\u002Flimits-debug-payload","Configure HTTP Payload and Debug Message size",{"path":3521,"title":3522},"\u002Fchangelog\u002F2024\u002F03\u002Frestart-devices-remotly","Remote Device Restart",{"path":3524,"title":3525},"\u002Fchangelog\u002F2024\u002F04\u002Fcustom-nodes-on-devices","Custom Nodes Support on Devices",{"path":3527,"title":3528},"\u002Fchangelog\u002F2024\u002F04\u002Fdevice-auto-snapshot","Direct Dashboard Access",{"path":3530,"title":3531},"\u002Fchangelog\u002F2024\u002F04\u002Fimproving-device-groups","Improving Device Groups",{"path":3533,"title":3534},"\u002Fchangelog\u002F2024\u002F04\u002Fpricing-change","Pricing change Enterprise & Teams Tier",{"path":3536,"title":3537},"\u002Fchangelog\u002F2024\u002F04\u002Ftougher-rate-limiting","Tougher Rate Limiting on Public Routes",{"path":3539,"title":3540},"\u002Fchangelog\u002F2024\u002F05\u002Finstance-healthcheck","Customizing instance health-check settings",{"path":3542,"title":3543},"\u002Fchangelog\u002F2024\u002F05\u002Flibrary-blueprints","Blueprints added to Library",{"path":3545,"title":3546},"\u002Fchangelog\u002F2024\u002F05\u002Flibrary-flowviewer","Team Library - Flow Viewer",{"path":3548,"title":3549},"\u002Fchangelog\u002F2024\u002F05\u002Fmanaging-node-red-version-on-devices","Managing Node-RED versions on Devices",{"path":3551,"title":3552},"\u002Fchangelog\u002F2024\u002F05\u002Fsnapshot-improvements","Snapshot Improvements",{"path":3554,"title":3555},"\u002Fchangelog\u002F2024\u002F05\u002Fsnapshot-improvements-pt3","Snapshot Upload",{"path":3557,"title":3555},"\u002Fchangelog\u002F2024\u002F05\u002Fsnapshot-upload",{"path":3559,"title":3560},"\u002Fchangelog\u002F2024\u002F06\u002Fdevice-agent-proxy-support","Running the Device Agent behind an HTTP proxy",{"path":3562,"title":3563},"\u002Fchangelog\u002F2024\u002F06\u002Flibrary-blueprints","Custom hostnames for your instances",{"path":3565,"title":3566},"\u002Fchangelog\u002F2024\u002F06\u002Fmultiline-env-vars","Multi-line Environment Variables",{"path":3568,"title":3569},"\u002Fchangelog\u002F2024\u002F06\u002Fsnapshot-flow-compare","Compare Snapshots flows",{"path":3571,"title":3572},"\u002Fchangelog\u002F2024\u002F07\u002Fapplications-search","Applications Search",{"path":3574,"title":3575},"\u002Fchangelog\u002F2024\u002F07\u002Fdevice-group-clear-snapshot","Device Groups Snapshots",{"path":3577,"title":3578},"\u002Fchangelog\u002F2024\u002F07\u002Fdevice-management-bulk-delete","Managing devices",{"path":3580,"title":3578},"\u002Fchangelog\u002F2024\u002F07\u002Fdevice-management-bulk-move",{"path":3582,"title":3583},"\u002Fchangelog\u002F2024\u002F07\u002Fedit-snapshots","Edit Snapshots",{"path":3585,"title":3586},"\u002Fchangelog\u002F2024\u002F07\u002Fflowfuse-assistant","The FlowFuse Expert",{"path":3588,"title":3589},"\u002Fchangelog\u002F2024\u002F07\u002Fflowfuse-assistant-json","FlowFuse Expert Writes JSON",{"path":3591,"title":3592},"\u002Fchangelog\u002F2024\u002F07\u002Fimmersive-editor","Immersive Editor Experience",{"path":3594,"title":3595},"\u002Fchangelog\u002F2024\u002F07\u002Fnotifications-inbox","Notifications Inbox",{"path":3597,"title":3595},"\u002Fchangelog\u002F2024\u002F07\u002Fnotifications-update",{"path":3599,"title":3600},"\u002Fchangelog\u002F2024\u002F07\u002Fpersistent-storage","Persistent Storage on FlowFuse Cloud",{"path":3602,"title":3603},"\u002Fchangelog\u002F2024\u002F07\u002Fsso","Single Sign On Updates",{"path":3605,"title":3606},"\u002Fchangelog\u002F2024\u002F08\u002Fbill-of-materials","Bill of Materials",{"path":3608,"title":3609},"\u002Fchangelog\u002F2024\u002F08\u002Fenterprise-license-update","Enforcing Enterprise Restrictions",{"path":3611,"title":3612},"\u002Fchangelog\u002F2024\u002F08\u002Fldap-sso-groups","LDAP Single Sign On Updates",{"path":3614,"title":3615},"\u002Fchangelog\u002F2024\u002F08\u002Fstatic-file-service-navigation-visibility","Static File Service Navigation and Visibility",{"path":3617,"title":3618},"\u002Fchangelog\u002F2024\u002F10\u002Fdevice-group-env-vars","Environment Variables for your Device Groups",{"path":3620,"title":3621},"\u002Fchangelog\u002F2024\u002F10\u002Fmqtt-service","MQTT Broker Service",{"path":3623,"title":3624},"\u002Fchangelog\u002F2024\u002F10\u002Fnotifications-bulk-actions","Managing Notifications",{"path":3626,"title":3627},"\u002Fchangelog\u002F2024\u002F10\u002Fsnapshot-download-upload-options","Snapshot Upload and Download Improvements",{"path":3629,"title":3268},"\u002Fchangelog\u002F2024\u002F10\u002Fversion-history-timeline",{"path":3631,"title":3632},"\u002Fchangelog\u002F2024\u002F11\u002Faudit-log-hierarchy","Audit logs show hierarchical events",{"path":3634,"title":3635},"\u002Fchangelog\u002F2024\u002F11\u002Fdevice-agent-release","Device Agent 3.0 released",{"path":3637,"title":3638},"\u002Fchangelog\u002F2024\u002F11\u002Fmqtt-topic-hierarchy","MQTT Topic Hierarchy view",{"path":3640,"title":3641},"\u002Fchangelog\u002F2024\u002F11\u002Fteam-search","Team-wide search",{"path":3643,"title":3644},"\u002Fchangelog\u002F2024\u002F12\u002Fdashboad-iframe","Allow Dashboards to be embedded in iFrames",{"path":3646,"title":3647},"\u002Fchangelog\u002F2024\u002F12\u002Fdevice-editor-cache","Device Editor Access Speed Up",{"path":3649,"title":3650},"\u002Fchangelog\u002F2024\u002F12\u002Fteam-bom-timeline","Team BOM and Pipeline Views",{"path":3652,"title":3653},"\u002Fchangelog\u002F2025\u002F01\u002Ffree-tier-onboarding","New Onboarding Tour for Free Tier Users",{"path":3655,"title":3656},"\u002Fchangelog\u002F2025\u002F01\u002Fhidden-env-vars","Hidden Environment Variables",{"path":3658,"title":3659},"\u002Fchangelog\u002F2025\u002F01\u002Fimproved-diagnostics","Improved Diagnostics",{"path":3661,"title":3662},"\u002Fchangelog\u002F2025\u002F01\u002Fteam-level-groups","Team level view of Groups",{"path":3664,"title":3665},"\u002Fchangelog\u002F2025\u002F02\u002Fadditional-device-version-history-events","New Remote Instances Version History Events",{"path":3667,"title":3668},"\u002Fchangelog\u002F2025\u002F02\u002Fbroker-error-feedback","Improved Broker Connection Feedback",{"path":3670,"title":3671},"\u002Fchangelog\u002F2025\u002F02\u002Fdevice-agent-updates","FlowFuse User Authentication on Remote Instances",{"path":3673,"title":3268},"\u002Fchangelog\u002F2025\u002F02\u002Fdevice-version-history-timeline",{"path":3675,"title":3676},"\u002Fchangelog\u002F2025\u002F02\u002Fexternal-brokers","External MQTT Brokers",{"path":3678,"title":3679},"\u002Fchangelog\u002F2025\u002F02\u002Fmqtt-schema-suggestions","MQTT Smart Schema Suggestions",{"path":3681,"title":3682},"\u002Fchangelog\u002F2025\u002F02\u002Fresend-and-extend-team-invitation-expiration","Re-send Team Invitations",{"path":3684,"title":3685},"\u002Fchangelog\u002F2025\u002F02\u002Fschema-docs","Personalized Schema Documentation",{"path":3687,"title":3688},"\u002Fchangelog\u002F2025\u002F02\u002Ftopic-hierarchy-search","Search & Filter for Topic Hierarchy List",{"path":3690,"title":3691},"\u002Fchangelog\u002F2025\u002F03\u002Fcontainer-tags","Changes to tags for flowfuse\u002Fnode-red",{"path":3693,"title":3694},"\u002Fchangelog\u002F2025\u002F03\u002Fdevice-groups","Multiple Device Groups in a pipeline",{"path":3696,"title":3697},"\u002Fchangelog\u002F2025\u002F03\u002Fdevice-local-login","Local Login for Remote Instances",{"path":3699,"title":3700},"\u002Fchangelog\u002F2025\u002F03\u002Ffree-tier","Free Tier now more accessible to all",{"path":3702,"title":3703},"\u002Fchangelog\u002F2025\u002F03\u002Fresource-notifications","Resource Alerts",{"path":3705,"title":3706},"\u002Fchangelog\u002F2025\u002F03\u002Fsnapshot-filter","Filtering Snapshots",{"path":3708,"title":3709},"\u002Fchangelog\u002F2025\u002F03\u002Fteam-npm-registry","NPM Package Hosting",{"path":3711,"title":3712},"\u002Fchangelog\u002F2025\u002F03\u002Ftopic-deletion","MQTT Topic Management",{"path":3714,"title":3715},"\u002Fchangelog\u002F2025\u002F04\u002Fdevice-provisioning","Remote Instance Provisioning",{"path":3717,"title":3718},"\u002Fchangelog\u002F2025\u002F04\u002Fgit-integration","Git Integration with Pipelines",{"path":3720,"title":3721},"\u002Fchangelog\u002F2025\u002F04\u002Finstance-log-browsing","Better Node-RED log handling",{"path":3723,"title":3724},"\u002Fchangelog\u002F2025\u002F05\u002Fimport-node-red-flows","Import Node-RED Flows During Remote Instance Setup",{"path":3726,"title":3727},"\u002Fchangelog\u002F2025\u002F06\u002Fflowfuse-assistant","FlowFuse Expert just got smarter",{"path":3729,"title":3727},"\u002Fchangelog\u002F2025\u002F06\u002Fflowfuse-assistant-2",{"path":3731,"title":3732},"\u002Fchangelog\u002F2025\u002F06\u002Fgit-integration","Pulling snapshots from Git with Pipelines",{"path":3734,"title":3735},"\u002Fchangelog\u002F2025\u002F06\u002Finstance-performance-memory","Memory Metrics in Instance Performance View",{"path":3737,"title":3738},"\u002Fchangelog\u002F2025\u002F06\u002Fnew-home-page","Introducing the New Home Page Experience",{"path":3740,"title":3741},"\u002Fchangelog\u002F2025\u002F06\u002Fteam-performance","Team Performance Feature",{"path":3743,"title":3744},"\u002Fchangelog\u002F2025\u002F06\u002Fteam-performance-view","Instance Performance View",{"path":3746,"title":3747},"\u002Fchangelog\u002F2025\u002F06\u002Fui-refresh","Navigation UI Refresh",{"path":3749,"title":3750},"\u002Fchangelog\u002F2025\u002F07\u002Fbrowse-node-red-flows","Browse for Node-RED Flows During Remote Instance Setup",{"path":3752,"title":3093},"\u002Fchangelog\u002F2025\u002F07\u002Fflowfuse-tables",{"path":3754,"title":3755},"\u002Fchangelog\u002F2025\u002F07\u002Fimport-blueprints","Import blueprints directly into your existing instances",{"path":3757,"title":3758},"\u002Fchangelog\u002F2025\u002F07\u002Fsimplified-applications-overview","Simplified Applications Page with Summary Tiles",{"path":3760,"title":3761},"\u002Fchangelog\u002F2025\u002F07\u002Fsmart-suggestions","Smart Suggestions",{"path":3763,"title":3764},"\u002Fchangelog\u002F2025\u002F07\u002Fteam-to-pro-plan-rename","Team Plan Renamed to Pro Plan",{"path":3766,"title":3767},"\u002Fchangelog\u002F2025\u002F08\u002Fai-generated-snapshot-descriptions-hosted","Generate snapshot descriptions with AI",{"path":3769,"title":3770},"\u002Fchangelog\u002F2025\u002F08\u002Fai-generated-snapshot-descriptions-remote","AI Snapshot Descriptions Now Work with Remote Instances",{"path":3772,"title":3773},"\u002Fchangelog\u002F2025\u002F08\u002Fdevice-performance","FlowFuse Remote Instance Performance Data",{"path":3775,"title":3776},"\u002Fchangelog\u002F2025\u002F08\u002Fdirect-sso","Direct SSO Login",{"path":3778,"title":3779},"\u002Fchangelog\u002F2025\u002F08\u002Fflowfuse-assistant","FlowFuse Expert documents your flows",{"path":3781,"title":3782},"\u002Fchangelog\u002F2025\u002F08\u002Fflowfuse-mqtt","FlowFuse MQTT",{"path":3784,"title":3785},"\u002Fchangelog\u002F2025\u002F08\u002Fhttp-cors","Configure HTTP CORS",{"path":3787,"title":3788},"\u002Fchangelog\u002F2025\u002F08\u002Fsubflow-export","Export SubFlow as Node-RED module",{"path":3790,"title":3791},"\u002Fchangelog\u002F2025\u002F08\u002Ftables-assistant","FlowFuse Tables with a little help from the Assistant",{"path":3793,"title":3794},"\u002Fchangelog\u002F2025\u002F09\u002Fexpose-saml-groups-to-dashboard","Allow SSO groups to be shared with the Node-RED Dashboard",{"path":3796,"title":3797},"\u002Fchangelog\u002F2025\u002F09\u002Finline-assist","FlowFuse Expert can help you write code",{"path":3799,"title":3800},"\u002Fchangelog\u002F2025\u002F09\u002Fretiring-flowforge-device-agent","No more @flowforge\u002Fflowforge-device-agent releases",{"path":3802,"title":3803},"\u002Fchangelog\u002F2025\u002F09\u002Frevised-instance-snapshot-ui","Streamlined Snapshot Management",{"path":3805,"title":3806},"\u002Fchangelog\u002F2025\u002F09\u002Fteam-broker-async-api","Capture Async API data from FlowFuse Team Broker",{"path":3808,"title":3809},"\u002Fchangelog\u002F2025\u002F10\u002Fapplication-level-rbac","Application-level access control for Enterprise teams",{"path":3811,"title":3812},"\u002Fchangelog\u002F2025\u002F10\u002Fbulk-device-group-assignment","Easier Access to Bulk Device Group Management",{"path":3814,"title":3815},"\u002Fchangelog\u002F2025\u002F10\u002Fduplicate-instances-across-applications","Duplicate Instances Across Different Applications",{"path":3817,"title":3818},"\u002Fchangelog\u002F2025\u002F10\u002Fimport-flows-on-instance-creation","Import flows during instance creation",{"path":3820,"title":3821},"\u002Fchangelog\u002F2025\u002F10\u002Fmcp-nodes","FlowFuse MCP Server Nodes",{"path":3823,"title":3824},"\u002Fchangelog\u002F2025\u002F10\u002Fonnx-nodes","FlowFuse AI Nodes",{"path":3826,"title":3827},"\u002Fchangelog\u002F2025\u002F10\u002Fsettings-page-device-group-management","Device Group Management from Settings Page",{"path":3829,"title":3830},"\u002Fchangelog\u002F2025\u002F11\u002Fff-expert-update","FlowFuse Expert Update",{"path":3832,"title":3833},"\u002Fchangelog\u002F2025\u002F11\u002Fminimum-nodejs-version","Node.js v20 Minimum Version Requirement",{"path":3835,"title":3836},"\u002Fchangelog\u002F2025\u002F11\u002Fsso-session","SSO control over Session life",{"path":3838,"title":3839},"\u002Fchangelog\u002F2025\u002F12\u002Fff-expert-mcp-insights","FlowFuse Expert: Now with MCP-Powered Insights",{"path":3841,"title":3842},"\u002Fchangelog\u002F2025\u002F12\u002Fscheduled-maintenance","Scheduled Maintenance Mode",{"path":3844,"title":3845},"\u002Fchangelog\u002F2026\u002F01\u002Fdevice-agent-containers","Device Agent Docker Containers updated",{"path":3847,"title":3848},"\u002Fchangelog\u002F2026\u002F01\u002Fff-expert-manage-palette","FlowFuse Expert: Enhanced Palette Integration",{"path":3850,"title":3851},"\u002Fchangelog\u002F2026\u002F01\u002Fff-expert-nr-actions","FlowFuse Expert: Integration with Node-RED",{"path":3853,"title":3854},"\u002Fchangelog\u002F2026\u002F01\u002Fff-expert-palette-queries","FlowFuse Expert: Palette Queries",{"path":3856,"title":3857},"\u002Fchangelog\u002F2026\u002F01\u002Fff-expert-select-flows","FlowFuse Expert: Ask about your flows",{"path":3859,"title":3860},"\u002Fchangelog\u002F2026\u002F01\u002Fmcp-rbacs","FlowFuse Expert: MCP-Powered Insights with RBACs",{"path":3862,"title":3863},"\u002Fchangelog\u002F2026\u002F01\u002Fmcp-security","FlowFuse Expert: MCP-Powered Insights",{"path":3865,"title":3866},"\u002Fchangelog\u002F2026\u002F02\u002Fdevice-agent-nodejs-options","Set Node.js Options for Remote Instances",{"path":3868,"title":3869},"\u002Fchangelog\u002F2026\u002F02\u002Fff-expert-debug-log-context","FlowFuse Expert: Helping you make sense of your debug log",{"path":3871,"title":3872},"\u002Fchangelog\u002F2026\u002F02\u002Fff-expert-update-banner","FlowFuse Expert: Never Miss an Update",{"path":3874,"title":3875},"\u002Fchangelog\u002F2026\u002F02\u002Fha-instance-rolling-restart","HA Hosted Instance Rolling Restart",{"path":3877,"title":3878},"\u002Fchangelog\u002F2026\u002F02\u002Fremote-instances-immersive-editor","Immersive Mode for Remote Instances",{"path":3880,"title":3881},"\u002Fchangelog\u002F2026\u002F02\u002Frestoring-snapshots-to-remote-instances","Restoring snapshots to developer-mode Remote Instances",{"path":3883,"title":3884},"\u002Fchangelog\u002F2026\u002F03\u002Fazure-dev-ops-gitops","Azure DevOps Pipeline support",{"path":3886,"title":3887},"\u002Fchangelog\u002F2026\u002F03\u002Fdeveloper-mode-in-immersive-editor","Developer Mode Now Accessible from the Immersive Editor",{"path":3889,"title":3890},"\u002Fchangelog\u002F2026\u002F03\u002Fembedded-editor-tab-title","Embedded Editor Now Shows Active Tab",{"path":3892,"title":3893},"\u002Fchangelog\u002F2026\u002F03\u002Fmarch-scheduled-maintenance","Updated: Upcoming Scheduled Server Maintenance on March 28th, 2026",{"path":3895,"title":3896},"\u002Fchangelog\u002F2026\u002F03\u002Fsnapshot-detail-modal-immersive-editor","View Snapshot Details in the Immersive Editor",{"path":3898,"title":3899},"\u002Fchangelog\u002F2026\u002F04\u002Fexpert-action-links","FlowFuse expert action links",{"path":3901,"title":3902},"\u002Fchangelog\u002F2026\u002F04\u002Fhosted-instance-url-env-var","Hosted Instances know their own URL",{"path":3904,"title":3162},"\u002Fchangelog\u002F2026\u002F04\u002Fimmersive-editor-drawer",{"path":3906,"title":3907},"\u002Fchangelog\u002F2026\u002F04\u002Fsnapshot-diff-viewer","Richer snapshot comparison view",{"path":3909,"title":3910},"\u002Fchangelog\u002F2026\u002F05\u002Fai-opt-out","AI Feature Opt-Out for Teams",{"path":3912,"title":3913},"\u002Fchangelog\u002F2026\u002F05\u002Fexpert-application-building","FlowFuse Expert Builds Your Application",{"path":3915,"title":3916},"\u002Fchangelog\u002F2026\u002F05\u002Fsingle-sso-provider","Single SSO provider for all users",{"path":3918,"title":3919},"\u002Fchangelog\u002F2026\u002F06\u002Fdark-mode","Dark Mode",{"path":3921,"title":3922},"\u002Fchangelog\u002F2026\u002F06\u002Fdevice-agent-v4-released","Device Agent v4 released",{"path":3924,"title":3925},"\u002Fchangelog\u002F2026\u002F06\u002Fgeneric-git-server-support","Connect Pipelines to Any Git Server",{"path":3927,"title":3928},"\u002Fchangelog\u002F2026\u002F06\u002Fjuly-scheduled-maintenance","Updated: Upcoming Scheduled Server Maintenance on July 11th, 2026",{"path":3930,"title":3931},"\u002Fchangelog\u002F2026\u002F07\u002Fapplication-sso-groups","Application Roles from SSO Groups",{"path":3933,"title":3934},"\u002Fchangelog\u002F2026\u002F07\u002Fdevice-agent-onboarding","Getting started with FlowFuse straight from the terminal",{"path":3936,"title":3937},"\u002Fchangelog\u002F2026\u002F07\u002Fexpert-enhancements","FlowFuse Expert Enhancements",{"path":3939,"title":3940},"\u002Fchangelog\u002F2026\u002F07\u002Fexpert-tables-automation","FlowFuse Expert Can Now Work With Your Tables",{"path":3942,"title":3943},"\u002Fchangelog\u002F2026\u002F07\u002Fscoped-pats","Team Scoped Personal Access Tokens",{"path":3945,"title":3946},"\u002Fchangelog\u002F2026\u002F07\u002Fteam-and-application-dashboards","A Dedicated Home for Your Dashboards",[],1786105899855]