How to make Blynk.sync ALL after the power loss?

if my ESP8266 is power loss or hotspot loss…setting turn ON timer is reseting then relay OFF. how to solve this problem…? thank you

/**************************************************************
 * timeinput.ino Demonstrate interaction of Time library with
 * Blynk's TimeInput widget.
 * App project setup:
 * RTC widget (no pin required!!!)
 * V1 : Manual/Auto button
 * V2: On-off button
 
 * 
 * Time Input widget on V8 (All days)
 * Button selection for Time Input (All days) on V9
 * 
 * Time Input widget on V10 (Up to you)
 * Button selection for Time Input (Up to you) on V11
 * 
 **************************************************************/
#define BLYNK_DEBUG // Optional, this enables lots of prints

#define BLYNK_PRINT Serial
#include <ESP8266_Lib.h>
#include <BlynkSimpleShieldEsp8266.h>
#include <SimpleTimer.h>
#include <TimeLib.h>

#include <WidgetRTC.h>


#include <DHT.h>
#include <LiquidCrystal.h>
#define DHTPIN 3          // What digital pin we're connected to
#define DHTTYPE DHT11     // DHT 11


LiquidCrystal lcd(13, 8, 7, 6, 5, 4);
const int relay1 =  A0;
const int relay2 =  A1;
const int relay3 =  A5;
int humLowTrigger;
int tempHighTrigger;



char auth[] = "c2d143sssa2f9e";
char ssid[] = "kxxxxadi";
char pass[] = "polytron";
#include <WidgetLED.h>



#define TestLED 9                 // on board LED pin assignment
char Date[16];
char Time[16];

long startsecondswd;            // weekday start time in seconds
long stopsecondswd;             // weekday stop  time in seconds
long nowseconds;                // time now in seconds
bool isFirstConnect = true;

 
int manual=0;
int oldstatus;


int alldays;
//int uptoyou;


#include <SoftwareSerial.h>
SoftwareSerial EspSerial(10, 11); // RX, TX



#include  <TimerOne.h>          // Avaiable from http://www.arduino.cc/playground/Code/Timer1
volatile int i=0;               // Variable to use as a counter volatile as it is in an interrupt
volatile boolean zero_cross=0;  // Boolean to store a "switch" to tell us if we have crossed zero
int AC_pin = 12;                // Output to Opto Triac
int brightness = 128;           // Dimming level (0-128)  0 = on, 128 = 0ff
int freqStep = 75;    // This is the delay-per-brightness step in microseconds.
int val = 0;

const byte degreeSymbol = B11011111; //Simbol Degree

int autodimmer;



#define ESP8266_BAUD 9600
//#define ESP8266_BAUD 115200
SimpleTimer timer;

WidgetRTC rtc;

ESP8266 wifi(&EspSerial);
DHT dht(DHTPIN, DHTTYPE);
void updateHum(int param);
void updateTemp(int param);
//BlynkTimer timer;




BLYNK_WRITE(V5) {
  updateHum(param.asInt());
}
BLYNK_WRITE(V6) {
  updateTemp(param.asInt());
}
void Readdata()
{
  float h = dht.readHumidity();
  float t = dht.readTemperature();
  
  
  

  if (isnan(h) || isnan(t)) {
    lcd.print("ERROR");
    return;
  }
    lcd.setCursor(0, 0); //
    lcd.print("TMP:"); 
    lcd.print((int)t);
    lcd.write(degreeSymbol); // Tulis simbol derajat
    lcd.print("C");
    //menampilkan nilai suhu pada LCD
    lcd.setCursor(9, 0);
    lcd.print("HUM:"); 
    lcd.print((int)h);
    lcd.println("%");

    lcd.setCursor(0, 1);  
    lcd.print("JAM:");                
   
    if(hour() < 10)
    {
    lcd.print("0");
    }
    lcd.print(hour(), DEC); //Print hour
    lcd.print(':');
    if(minute() < 10)
    {
    lcd.print("0");
    }
    lcd.print(minute(), DEC); //Print min


  

    
  Blynk.virtualWrite(V15, h);
  Blynk.virtualWrite(V16, t);
  Blynk.virtualWrite(V25, humLowTrigger);
  Blynk.virtualWrite(V24, tempHighTrigger);

  
  if(h < humLowTrigger) {
      digitalWrite(relay1, LOW); 
      Blynk.virtualWrite(V26, 255);
  } else {
      digitalWrite(relay1, HIGH);
      Blynk.virtualWrite(V26, 0);
  }    
  if(t < tempHighTrigger) {
      digitalWrite(relay2, HIGH); 
      Blynk.virtualWrite(V27, 0);
  } else {
      digitalWrite(relay2, LOW);
      Blynk.virtualWrite(V27, 255);
  }
  
}
void updateHum(int param) {
humLowTrigger = param;

}
void updateTemp(int param){
tempHighTrigger = param;
}



void zero_cross_detect() {    
  zero_cross = true;               
  i=0;
  digitalWrite(AC_pin, LOW);       // turn off TRIAC (and AC)
}                                 

// Turn on the TRIAC at the appropriate time
void dim_check() {                   
  if(zero_cross == true) {              
    if(i>=brightness) {                     
      digitalWrite(AC_pin, HIGH); // turn on light       
      i=0;  // reset time step counter                         
      zero_cross = false; //reset zero cross detection
    } 
    else {
      i++; // increment time step counter                     
    }                                
  }                                  
}           





void setup()
{
  lcd.begin(16, 2);
  dht.begin();


  

  
  pinMode(AC_pin, OUTPUT);                          // Set the Triac pin as output
  attachInterrupt(0, zero_cross_detect, RISING);    // Attach an Interupt to Pin 2 (interupt 0) 
  Timer1.initialize(freqStep);                      // Initialize TimerOne library 
  Timer1.attachInterrupt(dim_check, freqStep);   


  
  Serial.begin(9600);

  EspSerial.begin(ESP8266_BAUD);
  delay(10);  // stabil
  
  Blynk.begin(auth, wifi, ssid, pass);
  Blynk.syncAll();

  timer.setInterval(10000, Readdata);  // stabil


  pinMode(relay1, OUTPUT);
  digitalWrite(relay1, HIGH);
  pinMode(relay2, OUTPUT);
  digitalWrite(relay2, HIGH);
  pinMode(relay3, OUTPUT);
  digitalWrite(relay3, HIGH);

  
  int humLowTrigger = 65;
  int TempHighTrigger = 20;


  pinMode(TestLED, OUTPUT);
  digitalWrite(TestLED, HIGH); // set LED OFF
  int mytimeout = millis() / 1000;
  while (Blynk.connect() == false) { // try to connect to server for 10 seconds
  if((millis() / 1000) > mytimeout + 8){ // try local server if not connected within 9 seconds
  break;
    }
  }
  rtc.begin();
  
  timer.setInterval(30000L, activetoday);  // check every 10 SECONDS if schedule should run today 
  timer.setInterval(20000L, reconnectBlynk);  // check every 30s if still connected to server 


}



BLYNK_CONNECTED() {
   Blynk.syncAll();
    if (isFirstConnect) {
  //  Blynk.syncVirtual(V8); // sync timeinput widget 
    //Blynk.syncVirtual(V9); // sync timeinput widget 
  
    Blynk.notify("TIMER STARTING!!!!");
    rtc.begin();
  
    isFirstConnect = false;
 
  }
}


void activetoday(){        // check if schedule should run today
  if(year() != 1970){

   
   if (alldays==1) { 
    Blynk.syncVirtual(V8); // sync timeinput widget 
 //   Blynk.syncVirtual(V9); // sync timeinput widget  
 
   }
  }
}

void checklastbuttonpressed (){
   
    if(alldays==1)
    { oldstatus=1; }
    if(alldays==0)
    { oldstatus=0; }
 
  
}


void restorelastbuttonpressed (){
   
    if(oldstatus==1){
      alldays=1; 
      Blynk.virtualWrite(V9, 1);}
    
    if(oldstatus==0){ 
    
      alldays=0;
      
    
      Blynk.virtualWrite(V9, 0);
     
      }
 }


BLYNK_WRITE(V3)//      slider brillo
{
 int brillo = param.asInt(); 
 if (autodimmer == 0) // If auto dimmer is OFF then set the dimmer according slider value
 brightness=brillo;

    
}




BLYNK_WRITE(V1)  // Manual/Auto selection
{
  if (param.asInt()==1) {
    manual=1;
    
  

    checklastbuttonpressed ();
  
    alldays=0;
    //uptoyou=0;
   
    Blynk.virtualWrite(V9, 0);
   
    
  } else {
    restorelastbuttonpressed ();
    manual=0;
   
    
 }
}

BLYNK_WRITE(V7)  // Manual/Auto selection
{
  if (param.asInt()==1) {
    digitalWrite(relay3, LOW);
   
  } else {
     digitalWrite(relay3, HIGH);
  
    
 }
}

void resetManual()
{
Blynk.virtualWrite(V1, 0);   //Turn OFF Manual Mode Widget
Blynk.virtualWrite(V2, 0);   //Turn OFF Button Widget Device
digitalWrite(TestLED, HIGH); // set LED OFF
lcd.setCursor(10, 1);
lcd.print("L-OFF");
}


BLYNK_WRITE(V2)  // ON-OFF Manual 
{
    if (param.asInt()==1) {  // boton encendido  
    
   
    
        if (manual==0){  //está en modo automático     
         checklastbuttonpressed ();
         manual=1;
     
         alldays=0;
        
         Blynk.virtualWrite(V1, 1);
        
         Blynk.virtualWrite(V9, 0);
        
         digitalWrite(TestLED, LOW); // set LED ON 
         Blynk.virtualWrite(V2, 1);   //Turn ON Button Widget
         lcd.setCursor(10, 1);
         lcd.print("L--ON");
         
         } else {             //está en modo manual 
       
         alldays=0;
         
         Blynk.virtualWrite(V1, 1);
        
         Blynk.virtualWrite(V9, 0);
        
         digitalWrite(TestLED, LOW); // set LED ON 
         Blynk.virtualWrite(V2, 1);   //Turn ON Button Widget
         lcd.setCursor(10, 1);
         lcd.print("L--ON");
         }                           
         }else {
       

         if (manual==0){      //modo automático
         checklastbuttonpressed ();
         manual=1;
       
         alldays=0;
     
         Blynk.virtualWrite(V1, 1);
 
         Blynk.virtualWrite(V9, 0);
       
         digitalWrite(TestLED, HIGH); // set LED OFF
         Blynk.virtualWrite(V2, 0);   //Turn OFF Button Widget
          lcd.setCursor(10, 1);
          lcd.print("L-OFF");
         } else {  
         
         alldays=0;
       
         Blynk.virtualWrite(V1, 1);
         Blynk.virtualWrite(V9, 0);
        
         digitalWrite(TestLED, HIGH); // set LED OFF
         Blynk.virtualWrite(V2, 0);   //Turn OFF Button Widget
         lcd.setCursor(10, 1);
         lcd.print("L-OFF");
         }  
         }
}


BLYNK_WRITE(V9)  // All days selected
{
  if (param.asInt()==1) {

    timer.setTimeout(50, resetManual);
    timer.setTimeout(50, checklastbuttonpressed);
    alldays=1;
 
    
  //  Blynk.virtualWrite(V11, 0);
  } else {
    alldays=0;
  }
}




BLYNK_WRITE(V8)//All days
{  
   if (alldays==1) {   

       
    
    TimeInputParam t(param);
    int dayadjustment = -1;  
    if(weekday() == 1){
      dayadjustment =  6; // needed for Sunday, Time library is day 1 and Blynk is day 7
     }
    if(t.isWeekdaySelected(weekday() + dayadjustment)){ //Time library starts week on Sunday, Blynk on Monday   
    for (int i = 1; i <= 7; i++) {  // Process weekdays (1. Mon, 2. Tue, 3. Wed, ...)
    if (t.isWeekdaySelected(i)) {
        }
      } 
   // nowseconds = ((hour() * 3600) + (minute() * 60) + second());

    nowseconds = long(hour() * 3600L) + long(minute() * 60L) + long (second());
    
    
    startsecondswd = (t.getStartHour() * 3600) + (t.getStartMinute() * 60);
    stopsecondswd = (t.getStopHour() * 3600) + (t.getStopMinute() * 60);
    //Serial.println(startsecondswd);  // used for debugging
    if(startsecondswd ==  stopsecondswd) {  
        digitalWrite(TestLED, HIGH); // set LED OFF
        Blynk.virtualWrite(V2, 0);
        lcd.setCursor(10, 1);
        lcd.print("L-OFF");
        
    }
    if(startsecondswd < stopsecondswd){    // 90s on 60s timer ensures 1 trigger command is sent
         if ((nowseconds >= startsecondswd) && (nowseconds < stopsecondswd) ){
          digitalWrite(TestLED, LOW); // set LED On
          Blynk.virtualWrite(V2, 1);
          lcd.setCursor(10, 1);
          lcd.print("L--ON");
         }
          else if (nowseconds >= stopsecondswd){
          digitalWrite(TestLED, HIGH); // set LED On
          Blynk.virtualWrite(V2, 0);
          lcd.setCursor(10, 1);
          lcd.print("L-OFF");
          
          }
          else  {
          digitalWrite(TestLED, HIGH); // set LED OFF
          Blynk.virtualWrite(V2, 0);
          lcd.setCursor(10, 1);
          lcd.print("L-OFF");
          }
    }


    if(startsecondswd > stopsecondswd){    // 90s on 60s timer ensures 1 trigger command is sent
         if ((nowseconds >= startsecondswd) && (nowseconds <= 82800)){
          digitalWrite(TestLED, LOW); // set LED On
          Blynk.virtualWrite(V2, 1);
          lcd.setCursor(10, 1);
          lcd.print("L--ON");
         }
          else if (nowseconds < stopsecondswd){
          digitalWrite(TestLED, LOW); // set LED On
          Blynk.virtualWrite(V2, 1);
          lcd.setCursor(10, 1);
          lcd.print("L--ON");
          }
          else if (nowseconds >= stopsecondswd && nowseconds < startsecondswd ){
          digitalWrite(TestLED, HIGH); // set LED OFF
          Blynk.virtualWrite(V2, 0);
          lcd.setCursor(10, 1);
          lcd.print("L-OFF");
          
          
          
        
     
         
       }          
    }
  }
  else{
   
    // nothing to do today, check again in 30 SECONDS time    
  }
  //terminal.println();
 }
}
  

void reconnectBlynk() {
  if (!Blynk.connected()) {
    if(Blynk.connect()) {
     BLYNK_LOG("Reconnected");
    } else {
      BLYNK_LOG("Not reconnected");
    }
  }
}

void loop()
{
  if (Blynk.connected()) {
    Blynk.run();
  }
  timer.run();
  // yield();
}```