[{"data":1,"prerenderedAt":10295},["ShallowReactive",2],{"docs-\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Fopc-ua\u002F":3,"featureCatalog":8844,"docs-nav":9249},{"id":4,"title":5,"body":6,"description":16,"editUrl":8833,"extension":8834,"layout":8835,"meta":8836,"metaTitle":5,"navGroup":8835,"navGroupOrder":8835,"navOrder":2510,"navTitle":8838,"navigation":440,"originalPath":8835,"path":8839,"redirect":8835,"seo":8840,"stem":8841,"updated":8842,"version":8835,"__hash__":8843},"docs\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Fopc-ua.md","Building Secure OPC-UA Server in Node-RED.",{"type":7,"value":8,"toc":8817},"minimark",[9,13,17,26,31,34,38,41,48,70,83,176,179,202,208,218,221,225,243,246,249,256,271,290,301,307,311,317,324,335,353,363,381,388,398,405,415,422,428,434,450,453,457,466,472,496,522,531,534,541,547,561,564,570,585,588,592,598,607,618,636,639,645,650,656,662,674,677,694,699,702,909,915,1084,1088,1091,1098,1303,1306,1556,1560,1563,1569,1578,1810,1813,3658,3662,3665,3814,3817,4377,4380,4384,4387,4393,4396,4405,4412,4415,4421,4440,4444,4447,4457,4471,4481,4488,4502,4505,4519,4529,4539,4542,4545,4556,4562,4585,4589,4592,4599,4609,4616,4631,4642,4652,4660,4663,4671,4678,4692,4699,4706,4709,4716,4722,4749,4752,4755,4761,4767,4770,4779,4782,4789,4792,8813],[10,11,5],"h1",{"id":12},"building-secure-opc-ua-server-in-node-red",[14,15,16],"p",{},"OPC-UA (OPC Unified Architecture) is a communication protocol designed for industrial automation. It enables seamless data exchange and interoperability between various devices, systems, and software applications in the industrial domain. OPC-UA offers secure and reliable communication, making it a preferred choice for building robust industrial solutions. In this document, we will delve into the creation of a fully custom secure OPC-UA Server for PLCs in Node-RED.",[14,18,19,20,25],{},"If you're not familiar with OPC-UA, you can learn more about it ",[21,22,24],"a",{"href":23},"\u002Fblog\u002F2023\u002F07\u002Fhow-to-deploy-a-basic-opc-ua-server-in-node-red\u002F","here",".",[27,28,30],"h2",{"id":29},"introduction","Introduction",[14,32,33],{},"While it's typical to find PLCs that have built-in OPC-UA server capabilities, such as Omron and Siemens, this is not an industry-wide practice. One notable exception is Allen Bradley PLCs. For Allen Bradley, you have to buy FactoryTalk Linx Gateway (formally RSLinx Enterprise) for OPC-UA Server capability, or you need to employ a 3rd party OPC-UA Server. This documentation will guide you through the process of using Node-RED as a 3rd party OPC-UA Server for Allen Bradley, by creating a custom Information Model for the PLC data, publishing it, then securing the server with SSL to make it production-ready.",[27,35,37],{"id":36},"plc-to-opc-ua-server-architecture-overview","PLC to OPC-UA Server Architecture Overview",[14,39,40],{},"A visual representation of our PLC to OPC-UA Server architecture is shown in the drawing below, consisting of 6 major parts.",[14,42,43],{},[44,45],"img",{"alt":46,"src":47},"PLC-Information-Model-1.png","\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Fimages\u002FPLC-Information-Model-1.png",[49,50,51,55,58,61,64,67],"ol",{},[52,53,54],"li",{},"Set up the PLC tags to be sent to the OPC Server",[52,56,57],{},"Read the PLC tags into Node-RED",[52,59,60],{},"Copy the PLC tags into Node-RED context memory",[52,62,63],{},"Program the OPC Server address space",[52,65,66],{},"Encrypt the OPC Server with SSL",[52,68,69],{},"Set up the OPC Client",[14,71,72,73,77,78,82],{},"The PLC is an Allen Bradley, and an instance of Node-RED running on the same OT network as the PLC will act as the OPC UA Server. In our Allen Bradley PLC, we will re-use an example from a ",[21,74,76],{"href":75},"\u002Fblog\u002F2023\u002F06\u002Fnode-red-as-a-no-code-ethernet_ip-to-s7-protocol-converter\u002F","Node-RED as a No-Code EtherNet\u002FIP to S7 Protocol Converter"," where the PLC is simulating a conveyor line, called ",[79,80,81],"em",{},"Line 4 PLC,"," depicted as number 1 architecture drawing above. The tags below represent the data to be transferred from the Line 4 PLC to the Node-RED OPC UA server, depicted as number 2 in the architecture drawing.",[84,85,86,109],"table",{},[87,88,89],"thead",{},[90,91,92,99,104],"tr",{},[93,94,95],"th",{},[96,97,98],"strong",{},"Tag",[93,100,101],{},[96,102,103],{},"Data Type",[93,105,106],{},[96,107,108],{},"Description",[110,111,112,124,134,145,155,166],"tbody",{},[90,113,114,118,121],{},[115,116,117],"td",{},"Conveyor_RTS",[115,119,120],{},"BOOL",[115,122,123],{},"Conveyor Ready to Start",[90,125,126,129,131],{},[115,127,128],{},"Robot_RTS",[115,130,120],{},[115,132,133],{},"Conveyor Robot Ready to Start",[90,135,136,139,142],{},[115,137,138],{},"Robot_Position",[115,140,141],{},"REAL",[115,143,144],{},"Robot Arm position (degrees)",[90,146,147,150,152],{},[115,148,149],{},"Conveyor_Running",[115,151,120],{},[115,153,154],{},"Conveyor is running",[90,156,157,160,163],{},[115,158,159],{},"Line4_State",[115,161,162],{},"DINT",[115,164,165],{},"Line 4 Machine State",[90,167,168,171,173],{},[115,169,170],{},"Line4_Fault",[115,172,120],{},[115,174,175],{},"Line 4 is faulted",[14,177,178],{},"A simple ladder application has been built in the PLC to simulate our conveyor values.",[14,180,181,185,186,190,191,194,195,197,198,201],{},[44,182],{"alt":183,"src":184},"image-20230717-212515.png","\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Fimages\u002Fimage-20230717-212515.png","\nThe Line 4 PLC tags will be read by Node-RED using an Ethernet\u002FIP driver, with each PLC tag copied to flow context memory as part of an object named ",[187,188,189],"code",{},"conveyorData",", depicted in number 3 of the architecture drawing. Using the ",[187,192,193],{},"node-red-contrib-opcua-server"," node, the ",[187,196,189],{}," object will become part of a hierarchical OPA UA Information Model representing the Line 4 PLC conveyor data, and stored into the ",[79,199,200],{},"OPC UA Server Address Space,"," depicted as number 4 in the architecture drawing. The OPC Server will publish the Line 4 PLC conveyor data, implementing a self-signed SSL certificate to encrypt the OPC traffic and establish a secure connection with an OPC Client application, depicted as number 5 in the architecture drawing.",[203,204,205],"ul",{},[52,206,207],{},"note - if you prefer not to secure the server, you can skip this step and still connect to the server anonymously for testing purposes.",[14,209,210,211,217],{},"The OPC client will be a windows-based ",[21,212,216],{"href":213,"rel":214},"https:\u002F\u002Fwww.prosysopc.com\u002Fproducts\u002Fopc-ua-browser\u002F",[215],"nofollow","Prosys OPC UA Browser",", depicted on the far right as number 6 in our architecture drawing.",[14,219,220],{},"Now that we have laid out a concept for our application, let’s build it.",[27,222,224],{"id":223},"install-custom-nodes","Install Custom Nodes",[226,227,229],"callout",{"icon":228},"i-lucide-badge-check",[14,230,231,234,235,239,240],{},[96,232,233],{},"Certified nodes for this technology."," This guide builds the server from community packages. Both halves of it, OPC UA and the Allen Bradley Ethernet\u002FIP link, also have a FlowFuse certified node maintained for production use: ",[21,236,238],{"href":237},"\u002Fintegrations\u002F?certified=1","opcua",", ",[21,241,242],{"href":237},"cip-suite",[14,244,245],{},"First, we need to add three custom nodes that will allow Node-RED to read Ethernet\u002FIP data and add OPC UA Server functionality.",[14,247,248],{},"Click the hamburger icon → manage palette",[14,250,251,255],{},[44,252],{"alt":253,"src":254},"flow-manage-palette.png","\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Fimages\u002Fflow-manage-palette.png","\n ",[14,257,258,259,262,263,266,267,270],{},"On the ",[187,260,261],{},"install"," tab, search for ",[187,264,265],{},"ethernet"," and install the ",[187,268,269],{},"node-red-contrib-cip-ethernet-ip"," node, which will be used to read the Ethernet\u002FIP fieldbus data from our Allen Bradley PLC.",[14,272,273,277,278,281,282,285,286,289],{},[44,274],{"alt":275,"src":276},"install-eth-ip-node.png","\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Fimages\u002Finstall-eth-ip-node.png","\nNext, search for ",[187,279,280],{},"opc"," and install ",[187,283,284],{},"node-red-contrib-opcua"," and ",[187,287,288],{},"node-red-contrib-opc-ua-server",". These nodes take a particularly long time to install, as they require a lot of dependencies. Expect anywhere from 2 to 10 minutes to complete installation, depending on the speed of your system. You will not be able to track the progress of the installation unless you are monitoring the logs on the back-end, so just be patient.",[14,291,292,296,297,300],{},[44,293],{"alt":294,"src":295},"opc-nodes-install.png","\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Fimages\u002Fopc-nodes-install.png","\nGo to the ",[187,298,299],{},"Nodes"," tab and confirm the 3 custom nodes have been properly installed.",[14,302,303],{},[44,304],{"alt":305,"src":306},"custom-nodes-installed.png","\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Fimages\u002Fcustom-nodes-installed.png",[27,308,310],{"id":309},"set-up-ethernetip-data","Set Up Ethernet\u002FIP Data",[14,312,313,314,25],{},"Note: this process is largely a recap from the first part of a article where ",[21,315,316],{"href":75},"Node-RED is used as an Ethernet\u002FIP to S7 protocol converter",[14,318,319,320,323],{},"Let’s start by dragging a ",[187,321,322],{},"eth-ip in"," node onto the palette. Then add a new endpoint, which will point to our Line4 PLC.",[14,325,326,330,331,334],{},[44,327],{"alt":328,"src":329},"eth-ip-in-palette.png","\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Fimages\u002Feth-ip-in-palette.png","\nIn the endpoint ",[187,332,333],{},"Connection"," properties, the connection information must match the PLC, so set the IP address and CPU slot number appropriately. Also, the default cycle time is 500ms. Depending on your application, polling the CPU at 500ms may be appropriate. But for our OPC UA application, we will change it to 1000ms, which is a more appropriate polling rate for this type of application.",[14,336,337,341,342,345,346,349,350,25],{},[44,338],{"alt":339,"src":340},"ethip-node-connection.png","\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Fimages\u002Fethip-node-connection.png","\nOn the ",[187,343,344],{},"Tags"," tab, populate the tag information to match our Allen Bradley PLC. Then select ",[187,347,348],{},"Update"," to complete configuration of the ",[187,351,352],{},"eth-ip endpoint",[14,354,355,359,360,362],{},[44,356],{"alt":357,"src":358},"eth-ip-endpoint-tags.png","\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Fimages\u002Feth-ip-endpoint-tags.png","\nNow that we have our endpoint, let’s finish configuring the ",[187,361,322],{}," node.",[49,364,365,368,378],{},[52,366,367],{},"select the endpoint we just created",[52,369,370,371,374,375],{},"Change ",[187,372,373],{},"Mode"," To ",[187,376,377],{},"All tags",[52,379,380],{},"Give the node a descriptive name.",[14,382,383,387],{},[44,384],{"alt":385,"src":386},"eth-ip-in-properties.png","\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Fimages\u002Feth-ip-in-properties.png","\nAs configured, the node is going to read all PLC tags any time a value is changed. Press done to complete the configuration.",[14,389,390,391,394,395,397],{},"Before we deploy this flow, let’s wire a ",[187,392,393],{},"debug"," node to our ",[187,396,322],{}," node to confirm Node-RED can read the tags from our PLC.",[14,399,400,404],{},[44,401],{"alt":402,"src":403},"eth-ip-debug.png","\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Fimages\u002Feth-ip-debug.png","\nDeploy the flow.",[14,406,407,411,412,414],{},[44,408],{"alt":409,"src":410},"deploy-flow.png","\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Fimages\u002Fdeploy-flow.png","\nClick the ",[187,413,393],{}," tab and confirm data is flowing in from our PLC.",[14,416,417,421],{},[44,418],{"alt":419,"src":420},"debug-data.png","\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Fimages\u002Fdebug-data.png","\nWe can see that all tags are being read from the PLC in one message as a key\u002Fvalue hash table, or dict.",[14,423,424,425,427],{},"After confirming the PLC data acquisition is working, we can remove the ",[187,426,393],{}," node and continue building the rest of our flow. Referring back to our architecture drawing, we’ve now taken care of the first 2 objectives of our application.",[14,429,430],{},[44,431],{"alt":432,"src":433},"PLC-Information-Model-2-of-6-1.png","\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Fimages\u002FPLC-Information-Model-2-of-6-1.png",[14,435,436,441,442,445,447,448],{},[437,438],"input",{"type":439,"checked":440},"checkbox",true," Set up the PLC tags to be sent to the OPC Server",[443,444],"br",{},[437,446],{"type":439,"checked":440}," Read the PLC tags into Node-RED",[443,449],{},[14,451,452],{},"Let’s move on to objective 3.",[27,454,456],{"id":455},"store-the-plc-data-in-flow-context-memory","Store the PLC Data In Flow Context Memory",[14,458,459,460,463,464,362],{},"Drag a ",[187,461,462],{},"change"," node onto the palette and wire it to the ",[187,465,322],{},[14,467,468],{},[44,469],{"alt":470,"src":471},"change-node-palette.png","\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Fimages\u002Fchange-node-palette.png",[14,473,474,475,478,479,482,483,485,486,488,489,491,492],{},"We’re going move the data from the PLC into flow context memory, by setting each element of the outgoing ",[187,476,477],{},"msg.payload"," to ",[187,480,481],{},"flow.conveyorData",". To do this, refer back to the structure of the ",[187,484,477],{}," from the ",[187,487,393],{}," node we connected to the ",[187,490,322],{}," node earlier -\n",[44,493],{"alt":494,"src":495},"msg-payload.png","\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Fimages\u002Fmsg-payload.png",[14,497,498,499,502,503,505,506,509,510,513,514,517,518],{},"Now open up the change node, and press the ",[187,500,501],{},"+add"," button to add a rule for each PLC tag in our ",[187,504,477],{}," object (6), and ",[187,507,508],{},"set"," each rule so that you're setting a ",[187,511,512],{},"flow"," value to a ",[187,515,516],{},"msg"," value.  Then populate each rule as shown -\n",[44,519],{"alt":520,"src":521},"change-node-properties.png","\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Fimages\u002Fchange-node-properties.png",[14,523,524,525,527,528,530],{},"We've now configured the ",[187,526,462],{}," node to move the data from our PLC into a dict called ",[187,529,189],{},", stored in flow context memory.",[14,532,533],{},"Give the node an appripriate name, hit done and deploy the flow.",[14,535,536,537],{},"Our flow should now look like below -\n",[44,538],{"alt":539,"src":540},"flow-with-change-palette.png","\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Fimages\u002Fflow-with-change-palette.png",[14,542,543,544,546],{},"Let’s look at the flow context memory to confirm the data from our PLC is being written to the ",[187,545,189],{}," object we created.",[14,548,549,553,557,558,560],{},[44,550],{"alt":551,"src":552},"context-data-1.png","\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Fimages\u002Fcontext-data-1.png",[44,554],{"alt":555,"src":556},"context-refresh.png","\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Fimages\u002Fcontext-refresh.png","\nEvery time we hit refresh, the values in ",[187,559,189],{}," change as the value in the PLC changes, confirming things are working as expected.",[14,562,563],{},"Looking back at the application architecture we laid out, we’ve achieved 3 out of the 6 objectives.",[14,565,566],{},[44,567],{"alt":568,"src":569},"PLC-Information-Model-3-of-6-1.png","\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Fimages\u002FPLC-Information-Model-3-of-6-1.png",[14,571,572,441,574,576,447,578,580,582,583],{},[437,573],{"type":439,"checked":440},[443,575],{},[437,577],{"type":439,"checked":440},[443,579],{},[437,581],{"type":439,"checked":440}," Copy the PLC tags into Node-RED context memory",[443,584],{},[14,586,587],{},"Let’s now tackle the OPC Server address space.",[27,589,591],{"id":590},"program-the-opc-ua-server-address-space","Program the OPC UA Server Address Space",[14,593,594,595,25],{},"To make our lives significantly easier, we’re going to start from a template, the same template used in ",[21,596,597],{"href":23},"part 1 of our OPC UA Series",[14,599,600,601,606],{},"Copy the content of the ",[21,602,605],{"href":603,"rel":604},"https:\u002F\u002Fgithub.com\u002FBiancoRoyal\u002Fnode-red-contrib-opcua-server\u002Fblob\u002Fmaster\u002Fexamples\u002Fserver-with-context.json",[215],"example template",", then paste it into Node-RED to import it.",[14,608,609,613,617],{},[44,610],{"alt":611,"src":612},"import.png","\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Fimages\u002Fimport.png",[44,614],{"alt":615,"src":616},"import-context.png","\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Fimages\u002Fimport-context.png","\nYou end up with a new flow that looks like the one below.",[14,619,620,624,625,628,629,632,633,635],{},[44,621],{"alt":622,"src":623},"example-flow.png","\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Fimages\u002Fexample-flow.png","\nAll we care about here is the ",[187,626,627],{},"Compact-Server"," node.  In fact, we’ll just copy that node and paste it into the current flow we’ve been building.  Once we’ve copied the server node into our custom flow, we can discard the example flow.  The whole purpose of this was to simply populate the ",[187,630,631],{},"address space"," of the ",[187,634,627],{}," node with template code that will trivialize the programming for our custom application.",[14,637,638],{},"Our custom flow should now look something like this.",[14,640,641],{},[44,642],{"alt":643,"src":644},"flow-with-compact-server.png","\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Fimages\u002Fflow-with-compact-server.png",[203,646,647],{},[52,648,649],{},"note - I’ve added some comments to make the flow even easier to follow.  Similar to commenting code, commenting flows is good practice.",[14,651,652,653,655],{},"Open up the ",[187,654,627],{}," node and jump straight to the address space.",[14,657,658],{},[44,659],{"alt":660,"src":661},"compact-server-node-address-space.png","\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Fimages\u002Fcompact-server-node-address-space.png",[203,663,664],{},[52,665,666,667,669,670,673],{},"note - we won’t go into detail on what the address space actually is in this documentation, or the details of the ",[187,668,627],{}," node, as it was covered in ",[21,671,672],{"href":23},"part 1 of this OPC UA series",".  Please read that documentation if you are unfamiliar with it.",[14,675,676],{},"There are 4 key things we’ll modify in the address space template code -",[49,678,679,685,688,691],{},[52,680,681,682,684],{},"Bring in our ",[187,683,189],{}," context variables",[52,686,687],{},"create our custom folder structure",[52,689,690],{},"define our context variables as OPC UA nodes",[52,692,693],{},"create custom browser views for our nodes",[695,696,698],"h3",{"id":697},"bring-in-context-variables","Bring in Context Variables",[14,700,701],{},"Starting from the section of code where it’s bringing in the context variables defined in the example, delete that code",[703,704,709],"pre",{"className":705,"code":706,"language":707,"meta":708,"style":708},"language-javascript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","  this.sandboxFlowContext.set(\"isoInput1\", 0);\n  this.setInterval(() => {\n    flexServerInternals.sandboxFlowContext.set(\n      \"isoInput1\",\n      Math.random() + 50.0\n    );\n  }, 500);\n  this.sandboxFlowContext.set(\"isoInput2\", 0);\n ...\n this.sandboxFlowContext.set(\"isoOutput8\", 0);\n","javascript","",[187,710,711,754,774,792,805,825,833,846,874,880],{"__ignoreMap":708},[712,713,716,720,724,726,729,732,735,739,741,744,748,751],"span",{"class":714,"line":715},"line",1,[712,717,719],{"class":718},"sMK4o","  this.",[712,721,723],{"class":722},"sTEyZ","sandboxFlowContext",[712,725,25],{"class":718},[712,727,508],{"class":728},"s2Zo4",[712,730,731],{"class":722},"(",[712,733,734],{"class":718},"\"",[712,736,738],{"class":737},"sfazB","isoInput1",[712,740,734],{"class":718},[712,742,743],{"class":718},",",[712,745,747],{"class":746},"sbssI"," 0",[712,749,750],{"class":722},")",[712,752,753],{"class":718},";\n",[712,755,757,759,762,764,767,771],{"class":714,"line":756},2,[712,758,719],{"class":718},[712,760,761],{"class":728},"setInterval",[712,763,731],{"class":722},[712,765,766],{"class":718},"()",[712,768,770],{"class":769},"spNyl"," =>",[712,772,773],{"class":718}," {\n",[712,775,777,780,782,784,786,788],{"class":714,"line":776},3,[712,778,779],{"class":722},"    flexServerInternals",[712,781,25],{"class":718},[712,783,723],{"class":722},[712,785,25],{"class":718},[712,787,508],{"class":728},[712,789,791],{"class":790},"swJcz","(\n",[712,793,795,798,800,802],{"class":714,"line":794},4,[712,796,797],{"class":718},"      \"",[712,799,738],{"class":737},[712,801,734],{"class":718},[712,803,804],{"class":718},",\n",[712,806,808,811,813,816,819,822],{"class":714,"line":807},5,[712,809,810],{"class":722},"      Math",[712,812,25],{"class":718},[712,814,815],{"class":728},"random",[712,817,818],{"class":790},"() ",[712,820,821],{"class":718},"+",[712,823,824],{"class":746}," 50.0\n",[712,826,828,831],{"class":714,"line":827},6,[712,829,830],{"class":790},"    )",[712,832,753],{"class":718},[712,834,836,839,842,844],{"class":714,"line":835},7,[712,837,838],{"class":718},"  },",[712,840,841],{"class":746}," 500",[712,843,750],{"class":722},[712,845,753],{"class":718},[712,847,849,851,853,855,857,859,861,864,866,868,870,872],{"class":714,"line":848},8,[712,850,719],{"class":718},[712,852,723],{"class":722},[712,854,25],{"class":718},[712,856,508],{"class":728},[712,858,731],{"class":722},[712,860,734],{"class":718},[712,862,863],{"class":737},"isoInput2",[712,865,734],{"class":718},[712,867,743],{"class":718},[712,869,747],{"class":746},[712,871,750],{"class":722},[712,873,753],{"class":718},[712,875,877],{"class":714,"line":876},9,[712,878,879],{"class":718}," ...\n",[712,881,883,886,888,890,892,894,896,899,901,903,905,907],{"class":714,"line":882},10,[712,884,885],{"class":718}," this.",[712,887,723],{"class":722},[712,889,25],{"class":718},[712,891,508],{"class":728},[712,893,731],{"class":722},[712,895,734],{"class":718},[712,897,898],{"class":737},"isoOutput8",[712,900,734],{"class":718},[712,902,743],{"class":718},[712,904,747],{"class":746},[712,906,750],{"class":722},[712,908,753],{"class":718},[14,910,911,912,914],{},"and replace it with our ",[187,913,189],{}," context variables.",[703,916,918],{"className":705,"code":917,"language":707,"meta":708,"style":708},"  this.sandboxFlowContext.set(\"conveyorData.Conveyor_RTS\", false);\n  this.sandboxFlowContext.set(\"conveyorData.Robot_RTS\", false);\n  this.sandboxFlowContext.set(\"conveyorData.Robot_Position\", 0);\n  this.sandboxFlowContext.set(\"conveyorData.Conveyor_Running\", false);\n  this.sandboxFlowContext.set(\"conveyorData.Line4_State\", 0);\n  this.sandboxFlowContext.set(\"conveyorData.Line4_Fault\", false);\n",[187,919,920,949,976,1003,1030,1057],{"__ignoreMap":708},[712,921,922,924,926,928,930,932,934,937,939,941,945,947],{"class":714,"line":715},[712,923,719],{"class":718},[712,925,723],{"class":722},[712,927,25],{"class":718},[712,929,508],{"class":728},[712,931,731],{"class":722},[712,933,734],{"class":718},[712,935,936],{"class":737},"conveyorData.Conveyor_RTS",[712,938,734],{"class":718},[712,940,743],{"class":718},[712,942,944],{"class":943},"sfNiH"," false",[712,946,750],{"class":722},[712,948,753],{"class":718},[712,950,951,953,955,957,959,961,963,966,968,970,972,974],{"class":714,"line":756},[712,952,719],{"class":718},[712,954,723],{"class":722},[712,956,25],{"class":718},[712,958,508],{"class":728},[712,960,731],{"class":722},[712,962,734],{"class":718},[712,964,965],{"class":737},"conveyorData.Robot_RTS",[712,967,734],{"class":718},[712,969,743],{"class":718},[712,971,944],{"class":943},[712,973,750],{"class":722},[712,975,753],{"class":718},[712,977,978,980,982,984,986,988,990,993,995,997,999,1001],{"class":714,"line":776},[712,979,719],{"class":718},[712,981,723],{"class":722},[712,983,25],{"class":718},[712,985,508],{"class":728},[712,987,731],{"class":722},[712,989,734],{"class":718},[712,991,992],{"class":737},"conveyorData.Robot_Position",[712,994,734],{"class":718},[712,996,743],{"class":718},[712,998,747],{"class":746},[712,1000,750],{"class":722},[712,1002,753],{"class":718},[712,1004,1005,1007,1009,1011,1013,1015,1017,1020,1022,1024,1026,1028],{"class":714,"line":794},[712,1006,719],{"class":718},[712,1008,723],{"class":722},[712,1010,25],{"class":718},[712,1012,508],{"class":728},[712,1014,731],{"class":722},[712,1016,734],{"class":718},[712,1018,1019],{"class":737},"conveyorData.Conveyor_Running",[712,1021,734],{"class":718},[712,1023,743],{"class":718},[712,1025,944],{"class":943},[712,1027,750],{"class":722},[712,1029,753],{"class":718},[712,1031,1032,1034,1036,1038,1040,1042,1044,1047,1049,1051,1053,1055],{"class":714,"line":807},[712,1033,719],{"class":718},[712,1035,723],{"class":722},[712,1037,25],{"class":718},[712,1039,508],{"class":728},[712,1041,731],{"class":722},[712,1043,734],{"class":718},[712,1045,1046],{"class":737},"conveyorData.Line4_State",[712,1048,734],{"class":718},[712,1050,743],{"class":718},[712,1052,747],{"class":746},[712,1054,750],{"class":722},[712,1056,753],{"class":718},[712,1058,1059,1061,1063,1065,1067,1069,1071,1074,1076,1078,1080,1082],{"class":714,"line":827},[712,1060,719],{"class":718},[712,1062,723],{"class":722},[712,1064,25],{"class":718},[712,1066,508],{"class":728},[712,1068,731],{"class":722},[712,1070,734],{"class":718},[712,1072,1073],{"class":737},"conveyorData.Line4_Fault",[712,1075,734],{"class":718},[712,1077,743],{"class":718},[712,1079,944],{"class":943},[712,1081,750],{"class":722},[712,1083,753],{"class":718},[695,1085,1087],{"id":1086},"create-custom-folder-structure","Create Custom Folder Structure",[14,1089,1090],{},"Starting from the section of code where the example folder structure is defined, delete it and replace it with our custom folder structure defined in our architecture -",[14,1092,1093,1097],{},[44,1094],{"alt":1095,"src":1096},"opc-folder-structure.png","\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Fimages\u002Fopc-folder-structure.png","\nDelete the section of code starting from here -",[703,1099,1101],{"className":705,"code":1100,"language":707,"meta":708,"style":708},"  const myDevice = namespace.addFolder(rootFolder.objects, {\n    \"browseName\": \"RaspberryPI-Zero-WLAN\"\n  });\n  const gpioFolder = namespace.addFolder(myDevice, { \"browseName\": \"GPIO\" });\n  const isoInputs = namespace.addFolder(gpioFolder, {\n    \"browseName\": \"Inputs\"\n  });\n  const isoOutputs = namespace.addFolder(gpioFolder, {\n    \"browseName\": \"Outputs\"\n  });\n",[187,1102,1103,1134,1156,1165,1210,1232,1249,1257,1278,1295],{"__ignoreMap":708},[712,1104,1105,1108,1111,1114,1117,1119,1122,1125,1127,1130,1132],{"class":714,"line":715},[712,1106,1107],{"class":769},"  const",[712,1109,1110],{"class":722}," myDevice ",[712,1112,1113],{"class":718},"=",[712,1115,1116],{"class":722}," namespace",[712,1118,25],{"class":718},[712,1120,1121],{"class":728},"addFolder",[712,1123,1124],{"class":722},"(rootFolder",[712,1126,25],{"class":718},[712,1128,1129],{"class":722},"objects",[712,1131,743],{"class":718},[712,1133,773],{"class":718},[712,1135,1136,1139,1142,1144,1147,1150,1153],{"class":714,"line":756},[712,1137,1138],{"class":718},"    \"",[712,1140,1141],{"class":790},"browseName",[712,1143,734],{"class":718},[712,1145,1146],{"class":718},":",[712,1148,1149],{"class":718}," \"",[712,1151,1152],{"class":737},"RaspberryPI-Zero-WLAN",[712,1154,1155],{"class":718},"\"\n",[712,1157,1158,1161,1163],{"class":714,"line":776},[712,1159,1160],{"class":718},"  }",[712,1162,750],{"class":722},[712,1164,753],{"class":718},[712,1166,1167,1169,1172,1174,1176,1178,1180,1183,1185,1188,1190,1192,1194,1196,1198,1201,1203,1206,1208],{"class":714,"line":794},[712,1168,1107],{"class":769},[712,1170,1171],{"class":722}," gpioFolder ",[712,1173,1113],{"class":718},[712,1175,1116],{"class":722},[712,1177,25],{"class":718},[712,1179,1121],{"class":728},[712,1181,1182],{"class":722},"(myDevice",[712,1184,743],{"class":718},[712,1186,1187],{"class":718}," {",[712,1189,1149],{"class":718},[712,1191,1141],{"class":790},[712,1193,734],{"class":718},[712,1195,1146],{"class":718},[712,1197,1149],{"class":718},[712,1199,1200],{"class":737},"GPIO",[712,1202,734],{"class":718},[712,1204,1205],{"class":718}," }",[712,1207,750],{"class":722},[712,1209,753],{"class":718},[712,1211,1212,1214,1217,1219,1221,1223,1225,1228,1230],{"class":714,"line":807},[712,1213,1107],{"class":769},[712,1215,1216],{"class":722}," isoInputs ",[712,1218,1113],{"class":718},[712,1220,1116],{"class":722},[712,1222,25],{"class":718},[712,1224,1121],{"class":728},[712,1226,1227],{"class":722},"(gpioFolder",[712,1229,743],{"class":718},[712,1231,773],{"class":718},[712,1233,1234,1236,1238,1240,1242,1244,1247],{"class":714,"line":827},[712,1235,1138],{"class":718},[712,1237,1141],{"class":790},[712,1239,734],{"class":718},[712,1241,1146],{"class":718},[712,1243,1149],{"class":718},[712,1245,1246],{"class":737},"Inputs",[712,1248,1155],{"class":718},[712,1250,1251,1253,1255],{"class":714,"line":835},[712,1252,1160],{"class":718},[712,1254,750],{"class":722},[712,1256,753],{"class":718},[712,1258,1259,1261,1264,1266,1268,1270,1272,1274,1276],{"class":714,"line":848},[712,1260,1107],{"class":769},[712,1262,1263],{"class":722}," isoOutputs ",[712,1265,1113],{"class":718},[712,1267,1116],{"class":722},[712,1269,25],{"class":718},[712,1271,1121],{"class":728},[712,1273,1227],{"class":722},[712,1275,743],{"class":718},[712,1277,773],{"class":718},[712,1279,1280,1282,1284,1286,1288,1290,1293],{"class":714,"line":876},[712,1281,1138],{"class":718},[712,1283,1141],{"class":790},[712,1285,734],{"class":718},[712,1287,1146],{"class":718},[712,1289,1149],{"class":718},[712,1291,1292],{"class":737},"Outputs",[712,1294,1155],{"class":718},[712,1296,1297,1299,1301],{"class":714,"line":882},[712,1298,1160],{"class":718},[712,1300,750],{"class":722},[712,1302,753],{"class":718},[14,1304,1305],{},"and replace it with the folder structure shown above -",[703,1307,1309],{"className":705,"code":1308,"language":707,"meta":708,"style":708},"  const myDevice = namespace.addFolder(rootFolder.objects, {\n    \"browseName\": \"Line 4 PLC\"\n  });\n  const conveyorFolder = namespace.addFolder(myDevice, { \n  \"browseName\": \"Conveyor\" \n  });\n  const conveyorBools = namespace.addFolder(conveyorFolder, {\n    \"browseName\": \"Bools\"\n  });\n  const conveyorDINTs = namespace.addFolder(conveyorFolder, {\n    \"browseName\": \"DINTs\"\n  });\n  const conveyorFloats = namespace.addFolder(conveyorFolder, {\n    \"browseName\": \"Floats\"\n  });\n",[187,1310,1311,1335,1352,1360,1384,1404,1412,1434,1451,1459,1480,1498,1507,1529,1547],{"__ignoreMap":708},[712,1312,1313,1315,1317,1319,1321,1323,1325,1327,1329,1331,1333],{"class":714,"line":715},[712,1314,1107],{"class":769},[712,1316,1110],{"class":722},[712,1318,1113],{"class":718},[712,1320,1116],{"class":722},[712,1322,25],{"class":718},[712,1324,1121],{"class":728},[712,1326,1124],{"class":722},[712,1328,25],{"class":718},[712,1330,1129],{"class":722},[712,1332,743],{"class":718},[712,1334,773],{"class":718},[712,1336,1337,1339,1341,1343,1345,1347,1350],{"class":714,"line":756},[712,1338,1138],{"class":718},[712,1340,1141],{"class":790},[712,1342,734],{"class":718},[712,1344,1146],{"class":718},[712,1346,1149],{"class":718},[712,1348,1349],{"class":737},"Line 4 PLC",[712,1351,1155],{"class":718},[712,1353,1354,1356,1358],{"class":714,"line":776},[712,1355,1160],{"class":718},[712,1357,750],{"class":722},[712,1359,753],{"class":718},[712,1361,1362,1364,1367,1369,1371,1373,1375,1377,1379,1381],{"class":714,"line":794},[712,1363,1107],{"class":769},[712,1365,1366],{"class":722}," conveyorFolder ",[712,1368,1113],{"class":718},[712,1370,1116],{"class":722},[712,1372,25],{"class":718},[712,1374,1121],{"class":728},[712,1376,1182],{"class":722},[712,1378,743],{"class":718},[712,1380,1187],{"class":718},[712,1382,1383],{"class":722}," \n",[712,1385,1386,1389,1391,1393,1395,1397,1400,1402],{"class":714,"line":807},[712,1387,1388],{"class":718},"  \"",[712,1390,1141],{"class":790},[712,1392,734],{"class":718},[712,1394,1146],{"class":718},[712,1396,1149],{"class":718},[712,1398,1399],{"class":737},"Conveyor",[712,1401,734],{"class":718},[712,1403,1383],{"class":722},[712,1405,1406,1408,1410],{"class":714,"line":827},[712,1407,1160],{"class":718},[712,1409,750],{"class":722},[712,1411,753],{"class":718},[712,1413,1414,1416,1419,1421,1423,1425,1427,1430,1432],{"class":714,"line":835},[712,1415,1107],{"class":769},[712,1417,1418],{"class":722}," conveyorBools ",[712,1420,1113],{"class":718},[712,1422,1116],{"class":722},[712,1424,25],{"class":718},[712,1426,1121],{"class":728},[712,1428,1429],{"class":722},"(conveyorFolder",[712,1431,743],{"class":718},[712,1433,773],{"class":718},[712,1435,1436,1438,1440,1442,1444,1446,1449],{"class":714,"line":848},[712,1437,1138],{"class":718},[712,1439,1141],{"class":790},[712,1441,734],{"class":718},[712,1443,1146],{"class":718},[712,1445,1149],{"class":718},[712,1447,1448],{"class":737},"Bools",[712,1450,1155],{"class":718},[712,1452,1453,1455,1457],{"class":714,"line":876},[712,1454,1160],{"class":718},[712,1456,750],{"class":722},[712,1458,753],{"class":718},[712,1460,1461,1463,1466,1468,1470,1472,1474,1476,1478],{"class":714,"line":882},[712,1462,1107],{"class":769},[712,1464,1465],{"class":722}," conveyorDINTs ",[712,1467,1113],{"class":718},[712,1469,1116],{"class":722},[712,1471,25],{"class":718},[712,1473,1121],{"class":728},[712,1475,1429],{"class":722},[712,1477,743],{"class":718},[712,1479,773],{"class":718},[712,1481,1483,1485,1487,1489,1491,1493,1496],{"class":714,"line":1482},11,[712,1484,1138],{"class":718},[712,1486,1141],{"class":790},[712,1488,734],{"class":718},[712,1490,1146],{"class":718},[712,1492,1149],{"class":718},[712,1494,1495],{"class":737},"DINTs",[712,1497,1155],{"class":718},[712,1499,1501,1503,1505],{"class":714,"line":1500},12,[712,1502,1160],{"class":718},[712,1504,750],{"class":722},[712,1506,753],{"class":718},[712,1508,1510,1512,1515,1517,1519,1521,1523,1525,1527],{"class":714,"line":1509},13,[712,1511,1107],{"class":769},[712,1513,1514],{"class":722}," conveyorFloats ",[712,1516,1113],{"class":718},[712,1518,1116],{"class":722},[712,1520,25],{"class":718},[712,1522,1121],{"class":728},[712,1524,1429],{"class":722},[712,1526,743],{"class":718},[712,1528,773],{"class":718},[712,1530,1532,1534,1536,1538,1540,1542,1545],{"class":714,"line":1531},14,[712,1533,1138],{"class":718},[712,1535,1141],{"class":790},[712,1537,734],{"class":718},[712,1539,1146],{"class":718},[712,1541,1149],{"class":718},[712,1543,1544],{"class":737},"Floats",[712,1546,1155],{"class":718},[712,1548,1550,1552,1554],{"class":714,"line":1549},15,[712,1551,1160],{"class":718},[712,1553,750],{"class":722},[712,1555,753],{"class":718},[695,1557,1559],{"id":1558},"define-opc-ua-nodes","Define OPC UA Nodes",[14,1561,1562],{},"Now we can construct the nodes for each context variable.",[14,1564,1565],{},[44,1566],{"alt":1567,"src":1568},"opc-nodes.png","\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Fimages\u002Fopc-nodes.png",[14,1570,1571,1572,1574,1575,1577],{},"Delete the section of code defining the nodes for ",[187,1573,738],{}," through ",[187,1576,898],{},"  -",[703,1579,1581],{"className":705,"code":1580,"language":707,"meta":708,"style":708},"  const gpioDI1 = namespace.addVariable({\n    \"organizedBy\": isoInputs,\n    \"browseName\": \"I1\",\n    \"nodeId\": \"ns=1;s=Isolated_Input1\",\n    \"dataType\": \"Double\",\n    \"value\": {\n    ...\n      \"set\": function(variant) {\n        flexServerInternals.sandboxFlowContext.set(\n          \"isoOutput8\",\n          parseFloat(variant.value)\n        );\n        return opcua.StatusCodes.Good;\n      }\n    }\n  });   \n",[187,1582,1583,1604,1620,1639,1659,1679,1692,1697,1721,1736,1747,1763,1770,1791,1796,1801],{"__ignoreMap":708},[712,1584,1585,1587,1590,1592,1594,1596,1599,1601],{"class":714,"line":715},[712,1586,1107],{"class":769},[712,1588,1589],{"class":722}," gpioDI1 ",[712,1591,1113],{"class":718},[712,1593,1116],{"class":722},[712,1595,25],{"class":718},[712,1597,1598],{"class":728},"addVariable",[712,1600,731],{"class":722},[712,1602,1603],{"class":718},"{\n",[712,1605,1606,1608,1611,1613,1615,1618],{"class":714,"line":756},[712,1607,1138],{"class":718},[712,1609,1610],{"class":790},"organizedBy",[712,1612,734],{"class":718},[712,1614,1146],{"class":718},[712,1616,1617],{"class":722}," isoInputs",[712,1619,804],{"class":718},[712,1621,1622,1624,1626,1628,1630,1632,1635,1637],{"class":714,"line":776},[712,1623,1138],{"class":718},[712,1625,1141],{"class":790},[712,1627,734],{"class":718},[712,1629,1146],{"class":718},[712,1631,1149],{"class":718},[712,1633,1634],{"class":737},"I1",[712,1636,734],{"class":718},[712,1638,804],{"class":718},[712,1640,1641,1643,1646,1648,1650,1652,1655,1657],{"class":714,"line":794},[712,1642,1138],{"class":718},[712,1644,1645],{"class":790},"nodeId",[712,1647,734],{"class":718},[712,1649,1146],{"class":718},[712,1651,1149],{"class":718},[712,1653,1654],{"class":737},"ns=1;s=Isolated_Input1",[712,1656,734],{"class":718},[712,1658,804],{"class":718},[712,1660,1661,1663,1666,1668,1670,1672,1675,1677],{"class":714,"line":807},[712,1662,1138],{"class":718},[712,1664,1665],{"class":790},"dataType",[712,1667,734],{"class":718},[712,1669,1146],{"class":718},[712,1671,1149],{"class":718},[712,1673,1674],{"class":737},"Double",[712,1676,734],{"class":718},[712,1678,804],{"class":718},[712,1680,1681,1683,1686,1688,1690],{"class":714,"line":827},[712,1682,1138],{"class":718},[712,1684,1685],{"class":790},"value",[712,1687,734],{"class":718},[712,1689,1146],{"class":718},[712,1691,773],{"class":718},[712,1693,1694],{"class":714,"line":835},[712,1695,1696],{"class":718},"    ...\n",[712,1698,1699,1701,1703,1705,1708,1711,1713,1717,1719],{"class":714,"line":848},[712,1700,797],{"class":718},[712,1702,508],{"class":737},[712,1704,734],{"class":718},[712,1706,1707],{"class":722},": ",[712,1709,1710],{"class":769},"function",[712,1712,731],{"class":718},[712,1714,1716],{"class":1715},"sHdIc","variant",[712,1718,750],{"class":718},[712,1720,773],{"class":718},[712,1722,1723,1726,1728,1730,1732,1734],{"class":714,"line":876},[712,1724,1725],{"class":722},"        flexServerInternals",[712,1727,25],{"class":718},[712,1729,723],{"class":722},[712,1731,25],{"class":718},[712,1733,508],{"class":728},[712,1735,791],{"class":790},[712,1737,1738,1741,1743,1745],{"class":714,"line":882},[712,1739,1740],{"class":718},"          \"",[712,1742,898],{"class":737},[712,1744,734],{"class":718},[712,1746,804],{"class":718},[712,1748,1749,1752,1754,1756,1758,1760],{"class":714,"line":1482},[712,1750,1751],{"class":728},"          parseFloat",[712,1753,731],{"class":790},[712,1755,1716],{"class":722},[712,1757,25],{"class":718},[712,1759,1685],{"class":722},[712,1761,1762],{"class":790},")\n",[712,1764,1765,1768],{"class":714,"line":1500},[712,1766,1767],{"class":790},"        )",[712,1769,753],{"class":718},[712,1771,1772,1776,1779,1781,1784,1786,1789],{"class":714,"line":1509},[712,1773,1775],{"class":1774},"s7zQu","        return",[712,1777,1778],{"class":722}," opcua",[712,1780,25],{"class":718},[712,1782,1783],{"class":722},"StatusCodes",[712,1785,25],{"class":718},[712,1787,1788],{"class":722},"Good",[712,1790,753],{"class":718},[712,1792,1793],{"class":714,"line":1531},[712,1794,1795],{"class":718},"      }\n",[712,1797,1798],{"class":714,"line":1549},[712,1799,1800],{"class":718},"    }\n",[712,1802,1804,1806,1808],{"class":714,"line":1803},16,[712,1805,1160],{"class":718},[712,1807,750],{"class":722},[712,1809,753],{"class":718},[14,1811,1812],{},"And replace it with our custom nodes, paying respect to the folder structure we defined in our architecture -",[703,1814,1816],{"className":705,"code":1815,"language":707,"meta":708,"style":708},"  \u002F\u002F Construct Nodes\n  const Conveyor_RTS = namespace.addVariable({\n    \"organizedBy\": conveyorBools,\n    \"browseName\": \"Conveyor Ready to Start\",\n    \"nodeId\": \"ns=1;s=Conveyor_RTS\",\n    \"dataType\": \"Boolean\",\n    \"value\": {\n      \"get\": function () {\n        return new Variant({\n          \"dataType\": DataType.Boolean,\n          \"value\": flexServerInternals.sandboxFlowContext.get(\"conveyorData.Conveyor_RTS\")\n        });\n      },\n      \"set\": function (variant) {\n        flexServerInternals.sandboxFlowContext.set(\n          \"conveyorData.Conveyor_RTS\",\n          variant.value\n        );\n        return opcua.StatusCodes.Good;\n      }\n    }\n  });\n\n  const Robot_RTS = namespace.addVariable({\n    \"organizedBy\": conveyorBools,\n    \"browseName\": \"Robot Ready to Start\",\n    \"nodeId\": \"ns=1;s=Robot_RTS\",\n    \"dataType\": \"Boolean\",\n    \"value\": {\n      \"get\": function () {\n        return new Variant({\n          \"dataType\": DataType.Boolean,\n          \"value\": flexServerInternals.sandboxFlowContext.get(\"conveyorData.Robot_RTS\")\n        });\n      },\n      \"set\": function (variant) {\n        flexServerInternals.sandboxFlowContext.set(\n          \"conveyorData.Robot_RTS\",\n          variant.value\n        );\n        return opcua.StatusCodes.Good;\n      }\n    }\n  });\n\n  const Conveyor_Running = namespace.addVariable({\n    \"organizedBy\": conveyorBools,\n    \"browseName\": \"Conveyor Running\",\n    \"nodeId\": \"ns=1;s=Conveyor_Running\",\n    \"dataType\": \"Boolean\",\n    \"value\": {\n      \"get\": function () {\n        return new Variant({\n          \"dataType\": DataType.Boolean,\n          \"value\": flexServerInternals.sandboxFlowContext.get(\"conveyorData.Conveyor_Running\")\n        });\n      },\n      \"set\": function (variant) {\n        flexServerInternals.sandboxFlowContext.set(\n          \"conveyorData.Conveyor_Running\",\n          variant.value\n        );\n        return opcua.StatusCodes.Good;\n      }\n    }\n  });\n\n  const Line4_Fault = namespace.addVariable({\n    \"organizedBy\": conveyorBools,\n    \"browseName\": \"Line 4 Faulted\",\n    \"nodeId\": \"ns=1;s=Line4_Fault\",\n    \"dataType\": \"Boolean\",\n    \"value\": {\n      \"get\": function () {\n        return new Variant({\n          \"dataType\": DataType.Boolean,\n          \"value\": flexServerInternals.sandboxFlowContext.get(\"conveyorData.Line4_Fault\")\n        });\n      },\n      \"set\": function (variant) {\n        flexServerInternals.sandboxFlowContext.set(\n          \"conveyorData.Line4_Fault\",\n          variant.value\n        );\n        return opcua.StatusCodes.Good;\n      }\n    }\n  });\n\n  const Line4_State = namespace.addVariable({\n    \"organizedBy\": conveyorDINTs,\n    \"browseName\": \"Line 4 State\",\n    \"nodeId\": \"ns=1;s=Line4_State\",\n    \"dataType\": \"Int32\",\n    \"value\": {\n      \"get\": function () {\n        return new Variant({\n          \"dataType\": DataType.Int32,\n          \"value\": flexServerInternals.sandboxFlowContext.get(\"conveyorData.Line4_State\")\n        });\n      },\n      \"set\": function (variant) {\n        flexServerInternals.sandboxFlowContext.set(\n          \"conveyorData.Line4_State\",\n          variant.value\n        );\n        return opcua.StatusCodes.Good;\n      }\n    }\n  });\n\n  const Robot_Position = namespace.addVariable({\n    \"organizedBy\": conveyorFloats,\n    \"browseName\": \"Robot Axis A1 Position\",\n    \"nodeId\": \"ns=1;s=Robot_Position\",\n    \"dataType\": \"Float\",\n    \"value\": {\n      \"get\": function () {\n        return new Variant({\n          \"dataType\": DataType.Float,\n          \"value\": flexServerInternals.sandboxFlowContext.get(\"conveyorData.Robot_Position\")\n        });\n      },\n      \"set\": function (variant) {\n        flexServerInternals.sandboxFlowContext.set(\n          \"conveyorData.Robot_Position\",\n          parseFloat(variant.value)\n        );\n        return opcua.StatusCodes.Good;\n      }\n    }\n  });\n",[187,1817,1818,1824,1843,1858,1876,1895,1914,1926,1945,1959,1978,2009,2018,2023,2044,2058,2068,2079,2086,2103,2108,2113,2122,2128,2148,2163,2183,2203,2222,2235,2252,2265,2284,2315,2324,2329,2350,2365,2376,2385,2392,2409,2414,2419,2428,2433,2453,2468,2488,2508,2527,2540,2557,2570,2589,2620,2629,2634,2655,2670,2681,2690,2697,2714,2719,2724,2733,2738,2758,2773,2793,2813,2832,2845,2862,2875,2894,2925,2934,2939,2960,2975,2986,2995,3002,3019,3024,3029,3038,3043,3063,3079,3099,3119,3139,3152,3169,3182,3201,3232,3241,3246,3267,3282,3293,3302,3309,3326,3331,3336,3345,3350,3370,3386,3406,3426,3446,3459,3476,3489,3508,3539,3548,3553,3574,3589,3600,3615,3622,3639,3644,3649],{"__ignoreMap":708},[712,1819,1820],{"class":714,"line":715},[712,1821,1823],{"class":1822},"sHwdD","  \u002F\u002F Construct Nodes\n",[712,1825,1826,1828,1831,1833,1835,1837,1839,1841],{"class":714,"line":756},[712,1827,1107],{"class":769},[712,1829,1830],{"class":722}," Conveyor_RTS ",[712,1832,1113],{"class":718},[712,1834,1116],{"class":722},[712,1836,25],{"class":718},[712,1838,1598],{"class":728},[712,1840,731],{"class":722},[712,1842,1603],{"class":718},[712,1844,1845,1847,1849,1851,1853,1856],{"class":714,"line":776},[712,1846,1138],{"class":718},[712,1848,1610],{"class":790},[712,1850,734],{"class":718},[712,1852,1146],{"class":718},[712,1854,1855],{"class":722}," conveyorBools",[712,1857,804],{"class":718},[712,1859,1860,1862,1864,1866,1868,1870,1872,1874],{"class":714,"line":794},[712,1861,1138],{"class":718},[712,1863,1141],{"class":790},[712,1865,734],{"class":718},[712,1867,1146],{"class":718},[712,1869,1149],{"class":718},[712,1871,123],{"class":737},[712,1873,734],{"class":718},[712,1875,804],{"class":718},[712,1877,1878,1880,1882,1884,1886,1888,1891,1893],{"class":714,"line":807},[712,1879,1138],{"class":718},[712,1881,1645],{"class":790},[712,1883,734],{"class":718},[712,1885,1146],{"class":718},[712,1887,1149],{"class":718},[712,1889,1890],{"class":737},"ns=1;s=Conveyor_RTS",[712,1892,734],{"class":718},[712,1894,804],{"class":718},[712,1896,1897,1899,1901,1903,1905,1907,1910,1912],{"class":714,"line":827},[712,1898,1138],{"class":718},[712,1900,1665],{"class":790},[712,1902,734],{"class":718},[712,1904,1146],{"class":718},[712,1906,1149],{"class":718},[712,1908,1909],{"class":737},"Boolean",[712,1911,734],{"class":718},[712,1913,804],{"class":718},[712,1915,1916,1918,1920,1922,1924],{"class":714,"line":835},[712,1917,1138],{"class":718},[712,1919,1685],{"class":790},[712,1921,734],{"class":718},[712,1923,1146],{"class":718},[712,1925,773],{"class":718},[712,1927,1928,1930,1933,1935,1937,1940,1943],{"class":714,"line":848},[712,1929,797],{"class":718},[712,1931,1932],{"class":790},"get",[712,1934,734],{"class":718},[712,1936,1146],{"class":718},[712,1938,1939],{"class":769}," function",[712,1941,1942],{"class":718}," ()",[712,1944,773],{"class":718},[712,1946,1947,1949,1952,1955,1957],{"class":714,"line":876},[712,1948,1775],{"class":1774},[712,1950,1951],{"class":718}," new",[712,1953,1954],{"class":728}," Variant",[712,1956,731],{"class":790},[712,1958,1603],{"class":718},[712,1960,1961,1963,1965,1967,1969,1972,1974,1976],{"class":714,"line":882},[712,1962,1740],{"class":718},[712,1964,1665],{"class":790},[712,1966,734],{"class":718},[712,1968,1146],{"class":718},[712,1970,1971],{"class":722}," DataType",[712,1973,25],{"class":718},[712,1975,1909],{"class":722},[712,1977,804],{"class":718},[712,1979,1980,1982,1984,1986,1988,1991,1993,1995,1997,1999,2001,2003,2005,2007],{"class":714,"line":1482},[712,1981,1740],{"class":718},[712,1983,1685],{"class":790},[712,1985,734],{"class":718},[712,1987,1146],{"class":718},[712,1989,1990],{"class":722}," flexServerInternals",[712,1992,25],{"class":718},[712,1994,723],{"class":722},[712,1996,25],{"class":718},[712,1998,1932],{"class":728},[712,2000,731],{"class":790},[712,2002,734],{"class":718},[712,2004,936],{"class":737},[712,2006,734],{"class":718},[712,2008,1762],{"class":790},[712,2010,2011,2014,2016],{"class":714,"line":1500},[712,2012,2013],{"class":718},"        }",[712,2015,750],{"class":790},[712,2017,753],{"class":718},[712,2019,2020],{"class":714,"line":1509},[712,2021,2022],{"class":718},"      },\n",[712,2024,2025,2027,2029,2031,2033,2035,2038,2040,2042],{"class":714,"line":1531},[712,2026,797],{"class":718},[712,2028,508],{"class":790},[712,2030,734],{"class":718},[712,2032,1146],{"class":718},[712,2034,1939],{"class":769},[712,2036,2037],{"class":718}," (",[712,2039,1716],{"class":1715},[712,2041,750],{"class":718},[712,2043,773],{"class":718},[712,2045,2046,2048,2050,2052,2054,2056],{"class":714,"line":1549},[712,2047,1725],{"class":722},[712,2049,25],{"class":718},[712,2051,723],{"class":722},[712,2053,25],{"class":718},[712,2055,508],{"class":728},[712,2057,791],{"class":790},[712,2059,2060,2062,2064,2066],{"class":714,"line":1803},[712,2061,1740],{"class":718},[712,2063,936],{"class":737},[712,2065,734],{"class":718},[712,2067,804],{"class":718},[712,2069,2071,2074,2076],{"class":714,"line":2070},17,[712,2072,2073],{"class":722},"          variant",[712,2075,25],{"class":718},[712,2077,2078],{"class":722},"value\n",[712,2080,2082,2084],{"class":714,"line":2081},18,[712,2083,1767],{"class":790},[712,2085,753],{"class":718},[712,2087,2089,2091,2093,2095,2097,2099,2101],{"class":714,"line":2088},19,[712,2090,1775],{"class":1774},[712,2092,1778],{"class":722},[712,2094,25],{"class":718},[712,2096,1783],{"class":722},[712,2098,25],{"class":718},[712,2100,1788],{"class":722},[712,2102,753],{"class":718},[712,2104,2106],{"class":714,"line":2105},20,[712,2107,1795],{"class":718},[712,2109,2111],{"class":714,"line":2110},21,[712,2112,1800],{"class":718},[712,2114,2116,2118,2120],{"class":714,"line":2115},22,[712,2117,1160],{"class":718},[712,2119,750],{"class":722},[712,2121,753],{"class":718},[712,2123,2125],{"class":714,"line":2124},23,[712,2126,2127],{"emptyLinePlaceholder":440},"\n",[712,2129,2131,2133,2136,2138,2140,2142,2144,2146],{"class":714,"line":2130},24,[712,2132,1107],{"class":769},[712,2134,2135],{"class":722}," Robot_RTS ",[712,2137,1113],{"class":718},[712,2139,1116],{"class":722},[712,2141,25],{"class":718},[712,2143,1598],{"class":728},[712,2145,731],{"class":722},[712,2147,1603],{"class":718},[712,2149,2151,2153,2155,2157,2159,2161],{"class":714,"line":2150},25,[712,2152,1138],{"class":718},[712,2154,1610],{"class":790},[712,2156,734],{"class":718},[712,2158,1146],{"class":718},[712,2160,1855],{"class":722},[712,2162,804],{"class":718},[712,2164,2166,2168,2170,2172,2174,2176,2179,2181],{"class":714,"line":2165},26,[712,2167,1138],{"class":718},[712,2169,1141],{"class":790},[712,2171,734],{"class":718},[712,2173,1146],{"class":718},[712,2175,1149],{"class":718},[712,2177,2178],{"class":737},"Robot Ready to Start",[712,2180,734],{"class":718},[712,2182,804],{"class":718},[712,2184,2186,2188,2190,2192,2194,2196,2199,2201],{"class":714,"line":2185},27,[712,2187,1138],{"class":718},[712,2189,1645],{"class":790},[712,2191,734],{"class":718},[712,2193,1146],{"class":718},[712,2195,1149],{"class":718},[712,2197,2198],{"class":737},"ns=1;s=Robot_RTS",[712,2200,734],{"class":718},[712,2202,804],{"class":718},[712,2204,2206,2208,2210,2212,2214,2216,2218,2220],{"class":714,"line":2205},28,[712,2207,1138],{"class":718},[712,2209,1665],{"class":790},[712,2211,734],{"class":718},[712,2213,1146],{"class":718},[712,2215,1149],{"class":718},[712,2217,1909],{"class":737},[712,2219,734],{"class":718},[712,2221,804],{"class":718},[712,2223,2225,2227,2229,2231,2233],{"class":714,"line":2224},29,[712,2226,1138],{"class":718},[712,2228,1685],{"class":790},[712,2230,734],{"class":718},[712,2232,1146],{"class":718},[712,2234,773],{"class":718},[712,2236,2238,2240,2242,2244,2246,2248,2250],{"class":714,"line":2237},30,[712,2239,797],{"class":718},[712,2241,1932],{"class":790},[712,2243,734],{"class":718},[712,2245,1146],{"class":718},[712,2247,1939],{"class":769},[712,2249,1942],{"class":718},[712,2251,773],{"class":718},[712,2253,2255,2257,2259,2261,2263],{"class":714,"line":2254},31,[712,2256,1775],{"class":1774},[712,2258,1951],{"class":718},[712,2260,1954],{"class":728},[712,2262,731],{"class":790},[712,2264,1603],{"class":718},[712,2266,2268,2270,2272,2274,2276,2278,2280,2282],{"class":714,"line":2267},32,[712,2269,1740],{"class":718},[712,2271,1665],{"class":790},[712,2273,734],{"class":718},[712,2275,1146],{"class":718},[712,2277,1971],{"class":722},[712,2279,25],{"class":718},[712,2281,1909],{"class":722},[712,2283,804],{"class":718},[712,2285,2287,2289,2291,2293,2295,2297,2299,2301,2303,2305,2307,2309,2311,2313],{"class":714,"line":2286},33,[712,2288,1740],{"class":718},[712,2290,1685],{"class":790},[712,2292,734],{"class":718},[712,2294,1146],{"class":718},[712,2296,1990],{"class":722},[712,2298,25],{"class":718},[712,2300,723],{"class":722},[712,2302,25],{"class":718},[712,2304,1932],{"class":728},[712,2306,731],{"class":790},[712,2308,734],{"class":718},[712,2310,965],{"class":737},[712,2312,734],{"class":718},[712,2314,1762],{"class":790},[712,2316,2318,2320,2322],{"class":714,"line":2317},34,[712,2319,2013],{"class":718},[712,2321,750],{"class":790},[712,2323,753],{"class":718},[712,2325,2327],{"class":714,"line":2326},35,[712,2328,2022],{"class":718},[712,2330,2332,2334,2336,2338,2340,2342,2344,2346,2348],{"class":714,"line":2331},36,[712,2333,797],{"class":718},[712,2335,508],{"class":790},[712,2337,734],{"class":718},[712,2339,1146],{"class":718},[712,2341,1939],{"class":769},[712,2343,2037],{"class":718},[712,2345,1716],{"class":1715},[712,2347,750],{"class":718},[712,2349,773],{"class":718},[712,2351,2353,2355,2357,2359,2361,2363],{"class":714,"line":2352},37,[712,2354,1725],{"class":722},[712,2356,25],{"class":718},[712,2358,723],{"class":722},[712,2360,25],{"class":718},[712,2362,508],{"class":728},[712,2364,791],{"class":790},[712,2366,2368,2370,2372,2374],{"class":714,"line":2367},38,[712,2369,1740],{"class":718},[712,2371,965],{"class":737},[712,2373,734],{"class":718},[712,2375,804],{"class":718},[712,2377,2379,2381,2383],{"class":714,"line":2378},39,[712,2380,2073],{"class":722},[712,2382,25],{"class":718},[712,2384,2078],{"class":722},[712,2386,2388,2390],{"class":714,"line":2387},40,[712,2389,1767],{"class":790},[712,2391,753],{"class":718},[712,2393,2395,2397,2399,2401,2403,2405,2407],{"class":714,"line":2394},41,[712,2396,1775],{"class":1774},[712,2398,1778],{"class":722},[712,2400,25],{"class":718},[712,2402,1783],{"class":722},[712,2404,25],{"class":718},[712,2406,1788],{"class":722},[712,2408,753],{"class":718},[712,2410,2412],{"class":714,"line":2411},42,[712,2413,1795],{"class":718},[712,2415,2417],{"class":714,"line":2416},43,[712,2418,1800],{"class":718},[712,2420,2422,2424,2426],{"class":714,"line":2421},44,[712,2423,1160],{"class":718},[712,2425,750],{"class":722},[712,2427,753],{"class":718},[712,2429,2431],{"class":714,"line":2430},45,[712,2432,2127],{"emptyLinePlaceholder":440},[712,2434,2436,2438,2441,2443,2445,2447,2449,2451],{"class":714,"line":2435},46,[712,2437,1107],{"class":769},[712,2439,2440],{"class":722}," Conveyor_Running ",[712,2442,1113],{"class":718},[712,2444,1116],{"class":722},[712,2446,25],{"class":718},[712,2448,1598],{"class":728},[712,2450,731],{"class":722},[712,2452,1603],{"class":718},[712,2454,2456,2458,2460,2462,2464,2466],{"class":714,"line":2455},47,[712,2457,1138],{"class":718},[712,2459,1610],{"class":790},[712,2461,734],{"class":718},[712,2463,1146],{"class":718},[712,2465,1855],{"class":722},[712,2467,804],{"class":718},[712,2469,2471,2473,2475,2477,2479,2481,2484,2486],{"class":714,"line":2470},48,[712,2472,1138],{"class":718},[712,2474,1141],{"class":790},[712,2476,734],{"class":718},[712,2478,1146],{"class":718},[712,2480,1149],{"class":718},[712,2482,2483],{"class":737},"Conveyor Running",[712,2485,734],{"class":718},[712,2487,804],{"class":718},[712,2489,2491,2493,2495,2497,2499,2501,2504,2506],{"class":714,"line":2490},49,[712,2492,1138],{"class":718},[712,2494,1645],{"class":790},[712,2496,734],{"class":718},[712,2498,1146],{"class":718},[712,2500,1149],{"class":718},[712,2502,2503],{"class":737},"ns=1;s=Conveyor_Running",[712,2505,734],{"class":718},[712,2507,804],{"class":718},[712,2509,2511,2513,2515,2517,2519,2521,2523,2525],{"class":714,"line":2510},50,[712,2512,1138],{"class":718},[712,2514,1665],{"class":790},[712,2516,734],{"class":718},[712,2518,1146],{"class":718},[712,2520,1149],{"class":718},[712,2522,1909],{"class":737},[712,2524,734],{"class":718},[712,2526,804],{"class":718},[712,2528,2530,2532,2534,2536,2538],{"class":714,"line":2529},51,[712,2531,1138],{"class":718},[712,2533,1685],{"class":790},[712,2535,734],{"class":718},[712,2537,1146],{"class":718},[712,2539,773],{"class":718},[712,2541,2543,2545,2547,2549,2551,2553,2555],{"class":714,"line":2542},52,[712,2544,797],{"class":718},[712,2546,1932],{"class":790},[712,2548,734],{"class":718},[712,2550,1146],{"class":718},[712,2552,1939],{"class":769},[712,2554,1942],{"class":718},[712,2556,773],{"class":718},[712,2558,2560,2562,2564,2566,2568],{"class":714,"line":2559},53,[712,2561,1775],{"class":1774},[712,2563,1951],{"class":718},[712,2565,1954],{"class":728},[712,2567,731],{"class":790},[712,2569,1603],{"class":718},[712,2571,2573,2575,2577,2579,2581,2583,2585,2587],{"class":714,"line":2572},54,[712,2574,1740],{"class":718},[712,2576,1665],{"class":790},[712,2578,734],{"class":718},[712,2580,1146],{"class":718},[712,2582,1971],{"class":722},[712,2584,25],{"class":718},[712,2586,1909],{"class":722},[712,2588,804],{"class":718},[712,2590,2592,2594,2596,2598,2600,2602,2604,2606,2608,2610,2612,2614,2616,2618],{"class":714,"line":2591},55,[712,2593,1740],{"class":718},[712,2595,1685],{"class":790},[712,2597,734],{"class":718},[712,2599,1146],{"class":718},[712,2601,1990],{"class":722},[712,2603,25],{"class":718},[712,2605,723],{"class":722},[712,2607,25],{"class":718},[712,2609,1932],{"class":728},[712,2611,731],{"class":790},[712,2613,734],{"class":718},[712,2615,1019],{"class":737},[712,2617,734],{"class":718},[712,2619,1762],{"class":790},[712,2621,2623,2625,2627],{"class":714,"line":2622},56,[712,2624,2013],{"class":718},[712,2626,750],{"class":790},[712,2628,753],{"class":718},[712,2630,2632],{"class":714,"line":2631},57,[712,2633,2022],{"class":718},[712,2635,2637,2639,2641,2643,2645,2647,2649,2651,2653],{"class":714,"line":2636},58,[712,2638,797],{"class":718},[712,2640,508],{"class":790},[712,2642,734],{"class":718},[712,2644,1146],{"class":718},[712,2646,1939],{"class":769},[712,2648,2037],{"class":718},[712,2650,1716],{"class":1715},[712,2652,750],{"class":718},[712,2654,773],{"class":718},[712,2656,2658,2660,2662,2664,2666,2668],{"class":714,"line":2657},59,[712,2659,1725],{"class":722},[712,2661,25],{"class":718},[712,2663,723],{"class":722},[712,2665,25],{"class":718},[712,2667,508],{"class":728},[712,2669,791],{"class":790},[712,2671,2673,2675,2677,2679],{"class":714,"line":2672},60,[712,2674,1740],{"class":718},[712,2676,1019],{"class":737},[712,2678,734],{"class":718},[712,2680,804],{"class":718},[712,2682,2684,2686,2688],{"class":714,"line":2683},61,[712,2685,2073],{"class":722},[712,2687,25],{"class":718},[712,2689,2078],{"class":722},[712,2691,2693,2695],{"class":714,"line":2692},62,[712,2694,1767],{"class":790},[712,2696,753],{"class":718},[712,2698,2700,2702,2704,2706,2708,2710,2712],{"class":714,"line":2699},63,[712,2701,1775],{"class":1774},[712,2703,1778],{"class":722},[712,2705,25],{"class":718},[712,2707,1783],{"class":722},[712,2709,25],{"class":718},[712,2711,1788],{"class":722},[712,2713,753],{"class":718},[712,2715,2717],{"class":714,"line":2716},64,[712,2718,1795],{"class":718},[712,2720,2722],{"class":714,"line":2721},65,[712,2723,1800],{"class":718},[712,2725,2727,2729,2731],{"class":714,"line":2726},66,[712,2728,1160],{"class":718},[712,2730,750],{"class":722},[712,2732,753],{"class":718},[712,2734,2736],{"class":714,"line":2735},67,[712,2737,2127],{"emptyLinePlaceholder":440},[712,2739,2741,2743,2746,2748,2750,2752,2754,2756],{"class":714,"line":2740},68,[712,2742,1107],{"class":769},[712,2744,2745],{"class":722}," Line4_Fault ",[712,2747,1113],{"class":718},[712,2749,1116],{"class":722},[712,2751,25],{"class":718},[712,2753,1598],{"class":728},[712,2755,731],{"class":722},[712,2757,1603],{"class":718},[712,2759,2761,2763,2765,2767,2769,2771],{"class":714,"line":2760},69,[712,2762,1138],{"class":718},[712,2764,1610],{"class":790},[712,2766,734],{"class":718},[712,2768,1146],{"class":718},[712,2770,1855],{"class":722},[712,2772,804],{"class":718},[712,2774,2776,2778,2780,2782,2784,2786,2789,2791],{"class":714,"line":2775},70,[712,2777,1138],{"class":718},[712,2779,1141],{"class":790},[712,2781,734],{"class":718},[712,2783,1146],{"class":718},[712,2785,1149],{"class":718},[712,2787,2788],{"class":737},"Line 4 Faulted",[712,2790,734],{"class":718},[712,2792,804],{"class":718},[712,2794,2796,2798,2800,2802,2804,2806,2809,2811],{"class":714,"line":2795},71,[712,2797,1138],{"class":718},[712,2799,1645],{"class":790},[712,2801,734],{"class":718},[712,2803,1146],{"class":718},[712,2805,1149],{"class":718},[712,2807,2808],{"class":737},"ns=1;s=Line4_Fault",[712,2810,734],{"class":718},[712,2812,804],{"class":718},[712,2814,2816,2818,2820,2822,2824,2826,2828,2830],{"class":714,"line":2815},72,[712,2817,1138],{"class":718},[712,2819,1665],{"class":790},[712,2821,734],{"class":718},[712,2823,1146],{"class":718},[712,2825,1149],{"class":718},[712,2827,1909],{"class":737},[712,2829,734],{"class":718},[712,2831,804],{"class":718},[712,2833,2835,2837,2839,2841,2843],{"class":714,"line":2834},73,[712,2836,1138],{"class":718},[712,2838,1685],{"class":790},[712,2840,734],{"class":718},[712,2842,1146],{"class":718},[712,2844,773],{"class":718},[712,2846,2848,2850,2852,2854,2856,2858,2860],{"class":714,"line":2847},74,[712,2849,797],{"class":718},[712,2851,1932],{"class":790},[712,2853,734],{"class":718},[712,2855,1146],{"class":718},[712,2857,1939],{"class":769},[712,2859,1942],{"class":718},[712,2861,773],{"class":718},[712,2863,2865,2867,2869,2871,2873],{"class":714,"line":2864},75,[712,2866,1775],{"class":1774},[712,2868,1951],{"class":718},[712,2870,1954],{"class":728},[712,2872,731],{"class":790},[712,2874,1603],{"class":718},[712,2876,2878,2880,2882,2884,2886,2888,2890,2892],{"class":714,"line":2877},76,[712,2879,1740],{"class":718},[712,2881,1665],{"class":790},[712,2883,734],{"class":718},[712,2885,1146],{"class":718},[712,2887,1971],{"class":722},[712,2889,25],{"class":718},[712,2891,1909],{"class":722},[712,2893,804],{"class":718},[712,2895,2897,2899,2901,2903,2905,2907,2909,2911,2913,2915,2917,2919,2921,2923],{"class":714,"line":2896},77,[712,2898,1740],{"class":718},[712,2900,1685],{"class":790},[712,2902,734],{"class":718},[712,2904,1146],{"class":718},[712,2906,1990],{"class":722},[712,2908,25],{"class":718},[712,2910,723],{"class":722},[712,2912,25],{"class":718},[712,2914,1932],{"class":728},[712,2916,731],{"class":790},[712,2918,734],{"class":718},[712,2920,1073],{"class":737},[712,2922,734],{"class":718},[712,2924,1762],{"class":790},[712,2926,2928,2930,2932],{"class":714,"line":2927},78,[712,2929,2013],{"class":718},[712,2931,750],{"class":790},[712,2933,753],{"class":718},[712,2935,2937],{"class":714,"line":2936},79,[712,2938,2022],{"class":718},[712,2940,2942,2944,2946,2948,2950,2952,2954,2956,2958],{"class":714,"line":2941},80,[712,2943,797],{"class":718},[712,2945,508],{"class":790},[712,2947,734],{"class":718},[712,2949,1146],{"class":718},[712,2951,1939],{"class":769},[712,2953,2037],{"class":718},[712,2955,1716],{"class":1715},[712,2957,750],{"class":718},[712,2959,773],{"class":718},[712,2961,2963,2965,2967,2969,2971,2973],{"class":714,"line":2962},81,[712,2964,1725],{"class":722},[712,2966,25],{"class":718},[712,2968,723],{"class":722},[712,2970,25],{"class":718},[712,2972,508],{"class":728},[712,2974,791],{"class":790},[712,2976,2978,2980,2982,2984],{"class":714,"line":2977},82,[712,2979,1740],{"class":718},[712,2981,1073],{"class":737},[712,2983,734],{"class":718},[712,2985,804],{"class":718},[712,2987,2989,2991,2993],{"class":714,"line":2988},83,[712,2990,2073],{"class":722},[712,2992,25],{"class":718},[712,2994,2078],{"class":722},[712,2996,2998,3000],{"class":714,"line":2997},84,[712,2999,1767],{"class":790},[712,3001,753],{"class":718},[712,3003,3005,3007,3009,3011,3013,3015,3017],{"class":714,"line":3004},85,[712,3006,1775],{"class":1774},[712,3008,1778],{"class":722},[712,3010,25],{"class":718},[712,3012,1783],{"class":722},[712,3014,25],{"class":718},[712,3016,1788],{"class":722},[712,3018,753],{"class":718},[712,3020,3022],{"class":714,"line":3021},86,[712,3023,1795],{"class":718},[712,3025,3027],{"class":714,"line":3026},87,[712,3028,1800],{"class":718},[712,3030,3032,3034,3036],{"class":714,"line":3031},88,[712,3033,1160],{"class":718},[712,3035,750],{"class":722},[712,3037,753],{"class":718},[712,3039,3041],{"class":714,"line":3040},89,[712,3042,2127],{"emptyLinePlaceholder":440},[712,3044,3046,3048,3051,3053,3055,3057,3059,3061],{"class":714,"line":3045},90,[712,3047,1107],{"class":769},[712,3049,3050],{"class":722}," Line4_State ",[712,3052,1113],{"class":718},[712,3054,1116],{"class":722},[712,3056,25],{"class":718},[712,3058,1598],{"class":728},[712,3060,731],{"class":722},[712,3062,1603],{"class":718},[712,3064,3066,3068,3070,3072,3074,3077],{"class":714,"line":3065},91,[712,3067,1138],{"class":718},[712,3069,1610],{"class":790},[712,3071,734],{"class":718},[712,3073,1146],{"class":718},[712,3075,3076],{"class":722}," conveyorDINTs",[712,3078,804],{"class":718},[712,3080,3082,3084,3086,3088,3090,3092,3095,3097],{"class":714,"line":3081},92,[712,3083,1138],{"class":718},[712,3085,1141],{"class":790},[712,3087,734],{"class":718},[712,3089,1146],{"class":718},[712,3091,1149],{"class":718},[712,3093,3094],{"class":737},"Line 4 State",[712,3096,734],{"class":718},[712,3098,804],{"class":718},[712,3100,3102,3104,3106,3108,3110,3112,3115,3117],{"class":714,"line":3101},93,[712,3103,1138],{"class":718},[712,3105,1645],{"class":790},[712,3107,734],{"class":718},[712,3109,1146],{"class":718},[712,3111,1149],{"class":718},[712,3113,3114],{"class":737},"ns=1;s=Line4_State",[712,3116,734],{"class":718},[712,3118,804],{"class":718},[712,3120,3122,3124,3126,3128,3130,3132,3135,3137],{"class":714,"line":3121},94,[712,3123,1138],{"class":718},[712,3125,1665],{"class":790},[712,3127,734],{"class":718},[712,3129,1146],{"class":718},[712,3131,1149],{"class":718},[712,3133,3134],{"class":737},"Int32",[712,3136,734],{"class":718},[712,3138,804],{"class":718},[712,3140,3142,3144,3146,3148,3150],{"class":714,"line":3141},95,[712,3143,1138],{"class":718},[712,3145,1685],{"class":790},[712,3147,734],{"class":718},[712,3149,1146],{"class":718},[712,3151,773],{"class":718},[712,3153,3155,3157,3159,3161,3163,3165,3167],{"class":714,"line":3154},96,[712,3156,797],{"class":718},[712,3158,1932],{"class":790},[712,3160,734],{"class":718},[712,3162,1146],{"class":718},[712,3164,1939],{"class":769},[712,3166,1942],{"class":718},[712,3168,773],{"class":718},[712,3170,3172,3174,3176,3178,3180],{"class":714,"line":3171},97,[712,3173,1775],{"class":1774},[712,3175,1951],{"class":718},[712,3177,1954],{"class":728},[712,3179,731],{"class":790},[712,3181,1603],{"class":718},[712,3183,3185,3187,3189,3191,3193,3195,3197,3199],{"class":714,"line":3184},98,[712,3186,1740],{"class":718},[712,3188,1665],{"class":790},[712,3190,734],{"class":718},[712,3192,1146],{"class":718},[712,3194,1971],{"class":722},[712,3196,25],{"class":718},[712,3198,3134],{"class":722},[712,3200,804],{"class":718},[712,3202,3204,3206,3208,3210,3212,3214,3216,3218,3220,3222,3224,3226,3228,3230],{"class":714,"line":3203},99,[712,3205,1740],{"class":718},[712,3207,1685],{"class":790},[712,3209,734],{"class":718},[712,3211,1146],{"class":718},[712,3213,1990],{"class":722},[712,3215,25],{"class":718},[712,3217,723],{"class":722},[712,3219,25],{"class":718},[712,3221,1932],{"class":728},[712,3223,731],{"class":790},[712,3225,734],{"class":718},[712,3227,1046],{"class":737},[712,3229,734],{"class":718},[712,3231,1762],{"class":790},[712,3233,3235,3237,3239],{"class":714,"line":3234},100,[712,3236,2013],{"class":718},[712,3238,750],{"class":790},[712,3240,753],{"class":718},[712,3242,3244],{"class":714,"line":3243},101,[712,3245,2022],{"class":718},[712,3247,3249,3251,3253,3255,3257,3259,3261,3263,3265],{"class":714,"line":3248},102,[712,3250,797],{"class":718},[712,3252,508],{"class":790},[712,3254,734],{"class":718},[712,3256,1146],{"class":718},[712,3258,1939],{"class":769},[712,3260,2037],{"class":718},[712,3262,1716],{"class":1715},[712,3264,750],{"class":718},[712,3266,773],{"class":718},[712,3268,3270,3272,3274,3276,3278,3280],{"class":714,"line":3269},103,[712,3271,1725],{"class":722},[712,3273,25],{"class":718},[712,3275,723],{"class":722},[712,3277,25],{"class":718},[712,3279,508],{"class":728},[712,3281,791],{"class":790},[712,3283,3285,3287,3289,3291],{"class":714,"line":3284},104,[712,3286,1740],{"class":718},[712,3288,1046],{"class":737},[712,3290,734],{"class":718},[712,3292,804],{"class":718},[712,3294,3296,3298,3300],{"class":714,"line":3295},105,[712,3297,2073],{"class":722},[712,3299,25],{"class":718},[712,3301,2078],{"class":722},[712,3303,3305,3307],{"class":714,"line":3304},106,[712,3306,1767],{"class":790},[712,3308,753],{"class":718},[712,3310,3312,3314,3316,3318,3320,3322,3324],{"class":714,"line":3311},107,[712,3313,1775],{"class":1774},[712,3315,1778],{"class":722},[712,3317,25],{"class":718},[712,3319,1783],{"class":722},[712,3321,25],{"class":718},[712,3323,1788],{"class":722},[712,3325,753],{"class":718},[712,3327,3329],{"class":714,"line":3328},108,[712,3330,1795],{"class":718},[712,3332,3334],{"class":714,"line":3333},109,[712,3335,1800],{"class":718},[712,3337,3339,3341,3343],{"class":714,"line":3338},110,[712,3340,1160],{"class":718},[712,3342,750],{"class":722},[712,3344,753],{"class":718},[712,3346,3348],{"class":714,"line":3347},111,[712,3349,2127],{"emptyLinePlaceholder":440},[712,3351,3353,3355,3358,3360,3362,3364,3366,3368],{"class":714,"line":3352},112,[712,3354,1107],{"class":769},[712,3356,3357],{"class":722}," Robot_Position ",[712,3359,1113],{"class":718},[712,3361,1116],{"class":722},[712,3363,25],{"class":718},[712,3365,1598],{"class":728},[712,3367,731],{"class":722},[712,3369,1603],{"class":718},[712,3371,3373,3375,3377,3379,3381,3384],{"class":714,"line":3372},113,[712,3374,1138],{"class":718},[712,3376,1610],{"class":790},[712,3378,734],{"class":718},[712,3380,1146],{"class":718},[712,3382,3383],{"class":722}," conveyorFloats",[712,3385,804],{"class":718},[712,3387,3389,3391,3393,3395,3397,3399,3402,3404],{"class":714,"line":3388},114,[712,3390,1138],{"class":718},[712,3392,1141],{"class":790},[712,3394,734],{"class":718},[712,3396,1146],{"class":718},[712,3398,1149],{"class":718},[712,3400,3401],{"class":737},"Robot Axis A1 Position",[712,3403,734],{"class":718},[712,3405,804],{"class":718},[712,3407,3409,3411,3413,3415,3417,3419,3422,3424],{"class":714,"line":3408},115,[712,3410,1138],{"class":718},[712,3412,1645],{"class":790},[712,3414,734],{"class":718},[712,3416,1146],{"class":718},[712,3418,1149],{"class":718},[712,3420,3421],{"class":737},"ns=1;s=Robot_Position",[712,3423,734],{"class":718},[712,3425,804],{"class":718},[712,3427,3429,3431,3433,3435,3437,3439,3442,3444],{"class":714,"line":3428},116,[712,3430,1138],{"class":718},[712,3432,1665],{"class":790},[712,3434,734],{"class":718},[712,3436,1146],{"class":718},[712,3438,1149],{"class":718},[712,3440,3441],{"class":737},"Float",[712,3443,734],{"class":718},[712,3445,804],{"class":718},[712,3447,3449,3451,3453,3455,3457],{"class":714,"line":3448},117,[712,3450,1138],{"class":718},[712,3452,1685],{"class":790},[712,3454,734],{"class":718},[712,3456,1146],{"class":718},[712,3458,773],{"class":718},[712,3460,3462,3464,3466,3468,3470,3472,3474],{"class":714,"line":3461},118,[712,3463,797],{"class":718},[712,3465,1932],{"class":790},[712,3467,734],{"class":718},[712,3469,1146],{"class":718},[712,3471,1939],{"class":769},[712,3473,1942],{"class":718},[712,3475,773],{"class":718},[712,3477,3479,3481,3483,3485,3487],{"class":714,"line":3478},119,[712,3480,1775],{"class":1774},[712,3482,1951],{"class":718},[712,3484,1954],{"class":728},[712,3486,731],{"class":790},[712,3488,1603],{"class":718},[712,3490,3492,3494,3496,3498,3500,3502,3504,3506],{"class":714,"line":3491},120,[712,3493,1740],{"class":718},[712,3495,1665],{"class":790},[712,3497,734],{"class":718},[712,3499,1146],{"class":718},[712,3501,1971],{"class":722},[712,3503,25],{"class":718},[712,3505,3441],{"class":722},[712,3507,804],{"class":718},[712,3509,3511,3513,3515,3517,3519,3521,3523,3525,3527,3529,3531,3533,3535,3537],{"class":714,"line":3510},121,[712,3512,1740],{"class":718},[712,3514,1685],{"class":790},[712,3516,734],{"class":718},[712,3518,1146],{"class":718},[712,3520,1990],{"class":722},[712,3522,25],{"class":718},[712,3524,723],{"class":722},[712,3526,25],{"class":718},[712,3528,1932],{"class":728},[712,3530,731],{"class":790},[712,3532,734],{"class":718},[712,3534,992],{"class":737},[712,3536,734],{"class":718},[712,3538,1762],{"class":790},[712,3540,3542,3544,3546],{"class":714,"line":3541},122,[712,3543,2013],{"class":718},[712,3545,750],{"class":790},[712,3547,753],{"class":718},[712,3549,3551],{"class":714,"line":3550},123,[712,3552,2022],{"class":718},[712,3554,3556,3558,3560,3562,3564,3566,3568,3570,3572],{"class":714,"line":3555},124,[712,3557,797],{"class":718},[712,3559,508],{"class":790},[712,3561,734],{"class":718},[712,3563,1146],{"class":718},[712,3565,1939],{"class":769},[712,3567,2037],{"class":718},[712,3569,1716],{"class":1715},[712,3571,750],{"class":718},[712,3573,773],{"class":718},[712,3575,3577,3579,3581,3583,3585,3587],{"class":714,"line":3576},125,[712,3578,1725],{"class":722},[712,3580,25],{"class":718},[712,3582,723],{"class":722},[712,3584,25],{"class":718},[712,3586,508],{"class":728},[712,3588,791],{"class":790},[712,3590,3592,3594,3596,3598],{"class":714,"line":3591},126,[712,3593,1740],{"class":718},[712,3595,992],{"class":737},[712,3597,734],{"class":718},[712,3599,804],{"class":718},[712,3601,3603,3605,3607,3609,3611,3613],{"class":714,"line":3602},127,[712,3604,1751],{"class":728},[712,3606,731],{"class":790},[712,3608,1716],{"class":722},[712,3610,25],{"class":718},[712,3612,1685],{"class":722},[712,3614,1762],{"class":790},[712,3616,3618,3620],{"class":714,"line":3617},128,[712,3619,1767],{"class":790},[712,3621,753],{"class":718},[712,3623,3625,3627,3629,3631,3633,3635,3637],{"class":714,"line":3624},129,[712,3626,1775],{"class":1774},[712,3628,1778],{"class":722},[712,3630,25],{"class":718},[712,3632,1783],{"class":722},[712,3634,25],{"class":718},[712,3636,1788],{"class":722},[712,3638,753],{"class":718},[712,3640,3642],{"class":714,"line":3641},130,[712,3643,1795],{"class":718},[712,3645,3647],{"class":714,"line":3646},131,[712,3648,1800],{"class":718},[712,3650,3652,3654,3656],{"class":714,"line":3651},132,[712,3653,1160],{"class":718},[712,3655,750],{"class":722},[712,3657,753],{"class":718},[695,3659,3661],{"id":3660},"define-browser-views","Define Browser Views",[14,3663,3664],{},"Last, let’s create some custom views. Delete the code starting from -",[703,3666,3668],{"className":705,"code":3667,"language":707,"meta":708,"style":708},"  \u002F\u002F------------------------------------------------------------------------------\n  \u002F\u002F Add a view\n  \u002F\u002F------------------------------------------------------------------------------\n  const viewDI = namespace.addView({\n    \"organizedBy\": rootFolder.views,\n    \"browseName\": \"RPIW0-Digital-Ins\"\n  });\n  ...\n    viewDO.addReference({\n    \"referenceType\": \"Organizes\",\n    \"nodeId\": gpioDO8.nodeId\n  });\n",[187,3669,3670,3675,3680,3684,3704,3724,3741,3749,3754,3768,3788,3806],{"__ignoreMap":708},[712,3671,3672],{"class":714,"line":715},[712,3673,3674],{"class":1822},"  \u002F\u002F------------------------------------------------------------------------------\n",[712,3676,3677],{"class":714,"line":756},[712,3678,3679],{"class":1822},"  \u002F\u002F Add a view\n",[712,3681,3682],{"class":714,"line":776},[712,3683,3674],{"class":1822},[712,3685,3686,3688,3691,3693,3695,3697,3700,3702],{"class":714,"line":794},[712,3687,1107],{"class":769},[712,3689,3690],{"class":722}," viewDI ",[712,3692,1113],{"class":718},[712,3694,1116],{"class":722},[712,3696,25],{"class":718},[712,3698,3699],{"class":728},"addView",[712,3701,731],{"class":722},[712,3703,1603],{"class":718},[712,3705,3706,3708,3710,3712,3714,3717,3719,3722],{"class":714,"line":807},[712,3707,1138],{"class":718},[712,3709,1610],{"class":790},[712,3711,734],{"class":718},[712,3713,1146],{"class":718},[712,3715,3716],{"class":722}," rootFolder",[712,3718,25],{"class":718},[712,3720,3721],{"class":722},"views",[712,3723,804],{"class":718},[712,3725,3726,3728,3730,3732,3734,3736,3739],{"class":714,"line":827},[712,3727,1138],{"class":718},[712,3729,1141],{"class":790},[712,3731,734],{"class":718},[712,3733,1146],{"class":718},[712,3735,1149],{"class":718},[712,3737,3738],{"class":737},"RPIW0-Digital-Ins",[712,3740,1155],{"class":718},[712,3742,3743,3745,3747],{"class":714,"line":835},[712,3744,1160],{"class":718},[712,3746,750],{"class":722},[712,3748,753],{"class":718},[712,3750,3751],{"class":714,"line":848},[712,3752,3753],{"class":718},"  ...\n",[712,3755,3756,3759,3761,3764,3766],{"class":714,"line":876},[712,3757,3758],{"class":722},"    viewDO",[712,3760,25],{"class":718},[712,3762,3763],{"class":728},"addReference",[712,3765,731],{"class":722},[712,3767,1603],{"class":718},[712,3769,3770,3772,3775,3777,3779,3781,3784,3786],{"class":714,"line":882},[712,3771,1138],{"class":718},[712,3773,3774],{"class":790},"referenceType",[712,3776,734],{"class":718},[712,3778,1146],{"class":718},[712,3780,1149],{"class":718},[712,3782,3783],{"class":737},"Organizes",[712,3785,734],{"class":718},[712,3787,804],{"class":718},[712,3789,3790,3792,3794,3796,3798,3801,3803],{"class":714,"line":1482},[712,3791,1138],{"class":718},[712,3793,1645],{"class":790},[712,3795,734],{"class":718},[712,3797,1146],{"class":718},[712,3799,3800],{"class":722}," gpioDO8",[712,3802,25],{"class":718},[712,3804,3805],{"class":722},"nodeId\n",[712,3807,3808,3810,3812],{"class":714,"line":1500},[712,3809,1160],{"class":718},[712,3811,750],{"class":722},[712,3813,753],{"class":718},[14,3815,3816],{},"And replace with a custom view of your choice.  I’ve defined a view that splits the bools, DINTs, and Reals.",[703,3818,3820],{"className":705,"code":3819,"language":707,"meta":708,"style":708},"  const viewBools = namespace.addView({\n    \"organizedBy\": rootFolder.views,\n    \"browseName\": \"Line 4 Conveyor Bools\"\n  });\n\n  const viewDINTs = namespace.addView({\n    \"organizedBy\": rootFolder.views,\n    \"browseName\": \"Line4 Conveyor DINTs\"\n  });\n\n  const viewFloats = namespace.addView({\n    \"organizedBy\": rootFolder.views,\n    \"browseName\": \"Line4 Conveyor Floats\"\n  });\n\n  viewBools.addReference({\n    \"referenceType\": \"Organizes\",\n    \"nodeId\": Conveyor_RTS.nodeId\n  });\n\n  viewBools.addReference({\n    \"referenceType\": \"Organizes\",\n    \"nodeId\": Robot_RTS.nodeId\n  });\n\n  viewBools.addReference({\n    \"referenceType\": \"Organizes\",\n    \"nodeId\": Conveyor_Running.nodeId\n  });\n\n  viewBools.addReference({\n    \"referenceType\": \"Organizes\",\n    \"nodeId\": Line4_Fault.nodeId\n  });\n\n\n  viewDINTs.addReference({\n    \"referenceType\": \"Organizes\",\n    \"nodeId\": Line4_State.nodeId\n  });\n\n  viewFloats.addReference({\n    \"referenceType\": \"Organizes\",\n    \"nodeId\": Robot_Position.nodeId\n  });\n",[187,3821,3822,3841,3859,3876,3884,3888,3907,3925,3942,3950,3954,3973,3991,4008,4016,4020,4033,4051,4068,4076,4080,4092,4110,4127,4135,4139,4151,4169,4186,4194,4198,4210,4228,4245,4253,4257,4261,4274,4292,4309,4317,4321,4334,4352,4369],{"__ignoreMap":708},[712,3823,3824,3826,3829,3831,3833,3835,3837,3839],{"class":714,"line":715},[712,3825,1107],{"class":769},[712,3827,3828],{"class":722}," viewBools ",[712,3830,1113],{"class":718},[712,3832,1116],{"class":722},[712,3834,25],{"class":718},[712,3836,3699],{"class":728},[712,3838,731],{"class":722},[712,3840,1603],{"class":718},[712,3842,3843,3845,3847,3849,3851,3853,3855,3857],{"class":714,"line":756},[712,3844,1138],{"class":718},[712,3846,1610],{"class":790},[712,3848,734],{"class":718},[712,3850,1146],{"class":718},[712,3852,3716],{"class":722},[712,3854,25],{"class":718},[712,3856,3721],{"class":722},[712,3858,804],{"class":718},[712,3860,3861,3863,3865,3867,3869,3871,3874],{"class":714,"line":776},[712,3862,1138],{"class":718},[712,3864,1141],{"class":790},[712,3866,734],{"class":718},[712,3868,1146],{"class":718},[712,3870,1149],{"class":718},[712,3872,3873],{"class":737},"Line 4 Conveyor Bools",[712,3875,1155],{"class":718},[712,3877,3878,3880,3882],{"class":714,"line":794},[712,3879,1160],{"class":718},[712,3881,750],{"class":722},[712,3883,753],{"class":718},[712,3885,3886],{"class":714,"line":807},[712,3887,2127],{"emptyLinePlaceholder":440},[712,3889,3890,3892,3895,3897,3899,3901,3903,3905],{"class":714,"line":827},[712,3891,1107],{"class":769},[712,3893,3894],{"class":722}," viewDINTs ",[712,3896,1113],{"class":718},[712,3898,1116],{"class":722},[712,3900,25],{"class":718},[712,3902,3699],{"class":728},[712,3904,731],{"class":722},[712,3906,1603],{"class":718},[712,3908,3909,3911,3913,3915,3917,3919,3921,3923],{"class":714,"line":835},[712,3910,1138],{"class":718},[712,3912,1610],{"class":790},[712,3914,734],{"class":718},[712,3916,1146],{"class":718},[712,3918,3716],{"class":722},[712,3920,25],{"class":718},[712,3922,3721],{"class":722},[712,3924,804],{"class":718},[712,3926,3927,3929,3931,3933,3935,3937,3940],{"class":714,"line":848},[712,3928,1138],{"class":718},[712,3930,1141],{"class":790},[712,3932,734],{"class":718},[712,3934,1146],{"class":718},[712,3936,1149],{"class":718},[712,3938,3939],{"class":737},"Line4 Conveyor DINTs",[712,3941,1155],{"class":718},[712,3943,3944,3946,3948],{"class":714,"line":876},[712,3945,1160],{"class":718},[712,3947,750],{"class":722},[712,3949,753],{"class":718},[712,3951,3952],{"class":714,"line":882},[712,3953,2127],{"emptyLinePlaceholder":440},[712,3955,3956,3958,3961,3963,3965,3967,3969,3971],{"class":714,"line":1482},[712,3957,1107],{"class":769},[712,3959,3960],{"class":722}," viewFloats ",[712,3962,1113],{"class":718},[712,3964,1116],{"class":722},[712,3966,25],{"class":718},[712,3968,3699],{"class":728},[712,3970,731],{"class":722},[712,3972,1603],{"class":718},[712,3974,3975,3977,3979,3981,3983,3985,3987,3989],{"class":714,"line":1500},[712,3976,1138],{"class":718},[712,3978,1610],{"class":790},[712,3980,734],{"class":718},[712,3982,1146],{"class":718},[712,3984,3716],{"class":722},[712,3986,25],{"class":718},[712,3988,3721],{"class":722},[712,3990,804],{"class":718},[712,3992,3993,3995,3997,3999,4001,4003,4006],{"class":714,"line":1509},[712,3994,1138],{"class":718},[712,3996,1141],{"class":790},[712,3998,734],{"class":718},[712,4000,1146],{"class":718},[712,4002,1149],{"class":718},[712,4004,4005],{"class":737},"Line4 Conveyor Floats",[712,4007,1155],{"class":718},[712,4009,4010,4012,4014],{"class":714,"line":1531},[712,4011,1160],{"class":718},[712,4013,750],{"class":722},[712,4015,753],{"class":718},[712,4017,4018],{"class":714,"line":1549},[712,4019,2127],{"emptyLinePlaceholder":440},[712,4021,4022,4025,4027,4029,4031],{"class":714,"line":1803},[712,4023,4024],{"class":722},"  viewBools",[712,4026,25],{"class":718},[712,4028,3763],{"class":728},[712,4030,731],{"class":722},[712,4032,1603],{"class":718},[712,4034,4035,4037,4039,4041,4043,4045,4047,4049],{"class":714,"line":2070},[712,4036,1138],{"class":718},[712,4038,3774],{"class":790},[712,4040,734],{"class":718},[712,4042,1146],{"class":718},[712,4044,1149],{"class":718},[712,4046,3783],{"class":737},[712,4048,734],{"class":718},[712,4050,804],{"class":718},[712,4052,4053,4055,4057,4059,4061,4064,4066],{"class":714,"line":2081},[712,4054,1138],{"class":718},[712,4056,1645],{"class":790},[712,4058,734],{"class":718},[712,4060,1146],{"class":718},[712,4062,4063],{"class":722}," Conveyor_RTS",[712,4065,25],{"class":718},[712,4067,3805],{"class":722},[712,4069,4070,4072,4074],{"class":714,"line":2088},[712,4071,1160],{"class":718},[712,4073,750],{"class":722},[712,4075,753],{"class":718},[712,4077,4078],{"class":714,"line":2105},[712,4079,2127],{"emptyLinePlaceholder":440},[712,4081,4082,4084,4086,4088,4090],{"class":714,"line":2110},[712,4083,4024],{"class":722},[712,4085,25],{"class":718},[712,4087,3763],{"class":728},[712,4089,731],{"class":722},[712,4091,1603],{"class":718},[712,4093,4094,4096,4098,4100,4102,4104,4106,4108],{"class":714,"line":2115},[712,4095,1138],{"class":718},[712,4097,3774],{"class":790},[712,4099,734],{"class":718},[712,4101,1146],{"class":718},[712,4103,1149],{"class":718},[712,4105,3783],{"class":737},[712,4107,734],{"class":718},[712,4109,804],{"class":718},[712,4111,4112,4114,4116,4118,4120,4123,4125],{"class":714,"line":2124},[712,4113,1138],{"class":718},[712,4115,1645],{"class":790},[712,4117,734],{"class":718},[712,4119,1146],{"class":718},[712,4121,4122],{"class":722}," Robot_RTS",[712,4124,25],{"class":718},[712,4126,3805],{"class":722},[712,4128,4129,4131,4133],{"class":714,"line":2130},[712,4130,1160],{"class":718},[712,4132,750],{"class":722},[712,4134,753],{"class":718},[712,4136,4137],{"class":714,"line":2150},[712,4138,2127],{"emptyLinePlaceholder":440},[712,4140,4141,4143,4145,4147,4149],{"class":714,"line":2165},[712,4142,4024],{"class":722},[712,4144,25],{"class":718},[712,4146,3763],{"class":728},[712,4148,731],{"class":722},[712,4150,1603],{"class":718},[712,4152,4153,4155,4157,4159,4161,4163,4165,4167],{"class":714,"line":2185},[712,4154,1138],{"class":718},[712,4156,3774],{"class":790},[712,4158,734],{"class":718},[712,4160,1146],{"class":718},[712,4162,1149],{"class":718},[712,4164,3783],{"class":737},[712,4166,734],{"class":718},[712,4168,804],{"class":718},[712,4170,4171,4173,4175,4177,4179,4182,4184],{"class":714,"line":2205},[712,4172,1138],{"class":718},[712,4174,1645],{"class":790},[712,4176,734],{"class":718},[712,4178,1146],{"class":718},[712,4180,4181],{"class":722}," Conveyor_Running",[712,4183,25],{"class":718},[712,4185,3805],{"class":722},[712,4187,4188,4190,4192],{"class":714,"line":2224},[712,4189,1160],{"class":718},[712,4191,750],{"class":722},[712,4193,753],{"class":718},[712,4195,4196],{"class":714,"line":2237},[712,4197,2127],{"emptyLinePlaceholder":440},[712,4199,4200,4202,4204,4206,4208],{"class":714,"line":2254},[712,4201,4024],{"class":722},[712,4203,25],{"class":718},[712,4205,3763],{"class":728},[712,4207,731],{"class":722},[712,4209,1603],{"class":718},[712,4211,4212,4214,4216,4218,4220,4222,4224,4226],{"class":714,"line":2267},[712,4213,1138],{"class":718},[712,4215,3774],{"class":790},[712,4217,734],{"class":718},[712,4219,1146],{"class":718},[712,4221,1149],{"class":718},[712,4223,3783],{"class":737},[712,4225,734],{"class":718},[712,4227,804],{"class":718},[712,4229,4230,4232,4234,4236,4238,4241,4243],{"class":714,"line":2286},[712,4231,1138],{"class":718},[712,4233,1645],{"class":790},[712,4235,734],{"class":718},[712,4237,1146],{"class":718},[712,4239,4240],{"class":722}," Line4_Fault",[712,4242,25],{"class":718},[712,4244,3805],{"class":722},[712,4246,4247,4249,4251],{"class":714,"line":2317},[712,4248,1160],{"class":718},[712,4250,750],{"class":722},[712,4252,753],{"class":718},[712,4254,4255],{"class":714,"line":2326},[712,4256,2127],{"emptyLinePlaceholder":440},[712,4258,4259],{"class":714,"line":2331},[712,4260,2127],{"emptyLinePlaceholder":440},[712,4262,4263,4266,4268,4270,4272],{"class":714,"line":2352},[712,4264,4265],{"class":722},"  viewDINTs",[712,4267,25],{"class":718},[712,4269,3763],{"class":728},[712,4271,731],{"class":722},[712,4273,1603],{"class":718},[712,4275,4276,4278,4280,4282,4284,4286,4288,4290],{"class":714,"line":2367},[712,4277,1138],{"class":718},[712,4279,3774],{"class":790},[712,4281,734],{"class":718},[712,4283,1146],{"class":718},[712,4285,1149],{"class":718},[712,4287,3783],{"class":737},[712,4289,734],{"class":718},[712,4291,804],{"class":718},[712,4293,4294,4296,4298,4300,4302,4305,4307],{"class":714,"line":2378},[712,4295,1138],{"class":718},[712,4297,1645],{"class":790},[712,4299,734],{"class":718},[712,4301,1146],{"class":718},[712,4303,4304],{"class":722}," Line4_State",[712,4306,25],{"class":718},[712,4308,3805],{"class":722},[712,4310,4311,4313,4315],{"class":714,"line":2387},[712,4312,1160],{"class":718},[712,4314,750],{"class":722},[712,4316,753],{"class":718},[712,4318,4319],{"class":714,"line":2394},[712,4320,2127],{"emptyLinePlaceholder":440},[712,4322,4323,4326,4328,4330,4332],{"class":714,"line":2411},[712,4324,4325],{"class":722},"  viewFloats",[712,4327,25],{"class":718},[712,4329,3763],{"class":728},[712,4331,731],{"class":722},[712,4333,1603],{"class":718},[712,4335,4336,4338,4340,4342,4344,4346,4348,4350],{"class":714,"line":2416},[712,4337,1138],{"class":718},[712,4339,3774],{"class":790},[712,4341,734],{"class":718},[712,4343,1146],{"class":718},[712,4345,1149],{"class":718},[712,4347,3783],{"class":737},[712,4349,734],{"class":718},[712,4351,804],{"class":718},[712,4353,4354,4356,4358,4360,4362,4365,4367],{"class":714,"line":2421},[712,4355,1138],{"class":718},[712,4357,1645],{"class":790},[712,4359,734],{"class":718},[712,4361,1146],{"class":718},[712,4363,4364],{"class":722}," Robot_Position",[712,4366,25],{"class":718},[712,4368,3805],{"class":722},[712,4370,4371,4373,4375],{"class":714,"line":2430},[712,4372,1160],{"class":718},[712,4374,750],{"class":722},[712,4376,753],{"class":718},[14,4378,4379],{},"We’ve now completed the address space, so all that’s left is to define the OPC UA endpoint.",[27,4381,4383],{"id":4382},"wrap-up-server-configuration","Wrap Up Server Configuration",[14,4385,4386],{},"Go to the discovery tab and define an endpoint following the convention below, with the ip address matching the ip address of your Node-RED instance.",[14,4388,4389],{},[44,4390],{"alt":4391,"src":4392},"image-20230718-155245.png","\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Fimages\u002Fimage-20230718-155245.png",[14,4394,4395],{},"Now, our OPC UA Server is set up and ready to be browsable by an OPC UA Client.",[14,4397,4398,4399,4401,4402,25],{},"Deploy the changes and make sure the ",[187,4400,627],{}," is reporting ",[187,4403,4404],{},"active",[14,4406,4407,4411],{},[44,4408],{"alt":4409,"src":4410},"compact-server-active.png","\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Fimages\u002Fcompact-server-active.png","\nIf not, go back and check your code for errors.  The Node-RED logfiles will come in handy to track down issues if your server isn’t activating.",[14,4413,4414],{},"This wraps up the 4th objective of our application.",[14,4416,4417],{},[44,4418],{"alt":4419,"src":4420},"PLC-Information-Model-4-of-6-1.png","\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Fimages\u002FPLC-Information-Model-4-of-6-1.png",[14,4422,4423,441,4425,4427,447,4429,4431,582,4433,4435,4437,4438],{},[437,4424],{"type":439,"checked":440},[443,4426],{},[437,4428],{"type":439,"checked":440},[443,4430],{},[437,4432],{"type":439,"checked":440},[443,4434],{},[437,4436],{"type":439,"checked":440}," Program the OPC Server address space",[443,4439],{},[27,4441,4443],{"id":4442},"security-optional","Security (Optional)",[14,4445,4446],{},"At this point, our OPC UA Server will accept a client connection, but it won’t be secure, so we should take the extra step and encrypt our OPC UA traffic.",[14,4448,4449,4450,4453,4454,4456],{},"To do this, go to the ",[187,4451,4452],{},"Security"," tab of the ",[187,4455,627],{}," properties.",[14,4458,4459,4463,4464,4467,4468,25],{},[44,4460],{"alt":4461,"src":4462},"security-tab-default.png","\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Fimages\u002Fsecurity-tab-default.png","\nBy default, the server is using no security, and allowing anonymous connections.  Let’s fix that by unchecking ",[187,4465,4466],{},"Allow Anonymous"," , and checking ",[187,4469,4470],{},"Use invididual Certificate Files",[14,4472,4473,4477,4478,4480],{},[44,4474],{"alt":4475,"src":4476},"individual-cert-file-option.png","\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Fimages\u002Findividual-cert-file-option.png","\nThe node gives us some clues on how we can populate this section.  When ",[187,4479,193],{}," was installed, it created self-signed ssl certificates that are bound to our host system.  Let’s make use of them.",[14,4482,4483,4484,4487],{},"navigate to ",[187,4485,4486],{},".\u002Fnode-red-contrib-opcua-server\u002Fcertificates"," directory, where the node-red instance has installed the Node-RED module.",[203,4489,4490,4496],{},[52,4491,4492,4493],{},"I have Node-RED installed in the root path of my server, so my full path to the certs folder is ",[187,4494,4495],{},"\u002Froot\u002F.node-red\u002Fnode_modules\u002Fnode-red-contrib-opcua-server\u002Fcertificates",[52,4497,4498,4499,25],{},"If you’re having trouble finding the directory, do a search for the file ",[187,4500,4501],{},"server_selfsigned_cert_2048.pem",[14,4503,4504],{},"Once you’ve navigated to the correct directory, it should be full of various cert files.",[14,4506,4507,4511,4512,4514,4515,4518],{},[44,4508],{"alt":4509,"src":4510},"cert-list.png","\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Fimages\u002Fcert-list.png","\nThe two cert files we care about, which were already pre-defined in the node, are ",[187,4513,4501],{},", which is the public cert file, and ",[187,4516,4517],{},"server_key_2048.pem",", which is the private cert file.",[14,4520,4521,4522,4524,4525,4528],{},"Go back to the node configuration and populate the ",[187,4523,4452],{}," tab with the ",[79,4526,4527],{},"full absolute path"," to the files.",[14,4530,4531,4535,4536,4538],{},[44,4532],{"alt":4533,"src":4534},"cert-tab-filled.png","\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Fimages\u002Fcert-tab-filled.png","\nHit done and redeploy the node.  Make sure the server reports ",[187,4537,4404],{},".  If not, check the cert paths and try again.",[14,4540,4541],{},"You may also run into file permission issues, depending on how you set up your Node-RED instance, so make sure Node-RED also has read access to the files.",[14,4543,4544],{},"We’re not done yet.  The server is happy, but the OPC Client will need access to these cert files as well.  So copy the files to a location that will make the two cert files accessible to the OPC Client.  In my case, the OPC Client is being ran on a personal Windows machine on the same network.  So I copied the cert files to a nas, which both my Node-RED instance and my Windows machine have access to.",[14,4546,4547,4551,4555],{},[44,4548],{"alt":4549,"src":4550},"copy-certs.png","\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Fimages\u002Fcopy-certs.png",[44,4552],{"alt":4553,"src":4554},"copied-certs.png","\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Fimages\u002Fcopied-certs.png","\nNow we can move on to OPC Client Configuration.  We’ve achieved 5 out of 6 objectives.",[14,4557,4558],{},[44,4559],{"alt":4560,"src":4561},"PLC-Information-Model-5-of-6-1.png","\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Fimages\u002FPLC-Information-Model-5-of-6-1.png",[14,4563,4564,441,4566,4568,447,4570,4572,582,4574,4576,4437,4578,4580,4582,4583],{},[437,4565],{"type":439,"checked":440},[443,4567],{},[437,4569],{"type":439,"checked":440},[443,4571],{},[437,4573],{"type":439,"checked":440},[443,4575],{},[437,4577],{"type":439,"checked":440},[443,4579],{},[437,4581],{"type":439,"checked":440}," Encrypt the OPC Server with SSL",[443,4584],{},[27,4586,4588],{"id":4587},"opc-ua-client-configuration-and-testing","OPC UA Client Configuration and Testing",[14,4590,4591],{},"To connect to our Node-RED OPC server, enter the endpoint url and press “connect to server”.",[14,4593,4594,4598],{},[44,4595],{"alt":4596,"src":4597},"opc-client-connect.png","\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Fimages\u002Fopc-client-connect.png","\nSecurity settings are displayed.",[14,4600,4601,4602,4605,4606],{},"We’re going to select ",[187,4603,4604],{},"Sign & Encrypt"," and change the security policy to ",[187,4607,4608],{},"Aes128Sha256RsaOaep",[14,4610,4611,4615],{},[44,4612],{"alt":4613,"src":4614},"sign&encrypt.png","\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Fimages\u002Fsign&encrypt.png","\nWhen we try to connect, our connection to the server is rejected, because we haven’t pointed the client to our ssl cert files.  Press Okay to acknowledge the error and we can fix that problem.",[14,4617,4618,4622,4623,4626,4627,4630],{},[44,4619],{"alt":4620,"src":4621},"connect-rejected.png","\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Fimages\u002Fconnect-rejected.png","\nWhen you acknowledge the connection error, you are taken to the ",[187,4624,4625],{},"User Authentication"," properties.  Select ",[187,4628,4629],{},"Certificate and Private key",".  We need to point to our certificate and private key files.",[14,4632,4633,4637,4638,4641],{},[44,4634],{"alt":4635,"src":4636},"client-cert-path.png","\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Fimages\u002Fclient-cert-path.png","\nWhen we browse for our certificate file, the client software tells us it’s expecting a ",[187,4639,4640],{},"*.der"," file, which we don’t have yet.",[14,4643,4644,4648,4649,25],{},[44,4645],{"alt":4646,"src":4647},"der-file.png","\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Fimages\u002Fder-file.png","\nHowever, we can create one from our existing cert file using ",[187,4650,4651],{},"openssl",[14,4653,4654,4655,25],{},"If you don’t already have openssl installed, ",[21,4656,4659],{"href":4657,"rel":4658},"https:\u002F\u002Fwww.openssl.org\u002F",[215],"install it",[14,4661,4662],{},"Then from a command prompt, run the following command in the directory where your client-side cert files are stored -",[703,4664,4669],{"className":4665,"code":4667,"language":4668},[4666],"language-text","openssl x509 -in server_selfsigned_cert_2048.pem -out server_selfsigned_cert_2048.der -outform DER\n","text",[187,4670,4667],{"__ignoreMap":708},[14,4672,4673,4677],{},[44,4674],{"alt":4675,"src":4676},"ssl-pub-keygen.png","\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Fimages\u002Fssl-pub-keygen.png","\nThis command will generate the .der file the opc client is expecting to see.",[14,4679,4680,4684,4685,4688,4689,4691],{},[44,4681],{"alt":4682,"src":4683},"copied-certs-with-pubkey.png","\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Fimages\u002Fcopied-certs-with-pubkey.png","\nNow we can go back and point to the public key file, which is the ",[187,4686,4687],{},"server_selfsigned_cert_2048.der"," file, and the private key file, which is the ",[187,4690,4517],{}," file.",[14,4693,4694,4698],{},[44,4695],{"alt":4696,"src":4697},"client-cert-path-filled.png","\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Fimages\u002Fclient-cert-path-filled.png","\nThe first time you do this, you will be asked to accept the server certificate.",[14,4700,4701,4705],{},[44,4702],{"alt":4703,"src":4704},"opc-client-accept-cert.png","\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Fimages\u002Fopc-client-accept-cert.png","\nIf you choose accept permanently, you won’t see this prompt again.  You should now have access to browse the OPC Server.",[14,4707,4708],{},"As can be seen, our OPC Client sees the data from our PLC matching our OPC Information Model we defined in our Node-RED server address space.",[14,4710,4711,4715],{},[44,4712],{"alt":4713,"src":4714},"image-20230718-164326.png","\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Fimages\u002Fimage-20230718-164326.png","\nWe’ve now achieved all of our design objectives.",[14,4717,4718],{},[44,4719],{"alt":4720,"src":4721},"PLC-Information-Model-6-of-6-1.png","\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Fimages\u002FPLC-Information-Model-6-of-6-1.png",[14,4723,4724,441,4726,4728,447,4730,4732,582,4734,4736,4437,4738,4740,4582,4742,4744,4746,4747],{},[437,4725],{"type":439,"checked":440},[443,4727],{},[437,4729],{"type":439,"checked":440},[443,4731],{},[437,4733],{"type":439,"checked":440},[443,4735],{},[437,4737],{"type":439,"checked":440},[443,4739],{},[437,4741],{"type":439,"checked":440},[443,4743],{},[437,4745],{"type":439,"checked":440}," Set up the OPC Client",[443,4748],{},[14,4750,4751],{},"Our custom OPC UA application is complete and production-ready.",[14,4753,4754],{},"Test the application by confirming values changed in the PLC are reflected in the OPC UA Client.",[14,4756,4757,4758,4760],{},"In my PLC code, I created a sine wave generator that changes the ",[187,4759,3401],{}," value continuously, so the value is always changing, making it easy to confirm that the server is passing OPC traffic correctly.",[14,4762,4763],{},[44,4764],{"alt":4765,"src":4766},"sine-wave-gen.png","\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Fimages\u002Fsine-wave-gen.png",[14,4768,4769],{},"In this documentation, we covered in detail how to create an OPC UA application that pulls data from an Allen Bradley PLC over Ethernet\u002FIP, store the PLC data in Node-RED context memory, then publish the PLC data from context memory onto a ssl secured OPC UA Server.  An OPC Client can subscribe to the OPC UA Server over an encrypted connection, making the application deployable in a production environment, including in the cloud if desired.",[14,4771,4772,4773,4778],{},"With the foundation laid in this documentation, you can customize the application to fit your individual needs, with an understanding of what is going on “under the hood” of an OPC UA Server.  This application only scratches the surface of what features OPC UA has available.  Refer to the ",[21,4774,4777],{"href":4775,"rel":4776},"https:\u002F\u002Fnode-opcua.github.io\u002F",[215],"NodeOPCUA sdk"," and experiment by building on top of this example if you desire to learn more or want to add features this application is lacking.",[14,4780,4781],{},"In the next documentation of the OPC UA series, we will establish how to create an OPC UA Client application in Node-RED.",[14,4783,4784,4785,25],{},"OPC UA is one of several industrial protocols FlowFuse uses to connect PLCs to the modern stack. For EtherNet\u002FIP, Siemens S7, Modbus, MQTT, and more, see the ",[21,4786,4788],{"href":4787},"\u002Flanding\u002Fplc\u002F","FlowFuse PLC integration overview",[14,4790,4791],{},"Source code for flow used in this documentation -",[4793,4794,4795],"render-flow",{},[703,4796,4800],{"className":4797,"code":4798,"language":4799,"meta":708,"style":708},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","[{\"id\":\"2e8c7f5c.ab73d\",\"type\":\"tab\",\"label\":\"OPC-UA Custom Context Server\",\"disabled\":false,\"info\":\"\"},{\"id\":\"38ce10de.7d8c\",\"type\":\"opcua-compact-server\",\"z\":\"2e8c7f5c.ab73d\",\"port\":\"54845\",\"endpoint\":\"\",\"productUri\":\"\",\"acceptExternalCommands\":true,\"maxAllowedSessionNumber\":\"10\",\"maxConnectionsPerEndpoint\":\"10\",\"maxAllowedSubscriptionNumber\":\"100\",\"alternateHostname\":\"\",\"name\":\"\",\"showStatusActivities\":false,\"showErrors\":true,\"allowAnonymous\":false,\"individualCerts\":true,\"isAuditing\":false,\"serverDiscovery\":true,\"users\":[],\"xmlsetsOPCUA\":[],\"publicCertificateFile\":\"\u002Froot\u002F.node-red\u002Fnode_modules\u002Fnode-red-contrib-opcua-server\u002Fcertificates\u002Fserver_selfsigned_cert_2048.pem\",\"privateCertificateFile\":\"\u002Froot\u002F.node-red\u002Fnode_modules\u002Fnode-red-contrib-opcua-server\u002Fcertificates\u002Fserver_key_2048.pem\",\"registerServerMethod\":\"1\",\"discoveryServerEndpointUrl\":\"opc.tcp:\u002F\u002F192.168.0.114:54845\",\"capabilitiesForMDNS\":\"\",\"maxNodesPerRead\":1000,\"maxNodesPerWrite\":1000,\"maxNodesPerHistoryReadData\":100,\"maxNodesPerBrowse\":3000,\"maxBrowseContinuationPoints\":\"10\",\"maxHistoryContinuationPoints\":\"10\",\"delayToInit\":\"1000\",\"delayToClose\":\"200\",\"serverShutdownTimeout\":\"100\",\"addressSpaceScript\":\"function constructAlarmAddressSpace(server, addressSpace, eventObjects, done) {\\n  \u002F\u002F server = the created node-opcua server\\n  \u002F\u002F addressSpace = address space of the node-opcua server\\n  \u002F\u002F eventObjects = add event variables here to hold them in memory from this script\\n\\n  \u002F\u002F internal sandbox objects are:\\n  \u002F\u002F node = the compact server node,\\n  \u002F\u002F coreServer = core compact server object for debug and access to NodeOPCUA\\n  \u002F\u002F this.sandboxNodeContext = node context node-red\\n  \u002F\u002F this.sandboxFlowContext = flow context node-red\\n  \u002F\u002F this.sandboxGlobalContext = global context node-red\\n  \u002F\u002F this.sandboxEnv = env variables\\n  \u002F\u002F timeout and interval functions as expected from nodejs\\n\\n  const opcua = coreServer.choreCompact.opcua;\\n  const LocalizedText = opcua.LocalizedText;\\n  const namespace = addressSpace.getOwnNamespace();\\n\\n  const Variant = opcua.Variant;\\n  const DataType = opcua.DataType;\\n  const DataValue = opcua.DataValue;\\n\\n  var flexServerInternals = this;\\n\\n  this.sandboxFlowContext.set(\\\"conveyorData.Conveyor_RTS\\\", false);\\n  this.sandboxFlowContext.set(\\\"conveyorData.Robot_RTS\\\", false);\\n  this.sandboxFlowContext.set(\\\"conveyorData.Robot_Position\\\", 0);\\n  this.sandboxFlowContext.set(\\\"conveyorData.Conveyor_Running\\\", false);\\n  this.sandboxFlowContext.set(\\\"conveyorData.Line4_State\\\", 0);\\n  this.sandboxFlowContext.set(\\\"conveyorData.Line4_Fault\\\", false);\\n\\n  \u002F\u002F this.sandboxFlowContext.set(\\\"isoInput1\\\", 0);\\n  \u002F\u002F this.setInterval(() => {\\n  \u002F\u002F   flexServerInternals.sandboxFlowContext.set(\\n  \u002F\u002F     \\\"isoInput1\\\",\\n  \u002F\u002F     Math.random() + 50.0\\n  \u002F\u002F   );\\n  \u002F\u002F }, 500);\\n  \u002F\u002F this.sandboxFlowContext.set(\\\"isoInput2\\\", 0);\\n  \u002F\u002F this.sandboxFlowContext.set(\\\"isoInput3\\\", 0);\\n  \u002F\u002F this.sandboxFlowContext.set(\\\"isoInput4\\\", 0);\\n  \u002F\u002F this.sandboxFlowContext.set(\\\"isoInput5\\\", 0);\\n  \u002F\u002F this.sandboxFlowContext.set(\\\"isoInput6\\\", 0);\\n  \u002F\u002F this.sandboxFlowContext.set(\\\"isoInput7\\\", 0);\\n  \u002F\u002F this.sandboxFlowContext.set(\\\"isoInput8\\\", 0);\\n  \u002F\u002F this.sandboxFlowContext.set(\\\"isoOutput1\\\", 0);\\n  \u002F\u002F this.setInterval(() => {\\n  \u002F\u002F   flexServerInternals.sandboxFlowContext.set(\\n  \u002F\u002F     \\\"isoOutput1\\\",\\n  \u002F\u002F     Math.random() + 10.0\\n  \u002F\u002F   );\\n  \u002F\u002F }, 500);\\n\\n  \u002F\u002F this.sandboxFlowContext.set(\\\"isoOutput2\\\", 0);\\n  \u002F\u002F this.sandboxFlowContext.set(\\\"isoOutput3\\\", 0);\\n  \u002F\u002F this.sandboxFlowContext.set(\\\"isoOutput4\\\", 0);\\n  \u002F\u002F this.sandboxFlowContext.set(\\\"isoOutput5\\\", 0);\\n  \u002F\u002F this.sandboxFlowContext.set(\\\"isoOutput6\\\", 0);\\n  \u002F\u002F this.sandboxFlowContext.set(\\\"isoOutput7\\\", 0);\\n  \u002F\u002F this.sandboxFlowContext.set(\\\"isoOutput8\\\", 0);\\n\\n  coreServer.debugLog(\\\"init dynamic address space\\\");\\n  const rootFolder = addressSpace.findNode(\\\"RootFolder\\\");\\n\\n  node.warn(\\\"construct new address space for OPC UA\\\");\\n\\n  const myDevice = namespace.addFolder(rootFolder.objects, {\\n    \\\"browseName\\\": \\\"Line 4 PLC\\\"\\n  });\\n  const conveyorFolder = namespace.addFolder(myDevice, { \\\"browseName\\\": \\\"Conveyor\\\" });\\n  const conveyorBools = namespace.addFolder(conveyorFolder, {\\n    \\\"browseName\\\": \\\"Bools\\\"\\n  });\\n  const conveyorDINTs = namespace.addFolder(conveyorFolder, {\\n    \\\"browseName\\\": \\\"DINTs\\\"\\n  });\\n  const conveyorFloats = namespace.addFolder(conveyorFolder, {\\n    \\\"browseName\\\": \\\"Floats\\\"\\n  });\\n\\n  \u002F\u002F Construct Nodes\\n  const Conveyor_RTS = namespace.addVariable({\\n    \\\"organizedBy\\\": conveyorBools,\\n    \\\"browseName\\\": \\\"Conveyor Ready to Start\\\",\\n    \\\"nodeId\\\": \\\"ns=1;s=Conveyor_RTS\\\",\\n    \\\"dataType\\\": \\\"Boolean\\\",\\n    \\\"value\\\": {\\n      \\\"get\\\": function () {\\n        return new Variant({\\n          \\\"dataType\\\": DataType.Boolean,\\n          \\\"value\\\": flexServerInternals.sandboxFlowContext.get(\\\"conveyorData.Conveyor_RTS\\\")\\n        });\\n      },\\n      \\\"set\\\": function (variant) {\\n        flexServerInternals.sandboxFlowContext.set(\\n          \\\"conveyorData.Conveyor_RTS\\\",\\n          variant.value\\n        );\\n        return opcua.StatusCodes.Good;\\n      }\\n    }\\n  });\\n\\n  const Robot_RTS = namespace.addVariable({\\n    \\\"organizedBy\\\": conveyorBools,\\n    \\\"browseName\\\": \\\"Robot Ready to Start\\\",\\n    \\\"nodeId\\\": \\\"ns=1;s=Robot_RTS\\\",\\n    \\\"dataType\\\": \\\"Boolean\\\",\\n    \\\"value\\\": {\\n      \\\"get\\\": function () {\\n        return new Variant({\\n          \\\"dataType\\\": DataType.Boolean,\\n          \\\"value\\\": flexServerInternals.sandboxFlowContext.get(\\\"conveyorData.Robot_RTS\\\")\\n        });\\n      },\\n      \\\"set\\\": function (variant) {\\n        flexServerInternals.sandboxFlowContext.set(\\n          \\\"conveyorData.Robot_RTS\\\",\\n          variant.value\\n        );\\n        return opcua.StatusCodes.Good;\\n      }\\n    }\\n  });\\n\\n  const Conveyor_Running = namespace.addVariable({\\n    \\\"organizedBy\\\": conveyorBools,\\n    \\\"browseName\\\": \\\"Conveyor Running\\\",\\n    \\\"nodeId\\\": \\\"ns=1;s=Conveyor_Running\\\",\\n    \\\"dataType\\\": \\\"Boolean\\\",\\n    \\\"value\\\": {\\n      \\\"get\\\": function () {\\n        return new Variant({\\n          \\\"dataType\\\": DataType.Boolean,\\n          \\\"value\\\": flexServerInternals.sandboxFlowContext.get(\\\"conveyorData.Conveyor_Running\\\")\\n        });\\n      },\\n      \\\"set\\\": function (variant) {\\n        flexServerInternals.sandboxFlowContext.set(\\n          \\\"conveyorData.Conveyor_Running\\\",\\n          variant.value\\n        );\\n        return opcua.StatusCodes.Good;\\n      }\\n    }\\n  });\\n\\n  const Line4_Fault = namespace.addVariable({\\n    \\\"organizedBy\\\": conveyorBools,\\n    \\\"browseName\\\": \\\"Line 4 Faulted\\\",\\n    \\\"nodeId\\\": \\\"ns=1;s=Line4_Fault\\\",\\n    \\\"dataType\\\": \\\"Boolean\\\",\\n    \\\"value\\\": {\\n      \\\"get\\\": function () {\\n        return new Variant({\\n          \\\"dataType\\\": DataType.Boolean,\\n          \\\"value\\\": flexServerInternals.sandboxFlowContext.get(\\\"conveyorData.Line4_Fault\\\")\\n        });\\n      },\\n      \\\"set\\\": function (variant) {\\n        flexServerInternals.sandboxFlowContext.set(\\n          \\\"conveyorData.Line4_Fault\\\",\\n          variant.value\\n        );\\n        return opcua.StatusCodes.Good;\\n      }\\n    }\\n  });\\n\\n  const Line4_State = namespace.addVariable({\\n    \\\"organizedBy\\\": conveyorDINTs,\\n    \\\"browseName\\\": \\\"Line 4 State\\\",\\n    \\\"nodeId\\\": \\\"ns=1;s=Line4_State\\\",\\n    \\\"dataType\\\": \\\"Int32\\\",\\n    \\\"value\\\": {\\n      \\\"get\\\": function () {\\n        return new Variant({\\n          \\\"dataType\\\": DataType.Int32,\\n          \\\"value\\\": flexServerInternals.sandboxFlowContext.get(\\\"conveyorData.Line4_State\\\")\\n        });\\n      },\\n      \\\"set\\\": function (variant) {\\n        flexServerInternals.sandboxFlowContext.set(\\n          \\\"conveyorData.Line4_State\\\",\\n          variant.value\\n        );\\n        return opcua.StatusCodes.Good;\\n      }\\n    }\\n  });\\n\\n  const Robot_Position = namespace.addVariable({\\n    \\\"organizedBy\\\": conveyorFloats,\\n    \\\"browseName\\\": \\\"Robot Axis A1 Position\\\",\\n    \\\"nodeId\\\": \\\"ns=1;s=Robot_Position\\\",\\n    \\\"dataType\\\": \\\"Float\\\",\\n    \\\"value\\\": {\\n      \\\"get\\\": function () {\\n        return new Variant({\\n          \\\"dataType\\\": DataType.Float,\\n          \\\"value\\\": flexServerInternals.sandboxFlowContext.get(\\\"conveyorData.Robot_Position\\\")\\n        });\\n      },\\n      \\\"set\\\": function (variant) {\\n        flexServerInternals.sandboxFlowContext.set(\\n          \\\"conveyorData.Robot_Position\\\",\\n          parseFloat(variant.value)\\n        );\\n        return opcua.StatusCodes.Good;\\n      }\\n    }\\n  });\\n\\n  \u002F\u002F------------------------------------------------------------------------------\\n  \u002F\u002F Add a view\\n  \u002F\u002F------------------------------------------------------------------------------\\n  const viewBools = namespace.addView({\\n    \\\"organizedBy\\\": rootFolder.views,\\n    \\\"browseName\\\": \\\"Line 4 Conveyor Bools\\\"\\n  });\\n\\n  const viewDINTs = namespace.addView({\\n    \\\"organizedBy\\\": rootFolder.views,\\n    \\\"browseName\\\": \\\"Line4 Conveyor DINTs\\\"\\n  });\\n\\n  const viewFloats = namespace.addView({\\n    \\\"organizedBy\\\": rootFolder.views,\\n    \\\"browseName\\\": \\\"Line4 Conveyor Floats\\\"\\n  });\\n\\n  viewBools.addReference({\\n    \\\"referenceType\\\": \\\"Organizes\\\",\\n    \\\"nodeId\\\": Conveyor_RTS.nodeId\\n  });\\n\\n  viewBools.addReference({\\n    \\\"referenceType\\\": \\\"Organizes\\\",\\n    \\\"nodeId\\\": Robot_RTS.nodeId\\n  });\\n\\n  viewBools.addReference({\\n    \\\"referenceType\\\": \\\"Organizes\\\",\\n    \\\"nodeId\\\": Conveyor_Running.nodeId\\n  });\\n\\n  viewBools.addReference({\\n    \\\"referenceType\\\": \\\"Organizes\\\",\\n    \\\"nodeId\\\": Line4_Fault.nodeId\\n  });\\n\\n\\n  viewDINTs.addReference({\\n    \\\"referenceType\\\": \\\"Organizes\\\",\\n    \\\"nodeId\\\": Line4_State.nodeId\\n  });\\n\\n  viewFloats.addReference({\\n    \\\"referenceType\\\": \\\"Organizes\\\",\\n    \\\"nodeId\\\": Robot_Position.nodeId\\n  });\\n  coreServer.debugLog(\\\"create dynamic address space done\\\");\\n  node.warn(\\\"construction of new address space for OPC UA done\\\");\\n\\n  done();\\n}\\n\",\"x\":960,\"y\":600,\"wires\":[]},{\"id\":\"7ae89f134415c51e\",\"type\":\"eth-ip in\",\"z\":\"2e8c7f5c.ab73d\",\"endpoint\":\"f012042b75173b77\",\"mode\":\"all\",\"variable\":\"\",\"program\":\"\",\"name\":\"Read Line4 Conveyor tags\",\"x\":150,\"y\":600,\"wires\":[[\"0c51f44baa08a3b2\"]]},{\"id\":\"a0592280baea975b\",\"type\":\"comment\",\"z\":\"2e8c7f5c.ab73d\",\"name\":\"read data from PLC & store in conveyorData context flow memory\",\"info\":\"\",\"x\":350,\"y\":540,\"wires\":[]},{\"id\":\"b411a5ce4749fa61\",\"type\":\"comment\",\"z\":\"2e8c7f5c.ab73d\",\"name\":\"Secure OPC UA Server Publishing PLC conveyorData\",\"info\":\"\",\"x\":980,\"y\":540,\"wires\":[]},{\"id\":\"0c51f44baa08a3b2\",\"type\":\"change\",\"z\":\"2e8c7f5c.ab73d\",\"name\":\"store PLC Data in flow context memory\",\"rules\":[{\"t\":\"set\",\"p\":\"conveyorData.Conveyor_RTS\",\"pt\":\"flow\",\"to\":\"payload.Conveyor_RTS\",\"tot\":\"msg\"},{\"t\":\"set\",\"p\":\"conveyorData.Conveyor_Running\",\"pt\":\"flow\",\"to\":\"payload.Conveyor_Running\",\"tot\":\"msg\"},{\"t\":\"set\",\"p\":\"conveyorData.Line4_Fault\",\"pt\":\"flow\",\"to\":\"payload.Line4_Fault\",\"tot\":\"msg\"},{\"t\":\"set\",\"p\":\"conveyorData.Line4_State\",\"pt\":\"flow\",\"to\":\"payload.Line4_State\",\"tot\":\"msg\"},{\"t\":\"set\",\"p\":\"conveyorData.Robot_Position\",\"pt\":\"flow\",\"to\":\"payload.Robot_Position\",\"tot\":\"msg\"},{\"t\":\"set\",\"p\":\"conveyorData.Robot_RTS\",\"pt\":\"flow\",\"to\":\"payload.Robot_RTS\",\"tot\":\"msg\"}],\"action\":\"\",\"property\":\"\",\"from\":\"\",\"to\":\"\",\"reg\":false,\"x\":530,\"y\":600,\"wires\":[[]]},{\"id\":\"f012042b75173b77\",\"type\":\"eth-ip endpoint\",\"address\":\"192.168.0.5\",\"slot\":\"0\",\"cycletime\":\"1000\",\"name\":\"Line 4 PLC\",\"vartable\":{\"\":{\"Conveyor_RTS\":{\"type\":\"BOOL\"},\"Conveyor_Running\":{\"type\":\"BOOL\"},\"Line4_Fault\":{\"type\":\"BOOL\"},\"Line4_State\":{\"type\":\"DINT\"},\"Robot_Position\":{\"type\":\"REAL\"},\"Robot_RTS\":{\"type\":\"BOOL\"}}}}]\n","json",[187,4801,4802],{"__ignoreMap":708},[712,4803,4804,4807,4809,4812,4814,4816,4818,4821,4823,4825,4827,4830,4832,4834,4836,4839,4841,4843,4845,4848,4850,4852,4854,4857,4859,4861,4863,4866,4868,4871,4873,4876,4878,4880,4883,4886,4888,4890,4892,4894,4896,4899,4901,4903,4905,4907,4909,4911,4913,4916,4918,4920,4922,4925,4927,4929,4931,4933,4935,4937,4939,4942,4944,4946,4948,4951,4953,4955,4957,4960,4962,4964,4966,4968,4970,4973,4975,4977,4979,4981,4983,4986,4988,4991,4993,4996,4998,5000,5002,5005,5007,5009,5011,5014,5016,5018,5020,5022,5024,5026,5028,5031,5033,5035,5037,5040,5042,5044,5046,5049,5051,5053,5055,5057,5059,5062,5064,5066,5068,5070,5072,5075,5077,5079,5081,5084,5086,5088,5090,5093,5095,5097,5099,5102,5104,5106,5108,5111,5113,5115,5117,5120,5122,5124,5126,5129,5131,5134,5136,5139,5141,5143,5145,5148,5150,5152,5154,5157,5159,5161,5163,5166,5168,5170,5172,5175,5177,5179,5181,5184,5186,5188,5190,5193,5195,5197,5199,5202,5204,5206,5208,5211,5213,5215,5217,5220,5222,5224,5226,5228,5230,5233,5235,5237,5240,5242,5244,5247,5249,5251,5253,5255,5257,5260,5262,5264,5266,5268,5270,5273,5275,5277,5280,5282,5284,5287,5289,5291,5293,5295,5297,5299,5301,5304,5306,5308,5310,5312,5314,5316,5318,5321,5323,5325,5327,5329,5331,5333,5335,5338,5340,5342,5344,5347,5349,5351,5353,5356,5358,5360,5362,5364,5366,5368,5370,5373,5375,5377,5379,5382,5385,5388,5390,5393,5395,5398,5401,5404,5406,5409,5411,5414,5416,5419,5421,5424,5426,5429,5431,5434,5436,5439,5441,5444,5446,5449,5451,5454,5456,5459,5461,5464,5466,5469,5471,5474,5476,5479,5482,5484,5486,5489,5491,5493,5495,5497,5499,5501,5503,5505,5507,5509,5511,5514,5516,5518,5520,5522,5524,5526,5528,5530,5532,5534,5536,5538,5540,5542,5544,5546,5548,5550,5552,5555,5557,5559,5561,5563,5565,5568,5570,5573,5575,5578,5580,5582,5584,5586,5588,5591,5593,5596,5598,5601,5603,5605,5607,5609,5611,5613,5615,5617,5619,5622,5624,5626,5628,5630,5632,5635,5637,5639,5641,5643,5645,5648,5650,5652,5654,5656,5658,5661,5663,5665,5667,5669,5671,5674,5676,5678,5680,5682,5684,5687,5689,5691,5693,5695,5697,5700,5702,5704,5706,5708,5710,5712,5714,5716,5718,5720,5722,5724,5726,5729,5731,5733,5735,5737,5739,5741,5743,5746,5748,5750,5752,5754,5756,5759,5761,5763,5765,5767,5769,5772,5774,5776,5778,5780,5782,5785,5787,5789,5791,5793,5795,5798,5800,5802,5804,5806,5808,5811,5813,5815,5817,5819,5821,5823,5825,5827,5829,5832,5834,5837,5839,5842,5844,5847,5849,5852,5854,5856,5858,5861,5863,5866,5868,5870,5872,5875,5877,5880,5882,5884,5886,5888,5890,5893,5896,5898,5901,5903,5905,5907,5909,5911,5913,5915,5918,5920,5923,5925,5927,5929,5931,5933,5935,5937,5939,5941,5943,5946,5948,5950,5952,5954,5956,5958,5960,5962,5964,5966,5969,5971,5973,5975,5977,5979,5981,5983,5985,5987,5989,5992,5994,5997,5999,6001,6003,6005,6008,6010,6012,6014,6016,6018,6020,6022,6024,6026,6028,6030,6032,6034,6036,6038,6040,6042,6044,6046,6048,6050,6052,6054,6056,6058,6060,6062,6064,6066,6068,6070,6073,6075,6078,6080,6082,6085,6087,6090,6092,6095,6097,6099,6102,6104,6106,6108,6110,6113,6115,6117,6119,6121,6123,6126,6128,6131,6133,6135,6137,6139,6142,6144,6147,6149,6151,6153,6155,6157,6159,6162,6164,6167,6169,6172,6174,6177,6179,6182,6184,6186,6188,6191,6193,6195,6197,6199,6201,6203,6205,6207,6209,6211,6213,6215,6217,6219,6221,6223,6225,6227,6229,6231,6233,6235,6237,6239,6241,6243,6245,6247,6249,6251,6253,6255,6257,6259,6261,6263,6265,6267,6269,6271,6273,6275,6277,6279,6281,6283,6285,6287,6289,6291,6293,6295,6297,6299,6301,6303,6305,6307,6309,6311,6313,6315,6317,6319,6321,6323,6325,6327,6329,6331,6333,6335,6337,6339,6341,6343,6345,6347,6349,6351,6353,6355,6357,6359,6361,6363,6365,6368,6370,6372,6374,6376,6378,6380,6382,6384,6386,6388,6390,6392,6394,6396,6398,6400,6402,6404,6406,6408,6410,6412,6414,6416,6418,6420,6422,6424,6426,6428,6430,6432,6434,6436,6438,6440,6442,6444,6446,6448,6450,6452,6454,6456,6458,6460,6462,6464,6466,6468,6470,6472,6474,6476,6478,6480,6482,6484,6486,6488,6490,6492,6494,6496,6498,6500,6502,6504,6506,6508,6510,6512,6514,6516,6518,6520,6522,6524,6526,6528,6530,6532,6534,6536,6538,6540,6542,6545,6547,6549,6551,6553,6555,6557,6559,6561,6563,6565,6567,6569,6571,6573,6575,6577,6579,6581,6583,6585,6587,6589,6591,6593,6595,6597,6599,6601,6603,6605,6607,6609,6611,6613,6615,6617,6619,6621,6623,6625,6627,6629,6631,6633,6635,6637,6639,6641,6643,6645,6647,6649,6651,6653,6655,6657,6659,6661,6663,6665,6667,6669,6671,6673,6675,6677,6679,6681,6683,6685,6687,6689,6691,6693,6695,6697,6699,6701,6703,6705,6707,6709,6711,6713,6715,6717,6719,6722,6724,6726,6728,6730,6733,6735,6737,6739,6741,6743,6745,6747,6749,6751,6753,6755,6757,6759,6761,6763,6765,6767,6769,6771,6773,6775,6777,6779,6781,6783,6785,6787,6789,6791,6793,6795,6797,6799,6801,6803,6805,6807,6809,6811,6813,6815,6817,6819,6822,6824,6826,6828,6830,6832,6834,6836,6838,6840,6842,6844,6846,6848,6850,6852,6854,6856,6858,6860,6862,6864,6866,6868,6870,6872,6874,6876,6878,6880,6882,6884,6886,6888,6890,6892,6894,6896,6898,6901,6903,6905,6907,6909,6912,6914,6916,6918,6920,6922,6924,6926,6928,6930,6932,6934,6936,6938,6940,6942,6944,6946,6948,6950,6952,6954,6956,6958,6960,6962,6964,6966,6968,6970,6972,6974,6976,6978,6980,6982,6984,6986,6988,6990,6992,6994,6996,6998,7001,7003,7005,7007,7009,7011,7013,7015,7017,7019,7021,7023,7025,7027,7029,7031,7033,7035,7037,7039,7041,7043,7045,7047,7049,7051,7053,7056,7058,7060,7062,7064,7066,7068,7070,7072,7074,7076,7078,7081,7083,7086,7088,7090,7092,7095,7097,7099,7101,7103,7106,7108,7110,7112,7114,7116,7118,7120,7122,7124,7126,7129,7131,7133,7135,7137,7139,7141,7143,7145,7147,7149,7151,7153,7155,7157,7159,7162,7164,7166,7168,7170,7172,7174,7176,7178,7180,7182,7184,7186,7188,7190,7192,7195,7197,7199,7201,7203,7205,7207,7209,7211,7213,7215,7217,7219,7221,7224,7226,7228,7230,7232,7234,7236,7238,7240,7242,7244,7246,7248,7250,7252,7254,7256,7258,7261,7263,7265,7267,7269,7271,7273,7275,7277,7279,7281,7283,7285,7287,7289,7291,7293,7295,7298,7300,7302,7304,7306,7308,7310,7312,7314,7316,7318,7320,7322,7324,7326,7328,7330,7332,7335,7337,7339,7342,7345,7347,7349,7351,7353,7355,7357,7359,7361,7363,7365,7367,7369,7371,7374,7376,7378,7380,7383,7385,7387,7389,7391,7393,7395,7397,7399,7401,7403,7405,7407,7409,7412,7414,7416,7418,7420,7422,7425,7427,7429,7431,7433,7435,7438,7440,7442,7444,7447,7449,7452,7454,7456,7458,7460,7463,7465,7467,7470,7472,7474,7477,7479,7481,7484,7486,7488,7491,7493,7496,7498,7500,7502,7504,7506,7509,7511,7513,7515,7517,7519,7521,7523,7525,7527,7529,7531,7533,7535,7537,7539,7541,7543,7545,7547,7549,7551,7553,7555,7558,7560,7562,7564,7567,7569,7571,7573,7576,7578,7580,7582,7585,7587,7589,7591,7593,7595,7598,7600,7602,7604,7606,7608,7610,7612,7614,7616,7619,7621,7623,7625,7627,7629,7631,7634,7636,7638,7640,7642,7644,7646,7648,7650,7652,7654,7657,7659,7662,7664,7667,7669,7671,7673,7675,7677,7680,7682,7684,7686,7688,7690,7692,7694,7697,7699,7701,7703,7705,7707,7709,7711,7713,7715,7717,7719,7721,7723,7725,7727,7730,7732,7734,7736,7738,7740,7742,7744,7746,7748,7750,7752,7754,7757,7759,7761,7763,7765,7767,7770,7772,7774,7776,7778,7780,7782,7784,7786,7788,7790,7793,7795,7797,7799,7801,7803,7805,7807,7809,7811,7813,7815,7817,7819,7821,7823,7825,7827,7829,7831,7833,7835,7837,7839,7842,7844,7846,7848,7850,7852,7854,7856,7858,7860,7862,7864,7866,7869,7871,7873,7875,7877,7879,7881,7883,7885,7887,7889,7891,7893,7895,7897,7899,7901,7903,7905,7907,7909,7911,7913,7915,7917,7919,7921,7923,7925,7927,7929,7931,7933,7935,7937,7939,7941,7943,7945,7947,7949,7952,7954,7956,7958,7961,7963,7966,7968,7972,7974,7976,7978,7980,7982,7984,7986,7988,7990,7992,7994,7996,7998,8000,8002,8005,8007,8009,8011,8013,8015,8017,8019,8022,8024,8026,8028,8031,8033,8035,8037,8040,8042,8044,8046,8048,8050,8052,8054,8056,8058,8060,8062,8064,8066,8068,8070,8072,8074,8076,8078,8080,8082,8084,8086,8088,8090,8092,8094,8096,8098,8100,8102,8104,8106,8108,8110,8113,8115,8117,8119,8121,8123,8125,8127,8129,8131,8133,8135,8137,8139,8141,8143,8145,8147,8149,8151,8153,8155,8157,8159,8161,8163,8165,8167,8169,8171,8173,8175,8177,8179,8181,8183,8185,8187,8189,8191,8194,8196,8198,8200,8202,8204,8206,8208,8210,8212,8214,8216,8218,8220,8222,8224,8226,8228,8230,8232,8234,8236,8238,8240,8242,8244,8246,8248,8250,8252,8254,8256,8258,8260,8262,8264,8266,8268,8270,8272,8275,8277,8279,8281,8283,8285,8287,8289,8291,8293,8295,8297,8299,8301,8303,8305,8307,8309,8311,8313,8315,8317,8319,8321,8323,8325,8327,8329,8331,8333,8335,8337,8339,8341,8343,8345,8347,8349,8351,8353,8356,8358,8360,8362,8364,8366,8368,8370,8372,8374,8376,8378,8380,8382,8384,8386,8388,8390,8392,8394,8396,8398,8400,8402,8404,8406,8408,8410,8412,8414,8416,8418,8420,8422,8424,8426,8428,8430,8432,8434,8437,8439,8441,8443,8445,8447,8449,8451,8453,8455,8458,8460,8463,8465,8467,8469,8471,8473,8476,8478,8480,8482,8484,8486,8489,8491,8493,8495,8497,8499,8501,8503,8505,8507,8509,8511,8514,8516,8518,8520,8522,8524,8526,8529,8531,8533,8535,8537,8539,8541,8543,8545,8547,8549,8552,8554,8556,8558,8560,8562,8564,8566,8568,8570,8572,8574,8576,8578,8580,8582,8584,8586,8589,8591,8593,8595,8598,8600,8602,8604,8607,8609,8611,8613,8616,8618,8620,8622,8625,8627,8629,8631,8633,8635,8637,8639,8641,8643,8645,8647,8649,8651,8653,8655,8658,8660,8663,8665,8667,8669,8671,8673,8675,8677,8679,8681,8683,8685,8687,8689,8692,8694,8696,8698,8700,8702,8704,8706,8708,8710,8712,8714,8716,8718,8720,8722,8724,8726,8728,8730,8732,8734,8736,8738,8740,8742,8744,8746,8748,8750,8752,8754,8756,8758,8760,8762,8764,8766,8768,8770,8772,8774,8776,8778,8780,8782,8784,8786,8788,8790,8792,8794,8796,8798,8800,8802,8804,8806,8808,8810],{"class":714,"line":715},[712,4805,4806],{"class":718},"[{",[712,4808,734],{"class":718},[712,4810,4811],{"class":769},"id",[712,4813,734],{"class":718},[712,4815,1146],{"class":718},[712,4817,734],{"class":718},[712,4819,4820],{"class":737},"2e8c7f5c.ab73d",[712,4822,734],{"class":718},[712,4824,743],{"class":718},[712,4826,734],{"class":718},[712,4828,4829],{"class":769},"type",[712,4831,734],{"class":718},[712,4833,1146],{"class":718},[712,4835,734],{"class":718},[712,4837,4838],{"class":737},"tab",[712,4840,734],{"class":718},[712,4842,743],{"class":718},[712,4844,734],{"class":718},[712,4846,4847],{"class":769},"label",[712,4849,734],{"class":718},[712,4851,1146],{"class":718},[712,4853,734],{"class":718},[712,4855,4856],{"class":737},"OPC-UA Custom Context Server",[712,4858,734],{"class":718},[712,4860,743],{"class":718},[712,4862,734],{"class":718},[712,4864,4865],{"class":769},"disabled",[712,4867,734],{"class":718},[712,4869,4870],{"class":718},":false,",[712,4872,734],{"class":718},[712,4874,4875],{"class":769},"info",[712,4877,734],{"class":718},[712,4879,1146],{"class":718},[712,4881,4882],{"class":718},"\"\"",[712,4884,4885],{"class":718},"},{",[712,4887,734],{"class":718},[712,4889,4811],{"class":769},[712,4891,734],{"class":718},[712,4893,1146],{"class":718},[712,4895,734],{"class":718},[712,4897,4898],{"class":737},"38ce10de.7d8c",[712,4900,734],{"class":718},[712,4902,743],{"class":718},[712,4904,734],{"class":718},[712,4906,4829],{"class":769},[712,4908,734],{"class":718},[712,4910,1146],{"class":718},[712,4912,734],{"class":718},[712,4914,4915],{"class":737},"opcua-compact-server",[712,4917,734],{"class":718},[712,4919,743],{"class":718},[712,4921,734],{"class":718},[712,4923,4924],{"class":769},"z",[712,4926,734],{"class":718},[712,4928,1146],{"class":718},[712,4930,734],{"class":718},[712,4932,4820],{"class":737},[712,4934,734],{"class":718},[712,4936,743],{"class":718},[712,4938,734],{"class":718},[712,4940,4941],{"class":769},"port",[712,4943,734],{"class":718},[712,4945,1146],{"class":718},[712,4947,734],{"class":718},[712,4949,4950],{"class":737},"54845",[712,4952,734],{"class":718},[712,4954,743],{"class":718},[712,4956,734],{"class":718},[712,4958,4959],{"class":769},"endpoint",[712,4961,734],{"class":718},[712,4963,1146],{"class":718},[712,4965,4882],{"class":718},[712,4967,743],{"class":718},[712,4969,734],{"class":718},[712,4971,4972],{"class":769},"productUri",[712,4974,734],{"class":718},[712,4976,1146],{"class":718},[712,4978,4882],{"class":718},[712,4980,743],{"class":718},[712,4982,734],{"class":718},[712,4984,4985],{"class":769},"acceptExternalCommands",[712,4987,734],{"class":718},[712,4989,4990],{"class":718},":true,",[712,4992,734],{"class":718},[712,4994,4995],{"class":769},"maxAllowedSessionNumber",[712,4997,734],{"class":718},[712,4999,1146],{"class":718},[712,5001,734],{"class":718},[712,5003,5004],{"class":737},"10",[712,5006,734],{"class":718},[712,5008,743],{"class":718},[712,5010,734],{"class":718},[712,5012,5013],{"class":769},"maxConnectionsPerEndpoint",[712,5015,734],{"class":718},[712,5017,1146],{"class":718},[712,5019,734],{"class":718},[712,5021,5004],{"class":737},[712,5023,734],{"class":718},[712,5025,743],{"class":718},[712,5027,734],{"class":718},[712,5029,5030],{"class":769},"maxAllowedSubscriptionNumber",[712,5032,734],{"class":718},[712,5034,1146],{"class":718},[712,5036,734],{"class":718},[712,5038,5039],{"class":737},"100",[712,5041,734],{"class":718},[712,5043,743],{"class":718},[712,5045,734],{"class":718},[712,5047,5048],{"class":769},"alternateHostname",[712,5050,734],{"class":718},[712,5052,1146],{"class":718},[712,5054,4882],{"class":718},[712,5056,743],{"class":718},[712,5058,734],{"class":718},[712,5060,5061],{"class":769},"name",[712,5063,734],{"class":718},[712,5065,1146],{"class":718},[712,5067,4882],{"class":718},[712,5069,743],{"class":718},[712,5071,734],{"class":718},[712,5073,5074],{"class":769},"showStatusActivities",[712,5076,734],{"class":718},[712,5078,4870],{"class":718},[712,5080,734],{"class":718},[712,5082,5083],{"class":769},"showErrors",[712,5085,734],{"class":718},[712,5087,4990],{"class":718},[712,5089,734],{"class":718},[712,5091,5092],{"class":769},"allowAnonymous",[712,5094,734],{"class":718},[712,5096,4870],{"class":718},[712,5098,734],{"class":718},[712,5100,5101],{"class":769},"individualCerts",[712,5103,734],{"class":718},[712,5105,4990],{"class":718},[712,5107,734],{"class":718},[712,5109,5110],{"class":769},"isAuditing",[712,5112,734],{"class":718},[712,5114,4870],{"class":718},[712,5116,734],{"class":718},[712,5118,5119],{"class":769},"serverDiscovery",[712,5121,734],{"class":718},[712,5123,4990],{"class":718},[712,5125,734],{"class":718},[712,5127,5128],{"class":769},"users",[712,5130,734],{"class":718},[712,5132,5133],{"class":718},":[],",[712,5135,734],{"class":718},[712,5137,5138],{"class":769},"xmlsetsOPCUA",[712,5140,734],{"class":718},[712,5142,5133],{"class":718},[712,5144,734],{"class":718},[712,5146,5147],{"class":769},"publicCertificateFile",[712,5149,734],{"class":718},[712,5151,1146],{"class":718},[712,5153,734],{"class":718},[712,5155,5156],{"class":737},"\u002Froot\u002F.node-red\u002Fnode_modules\u002Fnode-red-contrib-opcua-server\u002Fcertificates\u002Fserver_selfsigned_cert_2048.pem",[712,5158,734],{"class":718},[712,5160,743],{"class":718},[712,5162,734],{"class":718},[712,5164,5165],{"class":769},"privateCertificateFile",[712,5167,734],{"class":718},[712,5169,1146],{"class":718},[712,5171,734],{"class":718},[712,5173,5174],{"class":737},"\u002Froot\u002F.node-red\u002Fnode_modules\u002Fnode-red-contrib-opcua-server\u002Fcertificates\u002Fserver_key_2048.pem",[712,5176,734],{"class":718},[712,5178,743],{"class":718},[712,5180,734],{"class":718},[712,5182,5183],{"class":769},"registerServerMethod",[712,5185,734],{"class":718},[712,5187,1146],{"class":718},[712,5189,734],{"class":718},[712,5191,5192],{"class":737},"1",[712,5194,734],{"class":718},[712,5196,743],{"class":718},[712,5198,734],{"class":718},[712,5200,5201],{"class":769},"discoveryServerEndpointUrl",[712,5203,734],{"class":718},[712,5205,1146],{"class":718},[712,5207,734],{"class":718},[712,5209,5210],{"class":737},"opc.tcp:\u002F\u002F192.168.0.114:54845",[712,5212,734],{"class":718},[712,5214,743],{"class":718},[712,5216,734],{"class":718},[712,5218,5219],{"class":769},"capabilitiesForMDNS",[712,5221,734],{"class":718},[712,5223,1146],{"class":718},[712,5225,4882],{"class":718},[712,5227,743],{"class":718},[712,5229,734],{"class":718},[712,5231,5232],{"class":769},"maxNodesPerRead",[712,5234,734],{"class":718},[712,5236,1146],{"class":718},[712,5238,5239],{"class":746},"1000",[712,5241,743],{"class":718},[712,5243,734],{"class":718},[712,5245,5246],{"class":769},"maxNodesPerWrite",[712,5248,734],{"class":718},[712,5250,1146],{"class":718},[712,5252,5239],{"class":746},[712,5254,743],{"class":718},[712,5256,734],{"class":718},[712,5258,5259],{"class":769},"maxNodesPerHistoryReadData",[712,5261,734],{"class":718},[712,5263,1146],{"class":718},[712,5265,5039],{"class":746},[712,5267,743],{"class":718},[712,5269,734],{"class":718},[712,5271,5272],{"class":769},"maxNodesPerBrowse",[712,5274,734],{"class":718},[712,5276,1146],{"class":718},[712,5278,5279],{"class":746},"3000",[712,5281,743],{"class":718},[712,5283,734],{"class":718},[712,5285,5286],{"class":769},"maxBrowseContinuationPoints",[712,5288,734],{"class":718},[712,5290,1146],{"class":718},[712,5292,734],{"class":718},[712,5294,5004],{"class":737},[712,5296,734],{"class":718},[712,5298,743],{"class":718},[712,5300,734],{"class":718},[712,5302,5303],{"class":769},"maxHistoryContinuationPoints",[712,5305,734],{"class":718},[712,5307,1146],{"class":718},[712,5309,734],{"class":718},[712,5311,5004],{"class":737},[712,5313,734],{"class":718},[712,5315,743],{"class":718},[712,5317,734],{"class":718},[712,5319,5320],{"class":769},"delayToInit",[712,5322,734],{"class":718},[712,5324,1146],{"class":718},[712,5326,734],{"class":718},[712,5328,5239],{"class":737},[712,5330,734],{"class":718},[712,5332,743],{"class":718},[712,5334,734],{"class":718},[712,5336,5337],{"class":769},"delayToClose",[712,5339,734],{"class":718},[712,5341,1146],{"class":718},[712,5343,734],{"class":718},[712,5345,5346],{"class":737},"200",[712,5348,734],{"class":718},[712,5350,743],{"class":718},[712,5352,734],{"class":718},[712,5354,5355],{"class":769},"serverShutdownTimeout",[712,5357,734],{"class":718},[712,5359,1146],{"class":718},[712,5361,734],{"class":718},[712,5363,5039],{"class":737},[712,5365,734],{"class":718},[712,5367,743],{"class":718},[712,5369,734],{"class":718},[712,5371,5372],{"class":769},"addressSpaceScript",[712,5374,734],{"class":718},[712,5376,1146],{"class":718},[712,5378,734],{"class":718},[712,5380,5381],{"class":737},"function constructAlarmAddressSpace(server, addressSpace, eventObjects, done) {",[712,5383,5384],{"class":722},"\\n",[712,5386,5387],{"class":737},"  \u002F\u002F server = the created node-opcua server",[712,5389,5384],{"class":722},[712,5391,5392],{"class":737},"  \u002F\u002F addressSpace = address space of the node-opcua server",[712,5394,5384],{"class":722},[712,5396,5397],{"class":737},"  \u002F\u002F eventObjects = add event variables here to hold them in memory from this script",[712,5399,5400],{"class":722},"\\n\\n",[712,5402,5403],{"class":737},"  \u002F\u002F internal sandbox objects are:",[712,5405,5384],{"class":722},[712,5407,5408],{"class":737},"  \u002F\u002F node = the compact server node,",[712,5410,5384],{"class":722},[712,5412,5413],{"class":737},"  \u002F\u002F coreServer = core compact server object for debug and access to NodeOPCUA",[712,5415,5384],{"class":722},[712,5417,5418],{"class":737},"  \u002F\u002F this.sandboxNodeContext = node context node-red",[712,5420,5384],{"class":722},[712,5422,5423],{"class":737},"  \u002F\u002F this.sandboxFlowContext = flow context node-red",[712,5425,5384],{"class":722},[712,5427,5428],{"class":737},"  \u002F\u002F this.sandboxGlobalContext = global context node-red",[712,5430,5384],{"class":722},[712,5432,5433],{"class":737},"  \u002F\u002F this.sandboxEnv = env variables",[712,5435,5384],{"class":722},[712,5437,5438],{"class":737},"  \u002F\u002F timeout and interval functions as expected from nodejs",[712,5440,5400],{"class":722},[712,5442,5443],{"class":737},"  const opcua = coreServer.choreCompact.opcua;",[712,5445,5384],{"class":722},[712,5447,5448],{"class":737},"  const LocalizedText = opcua.LocalizedText;",[712,5450,5384],{"class":722},[712,5452,5453],{"class":737},"  const namespace = addressSpace.getOwnNamespace();",[712,5455,5400],{"class":722},[712,5457,5458],{"class":737},"  const Variant = opcua.Variant;",[712,5460,5384],{"class":722},[712,5462,5463],{"class":737},"  const DataType = opcua.DataType;",[712,5465,5384],{"class":722},[712,5467,5468],{"class":737},"  const DataValue = opcua.DataValue;",[712,5470,5400],{"class":722},[712,5472,5473],{"class":737},"  var flexServerInternals = this;",[712,5475,5400],{"class":722},[712,5477,5478],{"class":737},"  this.sandboxFlowContext.set(",[712,5480,5481],{"class":722},"\\\"",[712,5483,936],{"class":737},[712,5485,5481],{"class":722},[712,5487,5488],{"class":737},", false);",[712,5490,5384],{"class":722},[712,5492,5478],{"class":737},[712,5494,5481],{"class":722},[712,5496,965],{"class":737},[712,5498,5481],{"class":722},[712,5500,5488],{"class":737},[712,5502,5384],{"class":722},[712,5504,5478],{"class":737},[712,5506,5481],{"class":722},[712,5508,992],{"class":737},[712,5510,5481],{"class":722},[712,5512,5513],{"class":737},", 0);",[712,5515,5384],{"class":722},[712,5517,5478],{"class":737},[712,5519,5481],{"class":722},[712,5521,1019],{"class":737},[712,5523,5481],{"class":722},[712,5525,5488],{"class":737},[712,5527,5384],{"class":722},[712,5529,5478],{"class":737},[712,5531,5481],{"class":722},[712,5533,1046],{"class":737},[712,5535,5481],{"class":722},[712,5537,5513],{"class":737},[712,5539,5384],{"class":722},[712,5541,5478],{"class":737},[712,5543,5481],{"class":722},[712,5545,1073],{"class":737},[712,5547,5481],{"class":722},[712,5549,5488],{"class":737},[712,5551,5400],{"class":722},[712,5553,5554],{"class":737},"  \u002F\u002F this.sandboxFlowContext.set(",[712,5556,5481],{"class":722},[712,5558,738],{"class":737},[712,5560,5481],{"class":722},[712,5562,5513],{"class":737},[712,5564,5384],{"class":722},[712,5566,5567],{"class":737},"  \u002F\u002F this.setInterval(() => {",[712,5569,5384],{"class":722},[712,5571,5572],{"class":737},"  \u002F\u002F   flexServerInternals.sandboxFlowContext.set(",[712,5574,5384],{"class":722},[712,5576,5577],{"class":737},"  \u002F\u002F     ",[712,5579,5481],{"class":722},[712,5581,738],{"class":737},[712,5583,5481],{"class":722},[712,5585,743],{"class":737},[712,5587,5384],{"class":722},[712,5589,5590],{"class":737},"  \u002F\u002F     Math.random() + 50.0",[712,5592,5384],{"class":722},[712,5594,5595],{"class":737},"  \u002F\u002F   );",[712,5597,5384],{"class":722},[712,5599,5600],{"class":737},"  \u002F\u002F }, 500);",[712,5602,5384],{"class":722},[712,5604,5554],{"class":737},[712,5606,5481],{"class":722},[712,5608,863],{"class":737},[712,5610,5481],{"class":722},[712,5612,5513],{"class":737},[712,5614,5384],{"class":722},[712,5616,5554],{"class":737},[712,5618,5481],{"class":722},[712,5620,5621],{"class":737},"isoInput3",[712,5623,5481],{"class":722},[712,5625,5513],{"class":737},[712,5627,5384],{"class":722},[712,5629,5554],{"class":737},[712,5631,5481],{"class":722},[712,5633,5634],{"class":737},"isoInput4",[712,5636,5481],{"class":722},[712,5638,5513],{"class":737},[712,5640,5384],{"class":722},[712,5642,5554],{"class":737},[712,5644,5481],{"class":722},[712,5646,5647],{"class":737},"isoInput5",[712,5649,5481],{"class":722},[712,5651,5513],{"class":737},[712,5653,5384],{"class":722},[712,5655,5554],{"class":737},[712,5657,5481],{"class":722},[712,5659,5660],{"class":737},"isoInput6",[712,5662,5481],{"class":722},[712,5664,5513],{"class":737},[712,5666,5384],{"class":722},[712,5668,5554],{"class":737},[712,5670,5481],{"class":722},[712,5672,5673],{"class":737},"isoInput7",[712,5675,5481],{"class":722},[712,5677,5513],{"class":737},[712,5679,5384],{"class":722},[712,5681,5554],{"class":737},[712,5683,5481],{"class":722},[712,5685,5686],{"class":737},"isoInput8",[712,5688,5481],{"class":722},[712,5690,5513],{"class":737},[712,5692,5384],{"class":722},[712,5694,5554],{"class":737},[712,5696,5481],{"class":722},[712,5698,5699],{"class":737},"isoOutput1",[712,5701,5481],{"class":722},[712,5703,5513],{"class":737},[712,5705,5384],{"class":722},[712,5707,5567],{"class":737},[712,5709,5384],{"class":722},[712,5711,5572],{"class":737},[712,5713,5384],{"class":722},[712,5715,5577],{"class":737},[712,5717,5481],{"class":722},[712,5719,5699],{"class":737},[712,5721,5481],{"class":722},[712,5723,743],{"class":737},[712,5725,5384],{"class":722},[712,5727,5728],{"class":737},"  \u002F\u002F     Math.random() + 10.0",[712,5730,5384],{"class":722},[712,5732,5595],{"class":737},[712,5734,5384],{"class":722},[712,5736,5600],{"class":737},[712,5738,5400],{"class":722},[712,5740,5554],{"class":737},[712,5742,5481],{"class":722},[712,5744,5745],{"class":737},"isoOutput2",[712,5747,5481],{"class":722},[712,5749,5513],{"class":737},[712,5751,5384],{"class":722},[712,5753,5554],{"class":737},[712,5755,5481],{"class":722},[712,5757,5758],{"class":737},"isoOutput3",[712,5760,5481],{"class":722},[712,5762,5513],{"class":737},[712,5764,5384],{"class":722},[712,5766,5554],{"class":737},[712,5768,5481],{"class":722},[712,5770,5771],{"class":737},"isoOutput4",[712,5773,5481],{"class":722},[712,5775,5513],{"class":737},[712,5777,5384],{"class":722},[712,5779,5554],{"class":737},[712,5781,5481],{"class":722},[712,5783,5784],{"class":737},"isoOutput5",[712,5786,5481],{"class":722},[712,5788,5513],{"class":737},[712,5790,5384],{"class":722},[712,5792,5554],{"class":737},[712,5794,5481],{"class":722},[712,5796,5797],{"class":737},"isoOutput6",[712,5799,5481],{"class":722},[712,5801,5513],{"class":737},[712,5803,5384],{"class":722},[712,5805,5554],{"class":737},[712,5807,5481],{"class":722},[712,5809,5810],{"class":737},"isoOutput7",[712,5812,5481],{"class":722},[712,5814,5513],{"class":737},[712,5816,5384],{"class":722},[712,5818,5554],{"class":737},[712,5820,5481],{"class":722},[712,5822,898],{"class":737},[712,5824,5481],{"class":722},[712,5826,5513],{"class":737},[712,5828,5400],{"class":722},[712,5830,5831],{"class":737},"  coreServer.debugLog(",[712,5833,5481],{"class":722},[712,5835,5836],{"class":737},"init dynamic address space",[712,5838,5481],{"class":722},[712,5840,5841],{"class":737},");",[712,5843,5384],{"class":722},[712,5845,5846],{"class":737},"  const rootFolder = addressSpace.findNode(",[712,5848,5481],{"class":722},[712,5850,5851],{"class":737},"RootFolder",[712,5853,5481],{"class":722},[712,5855,5841],{"class":737},[712,5857,5400],{"class":722},[712,5859,5860],{"class":737},"  node.warn(",[712,5862,5481],{"class":722},[712,5864,5865],{"class":737},"construct new address space for OPC UA",[712,5867,5481],{"class":722},[712,5869,5841],{"class":737},[712,5871,5400],{"class":722},[712,5873,5874],{"class":737},"  const myDevice = namespace.addFolder(rootFolder.objects, {",[712,5876,5384],{"class":722},[712,5878,5879],{"class":722},"    \\\"",[712,5881,1141],{"class":737},[712,5883,5481],{"class":722},[712,5885,1707],{"class":737},[712,5887,5481],{"class":722},[712,5889,1349],{"class":737},[712,5891,5892],{"class":722},"\\\"\\n",[712,5894,5895],{"class":737},"  });",[712,5897,5384],{"class":722},[712,5899,5900],{"class":737},"  const conveyorFolder = namespace.addFolder(myDevice, { ",[712,5902,5481],{"class":722},[712,5904,1141],{"class":737},[712,5906,5481],{"class":722},[712,5908,1707],{"class":737},[712,5910,5481],{"class":722},[712,5912,1399],{"class":737},[712,5914,5481],{"class":722},[712,5916,5917],{"class":737}," });",[712,5919,5384],{"class":722},[712,5921,5922],{"class":737},"  const conveyorBools = namespace.addFolder(conveyorFolder, {",[712,5924,5384],{"class":722},[712,5926,5879],{"class":722},[712,5928,1141],{"class":737},[712,5930,5481],{"class":722},[712,5932,1707],{"class":737},[712,5934,5481],{"class":722},[712,5936,1448],{"class":737},[712,5938,5892],{"class":722},[712,5940,5895],{"class":737},[712,5942,5384],{"class":722},[712,5944,5945],{"class":737},"  const conveyorDINTs = namespace.addFolder(conveyorFolder, {",[712,5947,5384],{"class":722},[712,5949,5879],{"class":722},[712,5951,1141],{"class":737},[712,5953,5481],{"class":722},[712,5955,1707],{"class":737},[712,5957,5481],{"class":722},[712,5959,1495],{"class":737},[712,5961,5892],{"class":722},[712,5963,5895],{"class":737},[712,5965,5384],{"class":722},[712,5967,5968],{"class":737},"  const conveyorFloats = namespace.addFolder(conveyorFolder, {",[712,5970,5384],{"class":722},[712,5972,5879],{"class":722},[712,5974,1141],{"class":737},[712,5976,5481],{"class":722},[712,5978,1707],{"class":737},[712,5980,5481],{"class":722},[712,5982,1544],{"class":737},[712,5984,5892],{"class":722},[712,5986,5895],{"class":737},[712,5988,5400],{"class":722},[712,5990,5991],{"class":737},"  \u002F\u002F Construct Nodes",[712,5993,5384],{"class":722},[712,5995,5996],{"class":737},"  const Conveyor_RTS = namespace.addVariable({",[712,5998,5384],{"class":722},[712,6000,5879],{"class":722},[712,6002,1610],{"class":737},[712,6004,5481],{"class":722},[712,6006,6007],{"class":737},": conveyorBools,",[712,6009,5384],{"class":722},[712,6011,5879],{"class":722},[712,6013,1141],{"class":737},[712,6015,5481],{"class":722},[712,6017,1707],{"class":737},[712,6019,5481],{"class":722},[712,6021,123],{"class":737},[712,6023,5481],{"class":722},[712,6025,743],{"class":737},[712,6027,5384],{"class":722},[712,6029,5879],{"class":722},[712,6031,1645],{"class":737},[712,6033,5481],{"class":722},[712,6035,1707],{"class":737},[712,6037,5481],{"class":722},[712,6039,1890],{"class":737},[712,6041,5481],{"class":722},[712,6043,743],{"class":737},[712,6045,5384],{"class":722},[712,6047,5879],{"class":722},[712,6049,1665],{"class":737},[712,6051,5481],{"class":722},[712,6053,1707],{"class":737},[712,6055,5481],{"class":722},[712,6057,1909],{"class":737},[712,6059,5481],{"class":722},[712,6061,743],{"class":737},[712,6063,5384],{"class":722},[712,6065,5879],{"class":722},[712,6067,1685],{"class":737},[712,6069,5481],{"class":722},[712,6071,6072],{"class":737},": {",[712,6074,5384],{"class":722},[712,6076,6077],{"class":722},"      \\\"",[712,6079,1932],{"class":737},[712,6081,5481],{"class":722},[712,6083,6084],{"class":737},": function () {",[712,6086,5384],{"class":722},[712,6088,6089],{"class":737},"        return new Variant({",[712,6091,5384],{"class":722},[712,6093,6094],{"class":722},"          \\\"",[712,6096,1665],{"class":737},[712,6098,5481],{"class":722},[712,6100,6101],{"class":737},": DataType.Boolean,",[712,6103,5384],{"class":722},[712,6105,6094],{"class":722},[712,6107,1685],{"class":737},[712,6109,5481],{"class":722},[712,6111,6112],{"class":737},": flexServerInternals.sandboxFlowContext.get(",[712,6114,5481],{"class":722},[712,6116,936],{"class":737},[712,6118,5481],{"class":722},[712,6120,750],{"class":737},[712,6122,5384],{"class":722},[712,6124,6125],{"class":737},"        });",[712,6127,5384],{"class":722},[712,6129,6130],{"class":737},"      },",[712,6132,5384],{"class":722},[712,6134,6077],{"class":722},[712,6136,508],{"class":737},[712,6138,5481],{"class":722},[712,6140,6141],{"class":737},": function (variant) {",[712,6143,5384],{"class":722},[712,6145,6146],{"class":737},"        flexServerInternals.sandboxFlowContext.set(",[712,6148,5384],{"class":722},[712,6150,6094],{"class":722},[712,6152,936],{"class":737},[712,6154,5481],{"class":722},[712,6156,743],{"class":737},[712,6158,5384],{"class":722},[712,6160,6161],{"class":737},"          variant.value",[712,6163,5384],{"class":722},[712,6165,6166],{"class":737},"        );",[712,6168,5384],{"class":722},[712,6170,6171],{"class":737},"        return opcua.StatusCodes.Good;",[712,6173,5384],{"class":722},[712,6175,6176],{"class":737},"      }",[712,6178,5384],{"class":722},[712,6180,6181],{"class":737},"    }",[712,6183,5384],{"class":722},[712,6185,5895],{"class":737},[712,6187,5400],{"class":722},[712,6189,6190],{"class":737},"  const Robot_RTS = namespace.addVariable({",[712,6192,5384],{"class":722},[712,6194,5879],{"class":722},[712,6196,1610],{"class":737},[712,6198,5481],{"class":722},[712,6200,6007],{"class":737},[712,6202,5384],{"class":722},[712,6204,5879],{"class":722},[712,6206,1141],{"class":737},[712,6208,5481],{"class":722},[712,6210,1707],{"class":737},[712,6212,5481],{"class":722},[712,6214,2178],{"class":737},[712,6216,5481],{"class":722},[712,6218,743],{"class":737},[712,6220,5384],{"class":722},[712,6222,5879],{"class":722},[712,6224,1645],{"class":737},[712,6226,5481],{"class":722},[712,6228,1707],{"class":737},[712,6230,5481],{"class":722},[712,6232,2198],{"class":737},[712,6234,5481],{"class":722},[712,6236,743],{"class":737},[712,6238,5384],{"class":722},[712,6240,5879],{"class":722},[712,6242,1665],{"class":737},[712,6244,5481],{"class":722},[712,6246,1707],{"class":737},[712,6248,5481],{"class":722},[712,6250,1909],{"class":737},[712,6252,5481],{"class":722},[712,6254,743],{"class":737},[712,6256,5384],{"class":722},[712,6258,5879],{"class":722},[712,6260,1685],{"class":737},[712,6262,5481],{"class":722},[712,6264,6072],{"class":737},[712,6266,5384],{"class":722},[712,6268,6077],{"class":722},[712,6270,1932],{"class":737},[712,6272,5481],{"class":722},[712,6274,6084],{"class":737},[712,6276,5384],{"class":722},[712,6278,6089],{"class":737},[712,6280,5384],{"class":722},[712,6282,6094],{"class":722},[712,6284,1665],{"class":737},[712,6286,5481],{"class":722},[712,6288,6101],{"class":737},[712,6290,5384],{"class":722},[712,6292,6094],{"class":722},[712,6294,1685],{"class":737},[712,6296,5481],{"class":722},[712,6298,6112],{"class":737},[712,6300,5481],{"class":722},[712,6302,965],{"class":737},[712,6304,5481],{"class":722},[712,6306,750],{"class":737},[712,6308,5384],{"class":722},[712,6310,6125],{"class":737},[712,6312,5384],{"class":722},[712,6314,6130],{"class":737},[712,6316,5384],{"class":722},[712,6318,6077],{"class":722},[712,6320,508],{"class":737},[712,6322,5481],{"class":722},[712,6324,6141],{"class":737},[712,6326,5384],{"class":722},[712,6328,6146],{"class":737},[712,6330,5384],{"class":722},[712,6332,6094],{"class":722},[712,6334,965],{"class":737},[712,6336,5481],{"class":722},[712,6338,743],{"class":737},[712,6340,5384],{"class":722},[712,6342,6161],{"class":737},[712,6344,5384],{"class":722},[712,6346,6166],{"class":737},[712,6348,5384],{"class":722},[712,6350,6171],{"class":737},[712,6352,5384],{"class":722},[712,6354,6176],{"class":737},[712,6356,5384],{"class":722},[712,6358,6181],{"class":737},[712,6360,5384],{"class":722},[712,6362,5895],{"class":737},[712,6364,5400],{"class":722},[712,6366,6367],{"class":737},"  const Conveyor_Running = namespace.addVariable({",[712,6369,5384],{"class":722},[712,6371,5879],{"class":722},[712,6373,1610],{"class":737},[712,6375,5481],{"class":722},[712,6377,6007],{"class":737},[712,6379,5384],{"class":722},[712,6381,5879],{"class":722},[712,6383,1141],{"class":737},[712,6385,5481],{"class":722},[712,6387,1707],{"class":737},[712,6389,5481],{"class":722},[712,6391,2483],{"class":737},[712,6393,5481],{"class":722},[712,6395,743],{"class":737},[712,6397,5384],{"class":722},[712,6399,5879],{"class":722},[712,6401,1645],{"class":737},[712,6403,5481],{"class":722},[712,6405,1707],{"class":737},[712,6407,5481],{"class":722},[712,6409,2503],{"class":737},[712,6411,5481],{"class":722},[712,6413,743],{"class":737},[712,6415,5384],{"class":722},[712,6417,5879],{"class":722},[712,6419,1665],{"class":737},[712,6421,5481],{"class":722},[712,6423,1707],{"class":737},[712,6425,5481],{"class":722},[712,6427,1909],{"class":737},[712,6429,5481],{"class":722},[712,6431,743],{"class":737},[712,6433,5384],{"class":722},[712,6435,5879],{"class":722},[712,6437,1685],{"class":737},[712,6439,5481],{"class":722},[712,6441,6072],{"class":737},[712,6443,5384],{"class":722},[712,6445,6077],{"class":722},[712,6447,1932],{"class":737},[712,6449,5481],{"class":722},[712,6451,6084],{"class":737},[712,6453,5384],{"class":722},[712,6455,6089],{"class":737},[712,6457,5384],{"class":722},[712,6459,6094],{"class":722},[712,6461,1665],{"class":737},[712,6463,5481],{"class":722},[712,6465,6101],{"class":737},[712,6467,5384],{"class":722},[712,6469,6094],{"class":722},[712,6471,1685],{"class":737},[712,6473,5481],{"class":722},[712,6475,6112],{"class":737},[712,6477,5481],{"class":722},[712,6479,1019],{"class":737},[712,6481,5481],{"class":722},[712,6483,750],{"class":737},[712,6485,5384],{"class":722},[712,6487,6125],{"class":737},[712,6489,5384],{"class":722},[712,6491,6130],{"class":737},[712,6493,5384],{"class":722},[712,6495,6077],{"class":722},[712,6497,508],{"class":737},[712,6499,5481],{"class":722},[712,6501,6141],{"class":737},[712,6503,5384],{"class":722},[712,6505,6146],{"class":737},[712,6507,5384],{"class":722},[712,6509,6094],{"class":722},[712,6511,1019],{"class":737},[712,6513,5481],{"class":722},[712,6515,743],{"class":737},[712,6517,5384],{"class":722},[712,6519,6161],{"class":737},[712,6521,5384],{"class":722},[712,6523,6166],{"class":737},[712,6525,5384],{"class":722},[712,6527,6171],{"class":737},[712,6529,5384],{"class":722},[712,6531,6176],{"class":737},[712,6533,5384],{"class":722},[712,6535,6181],{"class":737},[712,6537,5384],{"class":722},[712,6539,5895],{"class":737},[712,6541,5400],{"class":722},[712,6543,6544],{"class":737},"  const Line4_Fault = namespace.addVariable({",[712,6546,5384],{"class":722},[712,6548,5879],{"class":722},[712,6550,1610],{"class":737},[712,6552,5481],{"class":722},[712,6554,6007],{"class":737},[712,6556,5384],{"class":722},[712,6558,5879],{"class":722},[712,6560,1141],{"class":737},[712,6562,5481],{"class":722},[712,6564,1707],{"class":737},[712,6566,5481],{"class":722},[712,6568,2788],{"class":737},[712,6570,5481],{"class":722},[712,6572,743],{"class":737},[712,6574,5384],{"class":722},[712,6576,5879],{"class":722},[712,6578,1645],{"class":737},[712,6580,5481],{"class":722},[712,6582,1707],{"class":737},[712,6584,5481],{"class":722},[712,6586,2808],{"class":737},[712,6588,5481],{"class":722},[712,6590,743],{"class":737},[712,6592,5384],{"class":722},[712,6594,5879],{"class":722},[712,6596,1665],{"class":737},[712,6598,5481],{"class":722},[712,6600,1707],{"class":737},[712,6602,5481],{"class":722},[712,6604,1909],{"class":737},[712,6606,5481],{"class":722},[712,6608,743],{"class":737},[712,6610,5384],{"class":722},[712,6612,5879],{"class":722},[712,6614,1685],{"class":737},[712,6616,5481],{"class":722},[712,6618,6072],{"class":737},[712,6620,5384],{"class":722},[712,6622,6077],{"class":722},[712,6624,1932],{"class":737},[712,6626,5481],{"class":722},[712,6628,6084],{"class":737},[712,6630,5384],{"class":722},[712,6632,6089],{"class":737},[712,6634,5384],{"class":722},[712,6636,6094],{"class":722},[712,6638,1665],{"class":737},[712,6640,5481],{"class":722},[712,6642,6101],{"class":737},[712,6644,5384],{"class":722},[712,6646,6094],{"class":722},[712,6648,1685],{"class":737},[712,6650,5481],{"class":722},[712,6652,6112],{"class":737},[712,6654,5481],{"class":722},[712,6656,1073],{"class":737},[712,6658,5481],{"class":722},[712,6660,750],{"class":737},[712,6662,5384],{"class":722},[712,6664,6125],{"class":737},[712,6666,5384],{"class":722},[712,6668,6130],{"class":737},[712,6670,5384],{"class":722},[712,6672,6077],{"class":722},[712,6674,508],{"class":737},[712,6676,5481],{"class":722},[712,6678,6141],{"class":737},[712,6680,5384],{"class":722},[712,6682,6146],{"class":737},[712,6684,5384],{"class":722},[712,6686,6094],{"class":722},[712,6688,1073],{"class":737},[712,6690,5481],{"class":722},[712,6692,743],{"class":737},[712,6694,5384],{"class":722},[712,6696,6161],{"class":737},[712,6698,5384],{"class":722},[712,6700,6166],{"class":737},[712,6702,5384],{"class":722},[712,6704,6171],{"class":737},[712,6706,5384],{"class":722},[712,6708,6176],{"class":737},[712,6710,5384],{"class":722},[712,6712,6181],{"class":737},[712,6714,5384],{"class":722},[712,6716,5895],{"class":737},[712,6718,5400],{"class":722},[712,6720,6721],{"class":737},"  const Line4_State = namespace.addVariable({",[712,6723,5384],{"class":722},[712,6725,5879],{"class":722},[712,6727,1610],{"class":737},[712,6729,5481],{"class":722},[712,6731,6732],{"class":737},": conveyorDINTs,",[712,6734,5384],{"class":722},[712,6736,5879],{"class":722},[712,6738,1141],{"class":737},[712,6740,5481],{"class":722},[712,6742,1707],{"class":737},[712,6744,5481],{"class":722},[712,6746,3094],{"class":737},[712,6748,5481],{"class":722},[712,6750,743],{"class":737},[712,6752,5384],{"class":722},[712,6754,5879],{"class":722},[712,6756,1645],{"class":737},[712,6758,5481],{"class":722},[712,6760,1707],{"class":737},[712,6762,5481],{"class":722},[712,6764,3114],{"class":737},[712,6766,5481],{"class":722},[712,6768,743],{"class":737},[712,6770,5384],{"class":722},[712,6772,5879],{"class":722},[712,6774,1665],{"class":737},[712,6776,5481],{"class":722},[712,6778,1707],{"class":737},[712,6780,5481],{"class":722},[712,6782,3134],{"class":737},[712,6784,5481],{"class":722},[712,6786,743],{"class":737},[712,6788,5384],{"class":722},[712,6790,5879],{"class":722},[712,6792,1685],{"class":737},[712,6794,5481],{"class":722},[712,6796,6072],{"class":737},[712,6798,5384],{"class":722},[712,6800,6077],{"class":722},[712,6802,1932],{"class":737},[712,6804,5481],{"class":722},[712,6806,6084],{"class":737},[712,6808,5384],{"class":722},[712,6810,6089],{"class":737},[712,6812,5384],{"class":722},[712,6814,6094],{"class":722},[712,6816,1665],{"class":737},[712,6818,5481],{"class":722},[712,6820,6821],{"class":737},": DataType.Int32,",[712,6823,5384],{"class":722},[712,6825,6094],{"class":722},[712,6827,1685],{"class":737},[712,6829,5481],{"class":722},[712,6831,6112],{"class":737},[712,6833,5481],{"class":722},[712,6835,1046],{"class":737},[712,6837,5481],{"class":722},[712,6839,750],{"class":737},[712,6841,5384],{"class":722},[712,6843,6125],{"class":737},[712,6845,5384],{"class":722},[712,6847,6130],{"class":737},[712,6849,5384],{"class":722},[712,6851,6077],{"class":722},[712,6853,508],{"class":737},[712,6855,5481],{"class":722},[712,6857,6141],{"class":737},[712,6859,5384],{"class":722},[712,6861,6146],{"class":737},[712,6863,5384],{"class":722},[712,6865,6094],{"class":722},[712,6867,1046],{"class":737},[712,6869,5481],{"class":722},[712,6871,743],{"class":737},[712,6873,5384],{"class":722},[712,6875,6161],{"class":737},[712,6877,5384],{"class":722},[712,6879,6166],{"class":737},[712,6881,5384],{"class":722},[712,6883,6171],{"class":737},[712,6885,5384],{"class":722},[712,6887,6176],{"class":737},[712,6889,5384],{"class":722},[712,6891,6181],{"class":737},[712,6893,5384],{"class":722},[712,6895,5895],{"class":737},[712,6897,5400],{"class":722},[712,6899,6900],{"class":737},"  const Robot_Position = namespace.addVariable({",[712,6902,5384],{"class":722},[712,6904,5879],{"class":722},[712,6906,1610],{"class":737},[712,6908,5481],{"class":722},[712,6910,6911],{"class":737},": conveyorFloats,",[712,6913,5384],{"class":722},[712,6915,5879],{"class":722},[712,6917,1141],{"class":737},[712,6919,5481],{"class":722},[712,6921,1707],{"class":737},[712,6923,5481],{"class":722},[712,6925,3401],{"class":737},[712,6927,5481],{"class":722},[712,6929,743],{"class":737},[712,6931,5384],{"class":722},[712,6933,5879],{"class":722},[712,6935,1645],{"class":737},[712,6937,5481],{"class":722},[712,6939,1707],{"class":737},[712,6941,5481],{"class":722},[712,6943,3421],{"class":737},[712,6945,5481],{"class":722},[712,6947,743],{"class":737},[712,6949,5384],{"class":722},[712,6951,5879],{"class":722},[712,6953,1665],{"class":737},[712,6955,5481],{"class":722},[712,6957,1707],{"class":737},[712,6959,5481],{"class":722},[712,6961,3441],{"class":737},[712,6963,5481],{"class":722},[712,6965,743],{"class":737},[712,6967,5384],{"class":722},[712,6969,5879],{"class":722},[712,6971,1685],{"class":737},[712,6973,5481],{"class":722},[712,6975,6072],{"class":737},[712,6977,5384],{"class":722},[712,6979,6077],{"class":722},[712,6981,1932],{"class":737},[712,6983,5481],{"class":722},[712,6985,6084],{"class":737},[712,6987,5384],{"class":722},[712,6989,6089],{"class":737},[712,6991,5384],{"class":722},[712,6993,6094],{"class":722},[712,6995,1665],{"class":737},[712,6997,5481],{"class":722},[712,6999,7000],{"class":737},": DataType.Float,",[712,7002,5384],{"class":722},[712,7004,6094],{"class":722},[712,7006,1685],{"class":737},[712,7008,5481],{"class":722},[712,7010,6112],{"class":737},[712,7012,5481],{"class":722},[712,7014,992],{"class":737},[712,7016,5481],{"class":722},[712,7018,750],{"class":737},[712,7020,5384],{"class":722},[712,7022,6125],{"class":737},[712,7024,5384],{"class":722},[712,7026,6130],{"class":737},[712,7028,5384],{"class":722},[712,7030,6077],{"class":722},[712,7032,508],{"class":737},[712,7034,5481],{"class":722},[712,7036,6141],{"class":737},[712,7038,5384],{"class":722},[712,7040,6146],{"class":737},[712,7042,5384],{"class":722},[712,7044,6094],{"class":722},[712,7046,992],{"class":737},[712,7048,5481],{"class":722},[712,7050,743],{"class":737},[712,7052,5384],{"class":722},[712,7054,7055],{"class":737},"          parseFloat(variant.value)",[712,7057,5384],{"class":722},[712,7059,6166],{"class":737},[712,7061,5384],{"class":722},[712,7063,6171],{"class":737},[712,7065,5384],{"class":722},[712,7067,6176],{"class":737},[712,7069,5384],{"class":722},[712,7071,6181],{"class":737},[712,7073,5384],{"class":722},[712,7075,5895],{"class":737},[712,7077,5400],{"class":722},[712,7079,7080],{"class":737},"  \u002F\u002F------------------------------------------------------------------------------",[712,7082,5384],{"class":722},[712,7084,7085],{"class":737},"  \u002F\u002F Add a view",[712,7087,5384],{"class":722},[712,7089,7080],{"class":737},[712,7091,5384],{"class":722},[712,7093,7094],{"class":737},"  const viewBools = namespace.addView({",[712,7096,5384],{"class":722},[712,7098,5879],{"class":722},[712,7100,1610],{"class":737},[712,7102,5481],{"class":722},[712,7104,7105],{"class":737},": rootFolder.views,",[712,7107,5384],{"class":722},[712,7109,5879],{"class":722},[712,7111,1141],{"class":737},[712,7113,5481],{"class":722},[712,7115,1707],{"class":737},[712,7117,5481],{"class":722},[712,7119,3873],{"class":737},[712,7121,5892],{"class":722},[712,7123,5895],{"class":737},[712,7125,5400],{"class":722},[712,7127,7128],{"class":737},"  const viewDINTs = namespace.addView({",[712,7130,5384],{"class":722},[712,7132,5879],{"class":722},[712,7134,1610],{"class":737},[712,7136,5481],{"class":722},[712,7138,7105],{"class":737},[712,7140,5384],{"class":722},[712,7142,5879],{"class":722},[712,7144,1141],{"class":737},[712,7146,5481],{"class":722},[712,7148,1707],{"class":737},[712,7150,5481],{"class":722},[712,7152,3939],{"class":737},[712,7154,5892],{"class":722},[712,7156,5895],{"class":737},[712,7158,5400],{"class":722},[712,7160,7161],{"class":737},"  const viewFloats = namespace.addView({",[712,7163,5384],{"class":722},[712,7165,5879],{"class":722},[712,7167,1610],{"class":737},[712,7169,5481],{"class":722},[712,7171,7105],{"class":737},[712,7173,5384],{"class":722},[712,7175,5879],{"class":722},[712,7177,1141],{"class":737},[712,7179,5481],{"class":722},[712,7181,1707],{"class":737},[712,7183,5481],{"class":722},[712,7185,4005],{"class":737},[712,7187,5892],{"class":722},[712,7189,5895],{"class":737},[712,7191,5400],{"class":722},[712,7193,7194],{"class":737},"  viewBools.addReference({",[712,7196,5384],{"class":722},[712,7198,5879],{"class":722},[712,7200,3774],{"class":737},[712,7202,5481],{"class":722},[712,7204,1707],{"class":737},[712,7206,5481],{"class":722},[712,7208,3783],{"class":737},[712,7210,5481],{"class":722},[712,7212,743],{"class":737},[712,7214,5384],{"class":722},[712,7216,5879],{"class":722},[712,7218,1645],{"class":737},[712,7220,5481],{"class":722},[712,7222,7223],{"class":737},": Conveyor_RTS.nodeId",[712,7225,5384],{"class":722},[712,7227,5895],{"class":737},[712,7229,5400],{"class":722},[712,7231,7194],{"class":737},[712,7233,5384],{"class":722},[712,7235,5879],{"class":722},[712,7237,3774],{"class":737},[712,7239,5481],{"class":722},[712,7241,1707],{"class":737},[712,7243,5481],{"class":722},[712,7245,3783],{"class":737},[712,7247,5481],{"class":722},[712,7249,743],{"class":737},[712,7251,5384],{"class":722},[712,7253,5879],{"class":722},[712,7255,1645],{"class":737},[712,7257,5481],{"class":722},[712,7259,7260],{"class":737},": Robot_RTS.nodeId",[712,7262,5384],{"class":722},[712,7264,5895],{"class":737},[712,7266,5400],{"class":722},[712,7268,7194],{"class":737},[712,7270,5384],{"class":722},[712,7272,5879],{"class":722},[712,7274,3774],{"class":737},[712,7276,5481],{"class":722},[712,7278,1707],{"class":737},[712,7280,5481],{"class":722},[712,7282,3783],{"class":737},[712,7284,5481],{"class":722},[712,7286,743],{"class":737},[712,7288,5384],{"class":722},[712,7290,5879],{"class":722},[712,7292,1645],{"class":737},[712,7294,5481],{"class":722},[712,7296,7297],{"class":737},": Conveyor_Running.nodeId",[712,7299,5384],{"class":722},[712,7301,5895],{"class":737},[712,7303,5400],{"class":722},[712,7305,7194],{"class":737},[712,7307,5384],{"class":722},[712,7309,5879],{"class":722},[712,7311,3774],{"class":737},[712,7313,5481],{"class":722},[712,7315,1707],{"class":737},[712,7317,5481],{"class":722},[712,7319,3783],{"class":737},[712,7321,5481],{"class":722},[712,7323,743],{"class":737},[712,7325,5384],{"class":722},[712,7327,5879],{"class":722},[712,7329,1645],{"class":737},[712,7331,5481],{"class":722},[712,7333,7334],{"class":737},": Line4_Fault.nodeId",[712,7336,5384],{"class":722},[712,7338,5895],{"class":737},[712,7340,7341],{"class":722},"\\n\\n\\n",[712,7343,7344],{"class":737},"  viewDINTs.addReference({",[712,7346,5384],{"class":722},[712,7348,5879],{"class":722},[712,7350,3774],{"class":737},[712,7352,5481],{"class":722},[712,7354,1707],{"class":737},[712,7356,5481],{"class":722},[712,7358,3783],{"class":737},[712,7360,5481],{"class":722},[712,7362,743],{"class":737},[712,7364,5384],{"class":722},[712,7366,5879],{"class":722},[712,7368,1645],{"class":737},[712,7370,5481],{"class":722},[712,7372,7373],{"class":737},": Line4_State.nodeId",[712,7375,5384],{"class":722},[712,7377,5895],{"class":737},[712,7379,5400],{"class":722},[712,7381,7382],{"class":737},"  viewFloats.addReference({",[712,7384,5384],{"class":722},[712,7386,5879],{"class":722},[712,7388,3774],{"class":737},[712,7390,5481],{"class":722},[712,7392,1707],{"class":737},[712,7394,5481],{"class":722},[712,7396,3783],{"class":737},[712,7398,5481],{"class":722},[712,7400,743],{"class":737},[712,7402,5384],{"class":722},[712,7404,5879],{"class":722},[712,7406,1645],{"class":737},[712,7408,5481],{"class":722},[712,7410,7411],{"class":737},": Robot_Position.nodeId",[712,7413,5384],{"class":722},[712,7415,5895],{"class":737},[712,7417,5384],{"class":722},[712,7419,5831],{"class":737},[712,7421,5481],{"class":722},[712,7423,7424],{"class":737},"create dynamic address space done",[712,7426,5481],{"class":722},[712,7428,5841],{"class":737},[712,7430,5384],{"class":722},[712,7432,5860],{"class":737},[712,7434,5481],{"class":722},[712,7436,7437],{"class":737},"construction of new address space for OPC UA done",[712,7439,5481],{"class":722},[712,7441,5841],{"class":737},[712,7443,5400],{"class":722},[712,7445,7446],{"class":737},"  done();",[712,7448,5384],{"class":722},[712,7450,7451],{"class":737},"}",[712,7453,5384],{"class":722},[712,7455,734],{"class":718},[712,7457,743],{"class":718},[712,7459,734],{"class":718},[712,7461,7462],{"class":769},"x",[712,7464,734],{"class":718},[712,7466,1146],{"class":718},[712,7468,7469],{"class":746},"960",[712,7471,743],{"class":718},[712,7473,734],{"class":718},[712,7475,7476],{"class":769},"y",[712,7478,734],{"class":718},[712,7480,1146],{"class":718},[712,7482,7483],{"class":746},"600",[712,7485,743],{"class":718},[712,7487,734],{"class":718},[712,7489,7490],{"class":769},"wires",[712,7492,734],{"class":718},[712,7494,7495],{"class":718},":[]},{",[712,7497,734],{"class":718},[712,7499,4811],{"class":769},[712,7501,734],{"class":718},[712,7503,1146],{"class":718},[712,7505,734],{"class":718},[712,7507,7508],{"class":737},"7ae89f134415c51e",[712,7510,734],{"class":718},[712,7512,743],{"class":718},[712,7514,734],{"class":718},[712,7516,4829],{"class":769},[712,7518,734],{"class":718},[712,7520,1146],{"class":718},[712,7522,734],{"class":718},[712,7524,322],{"class":737},[712,7526,734],{"class":718},[712,7528,743],{"class":718},[712,7530,734],{"class":718},[712,7532,4924],{"class":769},[712,7534,734],{"class":718},[712,7536,1146],{"class":718},[712,7538,734],{"class":718},[712,7540,4820],{"class":737},[712,7542,734],{"class":718},[712,7544,743],{"class":718},[712,7546,734],{"class":718},[712,7548,4959],{"class":769},[712,7550,734],{"class":718},[712,7552,1146],{"class":718},[712,7554,734],{"class":718},[712,7556,7557],{"class":737},"f012042b75173b77",[712,7559,734],{"class":718},[712,7561,743],{"class":718},[712,7563,734],{"class":718},[712,7565,7566],{"class":769},"mode",[712,7568,734],{"class":718},[712,7570,1146],{"class":718},[712,7572,734],{"class":718},[712,7574,7575],{"class":737},"all",[712,7577,734],{"class":718},[712,7579,743],{"class":718},[712,7581,734],{"class":718},[712,7583,7584],{"class":769},"variable",[712,7586,734],{"class":718},[712,7588,1146],{"class":718},[712,7590,4882],{"class":718},[712,7592,743],{"class":718},[712,7594,734],{"class":718},[712,7596,7597],{"class":769},"program",[712,7599,734],{"class":718},[712,7601,1146],{"class":718},[712,7603,4882],{"class":718},[712,7605,743],{"class":718},[712,7607,734],{"class":718},[712,7609,5061],{"class":769},[712,7611,734],{"class":718},[712,7613,1146],{"class":718},[712,7615,734],{"class":718},[712,7617,7618],{"class":737},"Read Line4 Conveyor tags",[712,7620,734],{"class":718},[712,7622,743],{"class":718},[712,7624,734],{"class":718},[712,7626,7462],{"class":769},[712,7628,734],{"class":718},[712,7630,1146],{"class":718},[712,7632,7633],{"class":746},"150",[712,7635,743],{"class":718},[712,7637,734],{"class":718},[712,7639,7476],{"class":769},[712,7641,734],{"class":718},[712,7643,1146],{"class":718},[712,7645,7483],{"class":746},[712,7647,743],{"class":718},[712,7649,734],{"class":718},[712,7651,7490],{"class":769},[712,7653,734],{"class":718},[712,7655,7656],{"class":718},":[[",[712,7658,734],{"class":718},[712,7660,7661],{"class":737},"0c51f44baa08a3b2",[712,7663,734],{"class":718},[712,7665,7666],{"class":718},"]]},{",[712,7668,734],{"class":718},[712,7670,4811],{"class":769},[712,7672,734],{"class":718},[712,7674,1146],{"class":718},[712,7676,734],{"class":718},[712,7678,7679],{"class":737},"a0592280baea975b",[712,7681,734],{"class":718},[712,7683,743],{"class":718},[712,7685,734],{"class":718},[712,7687,4829],{"class":769},[712,7689,734],{"class":718},[712,7691,1146],{"class":718},[712,7693,734],{"class":718},[712,7695,7696],{"class":737},"comment",[712,7698,734],{"class":718},[712,7700,743],{"class":718},[712,7702,734],{"class":718},[712,7704,4924],{"class":769},[712,7706,734],{"class":718},[712,7708,1146],{"class":718},[712,7710,734],{"class":718},[712,7712,4820],{"class":737},[712,7714,734],{"class":718},[712,7716,743],{"class":718},[712,7718,734],{"class":718},[712,7720,5061],{"class":769},[712,7722,734],{"class":718},[712,7724,1146],{"class":718},[712,7726,734],{"class":718},[712,7728,7729],{"class":737},"read data from PLC & store in conveyorData context flow memory",[712,7731,734],{"class":718},[712,7733,743],{"class":718},[712,7735,734],{"class":718},[712,7737,4875],{"class":769},[712,7739,734],{"class":718},[712,7741,1146],{"class":718},[712,7743,4882],{"class":718},[712,7745,743],{"class":718},[712,7747,734],{"class":718},[712,7749,7462],{"class":769},[712,7751,734],{"class":718},[712,7753,1146],{"class":718},[712,7755,7756],{"class":746},"350",[712,7758,743],{"class":718},[712,7760,734],{"class":718},[712,7762,7476],{"class":769},[712,7764,734],{"class":718},[712,7766,1146],{"class":718},[712,7768,7769],{"class":746},"540",[712,7771,743],{"class":718},[712,7773,734],{"class":718},[712,7775,7490],{"class":769},[712,7777,734],{"class":718},[712,7779,7495],{"class":718},[712,7781,734],{"class":718},[712,7783,4811],{"class":769},[712,7785,734],{"class":718},[712,7787,1146],{"class":718},[712,7789,734],{"class":718},[712,7791,7792],{"class":737},"b411a5ce4749fa61",[712,7794,734],{"class":718},[712,7796,743],{"class":718},[712,7798,734],{"class":718},[712,7800,4829],{"class":769},[712,7802,734],{"class":718},[712,7804,1146],{"class":718},[712,7806,734],{"class":718},[712,7808,7696],{"class":737},[712,7810,734],{"class":718},[712,7812,743],{"class":718},[712,7814,734],{"class":718},[712,7816,4924],{"class":769},[712,7818,734],{"class":718},[712,7820,1146],{"class":718},[712,7822,734],{"class":718},[712,7824,4820],{"class":737},[712,7826,734],{"class":718},[712,7828,743],{"class":718},[712,7830,734],{"class":718},[712,7832,5061],{"class":769},[712,7834,734],{"class":718},[712,7836,1146],{"class":718},[712,7838,734],{"class":718},[712,7840,7841],{"class":737},"Secure OPC UA Server Publishing PLC conveyorData",[712,7843,734],{"class":718},[712,7845,743],{"class":718},[712,7847,734],{"class":718},[712,7849,4875],{"class":769},[712,7851,734],{"class":718},[712,7853,1146],{"class":718},[712,7855,4882],{"class":718},[712,7857,743],{"class":718},[712,7859,734],{"class":718},[712,7861,7462],{"class":769},[712,7863,734],{"class":718},[712,7865,1146],{"class":718},[712,7867,7868],{"class":746},"980",[712,7870,743],{"class":718},[712,7872,734],{"class":718},[712,7874,7476],{"class":769},[712,7876,734],{"class":718},[712,7878,1146],{"class":718},[712,7880,7769],{"class":746},[712,7882,743],{"class":718},[712,7884,734],{"class":718},[712,7886,7490],{"class":769},[712,7888,734],{"class":718},[712,7890,7495],{"class":718},[712,7892,734],{"class":718},[712,7894,4811],{"class":769},[712,7896,734],{"class":718},[712,7898,1146],{"class":718},[712,7900,734],{"class":718},[712,7902,7661],{"class":737},[712,7904,734],{"class":718},[712,7906,743],{"class":718},[712,7908,734],{"class":718},[712,7910,4829],{"class":769},[712,7912,734],{"class":718},[712,7914,1146],{"class":718},[712,7916,734],{"class":718},[712,7918,462],{"class":737},[712,7920,734],{"class":718},[712,7922,743],{"class":718},[712,7924,734],{"class":718},[712,7926,4924],{"class":769},[712,7928,734],{"class":718},[712,7930,1146],{"class":718},[712,7932,734],{"class":718},[712,7934,4820],{"class":737},[712,7936,734],{"class":718},[712,7938,743],{"class":718},[712,7940,734],{"class":718},[712,7942,5061],{"class":769},[712,7944,734],{"class":718},[712,7946,1146],{"class":718},[712,7948,734],{"class":718},[712,7950,7951],{"class":737},"store PLC Data in flow context memory",[712,7953,734],{"class":718},[712,7955,743],{"class":718},[712,7957,734],{"class":718},[712,7959,7960],{"class":769},"rules",[712,7962,734],{"class":718},[712,7964,7965],{"class":718},":[{",[712,7967,734],{"class":718},[712,7969,7971],{"class":7970},"sBMFI","t",[712,7973,734],{"class":718},[712,7975,1146],{"class":718},[712,7977,734],{"class":718},[712,7979,508],{"class":737},[712,7981,734],{"class":718},[712,7983,743],{"class":718},[712,7985,734],{"class":718},[712,7987,14],{"class":7970},[712,7989,734],{"class":718},[712,7991,1146],{"class":718},[712,7993,734],{"class":718},[712,7995,936],{"class":737},[712,7997,734],{"class":718},[712,7999,743],{"class":718},[712,8001,734],{"class":718},[712,8003,8004],{"class":7970},"pt",[712,8006,734],{"class":718},[712,8008,1146],{"class":718},[712,8010,734],{"class":718},[712,8012,512],{"class":737},[712,8014,734],{"class":718},[712,8016,743],{"class":718},[712,8018,734],{"class":718},[712,8020,8021],{"class":7970},"to",[712,8023,734],{"class":718},[712,8025,1146],{"class":718},[712,8027,734],{"class":718},[712,8029,8030],{"class":737},"payload.Conveyor_RTS",[712,8032,734],{"class":718},[712,8034,743],{"class":718},[712,8036,734],{"class":718},[712,8038,8039],{"class":7970},"tot",[712,8041,734],{"class":718},[712,8043,1146],{"class":718},[712,8045,734],{"class":718},[712,8047,516],{"class":737},[712,8049,734],{"class":718},[712,8051,4885],{"class":718},[712,8053,734],{"class":718},[712,8055,7971],{"class":7970},[712,8057,734],{"class":718},[712,8059,1146],{"class":718},[712,8061,734],{"class":718},[712,8063,508],{"class":737},[712,8065,734],{"class":718},[712,8067,743],{"class":718},[712,8069,734],{"class":718},[712,8071,14],{"class":7970},[712,8073,734],{"class":718},[712,8075,1146],{"class":718},[712,8077,734],{"class":718},[712,8079,1019],{"class":737},[712,8081,734],{"class":718},[712,8083,743],{"class":718},[712,8085,734],{"class":718},[712,8087,8004],{"class":7970},[712,8089,734],{"class":718},[712,8091,1146],{"class":718},[712,8093,734],{"class":718},[712,8095,512],{"class":737},[712,8097,734],{"class":718},[712,8099,743],{"class":718},[712,8101,734],{"class":718},[712,8103,8021],{"class":7970},[712,8105,734],{"class":718},[712,8107,1146],{"class":718},[712,8109,734],{"class":718},[712,8111,8112],{"class":737},"payload.Conveyor_Running",[712,8114,734],{"class":718},[712,8116,743],{"class":718},[712,8118,734],{"class":718},[712,8120,8039],{"class":7970},[712,8122,734],{"class":718},[712,8124,1146],{"class":718},[712,8126,734],{"class":718},[712,8128,516],{"class":737},[712,8130,734],{"class":718},[712,8132,4885],{"class":718},[712,8134,734],{"class":718},[712,8136,7971],{"class":7970},[712,8138,734],{"class":718},[712,8140,1146],{"class":718},[712,8142,734],{"class":718},[712,8144,508],{"class":737},[712,8146,734],{"class":718},[712,8148,743],{"class":718},[712,8150,734],{"class":718},[712,8152,14],{"class":7970},[712,8154,734],{"class":718},[712,8156,1146],{"class":718},[712,8158,734],{"class":718},[712,8160,1073],{"class":737},[712,8162,734],{"class":718},[712,8164,743],{"class":718},[712,8166,734],{"class":718},[712,8168,8004],{"class":7970},[712,8170,734],{"class":718},[712,8172,1146],{"class":718},[712,8174,734],{"class":718},[712,8176,512],{"class":737},[712,8178,734],{"class":718},[712,8180,743],{"class":718},[712,8182,734],{"class":718},[712,8184,8021],{"class":7970},[712,8186,734],{"class":718},[712,8188,1146],{"class":718},[712,8190,734],{"class":718},[712,8192,8193],{"class":737},"payload.Line4_Fault",[712,8195,734],{"class":718},[712,8197,743],{"class":718},[712,8199,734],{"class":718},[712,8201,8039],{"class":7970},[712,8203,734],{"class":718},[712,8205,1146],{"class":718},[712,8207,734],{"class":718},[712,8209,516],{"class":737},[712,8211,734],{"class":718},[712,8213,4885],{"class":718},[712,8215,734],{"class":718},[712,8217,7971],{"class":7970},[712,8219,734],{"class":718},[712,8221,1146],{"class":718},[712,8223,734],{"class":718},[712,8225,508],{"class":737},[712,8227,734],{"class":718},[712,8229,743],{"class":718},[712,8231,734],{"class":718},[712,8233,14],{"class":7970},[712,8235,734],{"class":718},[712,8237,1146],{"class":718},[712,8239,734],{"class":718},[712,8241,1046],{"class":737},[712,8243,734],{"class":718},[712,8245,743],{"class":718},[712,8247,734],{"class":718},[712,8249,8004],{"class":7970},[712,8251,734],{"class":718},[712,8253,1146],{"class":718},[712,8255,734],{"class":718},[712,8257,512],{"class":737},[712,8259,734],{"class":718},[712,8261,743],{"class":718},[712,8263,734],{"class":718},[712,8265,8021],{"class":7970},[712,8267,734],{"class":718},[712,8269,1146],{"class":718},[712,8271,734],{"class":718},[712,8273,8274],{"class":737},"payload.Line4_State",[712,8276,734],{"class":718},[712,8278,743],{"class":718},[712,8280,734],{"class":718},[712,8282,8039],{"class":7970},[712,8284,734],{"class":718},[712,8286,1146],{"class":718},[712,8288,734],{"class":718},[712,8290,516],{"class":737},[712,8292,734],{"class":718},[712,8294,4885],{"class":718},[712,8296,734],{"class":718},[712,8298,7971],{"class":7970},[712,8300,734],{"class":718},[712,8302,1146],{"class":718},[712,8304,734],{"class":718},[712,8306,508],{"class":737},[712,8308,734],{"class":718},[712,8310,743],{"class":718},[712,8312,734],{"class":718},[712,8314,14],{"class":7970},[712,8316,734],{"class":718},[712,8318,1146],{"class":718},[712,8320,734],{"class":718},[712,8322,992],{"class":737},[712,8324,734],{"class":718},[712,8326,743],{"class":718},[712,8328,734],{"class":718},[712,8330,8004],{"class":7970},[712,8332,734],{"class":718},[712,8334,1146],{"class":718},[712,8336,734],{"class":718},[712,8338,512],{"class":737},[712,8340,734],{"class":718},[712,8342,743],{"class":718},[712,8344,734],{"class":718},[712,8346,8021],{"class":7970},[712,8348,734],{"class":718},[712,8350,1146],{"class":718},[712,8352,734],{"class":718},[712,8354,8355],{"class":737},"payload.Robot_Position",[712,8357,734],{"class":718},[712,8359,743],{"class":718},[712,8361,734],{"class":718},[712,8363,8039],{"class":7970},[712,8365,734],{"class":718},[712,8367,1146],{"class":718},[712,8369,734],{"class":718},[712,8371,516],{"class":737},[712,8373,734],{"class":718},[712,8375,4885],{"class":718},[712,8377,734],{"class":718},[712,8379,7971],{"class":7970},[712,8381,734],{"class":718},[712,8383,1146],{"class":718},[712,8385,734],{"class":718},[712,8387,508],{"class":737},[712,8389,734],{"class":718},[712,8391,743],{"class":718},[712,8393,734],{"class":718},[712,8395,14],{"class":7970},[712,8397,734],{"class":718},[712,8399,1146],{"class":718},[712,8401,734],{"class":718},[712,8403,965],{"class":737},[712,8405,734],{"class":718},[712,8407,743],{"class":718},[712,8409,734],{"class":718},[712,8411,8004],{"class":7970},[712,8413,734],{"class":718},[712,8415,1146],{"class":718},[712,8417,734],{"class":718},[712,8419,512],{"class":737},[712,8421,734],{"class":718},[712,8423,743],{"class":718},[712,8425,734],{"class":718},[712,8427,8021],{"class":7970},[712,8429,734],{"class":718},[712,8431,1146],{"class":718},[712,8433,734],{"class":718},[712,8435,8436],{"class":737},"payload.Robot_RTS",[712,8438,734],{"class":718},[712,8440,743],{"class":718},[712,8442,734],{"class":718},[712,8444,8039],{"class":7970},[712,8446,734],{"class":718},[712,8448,1146],{"class":718},[712,8450,734],{"class":718},[712,8452,516],{"class":737},[712,8454,734],{"class":718},[712,8456,8457],{"class":718},"}],",[712,8459,734],{"class":718},[712,8461,8462],{"class":769},"action",[712,8464,734],{"class":718},[712,8466,1146],{"class":718},[712,8468,4882],{"class":718},[712,8470,743],{"class":718},[712,8472,734],{"class":718},[712,8474,8475],{"class":769},"property",[712,8477,734],{"class":718},[712,8479,1146],{"class":718},[712,8481,4882],{"class":718},[712,8483,743],{"class":718},[712,8485,734],{"class":718},[712,8487,8488],{"class":769},"from",[712,8490,734],{"class":718},[712,8492,1146],{"class":718},[712,8494,4882],{"class":718},[712,8496,743],{"class":718},[712,8498,734],{"class":718},[712,8500,8021],{"class":769},[712,8502,734],{"class":718},[712,8504,1146],{"class":718},[712,8506,4882],{"class":718},[712,8508,743],{"class":718},[712,8510,734],{"class":718},[712,8512,8513],{"class":769},"reg",[712,8515,734],{"class":718},[712,8517,4870],{"class":718},[712,8519,734],{"class":718},[712,8521,7462],{"class":769},[712,8523,734],{"class":718},[712,8525,1146],{"class":718},[712,8527,8528],{"class":746},"530",[712,8530,743],{"class":718},[712,8532,734],{"class":718},[712,8534,7476],{"class":769},[712,8536,734],{"class":718},[712,8538,1146],{"class":718},[712,8540,7483],{"class":746},[712,8542,743],{"class":718},[712,8544,734],{"class":718},[712,8546,7490],{"class":769},[712,8548,734],{"class":718},[712,8550,8551],{"class":718},":[[]]},{",[712,8553,734],{"class":718},[712,8555,4811],{"class":769},[712,8557,734],{"class":718},[712,8559,1146],{"class":718},[712,8561,734],{"class":718},[712,8563,7557],{"class":737},[712,8565,734],{"class":718},[712,8567,743],{"class":718},[712,8569,734],{"class":718},[712,8571,4829],{"class":769},[712,8573,734],{"class":718},[712,8575,1146],{"class":718},[712,8577,734],{"class":718},[712,8579,352],{"class":737},[712,8581,734],{"class":718},[712,8583,743],{"class":718},[712,8585,734],{"class":718},[712,8587,8588],{"class":769},"address",[712,8590,734],{"class":718},[712,8592,1146],{"class":718},[712,8594,734],{"class":718},[712,8596,8597],{"class":737},"192.168.0.5",[712,8599,734],{"class":718},[712,8601,743],{"class":718},[712,8603,734],{"class":718},[712,8605,8606],{"class":769},"slot",[712,8608,734],{"class":718},[712,8610,1146],{"class":718},[712,8612,734],{"class":718},[712,8614,8615],{"class":737},"0",[712,8617,734],{"class":718},[712,8619,743],{"class":718},[712,8621,734],{"class":718},[712,8623,8624],{"class":769},"cycletime",[712,8626,734],{"class":718},[712,8628,1146],{"class":718},[712,8630,734],{"class":718},[712,8632,5239],{"class":737},[712,8634,734],{"class":718},[712,8636,743],{"class":718},[712,8638,734],{"class":718},[712,8640,5061],{"class":769},[712,8642,734],{"class":718},[712,8644,1146],{"class":718},[712,8646,734],{"class":718},[712,8648,1349],{"class":737},[712,8650,734],{"class":718},[712,8652,743],{"class":718},[712,8654,734],{"class":718},[712,8656,8657],{"class":769},"vartable",[712,8659,734],{"class":718},[712,8661,8662],{"class":718},":{",[712,8664,4882],{"class":718},[712,8666,8662],{"class":718},[712,8668,734],{"class":718},[712,8670,117],{"class":746},[712,8672,734],{"class":718},[712,8674,8662],{"class":718},[712,8676,734],{"class":718},[712,8678,4829],{"class":790},[712,8680,734],{"class":718},[712,8682,1146],{"class":718},[712,8684,734],{"class":718},[712,8686,120],{"class":737},[712,8688,734],{"class":718},[712,8690,8691],{"class":718},"},",[712,8693,734],{"class":718},[712,8695,149],{"class":746},[712,8697,734],{"class":718},[712,8699,8662],{"class":718},[712,8701,734],{"class":718},[712,8703,4829],{"class":790},[712,8705,734],{"class":718},[712,8707,1146],{"class":718},[712,8709,734],{"class":718},[712,8711,120],{"class":737},[712,8713,734],{"class":718},[712,8715,8691],{"class":718},[712,8717,734],{"class":718},[712,8719,170],{"class":746},[712,8721,734],{"class":718},[712,8723,8662],{"class":718},[712,8725,734],{"class":718},[712,8727,4829],{"class":790},[712,8729,734],{"class":718},[712,8731,1146],{"class":718},[712,8733,734],{"class":718},[712,8735,120],{"class":737},[712,8737,734],{"class":718},[712,8739,8691],{"class":718},[712,8741,734],{"class":718},[712,8743,159],{"class":746},[712,8745,734],{"class":718},[712,8747,8662],{"class":718},[712,8749,734],{"class":718},[712,8751,4829],{"class":790},[712,8753,734],{"class":718},[712,8755,1146],{"class":718},[712,8757,734],{"class":718},[712,8759,162],{"class":737},[712,8761,734],{"class":718},[712,8763,8691],{"class":718},[712,8765,734],{"class":718},[712,8767,138],{"class":746},[712,8769,734],{"class":718},[712,8771,8662],{"class":718},[712,8773,734],{"class":718},[712,8775,4829],{"class":790},[712,8777,734],{"class":718},[712,8779,1146],{"class":718},[712,8781,734],{"class":718},[712,8783,141],{"class":737},[712,8785,734],{"class":718},[712,8787,8691],{"class":718},[712,8789,734],{"class":718},[712,8791,128],{"class":746},[712,8793,734],{"class":718},[712,8795,8662],{"class":718},[712,8797,734],{"class":718},[712,8799,4829],{"class":790},[712,8801,734],{"class":718},[712,8803,1146],{"class":718},[712,8805,734],{"class":718},[712,8807,120],{"class":737},[712,8809,734],{"class":718},[712,8811,8812],{"class":718},"}}}}]\n",[8814,8815,8816],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}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 .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}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 .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}",{"title":708,"searchDepth":794,"depth":794,"links":8818},[8819,8820,8821,8822,8823,8824,8830,8831,8832],{"id":29,"depth":756,"text":30},{"id":36,"depth":756,"text":37},{"id":223,"depth":756,"text":224},{"id":309,"depth":756,"text":310},{"id":455,"depth":756,"text":456},{"id":590,"depth":756,"text":591,"children":8825},[8826,8827,8828,8829],{"id":697,"depth":776,"text":698},{"id":1086,"depth":776,"text":1087},{"id":1558,"depth":776,"text":1559},{"id":3660,"depth":776,"text":3661},{"id":4382,"depth":756,"text":4383},{"id":4442,"depth":756,"text":4443},{"id":4587,"depth":756,"text":4588},"https:\u002F\u002Fgithub.com\u002FFlowFuse\u002Fwebsite\u002Fedit\u002Fmain\u002Fnuxt\u002Fcontent-guides\u002Fnode-red\u002Fprotocol\u002Fopc-ua.md","md",null,{"image":8837},"\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Fimages\u002Fopc-ua-2-title-image.png","OPC-UA","\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Fopc-ua",{"title":5,"description":16},"docs\u002Fnode-red\u002Fprotocol\u002Fopc-ua","2026-09-08 11:02:51 +0200","Zp80gOMJ4pqcaTose9ejsBiLidUpVaW0lJwGaTDq3bw",{"id":8845,"extension":8846,"meta":8847,"sections":8848,"stem":9247,"__hash__":9248},"featureCatalog\u002Ffeature-catalog.yml","yml",{},[8849,8910,9011,9073,9150,9229],{"id":8850,"title":8851,"features":8852},"ai-automation","AI & Automation",[8853,8863,8873,8883,8889,8899,8905],{"id":8854,"title":8855,"description":8856,"docsLink":8857,"changelog":8858,"tiers":8862},"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",[8859],{"url":8860,"release":8861},"\u002Fchangelog\u002F2026\u002F02\u002Fff-expert-update-banner\u002F","2.28",{"edge":440,"hub":440,"fleet":440},{"id":8864,"title":8865,"description":8866,"docsLink":8867,"changelog":8868,"subfeature":440,"showOnPricing":8871,"tiers":8872},"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",[8869],{"url":8870,"release":8861},"\u002Fchangelog\u002F2026\u002F02\u002Fff-expert-debug-log-context\u002F",false,{"edge":440,"hub":440,"fleet":440},{"id":8874,"title":8875,"description":8876,"docsLink":8877,"changelog":8878,"subfeature":440,"showOnPricing":8871,"tiers":8882},"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",[8879],{"url":8880,"release":8881},"\u002Fchangelog\u002F2026\u002F05\u002Fexpert-application-building\u002F","2.30",{"edge":440,"hub":440,"fleet":440},{"id":8884,"title":8885,"description":8886,"docsLink":8887,"subfeature":440,"beta":440,"showOnPricing":8871,"tiers":8888},"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":440,"hub":440,"fleet":440},{"id":8890,"title":8891,"description":8892,"docsLink":8893,"changelog":8894,"tiers":8898},"third-party-agents","Connect Your Own AI Agent","Point the AI agent your company already uses at FlowFuse, so it can query your teams and instances and build Node-RED applications, with you deciding which teams it reaches and whether it can make changes.","\u002Fdocs\u002Fuser\u002Fexpert\u002Fthird-party-agents\u002F",[8895],{"url":8896,"release":8897},"\u002Fchangelog\u002F2026\u002F08\u002Fconnect-your-own-ai-agent\u002F","3.0",{"edge":440,"hub":440,"fleet":440},{"id":8900,"title":8901,"description":8902,"docsLink":8903,"tiers":8904},"mcp-servers","Agentic Operations","Expose your Node-RED flows as tools an AI agent can call directly, so agents can query the state of the factory or trigger actions without custom integration work.","\u002Fdocs\u002Fflowfuse-nodes\u002Fmcp\u002F",{"edge":440,"hub":440,"fleet":440},{"id":8906,"title":8907,"description":8908,"tiers":8909},"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":440,"hub":440,"fleet":440},{"id":8911,"title":8912,"features":8913},"build","Build",[8914,8920,8926,8936,8942,8948,8952,8958,8964,8972,8978,8982,8986,8995,9003],{"id":8915,"title":8916,"description":8917,"docsLink":8918,"tiers":8919},"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":440,"hub":8871,"fleet":440},{"id":8921,"title":8922,"description":8923,"docsLink":8924,"tiers":8925},"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":440,"hub":440,"fleet":440},{"id":8927,"title":8928,"description":8929,"docsLink":8930,"changelog":8931,"tiers":8935},"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",[8932],{"url":8933,"release":8934},"\u002Fchangelog\u002F2026\u002F07\u002Fexpert-tables-automation\u002F","2.33",{"edge":440,"hub":440,"fleet":440},{"id":8937,"title":8938,"description":8939,"docsLink":8940,"tiers":8941},"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":440,"hub":440,"fleet":440},{"id":8943,"title":8944,"description":8945,"docsLink":8946,"showOnPricing":8871,"tiers":8947},"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":440,"hub":440,"fleet":440},{"id":8949,"title":8950,"showOnPricing":8871,"tiers":8951},"static-assets","Static Assets",{"edge":440,"hub":440,"fleet":440},{"id":8953,"title":8954,"description":8955,"docsLink":8956,"tiers":8957},"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":440,"hub":440,"fleet":440},{"id":8959,"title":8960,"description":8961,"docsLink":8962,"tiers":8963},"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":440,"hub":440,"fleet":440},{"id":8965,"title":8966,"description":8967,"changelog":8968,"subfeature":440,"showOnPricing":8871,"tiers":8971},"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.",[8969],{"url":8970,"release":8934},"\u002Fchangelog\u002F2026\u002F07\u002Fteam-and-application-dashboards\u002F",{"edge":440,"hub":440,"fleet":440},{"id":8973,"title":8974,"description":8975,"docsLink":8976,"tiers":8977},"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":440,"hub":440,"fleet":440},{"id":8979,"title":8980,"subfeature":440,"showOnPricing":8871,"tiers":8981},"blueprints-ot-apps","Blueprints - OT APPS",{"edge":440,"hub":8871,"fleet":440},{"id":8983,"title":8984,"subfeature":440,"showOnPricing":8871,"tiers":8985},"blueprints-it-apps","Blueprints - IT APPS",{"edge":8871,"hub":440,"fleet":8871},{"id":8987,"title":8988,"description":8989,"changelog":8990,"showOnPricing":8871,"tiers":8994},"immersive-editor-snapshots","Snapshot Details in Immersive Editor","View and manage snapshot details directly inside the immersive editor without leaving your editing session.",[8991],{"url":8992,"release":8993},"\u002Fchangelog\u002F2026\u002F03\u002Fsnapshot-detail-modal-immersive-editor\u002F","2.29",{"edge":440,"hub":440,"fleet":440},{"id":8996,"title":8997,"description":8998,"changelog":8999,"showOnPricing":8871,"tiers":9002},"immersive-editor-drawer","Customisable Immersive Editor Drawer","Pin, move, resize, or full-screen the immersive editor drawer. Your preferences are remembered between sessions.",[9000],{"url":9001,"release":8881},"\u002Fchangelog\u002F2026\u002F04\u002Fimmersive-editor-drawer\u002F",{"edge":440,"hub":440,"fleet":440},{"id":9004,"title":9005,"description":9006,"changelog":9007,"showOnPricing":8871,"tiers":9010},"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.",[9008],{"url":9009,"release":8993},"\u002Fchangelog\u002F2026\u002F03\u002Fembedded-editor-tab-title\u002F",{"edge":440,"hub":440,"fleet":440},{"id":9012,"title":9013,"features":9014},"deploy","Deploy",[9015,9021,9030,9036,9042,9048,9054,9060,9065],{"id":9016,"title":9017,"description":9018,"docsLink":9019,"tiers":9020},"hosted-instances","Cloud Instances","Run Node-RED instances managed and hosted by FlowFuse.","\u002Fdocs\u002Fuser\u002Fintroduction\u002F#creating-a-node-red-instance",{"edge":440,"hub":440,"fleet":440},{"id":9022,"title":9023,"description":9024,"docsLink":9025,"changelog":9026,"tiers":9029},"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",[9027],{"url":9028,"release":8861},"\u002Fchangelog\u002F2026\u002F02\u002Fdevice-agent-nodejs-options\u002F",{"edge":440,"hub":8871,"fleet":440},{"id":9031,"title":9032,"description":9033,"docsLink":9034,"tiers":9035},"custom-hostnames","Custom Hostnames","Access your Node-RED application via your own domain name.","\u002Fdocs\u002Fuser\u002Fcustom-hostnames\u002F",{"edge":8871,"hub":440,"fleet":8871},{"id":9037,"title":9038,"description":9039,"docsLink":9040,"tiers":9041},"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":440,"hub":8871,"fleet":440},{"id":9043,"title":9044,"description":9045,"docsLink":9046,"showOnPricing":8871,"tiers":9047},"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":440,"hub":440,"fleet":440},{"id":9049,"title":9050,"description":9051,"docsLink":9052,"tiers":9053},"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":440,"hub":440,"fleet":440},{"id":9055,"title":9056,"description":9057,"docsLink":9058,"tiers":9059},"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":8871,"hub":440,"fleet":8871},{"id":9061,"title":9062,"description":9063,"docsLink":9058,"subfeature":440,"showOnPricing":8871,"tiers":9064},"git-integration-github","GitHub","Push and pull snapshots to GitHub repositories through DevOps Pipeline Git Stages.",{"edge":8871,"hub":440,"fleet":8871},{"id":9066,"title":9067,"description":9068,"docsLink":9058,"changelog":9069,"subfeature":440,"showOnPricing":8871,"tiers":9072},"git-integration-azure","Azure DevOps","Push and pull snapshots to Azure DevOps repositories through DevOps Pipeline Git Stages.",[9070],{"url":9071,"release":8993},"\u002Fchangelog\u002F2026\u002F03\u002Fazure-dev-ops-gitops\u002F",{"edge":8871,"hub":440,"fleet":8871},{"id":9074,"title":9075,"features":9076},"operate-maintain","Operate & Maintain",[9077,9083,9089,9094,9102,9106,9110,9115,9121,9127,9132,9138,9142,9146],{"id":9078,"title":9079,"description":9080,"docsLink":9081,"tiers":9082},"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":440,"hub":440,"fleet":440},{"id":9084,"title":9085,"description":9086,"docsLink":9087,"subfeature":440,"showOnPricing":8871,"tiers":9088},"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":440,"hub":440,"fleet":440},{"id":9090,"title":9091,"description":9092,"docsLink":9087,"subfeature":440,"showOnPricing":8871,"tiers":9093},"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":440,"hub":440,"fleet":440},{"id":9095,"title":9096,"description":9097,"changelog":9098,"subfeature":440,"showOnPricing":8871,"tiers":9101},"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.",[9099],{"url":9100,"release":8993},"\u002Fchangelog\u002F2026\u002F04\u002Fsnapshot-diff-viewer\u002F",{"edge":440,"hub":440,"fleet":440},{"id":9103,"title":9104,"subfeature":440,"showOnPricing":8871,"tiers":9105},"version-history-timeline","Version History Timeline",{"edge":440,"hub":440,"fleet":440},{"id":9107,"title":9108,"tiers":9109},"unlimited-workflow-executions","Unlimited Workflow Executions",{"edge":440,"hub":440,"fleet":440},{"id":9111,"title":9112,"description":9113,"tiers":9114},"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":440,"hub":8871,"fleet":440},{"id":9116,"title":9117,"description":9118,"docsLink":9119,"tiers":9120},"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":440,"hub":8871,"fleet":440},{"id":9122,"title":9123,"description":9124,"docsLink":9125,"tiers":9126},"high-availability","High Availability","Leverage horizontal scaling for reliable and scalable processing of your data through Node-RED.","\u002Fdocs\u002Fuser\u002Fhigh-availability\u002F",{"edge":8871,"hub":440,"fleet":8871},{"id":9128,"title":9129,"description":9130,"tiers":9131},"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":440,"hub":440,"fleet":440},{"id":9133,"title":9134,"description":9135,"docsLink":9136,"subfeature":440,"showOnPricing":8871,"tiers":9137},"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":440,"hub":440,"fleet":440},{"id":9139,"title":9140,"subfeature":440,"showOnPricing":8871,"tiers":9141},"email-alerts","Email Alerts",{"edge":440,"hub":440,"fleet":440},{"id":9143,"title":9144,"showOnPricing":8871,"tiers":9145},"api-debug-length-limit","API\u002FDebug Length Limit",{"edge":440,"hub":440,"fleet":440},{"id":9147,"title":9148,"tiers":9149},"protected-instances","Protected Instances",{"edge":8871,"hub":440,"fleet":8871},{"id":9151,"title":9152,"features":9153},"govern-secure","Govern and Secure",[9154,9163,9169,9175,9180,9186,9192,9198,9206,9212,9218,9224],{"id":9155,"title":9156,"description":9157,"docsLink":9158,"changelog":9159,"tiers":9162},"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",[9160],{"url":9161,"release":8934},"\u002Fchangelog\u002F2026\u002F07\u002Fapplication-sso-groups\u002F",{"edge":440,"hub":440,"fleet":440},{"id":9164,"title":9165,"description":9166,"docsLink":9167,"tiers":9168},"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":440,"hub":440,"fleet":440},{"id":9170,"title":9171,"description":9172,"docsLink":9173,"tiers":9174},"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":8871,"hub":440,"fleet":440},{"id":9176,"title":9177,"description":9178,"tiers":9179},"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":440,"hub":8871,"fleet":8871},{"id":9181,"title":9182,"description":9183,"docsLink":9184,"tiers":9185},"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":440,"hub":440,"fleet":440},{"id":9187,"title":9188,"description":9189,"docsLink":9190,"tiers":9191},"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":440,"hub":440,"fleet":440},{"id":9193,"title":9194,"description":9195,"docsLink":9196,"subfeature":440,"showOnPricing":8871,"tiers":9197},"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":440,"hub":440,"fleet":440},{"id":9199,"title":9200,"description":9201,"changelog":9202,"subfeature":440,"showOnPricing":8871,"tiers":9205},"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.",[9203],{"url":9204,"release":8934},"\u002Fchangelog\u002F2026\u002F07\u002Fscoped-pats\u002F",{"edge":440,"hub":440,"fleet":440},{"id":9207,"title":9208,"description":9209,"docsLink":9210,"showOnPricing":8871,"tiers":9211},"team-members","Team Members","Invite multiple team members to collaborate on the same Node-RED flows.","\u002Fdocs\u002Fuser\u002Fteam\u002F#teams",{"edge":440,"hub":440,"fleet":440},{"id":9213,"title":9214,"description":9215,"docsLink":9216,"showOnPricing":8871,"tiers":9217},"endpoint-security","Endpoint Security","Secure HTTP endpoints for hosted Node-RED instances using FlowFuse credentials.","\u002Fdocs\u002Fuser\u002Finstance-settings\u002F#security",{"edge":440,"hub":440,"fleet":440},{"id":9219,"title":9220,"description":9221,"docsLink":9222,"tiers":9223},"baa-for-hipaa","BAA for HIPAA","FlowFuse can sign a Business Associate Agreement to ensure proper safeguarding of protected health information handled on your behalf.","\u002Fhandbook\u002Fsales\u002Fsubscription-agreement-1.6\u002F",{"edge":8871,"hub":440,"fleet":8871},{"id":9225,"title":9226,"description":9227,"tiers":9228},"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":8871,"hub":440,"fleet":8871},{"id":9230,"title":9231,"features":9232},"support","Support",[9233,9238,9242],{"id":9234,"title":9235,"docsLink":9236,"tiers":9237},"installation-support","Installation Support","\u002Fdocs\u002Finstall\u002Fintroduction\u002F#do-you-need-help-installation-service",{"edge":440,"hub":440,"fleet":440},{"id":9239,"title":9240,"showOnPricing":8871,"tiers":9241},"live-chat-support","Live Chat Support",{"edge":440,"hub":440,"fleet":440},{"id":9243,"title":9244,"docsLink":9245,"tiers":9246},"enterprise-support","Enterprise Support","\u002Fdocs\u002Fpremium-support\u002F",{"edge":440,"hub":440,"fleet":440},"feature-catalog","v5NjPsqOkQexQ0Fk82nqY6ZEXj128lclDvrIkmsKbpM",[9250,9336,9572,9642,9655,9795,9805,9886],{"name":9251,"order":9252,"children":9253},"Application Guide",0,[9254,9302],{"title":9255,"path":9256,"group":9251,"groupOrder":9252,"order":715,"children":9257},"Building FlowFuse applications","\u002Fdocs\u002Fapplication-guide",[9258,9262,9274,9278,9294],{"title":9259,"path":9260,"order":715,"children":9261},"Foundations","\u002Fdocs\u002Fapplication-guide\u002Ffoundations",[],{"title":9263,"path":9264,"order":756,"children":9265},"App delivery methods","\u002Fdocs\u002Fapplication-guide\u002Fapp-delivery-methods",[9266,9270],{"title":9267,"path":9268,"order":715,"children":9269},"Hardware apps","\u002Fdocs\u002Fapplication-guide\u002Fapp-delivery-methods\u002Fhardware-apps",[],{"title":9271,"path":9272,"order":756,"children":9273},"Software apps","\u002Fdocs\u002Fapplication-guide\u002Fapp-delivery-methods\u002Fsoftware-apps",[],{"title":9275,"path":9276,"order":776,"children":9277},"Data plane","\u002Fdocs\u002Fapplication-guide\u002Fdata-plane",[],{"title":9279,"path":9280,"order":794,"children":9281},"Architectures","\u002Fdocs\u002Fapplication-guide\u002Farchitectures",[9282,9286,9290],{"title":9283,"path":9284,"order":715,"children":9285},"IT architectures","\u002Fdocs\u002Fapplication-guide\u002Farchitectures\u002Fit",[],{"title":9287,"path":9288,"order":756,"children":9289},"OT architectures","\u002Fdocs\u002Fapplication-guide\u002Farchitectures\u002Fot",[],{"title":9291,"path":9292,"order":776,"children":9293},"IIoT architectures","\u002Fdocs\u002Fapplication-guide\u002Farchitectures\u002Fiiot",[],{"title":9295,"path":9296,"order":807,"children":9297},"Worked examples","\u002Fdocs\u002Fapplication-guide\u002Fworked-examples",[9298],{"title":9299,"path":9300,"order":715,"children":9301},"OEE, end to end","\u002Fdocs\u002Fapplication-guide\u002Fworked-examples\u002Foee",[],{"title":9303,"path":9304,"group":9251,"groupOrder":9252,"order":756,"children":9305},"Designing Node-RED flows","\u002Fdocs\u002Fnode-red-guide",[9306,9309,9325],{"title":9259,"path":9307,"order":715,"children":9308},"\u002Fdocs\u002Fnode-red-guide\u002Ffoundations",[],{"title":9310,"path":9311,"order":756,"children":9312},"Patterns","\u002Fdocs\u002Fnode-red-guide\u002Fpatterns",[9313,9317,9321],{"title":9314,"path":9315,"order":715,"children":9316},"Design patterns","\u002Fdocs\u002Fnode-red-guide\u002Fpatterns\u002Fdesign-patterns",[],{"title":9318,"path":9319,"order":756,"children":9320},"Handling data","\u002Fdocs\u002Fnode-red-guide\u002Fpatterns\u002Fhandling-data",[],{"title":9322,"path":9323,"order":776,"children":9324},"Good form","\u002Fdocs\u002Fnode-red-guide\u002Fpatterns\u002Fgood-form",[],{"title":9295,"path":9326,"order":776,"children":9327},"\u002Fdocs\u002Fnode-red-guide\u002Fworked-examples",[9328,9332],{"title":9329,"path":9330,"order":715,"children":9331},"OEE - Edge Aggregator","\u002Fdocs\u002Fnode-red-guide\u002Fworked-examples\u002Foee-edge-aggregator",[],{"title":9333,"path":9334,"order":756,"children":9335},"OEE - Central Dashboard","\u002Fdocs\u002Fnode-red-guide\u002Fworked-examples\u002Foee-central-dashboard",[],{"name":9337,"order":715,"children":9338},"FlowFuse User Manuals",[9339,9463,9467,9478],{"title":9340,"path":9341,"group":9337,"groupOrder":715,"order":715,"children":9342,"link":8871},"Using FlowFuse","\u002Fdocs\u002Fuser",[9343,9347,9351,9355,9359,9363,9367,9370,9374,9378,9381,9385,9401,9405,9409,9413,9417,9420,9424,9428,9432,9436,9440,9443,9447,9451,9455,9459],{"title":9344,"path":9345,"order":715,"children":9346},"Getting Started","\u002Fdocs\u002Fuser\u002Fintroduction",[],{"title":9348,"path":9349,"order":715,"children":9350},"Static asset service","\u002Fdocs\u002Fuser\u002Fstatic-asset-service",[],{"title":9352,"path":9353,"order":756,"children":9354},"Bill of Materials","\u002Fdocs\u002Fuser\u002Fbill-of-materials",[],{"title":9356,"path":9357,"order":756,"children":9358},"FlowFuse Concepts","\u002Fdocs\u002Fuser\u002Fconcepts",[],{"title":9360,"path":9361,"order":882,"children":9362},"Instance States","\u002Fdocs\u002Fuser\u002Finstance-states",[],{"title":9364,"path":9365,"order":8835,"children":9366},"Changing the Stack","\u002Fdocs\u002Fuser\u002Fchangestack",[],{"title":9032,"path":9368,"order":8835,"children":9369},"\u002Fdocs\u002Fuser\u002Fcustom-hostnames",[],{"title":9371,"path":9372,"order":8835,"children":9373},"Custom Node Packages","\u002Fdocs\u002Fuser\u002Fcustom-npm-packages",[],{"title":9375,"path":9376,"order":8835,"children":9377},"Dashboards","\u002Fdocs\u002Fuser\u002Fdashboards",[],{"title":9050,"path":9379,"order":8835,"children":9380},"\u002Fdocs\u002Fuser\u002Fdevops-pipelines",[],{"title":9382,"path":9383,"order":8835,"children":9384},"Environment Variables","\u002Fdocs\u002Fuser\u002Fenvvar",[],{"title":9386,"path":9387,"order":8835,"children":9388},"FlowFuse Expert","\u002Fdocs\u002Fuser\u002Fexpert",[9389,9393,9397],{"title":9390,"path":9391,"order":8835,"children":9392},"AI in Node-RED","\u002Fdocs\u002Fuser\u002Fexpert\u002Fnode-red-embedded-ai",[],{"title":9394,"path":9395,"order":8835,"children":9396},"Chat Interface","\u002Fdocs\u002Fuser\u002Fexpert\u002Fchat",[],{"title":9398,"path":9399,"order":8835,"children":9400},"Connect Your Own Agent","\u002Fdocs\u002Fuser\u002Fexpert\u002Fthird-party-agents",[],{"title":9402,"path":9403,"order":8835,"children":9404},"FlowFuse File Nodes","\u002Fdocs\u002Fuser\u002Ffilenodes",[],{"title":9406,"path":9407,"order":8835,"children":9408},"FlowFuse MQTT Nodes","\u002Fdocs\u002Fuser\u002Fmqtt-nodes",[],{"title":9410,"path":9411,"order":8835,"children":9412},"FlowFuse Persistent Context","\u002Fdocs\u002Fuser\u002Fpersistent-context",[],{"title":9414,"path":9415,"order":8835,"children":9416},"FlowFuse Project Nodes","\u002Fdocs\u002Fuser\u002Fprojectnodes",[],{"title":8928,"path":9418,"order":8835,"children":9419},"\u002Fdocs\u002Fuser\u002Fff-tables",[],{"title":9421,"path":9422,"order":8835,"children":9423},"Groups","\u002Fdocs\u002Fuser\u002Fdevice-groups",[],{"title":9425,"path":9426,"order":8835,"children":9427},"High Availability mode","\u002Fdocs\u002Fuser\u002Fhigh-availability",[],{"title":9429,"path":9430,"order":8835,"children":9431},"HTTP Access Tokens","\u002Fdocs\u002Fuser\u002Fhttp-access-tokens",[],{"title":9433,"path":9434,"order":8835,"children":9435},"Instance Settings","\u002Fdocs\u002Fuser\u002Finstance-settings",[],{"title":9437,"path":9438,"order":8835,"children":9439},"Logging","\u002Fdocs\u002Fuser\u002Flogs",[],{"title":9188,"path":9441,"order":8835,"children":9442},"\u002Fdocs\u002Fuser\u002Frole-based-access-control",[],{"title":9444,"path":9445,"order":8835,"children":9446},"Shared Team Library","\u002Fdocs\u002Fuser\u002Fshared-library",[],{"title":9448,"path":9449,"order":8835,"children":9450},"Snapshots","\u002Fdocs\u002Fuser\u002Fsnapshots",[],{"title":9452,"path":9453,"order":8835,"children":9454},"Team Broker","\u002Fdocs\u002Fuser\u002Fteambroker",[],{"title":9456,"path":9457,"order":8835,"children":9458},"Teams","\u002Fdocs\u002Fuser\u002Fteam",[],{"title":9460,"path":9461,"order":8835,"children":9462},"User Settings","\u002Fdocs\u002Fuser\u002Fuser-settings",[],{"title":9464,"path":9465,"group":9337,"groupOrder":715,"order":756,"children":9466},"FlowFuse API","\u002Fdocs\u002Fapi",[],{"title":9468,"path":9469,"group":9337,"groupOrder":715,"order":776,"children":9470,"link":8871},"Migrating a Node-RED project to FlowFuse","\u002Fdocs\u002Fmigration",[9471,9474],{"title":30,"path":9472,"order":715,"children":9473},"\u002Fdocs\u002Fmigration\u002Fintroduction",[],{"title":9475,"path":9476,"order":8835,"children":9477},"Node-RED Tools plugin","\u002Fdocs\u002Fmigration\u002Fnode-red-tools",[],{"title":9479,"path":9480,"group":9337,"groupOrder":715,"order":794,"children":9481},"FlowFuse Node-RED nodes","\u002Fdocs\u002Fflowfuse-nodes",[9482,9506,9526,9533,9553,9564],{"title":9483,"path":9484,"order":715,"children":9485},"AI","\u002Fdocs\u002Fflowfuse-nodes\u002Fai",[9486,9490,9494,9498,9502],{"title":9487,"path":9488,"order":807,"children":9489},"LLM Nodes","\u002Fdocs\u002Fflowfuse-nodes\u002Fai\u002Fllm-nodes",[],{"title":9491,"path":9492,"order":2510,"children":9493},"Depth Estimation","\u002Fdocs\u002Fflowfuse-nodes\u002Fai\u002Fdepth-estimation",[],{"title":9495,"path":9496,"order":2510,"children":9497},"Image Classification","\u002Fdocs\u002Fflowfuse-nodes\u002Fai\u002Fimage-classification",[],{"title":9499,"path":9500,"order":2510,"children":9501},"Object Detection","\u002Fdocs\u002Fflowfuse-nodes\u002Fai\u002Fobject-detection",[],{"title":9503,"path":9504,"order":2510,"children":9505},"ONXX","\u002Fdocs\u002Fflowfuse-nodes\u002Fai\u002Fonxx",[],{"title":9507,"path":9508,"order":756,"children":9509},"MCP","\u002Fdocs\u002Fflowfuse-nodes\u002Fmcp",[9510,9514,9518,9522],{"title":9511,"path":9512,"order":2510,"children":9513},"MCP Prompt","\u002Fdocs\u002Fflowfuse-nodes\u002Fmcp\u002Fmcp-prompt",[],{"title":9515,"path":9516,"order":2510,"children":9517},"MCP Resource","\u002Fdocs\u002Fflowfuse-nodes\u002Fmcp\u002Fmcp-resource",[],{"title":9519,"path":9520,"order":2510,"children":9521},"MCP Responses","\u002Fdocs\u002Fflowfuse-nodes\u002Fmcp\u002Fmcp-response",[],{"title":9523,"path":9524,"order":2510,"children":9525},"MCP Tool","\u002Fdocs\u002Fflowfuse-nodes\u002Fmcp\u002Fmcp-tool",[],{"title":8928,"path":9527,"order":776,"children":9528},"\u002Fdocs\u002Fflowfuse-nodes\u002Fflowfuse-tables",[9529],{"title":9530,"path":9531,"order":2510,"children":9532},"Query","\u002Fdocs\u002Fflowfuse-nodes\u002Fflowfuse-tables\u002Fquery",[],{"title":9534,"path":9535,"order":794,"children":9536},"Edge","\u002Fdocs\u002Fflowfuse-nodes\u002Fedge",[9537,9541,9545,9549],{"title":9538,"path":9539,"order":715,"children":9540},"RTSP Video Feed","\u002Fdocs\u002Fflowfuse-nodes\u002Fedge\u002Frtsp",[],{"title":9542,"path":9543,"order":756,"children":9544},"CIP Suite, EtherNet\u002FIP Nodes","\u002Fdocs\u002Fflowfuse-nodes\u002Fedge\u002Fcip-suite",[],{"title":9546,"path":9547,"order":776,"children":9548},"Modbus","\u002Fdocs\u002Fflowfuse-nodes\u002Fedge\u002Fmodbus",[],{"title":9550,"path":9551,"order":2510,"children":9552},"OPC UA","\u002Fdocs\u002Fflowfuse-nodes\u002Fedge\u002Fopcua",[],{"title":9406,"path":9554,"order":807,"children":9555},"\u002Fdocs\u002Fflowfuse-nodes\u002Fmqtt",[9556,9560],{"title":9557,"path":9558,"order":2510,"children":9559},"MQTT In","\u002Fdocs\u002Fflowfuse-nodes\u002Fmqtt\u002Fmqtt-in",[],{"title":9561,"path":9562,"order":2510,"children":9563},"MQTT Out","\u002Fdocs\u002Fflowfuse-nodes\u002Fmqtt\u002Fmqtt-out",[],{"title":9565,"path":9566,"order":807,"children":9567},"Hub","\u002Fdocs\u002Fflowfuse-nodes\u002Fhub",[9568],{"title":9569,"path":9570,"order":715,"children":9571},"Redis","\u002Fdocs\u002Fflowfuse-nodes\u002Fhub\u002Fredis",[],{"name":9573,"order":756,"children":9574},"Device Agent",[9575,9623],{"title":9573,"path":9576,"group":9573,"groupOrder":756,"order":715,"children":9577,"link":8871},"\u002Fdocs\u002Fdevice-agent",[9578,9582,9586,9611,9615,9619],{"title":9579,"path":9580,"order":715,"children":9581},"FlowFuse Device Agent Introduction","\u002Fdocs\u002Fdevice-agent\u002Fintroduction",[],{"title":9583,"path":9584,"order":756,"children":9585},"Quick Start","\u002Fdocs\u002Fdevice-agent\u002Fquickstart",[],{"title":9587,"path":9588,"group":9589,"order":776,"children":9590,"link":8871},"Installation","\u002Fdocs\u002Fdevice-agent\u002Finstall","DeviceAgentInstallation",[9591,9595,9599,9603,9607],{"title":9592,"path":9593,"group":9589,"order":715,"children":9594},"Overview","\u002Fdocs\u002Fdevice-agent\u002Finstall\u002Foverview",[],{"title":9596,"path":9597,"group":9589,"order":756,"children":9598},"Device Agent Installer","\u002Fdocs\u002Fdevice-agent\u002Finstall\u002Fdevice-agent-installer",[],{"title":9600,"path":9601,"group":9589,"order":776,"children":9602},"Docker Install","\u002Fdocs\u002Fdevice-agent\u002Finstall\u002Fdocker",[],{"title":9604,"path":9605,"group":9589,"order":794,"children":9606},"Kubernetes Install","\u002Fdocs\u002Fdevice-agent\u002Finstall\u002Fkubernetes",[],{"title":9608,"path":9609,"group":9589,"order":807,"children":9610},"Manual Install with NPM","\u002Fdocs\u002Fdevice-agent\u002Finstall\u002Fmanual",[],{"title":9612,"path":9613,"order":794,"children":9614},"Register your Remote Instance","\u002Fdocs\u002Fdevice-agent\u002Fregister",[],{"title":9616,"path":9617,"order":807,"children":9618},"Running the Agent","\u002Fdocs\u002Fdevice-agent\u002Frunning",[],{"title":9620,"path":9621,"order":827,"children":9622},"Deploying your Flows","\u002Fdocs\u002Fdevice-agent\u002Fdeploy",[],{"title":9624,"path":9625,"group":9573,"groupOrder":756,"order":756,"children":9626,"link":8871},"Hardware Guides","\u002Fdocs\u002Fhardware",[9627,9630,9634,9638],{"title":9592,"path":9628,"order":715,"children":9629},"\u002Fdocs\u002Fhardware\u002Fintroduction",[],{"title":9631,"path":9632,"order":756,"children":9633},"ctrlX - Node-RED","\u002Fdocs\u002Fhardware\u002Fctrlx-node-red",[],{"title":9635,"path":9636,"order":776,"children":9637},"ctrlX - Device Agent","\u002Fdocs\u002Fhardware\u002Fctrlx-device-agent",[],{"title":9639,"path":9640,"order":776,"children":9641},"Raspberry Pi with Raspbian","\u002Fdocs\u002Fhardware\u002Fraspbian",[],{"name":9643,"order":776,"children":9644},"FlowFuse Cloud",[9645],{"title":9643,"path":9646,"group":9643,"groupOrder":776,"order":776,"children":9647,"link":8871},"\u002Fdocs\u002Fcloud",[9648,9651],{"title":30,"path":9649,"order":715,"children":9650},"\u002Fdocs\u002Fcloud\u002Fintroduction",[],{"title":9652,"path":9653,"order":8835,"children":9654},"FlowFuse Cloud Billing","\u002Fdocs\u002Fcloud\u002Fbilling",[],{"name":9656,"order":794,"children":9657},"FlowFuse Self-Hosted",[9658,9661,9736,9748],{"title":9583,"path":9659,"group":9656,"groupOrder":794,"order":715,"children":9660},"\u002Fdocs\u002Fquick-start",[],{"title":9662,"path":9663,"group":9656,"groupOrder":794,"order":756,"children":9664,"link":8871},"Installing FlowFuse","\u002Fdocs\u002Finstall",[9665,9668,9672,9676,9696,9700,9704,9708],{"title":9592,"path":9666,"order":715,"children":9667},"\u002Fdocs\u002Finstall\u002Fintroduction",[],{"title":9669,"path":9670,"order":8835,"children":9671},"Configuring FlowFuse","\u002Fdocs\u002Finstall\u002Fconfiguration",[],{"title":9673,"path":9674,"order":8835,"children":9675},"DNS Setup","\u002Fdocs\u002Finstall\u002Fdns-setup",[],{"title":9677,"path":9678,"order":8835,"children":9679},"Docker install","\u002Fdocs\u002Finstall\u002Fdocker",[9680,9684,9688,9692],{"title":9681,"path":9682,"order":8835,"children":9683},"Add Project Stacks on Docker","\u002Fdocs\u002Finstall\u002Fdocker\u002Fstacks",[],{"title":9685,"path":9686,"order":8835,"children":9687},"Docker Engine on Windows","\u002Fdocs\u002Finstall\u002Fdocker\u002Fwindows-docker-ce",[],{"title":9689,"path":9690,"order":8835,"children":9691},"Docker from AWS Market Place","\u002Fdocs\u002Finstall\u002Fdocker\u002Faws-marketplace",[],{"title":9693,"path":9694,"order":8835,"children":9695},"Docker on Digital Ocean","\u002Fdocs\u002Finstall\u002Fdocker\u002Fdigital-ocean",[],{"title":9697,"path":9698,"order":8835,"children":9699},"Email configuration","\u002Fdocs\u002Finstall\u002Femail-providers",[],{"title":9701,"path":9702,"order":8835,"children":9703},"First Run Setup","\u002Fdocs\u002Finstall\u002Ffirst-run",[],{"title":9705,"path":9706,"order":8835,"children":9707},"FlowFuse File Storage","\u002Fdocs\u002Finstall\u002Ffile-storage",[],{"title":9709,"path":9710,"order":8835,"children":9711},"Install FlowFuse on Kubernetes","\u002Fdocs\u002Finstall\u002Fkubernetes",[9712,9716,9720,9724,9728,9732],{"title":9713,"path":9714,"order":8835,"children":9715},"AWS EKS Installation","\u002Fdocs\u002Finstall\u002Fkubernetes\u002Faws",[],{"title":9717,"path":9718,"order":8835,"children":9719},"AWS EKS Installation with Terraform and Helm","\u002Fdocs\u002Finstall\u002Fkubernetes\u002Faws-terraform",[],{"title":9721,"path":9722,"order":8835,"children":9723},"Digital Ocean Kubernetes Installation","\u002Fdocs\u002Finstall\u002Fkubernetes\u002Fdigital-ocean",[],{"title":9725,"path":9726,"order":8835,"children":9727},"Ingress Controller Migration","\u002Fdocs\u002Finstall\u002Fkubernetes\u002Fingress-controller-migration",[],{"title":9729,"path":9730,"order":8835,"children":9731},"Kubernetes Project Stacks","\u002Fdocs\u002Finstall\u002Fkubernetes\u002Fstacks",[],{"title":9733,"path":9734,"order":8835,"children":9735},"OpenShift Installation","\u002Fdocs\u002Finstall\u002Fkubernetes\u002Fopenshift",[],{"title":9737,"path":9738,"group":9656,"groupOrder":794,"order":776,"children":9739},"Upgrading FlowFuse","\u002Fdocs\u002Fupgrade",[9740,9744],{"title":9741,"path":9742,"order":8835,"children":9743},"Installing a license","\u002Fdocs\u002Fupgrade\u002Fopen-source-to-premium",[],{"title":9745,"path":9746,"order":8835,"children":9747},"Upgrading the Node-RED version","\u002Fdocs\u002Fupgrade\u002Fnodered-version",[],{"title":9749,"path":9750,"group":9656,"groupOrder":794,"order":794,"children":9751,"link":8871},"Administering FlowFuse","\u002Fdocs\u002Fadmin",[9752,9755,9767,9775,9779,9783,9787,9791],{"title":9749,"path":9753,"order":715,"children":9754},"\u002Fdocs\u002Fadmin\u002Fintroduction",[],{"title":9756,"path":9757,"order":8835,"children":9758},"Configuring Single Sign-On (SSO)","\u002Fdocs\u002Fadmin\u002Fsso",[9759,9763],{"title":9760,"path":9761,"order":8835,"children":9762},"LDAP SSO","\u002Fdocs\u002Fadmin\u002Fsso\u002Fldap",[],{"title":9764,"path":9765,"order":8835,"children":9766},"SAML SSO","\u002Fdocs\u002Fadmin\u002Fsso\u002Fsaml",[],{"title":9768,"path":9769,"order":8835,"children":9770,"link":8871},"Hardening","\u002Fdocs\u002Fadmin\u002Fhardening",[9771],{"title":9772,"path":9773,"order":8835,"children":9774},"Kubernetes Hardening","\u002Fdocs\u002Fadmin\u002Fhardening\u002Fkubernetes",[],{"title":9776,"path":9777,"order":8835,"children":9778},"Monitoring","\u002Fdocs\u002Fadmin\u002Fmonitoring",[],{"title":9780,"path":9781,"order":8835,"children":9782},"Observability","\u002Fdocs\u002Fadmin\u002Fobservability",[],{"title":9784,"path":9785,"order":8835,"children":9786},"Soft Launch Enablement","\u002Fdocs\u002Fadmin\u002Ffeature-flags",[],{"title":9788,"path":9789,"order":8835,"children":9790},"Telemetry","\u002Fdocs\u002Fadmin\u002Ftelemetry",[],{"title":9792,"path":9793,"order":8835,"children":9794},"User Management","\u002Fdocs\u002Fadmin\u002Fuser-management",[],{"name":9231,"order":807,"children":9796},[9797,9801],{"title":9798,"path":9799,"group":9231,"groupOrder":807,"order":776,"children":9800},"Premium Support","\u002Fdocs\u002Fpremium-support",[],{"title":9802,"path":9803,"group":9231,"groupOrder":807,"order":8835,"children":9804},"Debugging Node-RED issues","\u002Fdocs\u002Fdebugging",[],{"name":9806,"order":827,"children":9807},"Contributing",[9808],{"title":9809,"path":9810,"group":9806,"groupOrder":827,"order":8835,"children":9811,"link":8871},"Contributing to FlowFuse","\u002Fdocs\u002Fcontribute",[9812,9815,9819,9823,9827,9831,9835,9843,9879,9882],{"title":30,"path":9813,"order":715,"children":9814},"\u002Fdocs\u002Fcontribute\u002Fintroduction",[],{"title":9816,"path":9817,"order":8835,"children":9818},"Adding Template Settings","\u002Fdocs\u002Fcontribute\u002Fadding-template-settings",[],{"title":9820,"path":9821,"order":8835,"children":9822},"API Design","\u002Fdocs\u002Fcontribute\u002Fapi-design",[],{"title":9824,"path":9825,"order":8835,"children":9826},"Creating debug stack containers","\u002Fdocs\u002Fcontribute\u002Fcreating-debug-stack-containers",[],{"title":9828,"path":9829,"order":8835,"children":9830},"Database migrations","\u002Fdocs\u002Fcontribute\u002Fdb-migrations",[],{"title":9832,"path":9833,"order":8835,"children":9834},"FlowFuse Architecture","\u002Fdocs\u002Fcontribute\u002Farchitecture",[],{"title":9836,"path":9837,"order":8835,"children":9838},"Local Install","\u002Fdocs\u002Fcontribute\u002Flocal",[9839],{"title":9840,"path":9841,"order":8835,"children":9842},"Local Stacks","\u002Fdocs\u002Fcontribute\u002Flocal\u002Fstacks",[],{"title":9844,"path":9845,"order":8835,"children":9846},"State Flows","\u002Fdocs\u002Fcontribute\u002Fworkflows",[9847,9851,9855,9859,9863,9867,9871,9875],{"title":9848,"path":9849,"order":8835,"children":9850},"Device Editor","\u002Fdocs\u002Fcontribute\u002Fworkflows\u002Fdevice-editor",[],{"title":9852,"path":9853,"order":8835,"children":9854},"Instance states","\u002Fdocs\u002Fcontribute\u002Fworkflows\u002Fproject-states",[],{"title":9856,"path":9857,"order":8835,"children":9858},"Invite External Users","\u002Fdocs\u002Fcontribute\u002Fworkflows\u002Finvite-external-user",[],{"title":9860,"path":9861,"order":8835,"children":9862},"Project Creation","\u002Fdocs\u002Fcontribute\u002Fworkflows\u002Fproject-create",[],{"title":9864,"path":9865,"order":8835,"children":9866},"Reset Password Flow","\u002Fdocs\u002Fcontribute\u002Fworkflows\u002Fpassword-reset",[],{"title":9868,"path":9869,"order":8835,"children":9870},"Team creation Flow","\u002Fdocs\u002Fcontribute\u002Fworkflows\u002Fteam-create",[],{"title":9872,"path":9873,"order":8835,"children":9874},"User Login Flows","\u002Fdocs\u002Fcontribute\u002Fworkflows\u002Flogin",[],{"title":9876,"path":9877,"order":8835,"children":9878},"User Sign up Flow","\u002Fdocs\u002Fcontribute\u002Fworkflows\u002Fsignup",[],{"title":9452,"path":9880,"order":8835,"children":9881},"\u002Fdocs\u002Fcontribute\u002Fteam-broker",[],{"title":9883,"path":9884,"order":8835,"children":9885},"Working with Feature Flags","\u002Fdocs\u002Fcontribute\u002Ffeature-flags",[],{"name":9887,"order":835,"children":9888},"Node-RED",[9889],{"title":9890,"path":9891,"group":9887,"groupOrder":835,"order":715,"children":9892},"Using Node-RED","\u002Fdocs\u002Fnode-red",[9893,9965,10143,10168,10207,10223,10239,10267,10287,10291],{"title":9894,"path":9895,"order":756,"children":9896},"Getting started","\u002Fdocs\u002Fnode-red\u002Fgetting-started",[9897,9917,9921,9925,9929,9933,9937,9941,9945],{"title":9898,"path":9899,"order":715,"children":9900},"Editor","\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Feditor",[9901,9905,9909,9913],{"title":9902,"path":9903,"order":2510,"children":9904},"Header","\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Feditor\u002Fheader",[],{"title":9906,"path":9907,"order":2510,"children":9908},"Palette","\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Feditor\u002Fpalette",[],{"title":9910,"path":9911,"order":2510,"children":9912},"Sidebar","\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Feditor\u002Fsidebar",[],{"title":9914,"path":9915,"order":2510,"children":9916},"Workspace","\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Feditor\u002Fworkspace",[],{"title":9918,"path":9919,"order":756,"children":9920},"Port Configuration","\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Fnode-red-port",[],{"title":9922,"path":9923,"order":776,"children":9924},"Node-RED Library","\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Flibrary",[],{"title":9926,"path":9927,"order":776,"children":9928},"Update Node-RED","\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Fupdate-node-red",[],{"title":9930,"path":9931,"order":794,"children":9932},"Node-RED On Android","\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Fnode-red-android",[],{"title":9934,"path":9935,"order":807,"children":9936},"Working with Messages","\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Fnode-red-messages",[],{"title":9938,"path":9939,"order":827,"children":9940},"String","\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Fstring",[],{"title":9942,"path":9943,"order":835,"children":9944},"Date & Time","\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Fdate-and-time",[],{"title":9946,"path":9947,"order":848,"children":9948},"Programming","\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Fprogramming",[9949,9953,9957,9961],{"title":9950,"path":9951,"order":2510,"children":9952},"Data Tranformation","\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Fprogramming\u002Fdata-tranformation",[],{"title":9954,"path":9955,"order":2510,"children":9956},"Debugging","\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Fprogramming\u002Fdebugging-flows",[],{"title":9958,"path":9959,"order":2510,"children":9960},"If-Else","\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Fprogramming\u002Fif-else",[],{"title":9962,"path":9963,"order":2510,"children":9964},"Loop","\u002Fdocs\u002Fnode-red\u002Fgetting-started\u002Fprogramming\u002Floop",[],{"title":9966,"path":9967,"order":776,"children":9968},"Core nodes","\u002Fdocs\u002Fnode-red\u002Fcore-nodes",[9969,10005,10045,10087,10107,10131],{"title":9970,"path":9971,"order":715,"children":9972},"Common nodes","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fcommon",[9973,9977,9981,9985,9989,9993,9997,10001],{"title":9974,"path":9975,"order":715,"children":9976},"Inject","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fcommon\u002Finject",[],{"title":9978,"path":9979,"order":756,"children":9980},"Debug","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fcommon\u002Fdebug",[],{"title":9982,"path":9983,"order":776,"children":9984},"Complete","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fcommon\u002Fcomplete",[],{"title":9986,"path":9987,"order":794,"children":9988},"Catch","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fcommon\u002Fcatch",[],{"title":9990,"path":9991,"order":807,"children":9992},"Status","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fcommon\u002Fstatus",[],{"title":9994,"path":9995,"order":827,"children":9996},"Link","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fcommon\u002Flink",[],{"title":9998,"path":9999,"order":835,"children":10000},"Comment","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fcommon\u002Fcomment",[],{"title":10002,"path":10003,"order":848,"children":10004},"Unknown","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fcommon\u002Funknown",[],{"title":10006,"path":10007,"order":756,"children":10008},"Function nodes","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Ffunction",[10009,10013,10017,10021,10025,10029,10033,10037,10041],{"title":10010,"path":10011,"order":715,"children":10012},"Function","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Ffunction\u002Ffunction",[],{"title":10014,"path":10015,"order":756,"children":10016},"Switch","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Ffunction\u002Fswitch",[],{"title":10018,"path":10019,"order":776,"children":10020},"Change","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Ffunction\u002Fchange",[],{"title":10022,"path":10023,"order":794,"children":10024},"Range","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Ffunction\u002Frange",[],{"title":10026,"path":10027,"order":807,"children":10028},"Template","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Ffunction\u002Ftemplate",[],{"title":10030,"path":10031,"order":827,"children":10032},"Delay","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Ffunction\u002Fdelay",[],{"title":10034,"path":10035,"order":835,"children":10036},"Trigger","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Ffunction\u002Ftrigger",[],{"title":10038,"path":10039,"order":848,"children":10040},"Exec","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Ffunction\u002Fexec",[],{"title":10042,"path":10043,"order":876,"children":10044},"Filter","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Ffunction\u002Ffilter",[],{"title":10046,"path":10047,"order":776,"children":10048},"Network nodes","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fnetwork",[10049,10053,10057,10060,10063,10067,10071,10075,10079,10083],{"title":10050,"path":10051,"order":715,"children":10052},"TLS","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fnetwork\u002Ftls",[],{"title":10054,"path":10055,"order":756,"children":10056},"HTTP Proxy","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fnetwork\u002Fhttp-proxy",[],{"title":9557,"path":10058,"order":776,"children":10059},"\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fnetwork\u002Fmqtt-in",[],{"title":9561,"path":10061,"order":794,"children":10062},"\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fnetwork\u002Fmqtt-out",[],{"title":10064,"path":10065,"order":807,"children":10066},"HTTP in","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fnetwork\u002Fhttp-in",[],{"title":10068,"path":10069,"order":827,"children":10070},"HTTP request","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fnetwork\u002Fhttp-request",[],{"title":10072,"path":10073,"order":835,"children":10074},"WebSocket","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fnetwork\u002Fwebsocket",[],{"title":10076,"path":10077,"order":848,"children":10078},"TCP in","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fnetwork\u002Ftcp-in",[],{"title":10080,"path":10081,"order":876,"children":10082},"UDP In","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fnetwork\u002Fudp-in",[],{"title":10084,"path":10085,"order":882,"children":10086},"UDP Out","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fnetwork\u002Fudp-out",[],{"title":10088,"path":10089,"order":794,"children":10090},"Sequence nodes","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fsequence",[10091,10095,10099,10103],{"title":10092,"path":10093,"order":715,"children":10094},"Split","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fsequence\u002Fsplit",[],{"title":10096,"path":10097,"order":756,"children":10098},"Sort","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fsequence\u002Fsort",[],{"title":10100,"path":10101,"order":776,"children":10102},"Batch","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fsequence\u002Fbatch",[],{"title":10104,"path":10105,"order":794,"children":10106},"Join","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fsequence\u002Fjoin",[],{"title":10108,"path":10109,"order":807,"children":10110},"Parser nodes","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fparsers",[10111,10115,10119,10123,10127],{"title":10112,"path":10113,"order":715,"children":10114},"CSV","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fparsers\u002Fcsv",[],{"title":10116,"path":10117,"order":756,"children":10118},"HTML","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fparsers\u002Fhtml",[],{"title":10120,"path":10121,"order":776,"children":10122},"JSON","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fparsers\u002Fjson",[],{"title":10124,"path":10125,"order":794,"children":10126},"XML","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fparsers\u002Fxml",[],{"title":10128,"path":10129,"order":807,"children":10130},"YAML","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fparsers\u002Fyaml",[],{"title":10132,"path":10133,"order":827,"children":10134},"Storage nodes","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fstorage",[10135,10139],{"title":10136,"path":10137,"order":715,"children":10138},"Write File","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fstorage\u002Fwrite-file",[],{"title":10140,"path":10141,"order":756,"children":10142},"Read File","\u002Fdocs\u002Fnode-red\u002Fcore-nodes\u002Fstorage\u002Fread-file",[],{"title":10144,"path":10145,"order":794,"children":10146},"Communication protocols","\u002Fdocs\u002Fnode-red\u002Fprotocol",[10147,10151,10155,10158,10162,10164],{"title":10148,"path":10149,"order":2510,"children":10150},"AMQP","\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Famqp",[],{"title":10152,"path":10153,"order":2510,"children":10154},"LwM2M","\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Flwm2m",[],{"title":9546,"path":10156,"order":2510,"children":10157},"\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Fmodbus",[],{"title":10159,"path":10160,"order":2510,"children":10161},"MQTT","\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Fmqtt",[],{"title":8838,"path":8839,"order":2510,"children":10163},[],{"title":10165,"path":10166,"order":2510,"children":10167},"Websocket","\u002Fdocs\u002Fnode-red\u002Fprotocol\u002Fwebsocket",[],{"title":10169,"path":10170,"order":807,"children":10171},"Databases","\u002Fdocs\u002Fnode-red\u002Fdatabase",[10172,10176,10180,10184,10188,10192,10196,10199,10203],{"title":10173,"path":10174,"order":2510,"children":10175},"DynamoDB","\u002Fdocs\u002Fnode-red\u002Fdatabase\u002Fdynamodb",[],{"title":10177,"path":10178,"order":2510,"children":10179},"Firebase","\u002Fdocs\u002Fnode-red\u002Fdatabase\u002Ffirebase",[],{"title":10181,"path":10182,"order":2510,"children":10183},"InfluxDB","\u002Fdocs\u002Fnode-red\u002Fdatabase\u002Finfluxdb",[],{"title":10185,"path":10186,"order":2510,"children":10187},"MongoDB","\u002Fdocs\u002Fnode-red\u002Fdatabase\u002Fmongodb",[],{"title":10189,"path":10190,"order":2510,"children":10191},"MySQL","\u002Fdocs\u002Fnode-red\u002Fdatabase\u002Fmysql",[],{"title":10193,"path":10194,"order":2510,"children":10195},"PostgreSQL","\u002Fdocs\u002Fnode-red\u002Fdatabase\u002Fpostgresql",[],{"title":9569,"path":10197,"order":2510,"children":10198},"\u002Fdocs\u002Fnode-red\u002Fdatabase\u002Fredis",[],{"title":10200,"path":10201,"order":2510,"children":10202},"SQLite","\u002Fdocs\u002Fnode-red\u002Fdatabase\u002Fsqlite",[],{"title":10204,"path":10205,"order":2510,"children":10206},"TimescaleDB","\u002Fdocs\u002Fnode-red\u002Fdatabase\u002Ftimescaledb",[],{"title":10208,"path":10209,"order":827,"children":10210},"Integration technologies","\u002Fdocs\u002Fnode-red\u002Fintegration-technologies",[10211,10215,10219],{"title":10212,"path":10213,"order":2510,"children":10214},"GraphQL API","\u002Fdocs\u002Fnode-red\u002Fintegration-technologies\u002Fgraphql",[],{"title":10216,"path":10217,"order":2510,"children":10218},"REST API","\u002Fdocs\u002Fnode-red\u002Fintegration-technologies\u002Frest",[],{"title":10220,"path":10221,"order":2510,"children":10222},"Webhook","\u002Fdocs\u002Fnode-red\u002Fintegration-technologies\u002Fwebhook",[],{"title":10224,"path":10225,"order":835,"children":10226},"Notification services","\u002Fdocs\u002Fnode-red\u002Fnotification",[10227,10231,10235],{"title":10228,"path":10229,"order":2510,"children":10230},"Discord","\u002Fdocs\u002Fnode-red\u002Fnotification\u002Fdiscord",[],{"title":10232,"path":10233,"order":2510,"children":10234},"Email","\u002Fdocs\u002Fnode-red\u002Fnotification\u002Femail",[],{"title":10236,"path":10237,"order":2510,"children":10238},"Telegram","\u002Fdocs\u002Fnode-red\u002Fnotification\u002Ftelegram",[],{"title":10240,"path":10241,"order":848,"children":10242},"Hardware","\u002Fdocs\u002Fnode-red\u002Fhardware",[10243,10247,10251,10255,10259,10263],{"title":10244,"path":10245,"order":2510,"children":10246},"BLIIOT ARMxy BL340","\u002Fdocs\u002Fnode-red\u002Fhardware\u002Farmxy-bl340",[],{"title":10248,"path":10249,"order":2510,"children":10250},"Opto-22 Groov Epic","\u002Fdocs\u002Fnode-red\u002Fhardware\u002Fopto-22-groove-rio-7-mm2001-10",[],{"title":10252,"path":10253,"order":2510,"children":10254},"Raspberry Pi 4","\u002Fdocs\u002Fnode-red\u002Fhardware\u002Fraspberry-pi-4",[],{"title":10256,"path":10257,"order":2510,"children":10258},"Raspberry Pi 5","\u002Fdocs\u002Fnode-red\u002Fhardware\u002Fraspberry-pi-5",[],{"title":10260,"path":10261,"order":2510,"children":10262},"Robustel EG5120","\u002Fdocs\u002Fnode-red\u002Fhardware\u002Frobustel-eg5120",[],{"title":10264,"path":10265,"order":2510,"children":10266},"Siemens IoT2050","\u002Fdocs\u002Fnode-red\u002Fhardware\u002Fsiemens-iot-2050",[],{"title":10268,"path":10269,"order":876,"children":10270},"Peripheral devices","\u002Fdocs\u002Fnode-red\u002Fperipheral",[10271,10275,10279,10283],{"title":10272,"path":10273,"order":2510,"children":10274},"Arduino","\u002Fdocs\u002Fnode-red\u002Fperipheral\u002Fardiuno",[],{"title":10276,"path":10277,"order":2510,"children":10278},"Barcode Scanner","\u002Fdocs\u002Fnode-red\u002Fperipheral\u002Fbarcodescanner",[],{"title":10280,"path":10281,"order":2510,"children":10282},"ESP32","\u002Fdocs\u002Fnode-red\u002Fperipheral\u002Fesp32",[],{"title":10284,"path":10285,"order":2510,"children":10286},"Webcam","\u002Fdocs\u002Fnode-red\u002Fperipheral\u002Fwebcam",[],{"title":10288,"path":10289,"order":882,"children":10290},"Terminology","\u002Fdocs\u002Fnode-red\u002Fterminology",[],{"title":10292,"path":10293,"order":1482,"children":10294},"Keyboard shortcuts","\u002Fdocs\u002Fnode-red\u002Fkeyboard",[],1788888673695]