Use the button trigger to step you through the states in whatever machine you are using. Personally I would just use a Function node, I think it is easier than using a state machine node.
const channels = [6, 4, 3]
let currentIndex = context.get("currentIndex") || 0
currentIndex = currentIndex + 1
if (currentIndex >= channels.length) {
currentIndex = 0
}
msg.payload = channels[currentIndex]
node.status( `Channel ${msg.payload}` )
context.set("currentIndex", currentIndex)
return msg;
[{"id":"804aa6bce11220c3","type":"inject","z":"bdd7be38.d3b55","name":"Button simulator","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":180,"y":3280,"wires":[["a1d8ae260177640c"]]},{"id":"a1d8ae260177640c","type":"function","z":"bdd7be38.d3b55","name":"Cycle channels","func":"const channels = [6, 4, 3]\nlet currentIndex = context.get(\"currentIndex\") || 0\ncurrentIndex = currentIndex + 1\nif (currentIndex >= channels.length) {\n currentIndex = 0\n}\nmsg.payload = channels[currentIndex]\nnode.status( `Channel ${msg.payload}` )\ncontext.set(\"currentIndex\", currentIndex)\nreturn msg;","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":420,"y":3280,"wires":[["8b1f2296c8b345b7"]]},{"id":"8b1f2296c8b345b7","type":"debug","z":"bdd7be38.d3b55","name":"debug 106","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":630,"y":3280,"wires":[]}]
What did you need a Switch node for?