When reporting issues on the forum, it's much easier to help if all the important information is included.
This flow collects most of the helpful information in one place, like this. If you don't want to share network details just leave it collapsed.
object
nodered_version: "4.1.0-beta.1"
nodejs_version: "20.19.0"
npm_version: "11.4.1"
nr_started: "2025-06-10T19:21:46+01:00"
hostname: "raspberrypi"
os_pretty: "Debian GNU/Linux 12 (bookworm)"
release: "Linux 6.6.74+rpt-rpi-2712 arm64 LE"
os_installed: "2024-11-19T13:42:52+00:00"
last_reboot: "2025-05-30T09:53:03+01:00"
cpu: "Cortex-A76"
cores: 4
totalmem: "7.9 GB"
freemem: "6.4 GB"
loadAverage: object
networkInterfaces: object
collected_at: "2025-06-11T01:29:55.337Z"
Flow
[{"id":"e5c2ee066e9fbfc6","type":"inject","z":"32bc1133.9bf706","name":"","props":[{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"OS Info","x":1205,"y":2460,"wires":[["f8c36499d7f2a52c"]],"l":false},{"id":"f8c36499d7f2a52c","type":"exec","z":"32bc1133.9bf706","command":"node-red --version && cat /etc/os-release | grep -oP '^PRETTY_NAME=\"\\K.*?(?=\")' && stat -c %y /lost+found | cut -d'.' -f1 | xargs -I {} date -d \"{}\" -Iseconds && uptime -s | xargs -I {} date -d \"{}\" -Iseconds && npm --version && systemctl show nodered | grep '^ExecMainStartTimestamp=' | cut -d'=' -f2- | xargs -I {} date -d \"{}\" -Iseconds","addpay":"","append":"","useSpawn":"false","timer":"","winHide":false,"oldrc":false,"name":"Get OS Name & last reboot","x":1370,"y":2460,"wires":[["08df6dd7f4c7475b"],[],[]]},{"id":"08df6dd7f4c7475b","type":"function","z":"32bc1133.9bf706","name":"","func":"const line = msg.payload.split('\\n');\n\nmsg.payload = {\n nodered_version: line[0].split(\"v\")[1],\n nodejs_version: line[1].split(\"v\")[1],\n npm_version: line[6],\n nr_started: line[7],\n\n // System info\n hostname: os.hostname(),\n os_pretty: line[3],\n release: `${os.type()} ${os.release()} ${os.arch()} ${os.endianness()}`,\n os_installed: line[4],\n last_reboot: line[5],\n\n // CPU info\n cpu: os.cpus()[0].model,\n cores: os.cpus().length,\n\n // Memory info\n totalmem: (os.totalmem() / (1024 ** 3)).toFixed(1) + \" GB\",\n freemem: (() => {\n const freeMem = os.freemem();\n const gb = freeMem / (1024 * 1024 * 1024);\n return gb >= 1 ? `${gb.toFixed(1)} GB` : `${Math.round(freeMem / (1024 * 1024))} MB`;\n })(),\n\n // Load average\n loadAverage: (() => {\n const [load1min, load5min, load15min] = os.loadavg();\n return {\n load1min: Number(load1min.toFixed(2)),\n load5min: Number(load5min.toFixed(2)),\n load15min: Number(load15min.toFixed(2))\n };\n })(),\n\n // Network interfaces\n networkInterfaces: os.networkInterfaces(),\n\n // Add timestamp of when this data was collected\n collected_at: new Date().toISOString()\n};\n\nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[{"var":"os","module":"os"}],"x":1545,"y":2460,"wires":[["e369c7b8dfd5743d"]],"l":false},{"id":"e369c7b8dfd5743d","type":"debug","z":"32bc1133.9bf706","name":"info","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1660,"y":2460,"wires":[]}]