Besides what @PeteKnight said, the real issue here is this code in the loop preventing the auto-reconnection to Blynk
if (Blynk.connected())
{
Blynk.run();
}
Use the standard loop() to enable auto-reconnecting
Blynk.run();
timer.run();
Why?
Blynk.run() has some internal functions to manage the reconnection when WiFi and/or Blynk is lost.
Using the original code, if you have some issue with WiFi/Blynk, then Blynk.connected() is false, and Blynk.run() is disabled.
I now see you have timer to CheckConnection. It’s better, but have to wait some time (15s).
You can check and try
where you can specify Multi WiFi / Servers and better auto-reconnect