Why does this need to happen at the top of the minute?
Here is a flow which does that.
External node required: node-red-contrib-cron-plus
This node allows better control of when things happen.
[{"id":"7fa25746.3c6ab8","type":"cronplus","z":"68e3655f.b606b4","name":"","outputField":"payload","timeZone":"","persistDynamic":false,"commandResponseMsgOutput":"output1","outputs":1,"options":[{"name":"schedule1","topic":"schedule1","payloadType":"default","payload":"","expressionType":"cron","expression":"0 * * * * *","location":"","offset":"0","solarType":"all","solarEvents":"sunrise,sunset"}],"x":250,"y":1770,"wires":[["2192c12a.c94d4e"]]},{"id":"2192c12a.c94d4e","type":"function","z":"68e3655f.b606b4","name":"Top of the minute","func":"if (msg.topic == \"GATE\")\n{\n context.set(\"ALLOW\",1);\n node.status({fill: \"green\",text:\"ONE\"});\n return;\n}\nif (context.get(\"ALLOW\") == 1)\n{\n //\n context.set(\"ALLOW\",0);\n node.status({});\n return msg;\n}","outputs":1,"noerr":0,"x":440,"y":1740,"wires":[["3d931b76.dd0084"]]},{"id":"3d931b76.dd0084","type":"debug","z":"68e3655f.b606b4","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":660,"y":1740,"wires":[]},{"id":"59d03342.87f37c","type":"inject","z":"68e3655f.b606b4","name":"Activate","topic":"GATE","payload":"open","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":240,"y":1710,"wires":[["2192c12a.c94d4e"]]}]