Hi guys, I am a NodeRed newbie and need your help. I want to pass path and file as an absolute filename to a "read file" node. But I always got errors like this:
Error: ENOENT: no such file or directory, open 'undefined[object Object]'"
Here is my flow:
[
{
"id": "60463e3a.b7fb4",
"type": "tab",
"label": "graph csv",
"disabled": false,
"info": ""
},
{
"id": "ff0ba1e2.f46ab",
"type": "ui_chart",
"z": "60463e3a.b7fb4",
"name": "",
"group": "2ac8e3fa.8b8584",
"order": 5,
"width": 0,
"height": 0,
"label": "chart",
"chartType": "line",
"legend": "true",
"xformat": "HH:mm:ss",
"interpolate": "linear",
"nodata": "",
"dot": false,
"ymin": "",
"ymax": "",
"removeOlder": "2",
"removeOlderPoints": "1000",
"removeOlderUnit": "3600",
"cutout": 0,
"useOneColor": false,
"useUTC": true,
"colors": [
"#1f77b4",
"#aec7e8",
"#ff7f0e",
"#2ca02c",
"#98df8a",
"#d62728",
"#ff9896",
"#9467bd",
"#c5b0d5"
],
"outputs": 1,
"x": 550,
"y": 500,
"wires": [
[]
]
},
{
"id": "2466e014.fe459",
"type": "debug",
"z": "60463e3a.b7fb4",
"name": "",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "true",
"targetType": "full",
"x": 530,
"y": 320,
"wires": []
},
{
"id": "f6d3c9af.1c6d18",
"type": "file in",
"z": "60463e3a.b7fb4",
"name": "file path",
"filename": "",
"format": "utf8",
"chunk": false,
"sendError": false,
"encoding": "none",
"allProps": false,
"x": 200,
"y": 320,
"wires": [
[
"3d784d1.a733332",
"2466e014.fe459"
]
]
},
{
"id": "3d784d1.a733332",
"type": "csv",
"z": "60463e3a.b7fb4",
"name": "",
"sep": ",",
"hdrin": true,
"hdrout": "",
"multi": "mult",
"ret": "\\n",
"temp": "Test, Test2, Test3, Test4",
"skip": "0",
"strings": true,
"include_empty_strings": false,
"include_null_values": false,
"x": 310,
"y": 400,
"wires": [
[
"f3d8e5f0.29d548",
"2466e014.fe459"
]
]
},
{
"id": "f3d8e5f0.29d548",
"type": "function",
"z": "60463e3a.b7fb4",
"name": "graph generate",
"func": "\nfunction toTimestamp(strDate){\n var datum = Date.parse(strDate);\n return datum/1000;\n }\nvar payload=msg.payload;\n\n\nvar data_out=[];\nvar a1=[];\nvar a2=[];\nvar a3=[];\nvar a4=[];\nfor(let i=0;i<payload.length;i++)\n{\n \nvar Data= payload[i].Data.split(\"-\");\nvar t=Data[2]+\"/\"+Data[1]+\"/\"+Data[0];\nvar timestamp=toTimestamp(t+\" \"+payload[i][\"Godzina\"]);\n\n\nvar temp1={ \"x\": timestamp, \"y\":parseInt( payload[i][\"Temp_RS-485\"]) };\nvar temp2={ \"x\": timestamp, \"y\":parseInt( payload[i][\"Wilg_RS-485\"]) };\nvar temp3={ \"x\": timestamp, \"y\": parseInt(payload[i][\"Temperatura I\"])};\nvar temp4={\"x\": timestamp, \"y\": parseInt(payload[i][\"Wilgotność I\"])};\n\na1.push(temp1);\na2.push(temp2);\na3.push(temp3);\na4.push(temp4);\n \n \n //\n \n \n}\n\ndata_out=[a1,a2,a3,a4];\nmsg.payload=[{\n\"series\": [\"Temp_RS-485\",\"Wilg_RS-485\",\"Temperatura I\",\"Wilgotność I\"],\n\"data\":data_out,\n\"labels\": [\"Temp_RS-485\",\"Wilg_RS-485\",\"Temperatura I\",\"Wilgotność I\"]\n}];\n\nreturn msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 320,
"y": 520,
"wires": [
[
"2466e014.fe459",
"ff0ba1e2.f46ab"
]
]
},
{
"id": "6456763b.e07d78",
"type": "fs-ops-dir",
"z": "60463e3a.b7fb4",
"name": "",
"path": "payload",
"pathType": "msg",
"filter": "*.csv",
"filterType": "str",
"dir": "files",
"dirType": "msg",
"x": 320,
"y": 100,
"wires": [
[
"35811671.90ebea",
"572a14c4.62aa3c"
]
]
},
{
"id": "35811671.90ebea",
"type": "fs-ops-stats",
"z": "60463e3a.b7fb4",
"name": "",
"path": "payload",
"pathType": "msg",
"filename": "files",
"filenameType": "msg",
"stats": "stats",
"sizeType": "msg",
"x": 480,
"y": 100,
"wires": [
[
"20ef5f9.b8d63a",
"ee6515ea.f968c8"
]
]
},
{
"id": "7dbdf6ef.a73868",
"type": "inject",
"z": "60463e3a.b7fb4",
"name": "",
"props": [
{
"p": "payload"
},
{
"p": "topic",
"vt": "str"
}
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "/home/pi/csv/",
"payloadType": "str",
"x": 130,
"y": 100,
"wires": [
[
"6456763b.e07d78"
]
]
},
{
"id": "dd9228cf.983768",
"type": "debug",
"z": "60463e3a.b7fb4",
"name": "",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "combined",
"targetType": "msg",
"x": 880,
"y": 160,
"wires": []
},
{
"id": "572a14c4.62aa3c",
"type": "debug",
"z": "60463e3a.b7fb4",
"name": "",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "files",
"targetType": "msg",
"x": 460,
"y": 160,
"wires": []
},
{
"id": "20ef5f9.b8d63a",
"type": "debug",
"z": "60463e3a.b7fb4",
"name": "",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "stats",
"targetType": "msg",
"x": 660,
"y": 160,
"wires": []
},
{
"id": "ee6515ea.f968c8",
"type": "function",
"z": "60463e3a.b7fb4",
"name": "Combine and sort",
"func": "var combined = [];\n\nfor (var i = 0; i < msg.files.length; i++) {\n var file = msg.files[i];\n var stat = msg.stats[i];\n \n combined.push({\n path: msg.payload,\n file,\n ...stat\n })\n}\n\ncombined.sort((a, b) => b.birthtimeMs - a.birthtimeMs);\n\nmsg.combined = combined;\nreturn msg;",
"outputs": 1,
"noerr": 0,
"x": 670,
"y": 100,
"wires": [
[
"dd9228cf.983768",
"50034043.e2347"
]
]
},
{
"id": "50034043.e2347",
"type": "change",
"z": "60463e3a.b7fb4",
"name": "",
"rules": [
{
"t": "set",
"p": "payload",
"pt": "msg",
"to": "combined[1]",
"tot": "msg"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 880,
"y": 100,
"wires": [
[
"4f9068e.e12c498",
"b4310deac4a54284"
]
]
},
{
"id": "4f9068e.e12c498",
"type": "debug",
"z": "60463e3a.b7fb4",
"name": "newest CSV",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "payload",
"targetType": "msg",
"statusVal": "",
"statusType": "auto",
"x": 1090,
"y": 100,
"wires": []
},
{
"id": "25428842.245c68",
"type": "comment",
"z": "60463e3a.b7fb4",
"name": "Directory gets list of CSVs. File Stats gets their details. combine and sort puts data together and sorts. Switch node takes 1st item and puts it in payload",
"info": "",
"x": 640,
"y": 40,
"wires": []
},
{
"id": "b4310deac4a54284",
"type": "function",
"z": "60463e3a.b7fb4",
"name": "make filename",
"func": "msg.file = msg.payload;\nmsg.filename = msg.path + \"\\\\\" + msg.payload;\nreturn msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 620,
"y": 240,
"wires": [
[
"f6d3c9af.1c6d18",
"9fe83a8a2f3e7d01"
]
]
},
{
"id": "9fe83a8a2f3e7d01",
"type": "debug",
"z": "60463e3a.b7fb4",
"name": "make file",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "payload",
"targetType": "msg",
"statusVal": "",
"statusType": "auto",
"x": 890,
"y": 280,
"wires": []
},
{
"id": "2ac8e3fa.8b8584",
"type": "ui_group",
"name": "Default",
"tab": "ebb1ed1c.5ebe2",
"order": 1,
"disp": true,
"width": "12",
"collapse": false
},
{
"id": "ebb1ed1c.5ebe2",
"type": "ui_tab",
"name": "Home",
"icon": "dashboard",
"disabled": false,
"hidden": false
}
]