Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- [{"id":"364fc5e53d7f72f4","type":"tab","label":"e360 Logging + Backup","disabled":false,"info":""},{"id":"c8b7d140ab016a42","type":"inject","z":"364fc5e53d7f72f4","name":"Log every 2s","props":[],"repeat":"2","crontab":"","once":true,"onceDelay":1,"topic":"","x":120,"y":160,"wires":[["c4ac50a8401517c8"]]},{"id":"c4ac50a8401517c8","type":"function","z":"364fc5e53d7f72f4","name":"Simulate Time through RH","func":"function rand(min, max) {\n return Math.floor(Math.random() * (max - min + 1)) + min;\n}\n\nmsg.payload = {\n Time: new Date().toISOString().replace(\"T\", \" \").split(\".\")[0],\n SLP: rand(1000, 2000),\n DLP: rand(1000, 2000),\n Flow_GPM: rand(20, 40),\n EEV_POSITION: rand(0, 100),\n EWT_UNIT: rand(40, 60),\n LWT_Unit: rand(40, 60),\n FlowValveFeedback: rand(0, 100),\n FlowValveSetPoint: rand(0, 100),\n Ambient: rand(60, 80),\n RH: rand(30, 70)\n};\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":380,"y":220,"wires":[["088d64fc5bc96072"]]},{"id":"088d64fc5bc96072","type":"function","z":"364fc5e53d7f72f4","name":"Format CSV line","func":"const FIELDS = [\n \"Time\", \"SLP\", \"DLP\", \"Flow_GPM\", \"EEV_POSITION\",\n \"EWT_UNIT\", \"LWT_Unit\", \"FlowValveFeedback\",\n \"FlowValveSetPoint\", \"Ambient\", \"RH\"\n];\n\nfunction esc(v) {\n if (v === null || v === undefined) return \"\";\n const s = String(v);\n return /[\",\\n]/.test(s) ? `\"${s.replace(/\"/g, '\"\"')}\"` : s;\n}\n\nconst p = msg.payload;\nconst row = FIELDS.map(k => esc(p[k]));\nmsg.payload = row.join(\",\");\nmsg.filename = \"/run/media/sda1/e360_subCooling.txt\";\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":640,"y":220,"wires":[["00e08530b8586f1e"]]},{"id":"00e08530b8586f1e","type":"file","z":"364fc5e53d7f72f4","name":"Write to e360_subCooling.txt","filename":"filename","filenameType":"msg","appendNewline":true,"createDir":false,"overwriteFile":"false","encoding":"utf8","x":1180,"y":220,"wires":[["d9c76710b5259ec9"]]},{"id":"9f3cf34ec7ee0187","type":"inject","z":"364fc5e53d7f72f4","name":"Backup every 5 min","props":[],"repeat":"","crontab":"0 0-22 * * *","once":false,"onceDelay":0.1,"topic":"","x":460,"y":340,"wires":[["bd8bf3fe17f2556f"]]},{"id":"bd8bf3fe17f2556f","type":"exec","z":"364fc5e53d7f72f4","command":"date +%Y-%m-%d_%H-%M-%S","addpay":false,"append":"","useSpawn":"false","timer":"","oldrc":false,"name":"Get timestamp","x":680,"y":340,"wires":[["d34025a56a991576"],[],[]]},{"id":"d34025a56a991576","type":"function","z":"364fc5e53d7f72f4","name":"Set backup_path","func":"msg.backup_path = \"/run/media/sda1/e360_subCooling_\" + msg.payload.trim() + \".log\";\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":900,"y":340,"wires":[["eeb7c1e2acefbfbc"]]},{"id":"eeb7c1e2acefbfbc","type":"file in","z":"364fc5e53d7f72f4","name":"Read log file","filename":"/run/media/sda1/e360_subCooling.txt","format":"utf8","sendError":true,"x":1120,"y":340,"wires":[["016d85b4619430dd"]]},{"id":"016d85b4619430dd","type":"function","z":"364fc5e53d7f72f4","name":"Prepare for write","func":"if (!msg.backup_path || typeof msg.payload !== 'string') {\n node.warn(\"Missing backup_path or payload not a string\");\n return null;\n}\nmsg.filename = msg.backup_path;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1350,"y":340,"wires":[["11359021ec6f4058","39c535e37e71915d"]]},{"id":"11359021ec6f4058","type":"file","z":"364fc5e53d7f72f4","name":"Write .log backup","filename":"filename","filenameType":"msg","appendNewline":false,"createDir":false,"overwriteFile":"true","encoding":"utf8","x":1590,"y":320,"wires":[[]]},{"id":"39c535e37e71915d","type":"file","z":"364fc5e53d7f72f4","name":"Truncate original log","filename":"/run/media/sda1/e360_subCooling.txt","filenameType":"str","appendNewline":false,"createDir":false,"overwriteFile":"true","encoding":"utf8","x":1600,"y":380,"wires":[[]]},{"id":"d9c76710b5259ec9","type":"debug","z":"364fc5e53d7f72f4","name":"debug 3","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":1440,"y":220,"wires":[]},{"id":"396fe0d4e4a80ad5","type":"inject","z":"364fc5e53d7f72f4","name":"Write header once","props":[{"p":"payload"}],"repeat":"","crontab":"","once":true,"onceDelay":"0.1","topic":"","payload":"Time,SLP, DLP, FLOW_GPM,EEV_POSITION,EWT_UNIT,LWT_Unit,FlowValveFeedback,FlowValveSetPoint,Ambient,RH","payloadType":"str","x":130,"y":20,"wires":[["6b4b7faa81a57a05"]]},{"id":"6b4b7faa81a57a05","type":"file","z":"364fc5e53d7f72f4","name":"Write CSV","filename":"/run/media/sda1/e360_subCooling.txt","filenameType":"str","appendNewline":true,"createDir":false,"overwriteFile":"true","encoding":"none","x":770,"y":20,"wires":[[]]},{"id":"0150016df8653606","type":"function","z":"364fc5e53d7f72f4","name":"Ensure Header","func":"const header = \"Time,SLP,DLP,Flow_GPM,EEV_POSITION,EWT_UNIT,LWT_Unit,FlowValveFeedback,FlowValveSetPoint,Ambient,RH\";\nlet output = \"\";\n\nif (!flow.get(\"headerWritten\")) {\n output += header + \"\\n\";\n flow.set(\"headerWritten\", true);\n}\n\noutput += msg.payload;\nmsg.payload = output;\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":880,"y":220,"wires":[[]]},{"id":"1146e4b914de6bcb","type":"comment","z":"364fc5e53d7f72f4","name":"Periodic file backup","info":"","x":450,"y":300,"wires":[]},{"id":"b2390237f1f9e653","type":"comment","z":"364fc5e53d7f72f4","name":"Simulate and log","info":"","x":100,"y":100,"wires":[]}]
Advertisement
Add Comment
Please, Sign In to add comment