Your code structure is all wrong for deep sleep.
You shouldn’t be using timers, it should all be a “run once” operation either all in your void setup with an empty void loop, in a void loop that will run once and then go to sleep.
When you do it this way, you need to ensure that there is a Blynk.run() before sleeping so that your virtualWrites are executed.
Al;so, using Blynk.begin isn’t a great solution for a battery operated device, as it’s a blocking function and the code won’t progress beyond that point if the device can’t connect to either WiFi or Blynk. This means that your device could stay awake until the battery goes flat.
It’s also better (quicker) to re-connect to your router using a static IP address rather than one assigned by DHCP. When you do tests using short sleep times, your router will hold the assigned IP address in its routing table, but this will be flushed after as little as 20 seconds (depending on your router) and the next time it connects it will have to go through the DHCP negotiation handshake process again - which is slower that connecting with a static IP.
Take a look at @christophebl’s Beehive Connected project for more info…
Pete.