Something like this should get you moving...
[{"id":"bcc8bbbf106ec10f","type":"function","z":"f542fe9c.732af","name":"colour cycle","func":"/**** colour list - update as required *****/\nconst colours = [ \n \"red\", \n \"blue\", \n \"green\",\n];\n\n/**** dont change *****/\nlet colour = context.get(\"colour\"); //restore last colour\ncolour = colour == null ? 0 : colour + 1;//inc colour\nif(colour >= colours.length) {\n colour = 0;\n}\nmsg.payload = colours[colour];\ncontext.set(\"colour\", colour); //store last colour\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1970,"y":780,"wires":[["fc3d23dad0eccca5"]]},{"id":"fc3d23dad0eccca5","type":"debug","z":"f542fe9c.732af","name":"","active":false,"tosidebar":true,"console":false,"tostatus":true,"complete":"payload","targetType":"msg","statusVal":"payload","statusType":"auto","x":1970,"y":820,"wires":[]},{"id":"9678bb8c7ae13572","type":"inject","z":"f542fe9c.732af","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"HOLD","payloadType":"str","x":1590,"y":660,"wires":[["743b3f71deec01b4"]]},{"id":"be4e10b6f93b781e","type":"inject","z":"f542fe9c.732af","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"RELEASE","payloadType":"str","x":1600,"y":700,"wires":[["743b3f71deec01b4"]]},{"id":"d91bbe63f60e0448","type":"inject","z":"f542fe9c.732af","name":"250ms","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"0.25","crontab":"","once":false,"onceDelay":0.1,"topic":"","payloadType":"date","x":1600,"y":760,"wires":[["a5d7fc6c3ed6c6d6"]]},{"id":"a5d7fc6c3ed6c6d6","type":"switch","z":"f542fe9c.732af","name":"HOLD yes/no?","property":"HOLD","propertyType":"flow","rules":[{"t":"true"},{"t":"else"}],"checkall":"true","repair":false,"outputs":2,"x":1780,"y":760,"wires":[[],["bcc8bbbf106ec10f"]]},{"id":"743b3f71deec01b4","type":"function","z":"f542fe9c.732af","name":"set flow.HOLD","func":"if(msg.payload === \"HOLD\") {\n flow.set(\"HOLD\", true);\n node.status({fill:\"red\",shape:\"ring\",text:\"HOLD\"});\n} else if (msg.payload === \"RELEASE\") {\n flow.set(\"HOLD\", false);\n node.status({fill:\"green\",shape:\"ring\",text:\"RELEASE\"});\n}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1780,"y":680,"wires":[[]]}]