Does this look right?
[{"id":"f0270c2556184277","type":"function","z":"235f16ee6e459f2c","name":"Block before 06:31","func":"let now = new Date()\nlet hour = now.getHours()\nlet minute = now.getMinutes()\n\nif (hour > 6 || (hour === 6 && minute >= 31)) {\n return msg; // After 06:31\n} else {\n return null; // Before 06:31 - block message\n}\n","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":460,"y":5710,"wires":[[]]},{"id":"2a7816dfeea3de4f","type":"cronplus","z":"235f16ee6e459f2c","name":"Sunrise","outputField":"payload","timeZone":"","persistDynamic":false,"commandResponseMsgOutput":"output1","outputs":1,"options":[{"name":"schedule1","topic":"topic1","payloadType":"str","payload":"SUNRISE","expressionType":"solar","expression":"0 * * * * * *","location":"-33.880541739956485 151.1226511001587","offset":"0","solarType":"selected","solarEvents":"sunrise"}],"x":270,"y":5710,"wires":[["f0270c2556184277"]]}]
(Sorry, not sure why the flow isn't shown)
Ok, that kinda didn't work to the full requirements.
This one.....
[{"id":"2a7816dfeea3de4f","type":"cronplus","z":"235f16ee6e459f2c","name":"Sunrise","outputField":"payload","timeZone":"","persistDynamic":false,"commandResponseMsgOutput":"output1","outputs":1,"options":[{"name":"schedule1","topic":"topic1","payloadType":"str","payload":"SUNRISE","expressionType":"solar","expression":"0 * * * * * *","location":"-33.880541739956485 151.1226511001587","offset":"0","solarType":"selected","solarEvents":"sunrise"},{"name":"schedule2","topic":"topic2","payloadType":"str","payload":"NOW","expressionType":"cron","expression":"0 31 6 * * * *","location":"","offset":"0","solarType":"all","solarEvents":"sunrise,sunset"}],"x":270,"y":5710,"wires":[["e94a73c29888fba3"]]},{"id":"e94a73c29888fba3","type":"function","z":"235f16ee6e459f2c","name":"Block before 06:31","func":"let now = new Date()\nlet hour = now.getHours()\nlet minute = now.getMinutes()\n\nlet stored = context.get(\"stored_msg\")\n\n// Check if it's the special \"NOW\" message\nif (msg.payload === \"NOW\") {\n if (stored) {\n context.set(\"stored_msg\", null)\n return stored // release stored message\n } else {\n return null // nothing to release\n }\n}\n\n// Otherwise, it's a normal incoming message\nif (hour > 6 || (hour === 6 && minute >= 31)) {\n return msg // already past 06:31 — send immediately\n} else {\n context.set(\"stored_msg\", msg) // store it\n return null // suppress for now\n}\n","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":480,"y":5710,"wires":[["0add96b239088263","07eb6cb82143660f"]]}]