Reset dashboard values

for the most part unless there is a voltage foible, yes because my 'master' arduino forces the order by sequential polling for the other boards...

but that voltage foible is super rare (and i think due to funky PC USB dock, which won't be used in my final project implementation anyway)

Give this a try I think it meets your needs :grinning:

[{"id":"fef95fa4acf4eb95","type":"debug","z":"7268a9c1d2c04065","name":"Date","active":true,"tosidebar":true,"console":false,"tostatus":true,"complete":"true","targetType":"full","statusVal":"payload","statusType":"auto","x":980,"y":1005,"wires":[]},{"id":"8f92d27313fdd9d5","type":"inject","z":"7268a9c1d2c04065","name":"Data","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":335,"y":1110,"wires":[["e3b8cd8019be7aa6"]]},{"id":"400d52aec2c1ba08","type":"function","z":"7268a9c1d2c04065","name":"Message Parser","func":"\n// Check if msg.payload is \"RESET\"\nif (msg.payload === \"RESET\") {\n    // Return an array of 20 empty payloads\n    return Array.from({ length: 20 }, () => ({ payload: \"\", color: \"red\" }));;\n}\n\n// Split the payload into lines\nlet lines = msg.payload.split('\\n');\n\n// The first line is the date\nlet date = lines[0].trim();\n\n// The second line contains the values separated by tabs\nlet values = lines[1].trim().split('\\t');\n\n// Function to determine the color based on the value\nfunction determineColor(value) {\n    if (typeof value === 'number') {\n        return (value > 1200 || value < 10) ? 'green' : 'red';\n    }\n    return 'red';\n}\n\n// Create the result array with the date as the first element and objects for the values\nlet resultArray = [{ payload: date, color: 'green' }, ...values.map(value => {\n    // Attempt to convert the value to a number\n    let number = parseFloat(value);\n    let payloadValue = isNaN(number) ? value : number;\n    return { payload: payloadValue, color: determineColor(payloadValue) };\n})];\n\n\nreturn resultArray;\n\n","outputs":20,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":780,"y":1170,"wires":[["fef95fa4acf4eb95"],["523bff1a0a5fc407"],["aec6542d40a22e06"],["79e8b648a931f8ec"],["cb0898e5e7d5e1dc"],["a6eb431b41907f5c"],["08b4f560cebdc3cf"],[],[],[],[],[],[],[],[],[],[],[],[],[]],"info":"\r\n// Split the payload into lines\r\nlet lines = msg.payload.split('\\n');\r\n\r\n// The first line is the date\r\nlet date = lines[0].trim();\r\n\r\n// The second line contains the values separated by tabs\r\nlet values = lines[1].trim().split('\\t');\r\n\r\n// Function to determine the color based on the value\r\nfunction determineColor(value) {\r\n    if (typeof value === 'number') {\r\n        return (value > 1200 || value < 10) ? 'green' : 'red';\r\n    }\r\n    return 'red';\r\n}\r\n\r\n// Create the result array with the date as the first element and objects for the values\r\nlet resultArray = [{ payload: date }, ...values.map(value => {\r\n    // Attempt to convert the value to a number\r\n    let number = parseFloat(value);\r\n    let payloadValue = isNaN(number) ? value : number;\r\n    return { payload: payloadValue, color: determineColor(payloadValue) };\r\n})];\r\n\r\n// Set the array as the payload\r\nmsg.payload = resultArray;\r\n\r\nreturn resultArray;\r\n"},{"id":"523bff1a0a5fc407","type":"debug","z":"7268a9c1d2c04065","name":"B1","active":true,"tosidebar":true,"console":false,"tostatus":true,"complete":"true","targetType":"full","statusVal":"payload & \" \" & color","statusType":"jsonata","x":980,"y":1050,"wires":[]},{"id":"aec6542d40a22e06","type":"debug","z":"7268a9c1d2c04065","name":"B2","active":true,"tosidebar":true,"console":false,"tostatus":true,"complete":"true","targetType":"full","statusVal":"payload & \" \" & color","statusType":"jsonata","x":980,"y":1095,"wires":[]},{"id":"79e8b648a931f8ec","type":"debug","z":"7268a9c1d2c04065","name":"B3","active":true,"tosidebar":true,"console":false,"tostatus":true,"complete":"true","targetType":"full","statusVal":"payload & \" \" & color","statusType":"jsonata","x":980,"y":1140,"wires":[]},{"id":"e3b8cd8019be7aa6","type":"function","z":"7268a9c1d2c04065","name":"Create Test Data","func":"// Test payload string\nmsg.payload = `Thu Jun 20 2024 13:27:57 GMT+0100 (British Summer Time)\\n\\t437.582\\t0.882\\t0.87\\t0.902\\tERROR BOARD NOT FOUND`;\nreturn msg;","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":525,"y":1110,"wires":[["400d52aec2c1ba08"]]},{"id":"f2968ce231dae9cc","type":"inject","z":"7268a9c1d2c04065","name":"RESET","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"RESET","payloadType":"str","x":335,"y":1170,"wires":[["400d52aec2c1ba08"]]},{"id":"cb0898e5e7d5e1dc","type":"debug","z":"7268a9c1d2c04065","name":"B4","active":true,"tosidebar":true,"console":false,"tostatus":true,"complete":"true","targetType":"full","statusVal":"payload & \" \" & color","statusType":"jsonata","x":980,"y":1185,"wires":[]},{"id":"a6eb431b41907f5c","type":"debug","z":"7268a9c1d2c04065","name":"B5","active":true,"tosidebar":true,"console":false,"tostatus":true,"complete":"true","targetType":"full","statusVal":"payload & \" \" & color","statusType":"jsonata","x":980,"y":1230,"wires":[]},{"id":"08b4f560cebdc3cf","type":"debug","z":"7268a9c1d2c04065","name":"B6","active":true,"tosidebar":true,"console":false,"tostatus":true,"complete":"true","targetType":"full","statusVal":"payload & \" \" & color","statusType":"jsonata","x":985,"y":1275,"wires":[]}]