Sorry updated it
[
{
"id": "4239e513d67818ad",
"type": "inject",
"z": "a1fe963ffcba0f9a",
"name": "Generate weld",
"props": [
{
"p": "weld",
"v": "{\"p1\":null,\"p2\":null,\"p3\":null}",
"vt": "json"
}
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"x": 260,
"y": 800,
"wires": [
[
"acb22296609c4bce",
"abed8dae9bdbe212"
]
]
},
{
"id": "abed8dae9bdbe212",
"type": "function",
"z": "a1fe963ffcba0f9a",
"name": "Generate weld parameters",
"func": "// Get the weld number\nlet weldNum = flow.get(\"weldNum\");\n\n// If init, then set it to 1\nif (weldNum === undefined) {\n weldNum = 1\n flow.set(\"weldNum\", 1);\n} else {\n// Otherwise increment each weld that is generated\n weldNum += 1\n flow.set(\"weldNum\", weldNum)\n}\n\n// Create a 'weld' with multiple parameters\nlet weld = msg.weld;\nlet numLength = 6;\n\nweld.num = weldNum;\nweld.p1 = (Math.random()).toFixed(numLength);\nweld.p2 = (Math.random() * .5).toFixed(numLength);\nweld.p3 = (Math.random() * 2).toFixed(numLength);\nweld.p4 = (Math.random() * 2).toFixed(numLength);\nweld.p5 = (Math.random() * 2).toFixed(numLength);\nweld.name = \"Weld \" + weld.num;\n\n\nreturn msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 560,
"y": 720,
"wires": [
[
"1f43cbb06a104ac7",
"e1663bd95aa089e9"
]
]
},
{
"id": "1f43cbb06a104ac7",
"type": "function",
"z": "a1fe963ffcba0f9a",
"name": "Keep persistent table of welds",
"func": "let tableData = flow.get(\"tableData\") || [];\n\ntableData.unshift(msg.weld);\n\n\n\nmsg.tableData = tableData\n\nflow.set(\"tableData\", tableData)\nreturn msg;\n\n// // Wrapped Object (tableData) that's stored in msg\n// // Each Table has properties for each column in that part of the table to be dynamic\n// {\n// // Left Table (fixed). Key = header name, Value = Array of values in tab\n// \"left\": {\n// \"num\": [1, 2, 3, 4, 5]\n// },\n// // Center Table (scrollable). Key = header name, Value = Array of values in tab\n// \"center\": {\n// \"p1\": [1.234, 1.892, 1.429, 1.952, 1.041],\n// \"p2\": [2.587, 2.018, 2.593, 2.104, 2.501],\n// \"p3\": [3.014, 3.581, 3.590, 3.901, 3.291],\n// \"p4\": [4.104, 4.194, 4.981, 4.761, 4.385],\n// \"p5\": [5.012, 5.831, 5.123, 5.741, 5.689]\n// },\n// // Right Table (fixed). Key = header name, Value = Array of values in tab\n// \"right\": {\n// \"name\": [\"a\", \"b\", \"c\", \"d\", \"e\"]\n// }\n// }",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 830,
"y": 720,
"wires": [
[
"55548ac5744b3d38",
"302ddd18b58fcba7"
]
]
},
{
"id": "55548ac5744b3d38",
"type": "debug",
"z": "a1fe963ffcba0f9a",
"name": "TableData",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "tableData",
"targetType": "msg",
"statusVal": "",
"statusType": "auto",
"x": 1060,
"y": 780,
"wires": []
},
{
"id": "e1663bd95aa089e9",
"type": "debug",
"z": "a1fe963ffcba0f9a",
"name": "Weld",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "weld",
"targetType": "msg",
"statusVal": "",
"statusType": "auto",
"x": 770,
"y": 780,
"wires": []
},
{
"id": "c6e3576e93b962d7",
"type": "inject",
"z": "a1fe963ffcba0f9a",
"name": "",
"props": [
{
"p": "payload"
},
{
"p": "topic",
"vt": "str"
}
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "",
"payloadType": "date",
"x": 220,
"y": 1080,
"wires": [
[
"c8aa5e644299dc4e"
]
]
},
{
"id": "c8aa5e644299dc4e",
"type": "ui_template",
"z": "a1fe963ffcba0f9a",
"group": "8922194f09dd9a54",
"name": "Home page",
"order": 7,
"width": "0",
"height": "0",
"format": "<style>\n\n.box {\n width: 50vw;\n height: 50vh;\n border: \"black\";\n border-style: solid;\n}\n\n.bg {\n background-color: #e3e3e3;\n}\n \n</style>\n\n<div class=\"box bg\">\n <h1 class=\"bg\"> \n The main page\n </h1>\n</div>\n\n",
"storeOutMessages": true,
"fwdInMessages": true,
"resendOnRefresh": true,
"templateScope": "local",
"className": "",
"x": 370,
"y": 1080,
"wires": [
[]
]
},
{
"id": "302ddd18b58fcba7",
"type": "change",
"z": "a1fe963ffcba0f9a",
"name": "",
"rules": [
{
"t": "set",
"p": "payload",
"pt": "msg",
"to": "tableData",
"tot": "msg"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 1080,
"y": 720,
"wires": [
[
"5f41d81469a3aea0"
]
]
},
{
"id": "425a2ec0c17ac8f8",
"type": "function",
"z": "a1fe963ffcba0f9a",
"name": "Update table with Change",
"func": "// If the callback from the table node doesn't indicate a edited cell. Don't continue\nif (msg.callback !== \"cellEdited\") {\n return;\n}\n\n// Extract edited cell from payload\nlet editedCell = msg.payload;\nlet numEditedCell = editedCell.num;\n\n// Get the table data and swap out the old with the new\nlet tableData = flow.get(\"tableData\");\nlet originalCellIndex = tableData.findIndex(row => row.num === numEditedCell);\ntableData[originalCellIndex] = editedCell;\nflow.set(\"tableData\", tableData);\n\n// Set the payload to give back to the table node\nmsg.payload = tableData;\n\n\n\nreturn msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 1730,
"y": 340,
"wires": [
[]
]
},
{
"id": "f9fee590e2be195d",
"type": "ui_button",
"z": "a1fe963ffcba0f9a",
"name": "",
"group": "c31affb830f65b0a",
"order": 2,
"width": 2,
"height": 1,
"passthru": false,
"label": "Clear Table",
"tooltip": "",
"color": "",
"bgcolor": "",
"className": "",
"icon": "",
"payload": "true",
"payloadType": "bool",
"topic": "payload",
"topicType": "msg",
"x": 870,
"y": 600,
"wires": [
[
"9bd3eead4585dd2a"
]
]
},
{
"id": "9bd3eead4585dd2a",
"type": "function",
"z": "a1fe963ffcba0f9a",
"name": "Clear Table",
"func": "// Resets all table related data\nflow.set(\"tableData\", []);\nflow.set(\"weldNum\", undefined);\nmsg.payload = [];\nreturn msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 1030,
"y": 600,
"wires": [
[
"5f41d81469a3aea0"
]
]
},
{
"id": "acb22296609c4bce",
"type": "ui_button",
"z": "a1fe963ffcba0f9a",
"name": "",
"group": "c31affb830f65b0a",
"order": 1,
"width": 3,
"height": 1,
"passthru": true,
"label": "Generate weld",
"tooltip": "",
"color": "",
"bgcolor": "",
"className": "",
"icon": "",
"payload": "{\"p1\":null,\"p2\":null,\"p3\":null}",
"payloadType": "json",
"topic": "weld",
"topicType": "msg",
"x": 300,
"y": 740,
"wires": [
[
"572d19d4c8a7dc98"
]
]
},
{
"id": "572d19d4c8a7dc98",
"type": "change",
"z": "a1fe963ffcba0f9a",
"name": "",
"rules": [
{
"t": "set",
"p": "weld",
"pt": "msg",
"to": "payload",
"tot": "msg"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 310,
"y": 680,
"wires": [
[
"abed8dae9bdbe212"
]
]
},
{
"id": "54564d05cf3f2d53",
"type": "debug",
"z": "a1fe963ffcba0f9a",
"name": "debug 3",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "true",
"targetType": "full",
"statusVal": "",
"statusType": "auto",
"x": 1800,
"y": 400,
"wires": []
},
{
"id": "1f084d4e29b09f7a",
"type": "ui_ui_control",
"z": "a1fe963ffcba0f9a",
"name": "",
"events": "all",
"x": 580,
"y": 860,
"wires": [
[]
]
},
{
"id": "a31f4f0c8064271f",
"type": "comment",
"z": "a1fe963ffcba0f9a",
"name": "Main page TEMP template",
"info": "",
"x": 250,
"y": 1020,
"wires": []
},
{
"id": "12c03fb8f3b36c73",
"type": "comment",
"z": "a1fe963ffcba0f9a",
"name": "Data Collection Page - Undocumented",
"info": "",
"x": 290,
"y": 540,
"wires": []
},
{
"id": "89b67776c07e52bd",
"type": "csv",
"z": "a1fe963ffcba0f9a",
"name": "welderstats.csv",
"sep": ",",
"hdrin": "",
"hdrout": "none",
"multi": "one",
"ret": "\\n",
"temp": "",
"skip": "0",
"strings": true,
"include_empty_strings": "",
"include_null_values": "",
"x": 1380,
"y": 860,
"wires": [
[
"5151ca4c842e2cd9"
]
]
},
{
"id": "b625ab77800c3e39",
"type": "inject",
"z": "a1fe963ffcba0f9a",
"name": "",
"props": [
{
"p": "payload"
},
{
"p": "topic",
"vt": "str"
}
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "",
"payloadType": "date",
"x": 280,
"y": 860,
"wires": [
[
"abed8dae9bdbe212"
]
]
},
{
"id": "5151ca4c842e2cd9",
"type": "file",
"z": "a1fe963ffcba0f9a",
"name": "write to file",
"filename": "C:\\NODE\\node_red_ui\\public\\downloads\\welderstats.csv",
"filenameType": "str",
"appendNewline": true,
"createDir": true,
"overwriteFile": "false",
"encoding": "utf8",
"x": 1560,
"y": 840,
"wires": [
[
"75bd0d773a0a8274"
]
]
},
{
"id": "5f41d81469a3aea0",
"type": "ui_etable",
"z": "a1fe963ffcba0f9a",
"payload": "[{\"formatter\":\"rowSelection\",\"titleFormatter\":\"rowSelection\",\"hozAlign\":\"center\",\"headerSort\":false,\"frozen\":true},{\"title\":\"Weld Num\",\"field\":\"num\",\"frozen\":true},{\"title\":\"Name\",\"field\":\"name\",\"align\":\"left\",\"editor\":\"input\",\"frozen\":true},{\"title\":\"P1\",\"field\":\"p1\"},{\"title\":\"P2\",\"field\":\"p2\"},{\"title\":\"P3\",\"field\":\"p3\"},{\"title\":\"P4\",\"field\":\"p4\"},{\"title\":\"P5\",\"field\":\"p5\"},{\"title\":\"Complete Weld\",\"field\":\"weldComplete\",\"width\":90,\"align\":\"center\",\"formatter\":\"tickCross\",\"sorter\":\"boolean\",\"editor\":true,\"frozen\":true},{\"title\":\"Visual Inspection\",\"field\":\"visInsp\",\"editor\":\"select\",\"editorParams\":{\"values\":[\"pass\",\"fail\"]},\"frozen\":true}]",
"payloadType": "json",
"options": "{\"movableColumns\":true,\"resizableColumns\":true,\"selectable\":5,\"responsiveLayout\":\"collapse\",\"autoResize\":true,\"layout\":\"fitColumns\",\"pagination\":\"local\",\"height\":\"70vh\"}",
"group": "c31affb830f65b0a",
"name": "",
"order": 4,
"width": 0,
"height": 0,
"columns": [],
"outputs": 1,
"cts": false,
"x": 1255,
"y": 660,
"wires": [
[
"425a2ec0c17ac8f8",
"54564d05cf3f2d53",
"89b67776c07e52bd"
]
],
"l": false
},
{
"id": "75bd0d773a0a8274",
"type": "downloadfile",
"z": "a1fe963ffcba0f9a",
"name": "",
"filename": "welderstats.csv",
"encoding": "none",
"x": 2030,
"y": 840,
"wires": []
},
{
"id": "500f83d2422b5af3",
"type": "ui_button",
"z": "a1fe963ffcba0f9a",
"name": "",
"group": "c31affb830f65b0a",
"order": 2,
"width": 2,
"height": 1,
"passthru": true,
"label": "Download",
"tooltip": "",
"color": "",
"bgcolor": "",
"className": "",
"icon": "",
"payload": "true",
"payloadType": "bool",
"topic": "payload",
"topicType": "msg",
"x": 1780,
"y": 1000,
"wires": [
[
"75bd0d773a0a8274"
]
]
},
{
"id": "8922194f09dd9a54",
"type": "ui_group",
"name": "Main",
"tab": "565c1bb57d8fd73a",
"order": 1,
"disp": false,
"width": "22",
"collapse": false,
"className": ""
},
{
"id": "c31affb830f65b0a",
"type": "ui_group",
"name": "Main Table",
"tab": "2141872d82d783c8",
"order": 1,
"disp": true,
"width": 22,
"collapse": true,
"className": ""
},
{
"id": "565c1bb57d8fd73a",
"type": "ui_tab",
"name": "Home",
"icon": "dashboard",
"order": 3,
"disabled": false,
"hidden": false
},
{
"id": "2141872d82d783c8",
"type": "ui_tab",
"name": "Data Collection",
"icon": "dashboard",
"order": 2,
"disabled": false,
"hidden": false
}
]