I’d say that this sketch isn’t a very good starting point for the type of functionality you are looking for.
Blynk doesn’t like a void loop that is cluttered like this, and checking the millis() time elapsed to see if it’s time to execute a chunk of code isn’t a great way to work.
You’d be far better moving these chunks of code into functions and calling them using BlynkTimer as described here…
To obtain inputs from the widgets attached to virtual datastreams in your Blynk dashboard you need to use BLYNK_WRITE(Vpin) callbacks, which are triggered automatically when a datastream value changes. More on that here…
With Notifications you need to be careful. Notifications are triggered by Events, and there’s a limit of 100 events per 24 hour period.
Here’s some info about how Events/Notifications work in Blynk IoT and how to inadvertently avoid maxing-out your 24 hour allowance…