Blink lights (subflow)
This simple subflow sends on and off commands to the output. Number of blinks and repetitions can be changed by double clicking the subflow.
Subflow
I use this flow to remind me how long my shower has been. Example flow
Copy the subflow below to your clipboard and then import into Node-RED using the Import From > Clipboard (Ctrl-I) menu option
[{"id":"6ee132296b3cf932","type":"subflow","name":"Blink","info":"","category":"","in":[{"x":100,"y":120,"wires":[{"id":"27d1a70e265edd37"},{"id":"7387fa65ef719020"}]}],"out":[{"x":610,"y":120,"wires":[{"id":"27d1a70e265edd37","port":0},{"id":"abc82f601a87c3a5","port":0}]}],"env":[{"name":"Blinks","type":"num","value":"3"},{"name":"Repetitions","type":"num","value":"5"}],"meta":{},"color":"#DDAA99","status":{"x":350,"y":440,"wires":[{"id":"52aa8fb2c27f0cb2","port":0}]}},{"id":"27d1a70e265edd37","type":"change","z":"6ee132296b3cf932","name":"on","rules":[{"t":"set","p":"payload","pt":"msg","to":"on","tot":"str"},{"t":"set","p":"brightness","pt":"msg","to":"255","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":380,"y":120,"wires":[["2da19d8b19ddc1d9"]]},{"id":"2da19d8b19ddc1d9","type":"delay","z":"6ee132296b3cf932","name":"","pauseType":"delay","timeout":"0.7","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":440,"y":160,"wires":[["abc82f601a87c3a5"]]},{"id":"abc82f601a87c3a5","type":"change","z":"6ee132296b3cf932","name":"off","rules":[{"t":"set","p":"payload","pt":"msg","to":"off","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":460,"y":200,"wires":[["3b2a54bf89d4537a"]]},{"id":"3b2a54bf89d4537a","type":"delay","z":"6ee132296b3cf932","name":"","pauseType":"delay","timeout":"0.7","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":530,"y":240,"wires":[["e38fe537fec59355"]]},{"id":"e38fe537fec59355","type":"function","z":"6ee132296b3cf932","name":"count blinks","func":"var Blinks = flow.get(\"toggleNext\") + 1||1;\n\nif (Blinks >= env.get(\"Blinks\")){\n flow.set(\"toggleNext\",0);\n msg.payload = env.get(\"Blinks\");\n }\nelse{\n flow.set(\"toggleNext\", Blinks);\n msg.payload = Blinks\n }\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":140,"y":300,"wires":[["b2859d9c1e1d6efa"]]},{"id":"9941f854be9de49c","type":"change","z":"6ee132296b3cf932","name":"reset blink counter","rules":[{"t":"set","p":"toggleNext","pt":"flow","to":"0","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":160,"y":340,"wires":[["52aa8fb2c27f0cb2"]]},{"id":"b2859d9c1e1d6efa","type":"switch","z":"6ee132296b3cf932","name":"","property":"payload","propertyType":"msg","rules":[{"t":"lt","v":"Blinks","vt":"env"},{"t":"else"}],"checkall":"true","repair":false,"outputs":2,"x":300,"y":300,"wires":[["27d1a70e265edd37"],["9941f854be9de49c"]]},{"id":"52aa8fb2c27f0cb2","type":"function","z":"6ee132296b3cf932","name":"count repetitions","func":"var Repetitions = flow.get(\"toggleNextRepetition\") + 1||1;\n\nif (Repetitions >= env.get(\"Repetitions\")){\n flow.set(\"toggleNextRepetition\",0);\n msg.payload = env.get(\"Repetitions\");\n }\nelse{\n flow.set(\"toggleNextRepetition\", Repetitions);\n msg.payload = Repetitions\n }\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":150,"y":380,"wires":[["d73ae1999ffea6a7"]]},{"id":"d73ae1999ffea6a7","type":"switch","z":"6ee132296b3cf932","name":"","property":"payload","propertyType":"msg","rules":[{"t":"lt","v":"Repetitions","vt":"env"},{"t":"else"}],"checkall":"true","repair":false,"outputs":2,"x":310,"y":380,"wires":[["c56a78d3e1f1c76a"],[]]},{"id":"c56a78d3e1f1c76a","type":"delay","z":"6ee132296b3cf932","name":"","pauseType":"delay","timeout":"1.5","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":460,"y":380,"wires":[["27d1a70e265edd37"]]},{"id":"7387fa65ef719020","type":"change","z":"6ee132296b3cf932","name":"reset repetition counter","rules":[{"t":"set","p":"toggleNextRepetition","pt":"flow","to":"0","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":170,"y":420,"wires":[[]]},{"id":"b3f2b9fa53b44a74","type":"comment","z":"6ee132296b3cf932","name":"link to instructions and latest version of this flow","info":"https://flows.nodered.org/flow/1acb0468ca10e85e99cfb8683d9fc260","x":270,"y":50,"wires":[]}]