Skip to content

Instantly share code, notes, and snippets.

@LozRiviera
Last active August 22, 2023 12:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save LozRiviera/70424972bc835ead155e3264f7d100b1 to your computer and use it in GitHub Desktop.
Save LozRiviera/70424972bc835ead155e3264f7d100b1 to your computer and use it in GitHub Desktop.
COMPASS_Arduino string to .csv

(updated 2023 for Windows filename compatability) This flow is a Node-RED option for saving sequential strings from an Arduino into the same .csv file. This is provided as an update to a research paper describing a basic system for monitoring activity and sleep in mice. (https://wellcomeopenresearch.org/articles/1-2/v2).

Setup Steps: Use the node pallet option in the menu to install thethingbox-node-timestamp node. If not using a Raspberry Pi, also install the • serial-port node.

Flow steps:

  1. Define file headers at startup and file name based on ISO8601 datetime. (Filename adjusted to be compatibile with Windows)
  2. Timestamp new incoming messages from connected serial device (Arduino) and append existing file.
[{"id":"ab1e3f80a4d839fc","type":"tab","label":"Flow 1","disabled":false,"info":"","env":[]},{"id":"3ac2ad4d.8e5542","type":"timestamp","z":"ab1e3f80a4d839fc","name":"","x":350,"y":300,"wires":[["1918709f.849b3f"]]},{"id":"ea0f294b.577388","type":"timestamp","z":"ab1e3f80a4d839fc","name":"starting timestamp for filename","x":350,"y":180,"wires":[["1256bb1b.3a2de5"]]},{"id":"1256bb1b.3a2de5","type":"function","z":"ab1e3f80a4d839fc","name":"datestring_Set_filename","func":"\n\n// Create a Date object from the payload\nvar date = new Date(msg.timestamp);\n\n// Change the payload to be a formatted Date string\n// Then we will remove the miliseconds,\n//and finally change the colons to underscores, to make windows happy\nmsg.date = date.toISOString().split(\".\")[0].replaceAll(\":\", \"_\");\n\n// define a global variable for the filename of\n// which can then be used for every write to the file\nglobal.set(\"fname1\", \"C:/COMPASS/Data/Box1_\"+ msg.date +\".csv\");\n\n// and add that to the message passing through thtis node\nmsg.filename = global.get(\"fname1\");\n\n// Return the message so it can be sent on\nreturn msg;\n","outputs":"1","noerr":0,"initialize":"","finalize":"","libs":[],"x":650,"y":120,"wires":[["cd0bec6f.c9f24"]]},{"id":"1918709f.849b3f","type":"function","z":"ab1e3f80a4d839fc","name":"add timestamp to payload","func":"msg.payload =msg.timestamp + \",\" +msg.payload;\nmsg.filename =context.global.get(\"fname1\");\nreturn msg;","outputs":1,"noerr":0,"x":510,"y":380,"wires":[["5bb13835.fcc2c8"]]},{"id":"b3cb9d2.fd8046","type":"file","z":"ab1e3f80a4d839fc","name":"arduino1_log","filename":"filename","filenameType":"msg","appendNewline":false,"createDir":true,"overwriteFile":"false","encoding":"none","x":1130,"y":120,"wires":[[]]},{"id":"657956ed.4b9d28","type":"debug","z":"ab1e3f80a4d839fc","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1110,"y":300,"wires":[]},{"id":"77e25226.e54f7c","type":"inject","z":"ab1e3f80a4d839fc","name":"headers","repeat":"","crontab":"","once":true,"onceDelay":"0.1","topic":"headers","payload":"Time, Device, PIR1,PIR2,PIR3,PIR4,PIR5,PIR6,LDR","payloadType":"str","x":160,"y":120,"wires":[["ea0f294b.577388"]]},{"id":"cd0bec6f.c9f24","type":"function","z":"ab1e3f80a4d839fc","name":"add line return","func":"msg.payload = msg.payload + \"\\n\"\nreturn msg;","outputs":1,"noerr":0,"x":880,"y":200,"wires":[["b3cb9d2.fd8046","657956ed.4b9d28"]]},{"id":"9bd35a69.91ead8","type":"serial in","z":"ab1e3f80a4d839fc","name":"Arduino1","serial":"20b3ecf8257c7fa3","x":140,"y":260,"wires":[["3ac2ad4d.8e5542"]]},{"id":"5bb13835.fcc2c8","type":"change","z":"ab1e3f80a4d839fc","name":"Remove any comma at end","rules":[{"t":"change","p":"payload","pt":"msg","from":",\\n","fromt":"re","to":"","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":720,"y":300,"wires":[["cd0bec6f.c9f24"]]},{"id":"20b3ecf8257c7fa3","type":"serial-port","serialport":"COM4","serialbaud":"115200","databits":"8","parity":"none","stopbits":"1","waitfor":"","dtr":"none","rts":"none","cts":"none","dsr":"none","newline":"\\n","bin":"false","out":"char","addchar":"","responsetimeout":"10000"}]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment