This is the really simple timer I use currently.
[{"id":"017941e6e4acb977","type":"tab","label":"Flow 1","disabled":false,"info":"","env":[]},{"id":"6c277215883bd63e","type":"inject","z":"017941e6e4acb977","name":"Inject time","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"60","crontab":"","once":false,"onceDelay":"","topic":"CurrentTime","payload":"","payloadType":"date","x":170,"y":320,"wires":[["b8eb73b41a3845a7"]]},{"id":"03270cdc83746d27","type":"switch","z":"017941e6e4acb977","name":"","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"start_charge_time","vt":"global"},{"t":"eq","v":"stop_charge_time","vt":"global"}],"checkall":"true","repair":false,"outputs":2,"x":770,"y":320,"wires":[["56102caa80eb80ac"],["39c2536e5a6bb61e"]]},{"id":"b8eb73b41a3845a7","type":"moment","z":"017941e6e4acb977","name":"","topic":"","input":"","inputType":"msg","inTz":"Europe/Copenhagen","adjAmount":0,"adjType":"days","adjDir":"add","format":"HH","locale":"C","output":"","outputType":"msg","outTz":"Europe/Copenhagen","x":400,"y":320,"wires":[["e3599d1f69c91b7a"]]},{"id":"2865c404c00c0a93","type":"server-state-changed","z":"017941e6e4acb977","name":"læs starttid fra ui","server":"785585e5.21e4ec","version":5,"outputs":1,"exposeAsEntityConfig":"","entityId":"input_number.charge_start_time","entityIdType":"exact","outputInitially":true,"stateType":"str","ifState":"","ifStateType":"str","ifStateOperator":"is","outputOnlyOnStateChange":true,"for":0,"forType":"num","forUnits":"minutes","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"}],"x":160,"y":140,"wires":[["3274f4c6c9fa86c5"]]},{"id":"82ef89b608191770","type":"server-state-changed","z":"017941e6e4acb977","name":"læs sluttid fra ui","server":"785585e5.21e4ec","version":5,"outputs":1,"exposeAsEntityConfig":"","entityId":"input_number.charge_end_time","entityIdType":"exact","outputInitially":true,"stateType":"str","ifState":"","ifStateType":"str","ifStateOperator":"is","outputOnlyOnStateChange":true,"for":0,"forType":"num","forUnits":"minutes","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"}],"x":160,"y":200,"wires":[["bdaa00f627d5ddd5"]]},{"id":"0398f0184dc91b67","type":"change","z":"017941e6e4acb977","name":"","rules":[{"t":"set","p":"stop_charge_time","pt":"global","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":660,"y":200,"wires":[[]]},{"id":"2305f79616f76063","type":"change","z":"017941e6e4acb977","name":"","rules":[{"t":"set","p":"start_charge_time","pt":"global","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":660,"y":140,"wires":[[]]},{"id":"e3599d1f69c91b7a","type":"api-current-state","z":"017941e6e4acb977","name":"Is timer on?","server":"785585e5.21e4ec","version":3,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","entity_id":"input_boolean.charge_timer_on_off","state_type":"str","blockInputOverrides":false,"outputProperties":[],"for":0,"forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":610,"y":320,"wires":[["03270cdc83746d27"],[]]},{"id":"3274f4c6c9fa86c5","type":"function","z":"017941e6e4acb977","name":"afrunding","func":"msg.payload = msg.payload >> 0\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":400,"y":140,"wires":[["2305f79616f76063"]]},{"id":"bdaa00f627d5ddd5","type":"function","z":"017941e6e4acb977","name":"afrunding","func":"msg.payload = msg.payload >> 0\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":400,"y":200,"wires":[["0398f0184dc91b67"]]},{"id":"3b92895d532806f6","type":"comment","z":"017941e6e4acb977","name":"Timer - read from UI using helpers","info":"","x":220,"y":100,"wires":[]},{"id":"8fb6f6d2da060b27","type":"comment","z":"017941e6e4acb977","name":"Timer automation - checks every minut","info":"","x":230,"y":280,"wires":[]},{"id":"a315f57348ad3500","type":"comment","z":"017941e6e4acb977","name":"Switch - manual and called from timer","info":"","x":230,"y":440,"wires":[]},{"id":"de9731c03cabb3ca","type":"comment","z":"017941e6e4acb977","name":"Calls Charge_Battery in next line","info":"","x":1030,"y":260,"wires":[]},{"id":"6ec0e7b31aa6590c","type":"api-call-service","z":"017941e6e4acb977","name":"Turn off charge timer after run","server":"785585e5.21e4ec","version":5,"debugenabled":false,"domain":"input_boolean","service":"turn_off","areaId":[],"deviceId":[],"entityId":["input_boolean.charge_timer_on_off"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1690,"y":360,"wires":[[]]},{"id":"3c709954a0ffe5be","type":"api-call-service","z":"017941e6e4acb977","name":"Sluk vandvarmer automation","server":"785585e5.21e4ec","version":5,"debugenabled":false,"domain":"switch","service":"turn_off","areaId":[],"deviceId":[],"entityId":["switch.vandvarmer_automation"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1680,"y":300,"wires":[[]]},{"id":"d3e749420e4723e6","type":"comment","z":"017941e6e4acb977","name":"Vandvarmer auto sluk når batteri lades fra nettet, ellers tænder den automatisk når batteriet er opladt.","info":"","x":1730,"y":240,"wires":[]},{"id":"f54956c8d4bc5e5f","type":"comment","z":"017941e6e4acb977","name":"Timer slukkes ikke mens der er høj nettarrif","info":"","x":1660,"y":400,"wires":[]},{"id":"97f8432db363b9b5","type":"api-call-service","z":"017941e6e4acb977","name":"","server":"785585e5.21e4ec","version":5,"debugenabled":false,"domain":"select","service":"select_next","areaId":[],"deviceId":[],"entityId":["select.growatt_battery_first_time_1"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1390,"y":320,"wires":[["6ec0e7b31aa6590c"]]},{"id":"56102caa80eb80ac","type":"api-current-state","z":"017941e6e4acb977","name":"","server":"785585e5.21e4ec","version":3,"outputs":2,"halt_if":"Disabled","halt_if_type":"str","halt_if_compare":"is","entity_id":"select.growatt_battery_first_time_1","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":1070,"y":300,"wires":[["97f8432db363b9b5"],[]]},{"id":"39c2536e5a6bb61e","type":"api-current-state","z":"017941e6e4acb977","name":"","server":"785585e5.21e4ec","version":3,"outputs":2,"halt_if":"Enabled","halt_if_type":"str","halt_if_compare":"is","entity_id":"select.growatt_battery_first_time_1","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":1070,"y":360,"wires":[["97f8432db363b9b5"],[]]},{"id":"785585e5.21e4ec","type":"server","name":"Home Assistant","version":5,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":false,"cacheJson":true,"heartbeat":false,"heartbeatInterval":30,"areaSelector":"friendlyName","deviceSelector":"friendlyName","entitySelector":"friendlyName","statusSeparator":"at: ","statusYear":"hidden","statusMonth":"short","statusDay":"numeric","statusHourCycle":"h23","statusTimeFormat":"h:m","enableGlobalContextStore":true}]
It uses two helpers to get time from the UI and start/stop charging.
In the fall I need to do something better, but price is usually lowest from 15-17 and always highest from 17-21. So if needed, I charge from 15-17.
UI looks like this: