Nice one. I would quickly solve it with a 2nd queue, however it get's messy if you go down to milliseconds. Maybe we need @Colin to tell us that his requirements are met at some point
The top q-gate handles the first message while the subsequent msg each 5s are handled by the bottom q-gate:
[{"id":"28aa7c98653b5ade","type":"smxstate","z":"1ca0617cfc39c447","name":"","xstateDefinition":"// Available variables/objects/functions:\n// xstate\n// - .Machine\n// - .interpret\n// - .assign\n// - .send\n// - .sendParent\n// - .spawn\n// - .raise\n// - .actions\n//\n// Common\n// - setInterval, setTimeout, clearInterval, clearTimeout\n// - node.send, node.warn, node.log, node.error\n// - context.get, context.set\n// - flow.get, flow.set\n// - env.get\n// - util\n\nconst { assign } = xstate;\n\n// First define names guards, actions, ...\n\n/**\n * Guards\n */\nconst isCounterZero = (context, event) => {\n return context.counter == 0;\n};\n\n/**\n * Actions\n */\nconst incrementCounter = assign({\n counter: (context, event) => 1\n});\n\nconst zeroCounter = assign({\n counter: (context, event) => 0\n});\n\n\nconst sendTrigger1st = assign({\n counter: (context, event) => {\n // Can send log messages via\n // - node.log\n // - node.warn\n // - node.error\n //node.warn(\"RESET\");\n\n // Can send messages to the second outport\n // Specify an array to send multiple messages\n // at once\n // - node.send(msg)\n node.send({ topic: \"control\", payload: \"trigger\", queue: \"1\" });\n\n return 0;\n }\n});\n\nconst sendTrigger = assign({\n counter: (context, event) => {\n node.send({ topic: \"control\", payload: \"trigger\", queue: \"n\" });\n return 0;\n }\n});\n\nconst sendReset = (context, event) => {\n node.send({ topic: \"control\", payload: \"reset\", queue: \"1\" });\n};\n\n/*const sendReset = assign({\n counter: (context, event) => {\n node.send({ topic: \"control\", payload: \"reset\", queue: \"1\" });\n return 0;\n }\n});*/\n\n/***************************\n * Main machine definition * \n ***************************/\nreturn {\n machine: {\n predictableActionArguments: true,\n context: {\n counter: 0\n },\n initial: 'idle',\n states: {\n idle: {\n on: {\n incoming: { target: 'trigger1st' }\n }\n },\n\n trigger1st: {\n entry: ['sendTrigger1st'], \n on: {\n incoming: { actions: 'incrementCounter' },\n '': { target: 'wait' }\n }\n },\n\n trigger: {\n entry: ['sendTrigger', 'sendReset'], \n on: {\n incoming: { actions: 'incrementCounter' },\n '': { target: 'wait' }\n }\n },\n\n wait: {\n on: {\n incoming: { actions: 'incrementCounter' }\n },\n after: {\n 5000: [{ target: 'last', cond: 'isCounterZero' },\n { target: 'trigger' }]\n }\n },\n \n last: {\n entry: ['sendTrigger', 'sendReset'],\n on: {\n incoming: { actions: 'incrementCounter' },\n '': [{ target: 'idle', cond: 'isCounterZero' },\n { target: 'wait' }]\n }\n }\n }\n },\n // Configuration containing guards, actions, activities, ...\n // see above\n config: {\n guards: { isCounterZero },\n actions: { incrementCounter, sendTrigger1st, sendTrigger, sendReset, zeroCounter },\n activities: {}\n },\n // Define listeners (can be an array of functions)\n // Functions get called on every state/context update\n listeners: (data) => {\n //node.warn(data.state + \":\" + data.context.counter);\n }\n};","noerr":0,"x":1040,"y":120,"wires":[[],["0b8419d044eab106"]]},{"id":"9b7c97ab93743ea8","type":"debug","z":"1ca0617cfc39c447","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1190,"y":240,"wires":[]},{"id":"2515695b9cfde286","type":"q-gate","z":"1ca0617cfc39c447","name":"","controlTopic":"control","defaultState":"queueing","openCmd":"open","closeCmd":"close","toggleCmd":"toggle","queueCmd":"queue","defaultCmd":"default","triggerCmd":"trigger","flushCmd":"flush","resetCmd":"reset","peekCmd":"peek","dropCmd":"drop","statusCmd":"status","maxQueueLength":"1","keepNewest":true,"qToggle":false,"persist":false,"storeName":"memory","x":1010,"y":280,"wires":[["9b7c97ab93743ea8"]]},{"id":"47f5f8d04e6c4a34","type":"change","z":"1ca0617cfc39c447","name":"topic = incoming","rules":[{"t":"set","p":"topic","pt":"msg","to":"incoming","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":830,"y":120,"wires":[["28aa7c98653b5ade"]]},{"id":"5ef19fcc9a17e6a5","type":"inject","z":"1ca0617cfc39c447","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"A","payloadType":"str","x":410,"y":60,"wires":[["afb3d663aed398f1","39c6a2b22ec03ff5","50b73ee76d6bb8b3","ccc628e5b6d03651","56817045834ff8df"]]},{"id":"50b73ee76d6bb8b3","type":"trigger","z":"1ca0617cfc39c447","name":"4999 ms: D","op1":"","op2":"D","op1type":"nul","op2type":"str","duration":"4999","extend":false,"overrideDelay":false,"units":"ms","reset":"","bytopic":"all","topic":"topic","outputs":1,"x":430,"y":180,"wires":[["afb3d663aed398f1"]]},{"id":"ccc628e5b6d03651","type":"trigger","z":"1ca0617cfc39c447","name":"5010 ms: E","op1":"","op2":"E","op1type":"nul","op2type":"str","duration":"5010","extend":false,"overrideDelay":false,"units":"ms","reset":"","bytopic":"all","topic":"topic","outputs":1,"x":430,"y":220,"wires":[["afb3d663aed398f1"]]},{"id":"39c6a2b22ec03ff5","type":"trigger","z":"1ca0617cfc39c447","name":"1 s: C","op1":"","op2":"C","op1type":"nul","op2type":"str","duration":"1","extend":false,"overrideDelay":false,"units":"s","reset":"","bytopic":"all","topic":"topic","outputs":1,"x":410,"y":140,"wires":[["afb3d663aed398f1"]]},{"id":"a6c4cdaf8b7d762e","type":"inject","z":"1ca0617cfc39c447","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":440,"y":380,"wires":[["dbdc380df1758faa","a9b3a54c09892c40","197b84696c4e2168"]]},{"id":"dbdc380df1758faa","type":"trigger","z":"1ca0617cfc39c447","name":"1s timestamp","op1":"","op2":"","op1type":"nul","op2type":"date","duration":"1","extend":false,"overrideDelay":false,"units":"s","reset":"","bytopic":"all","topic":"topic","outputs":1,"x":430,"y":420,"wires":[["197b84696c4e2168"]]},{"id":"a9b3a54c09892c40","type":"trigger","z":"1ca0617cfc39c447","name":"7s timestamp","op1":"","op2":"","op1type":"nul","op2type":"date","duration":"7","extend":false,"overrideDelay":false,"units":"s","reset":"","bytopic":"all","topic":"topic","outputs":1,"x":430,"y":340,"wires":[["197b84696c4e2168"]]},{"id":"d6a95012f5720d8a","type":"q-gate","z":"1ca0617cfc39c447","name":"","controlTopic":"control","defaultState":"queueing","openCmd":"open","closeCmd":"close","toggleCmd":"toggle","queueCmd":"queue","defaultCmd":"default","triggerCmd":"trigger","flushCmd":"flush","resetCmd":"reset","peekCmd":"peek","dropCmd":"drop","statusCmd":"status","maxQueueLength":"0","keepNewest":true,"qToggle":false,"persist":false,"storeName":"memory","x":1010,"y":220,"wires":[["9b7c97ab93743ea8"]]},{"id":"56817045834ff8df","type":"trigger","z":"1ca0617cfc39c447","name":"1 ms: B","op1":"","op2":"B","op1type":"nul","op2type":"str","duration":"1","extend":false,"overrideDelay":false,"units":"ms","reset":"","bytopic":"all","topic":"topic","outputs":1,"x":420,"y":100,"wires":[["afb3d663aed398f1"]]},{"id":"0b8419d044eab106","type":"switch","z":"1ca0617cfc39c447","name":"switch queue","property":"queue","propertyType":"msg","rules":[{"t":"eq","v":"1","vt":"str"},{"t":"eq","v":"n","vt":"str"}],"checkall":"false","repair":false,"outputs":2,"x":770,"y":260,"wires":[["d6a95012f5720d8a"],["2515695b9cfde286"]]},{"id":"afb3d663aed398f1","type":"junction","z":"1ca0617cfc39c447","x":660,"y":140,"wires":[["2515695b9cfde286","47f5f8d04e6c4a34","d6a95012f5720d8a"]]},{"id":"197b84696c4e2168","type":"junction","z":"1ca0617cfc39c447","x":600,"y":360,"wires":[["afb3d663aed398f1"]]}]