This is best solved wih dynamic schedules.
there are examples built in (CTRL+I --> examples --> cron-plus)
Here is an example a bit more tailored to your requirement...
[{"id":"ac468e85.8f167","type":"cronplus","z":"553814a2.1248ec","name":"","outputField":"payload","timeZone":"","persistDynamic":true,"commandResponseMsgOutput":"output2","outputs":2,"options":[],"x":940,"y":1900,"wires":[["501f4aee.05dff4"],["3d1e22c7.b5752e"]]},{"id":"501f4aee.05dff4","type":"debug","z":"553814a2.1248ec","name":"timed events","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1150,"y":1860,"wires":[]},{"id":"ff58a37b.bda06","type":"inject","z":"553814a2.1248ec","name":"set offset -10","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"-10","payloadType":"num","x":510,"y":1860,"wires":[["c971aa62.795af8"]]},{"id":"c971aa62.795af8","type":"function","z":"553814a2.1248ec","name":"update sunrise","func":"var sunriseCmd = { \n \"command\": \"add\",\n \"topic\": \"sunrise\", \n\n \"name\": \"schedule1\", \n \"payloadType\": \"default\", \n \"payload\": \"payload\", \n \"limit\": null, \n \"expressionType\": \"solar\", \n \"solarType\": \"selected\", \n \"solarEvents\": \"sunrise\", \n \"location\": \"54.99906669127324 -1.4171075820922852\", \n \"offset\": msg.payload \n}\n\n\nmsg.payload = sunriseCmd;\nreturn msg;\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":740,"y":1900,"wires":[["ac468e85.8f167"]]},{"id":"6577857a.76064c","type":"function","z":"553814a2.1248ec","name":"update sunset","func":"\nvar sunsetCmd = {\n \"command\": \"add\",\n \"topic\": \"sunset\",\n \"name\": \"schedule2\",\n \"payloadType\": \"default\",\n \"payload\": \"payload\",\n \"limit\": null,\n \"expressionType\": \"solar\",\n \"solarType\": \"selected\",\n \"solarEvents\": \"sunset\",\n \"location\": \"54.99906669127324 -1.4171075820922852\",\n \"offset\": msg.payload\n}\n\n\nmsg.payload = sunsetCmd;\nreturn msg;\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":740,"y":1940,"wires":[["ac468e85.8f167"]]},{"id":"3f03e799.ba88f8","type":"inject","z":"553814a2.1248ec","name":"set offset +30","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"30","payloadType":"num","x":510,"y":1900,"wires":[["c971aa62.795af8"]]},{"id":"162ae172.db6f5f","type":"inject","z":"553814a2.1248ec","name":"set offset +30","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"30","payloadType":"num","x":510,"y":1980,"wires":[["6577857a.76064c"]]},{"id":"3be8cfe3.d4a0a","type":"inject","z":"553814a2.1248ec","name":"set offset -10","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"-10","payloadType":"num","x":510,"y":1940,"wires":[["6577857a.76064c"]]},{"id":"3d1e22c7.b5752e","type":"debug","z":"553814a2.1248ec","name":"status result","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1150,"y":1900,"wires":[]},{"id":"4ea6d77e.04d418","type":"inject","z":"553814a2.1248ec","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"status-all","payload":"","payloadType":"str","x":940,"y":1840,"wires":[["ac468e85.8f167"]]}]
the inject payload value is what is used for the offset. Provide this value from wherever you need (i.e. dashboard input).
You will need to set your coordinates in the functions.