BLYNK
HOME       📲 GETTING STARTED       📗 DOCS       ❓HELP CENTER       👉 SKETCH BUILDER

The abnormal behaviour of Blink

Hello. How can the application work on the Blink server if the ESP82266 on which the code is flashed is physically disabled? The Blink.notify () code is flashed on the physical device. And it works out in the app on the phone. But the device is physically turned off. It’s gone! Then even more fun. There is a separate device. It is regularly overloaded at about the same time at night and in the morning. This does not happen during the day. At least there is a pattern. I changed my keys. The division - by-0 type code is excluded. The most unpleasant thing is that this device controls the equipment. It turns off and on, of course. It’s just dangerous. There is a suspicion that this is Blink. I was experimenting with Apps a while ago. Are there any old My Devices left? If it is, how do I get rid of it? Re-create the device?
Здравствуйте. Как может работать приложение на сервере Blynk если ESP82266 на котором прошит код выключено физически? На физическом устройстве прошит код Blynk.notify(). И он отрабатывает в приложении на телефоне. Но устройство физически выключено. Его нет! Дальше еще веселее. Есть отдельное устройство. Оно регулярно перегружается примерно в одно и то же время ночью и утром. Днем этого не происходит. По крайней мере наблюдается закономерность. Ключи поменял. Код типа деления на 0 исключил. Самое неприятное что это устройство управляет оборудованием. Оно конечно же выключается и включается. Это просто опасно. Есть подозрение что это Blynk. Я некоторое время назад эксперементировал с Apps. Остались старые My Devices? Если это есть как от этого избавиться? Заново создать устройства?

Why does Blink lose connectivity? This also happens in an app without WiFi manager.

[3295227] Connecting to blynk-cloud.com:80
[3295388] Ready (ping: 74ms).
[3890348] Connecting to blynk-cloud.com:80
Lost connection
[3890528] 
    ___  __          __
   / _ )/ /_ _____  / /__
  / _  / / // / _ \/  '_/
 /____/_/\_, /_//_/_/\_\
        /___/ v0.6.1 on ESP8266

[3890592] Connecting to blynk-cloud.com:80
[3890714] Ready (ping: 60ms).
Reconnected
[5555019] Heartbeat timeout
[5555696] Connecting to blynk-cloud.com:80
[5555840] Ready (ping: 70ms).

void setup() {
...
AsyncWiFiManagerParameter custom_blynk_token("blynk", "blynk token", blynk_token, 34);
  AsyncWiFiManager wifiManager(&sslserver, &dns);
  wifiManager.addParameter(&custom_blynk_token);
  wifiManager.autoConnect("ClimaticPost", "12345678");
  if(_flag == 0) {
    strcpy(blynk_token, custom_blynk_token.getValue());
    _key = blynk_token; //Serial.println(_key);
  }
  Blynk.config(_key.c_str());
  bool result = Blynk.connect();
...
}

void loop() {
if(_flag == 1) {
     Blynk.run();
     timer.run(); // Initiates BlynkTimer
     //ArduinoOTA.handle();
     setvar();
  }
}

.....
 void reconnectBlynk() {
  if (!Blynk.connected()) {
    Serial.println("Lost connection");
    Blynk.config(_key.c_str());
    if(Blynk.connect()) Serial.println("Reconnected");
    else 
      Serial.println("Not reconnected");
  }
}

@alfed please edit your post, using the pencil icon at the bottom, and add triple backticks at the beginning and end of your code so that it displays correctly.
Triple backticks look like this:
```

The characters you’ve used are not the correct ones. Please copy/paste the ones I’ve provided if necessary.

I’d also recommend that you post your full sketch, as we need to see what is happening in the setvar function and in any other functions that this may call.

Pete.

It doesn’t load.Big. What should I do? It also represents a trade secret. I’m not sorry, though. This is a prototype. Maybe by mail?

I would be honored if you become a co-author

You’ll have to figure it out by yourself then.

Pete.

 
void buildXML()
{
     XML = "";
     XML += "<inputs>";
      XML += "<Flag_out>";
        XML += String(Flag_out);
      XML += "</Flag_out>";
      XML += "<localIP>";
        XML += WiFi.localIP().toString(); 
      XML += "</localIP>";
      XML += "<_ssid>";
        XML += String(_ssid);
      XML += "</_ssid>";
      XML += "<_password>";
        //XML += String(_password);
        XML += "Reserved";
      XML += "</_password>";
      XML += "<_key>";
        //XML += String(_key);
        XML += "Reserved";
      XML += "</_key>";
      XML += "<min_T>";
        XML += String(min_T);
      XML += "</min_T>";
      XML += "<max_T>";
        XML += String(max_T);
      XML += "</max_T>";
      XML += "<min_H>";
        XML += String(min_H);
      XML += "</min_H>";
      XML += "<max_H>";
        XML += String(max_H);
      XML += "</max_H>";
      XML += "<min_P>";
        XML += String(min_P);
      XML += "</min_P>";
      XML += "<max_P>";
        XML += String(max_P);
      XML += "</max_P>";
      XML += "<min_L>";
        XML += String(min_L);
      XML += "</min_L>";
      XML += "<max_L>";
        XML += String(max_L);
      XML += "</max_L>";
      XML += "<Night>";
        XML += String(Night);
      XML += "</Night>";
      XML += "<min_HG>";
        XML += String(min_HG);
      XML += "</min_HG>";
      XML += "<max_HG>";
        XML += String(max_HG);
      XML += "</max_HG>";
      XML += "<min_TB>";
        XML += String(min_TB);
      XML += "</min_TB>";
      XML += "<max_TB>";
        XML += String(max_TB);
      XML += "</max_TB>";
      XML += "<Ofset_TAir>";
        XML += String(Ofset_TAir);
      XML += "</Ofset_TAir>";
      XML += "<Work_Tair>";
       XML += String(Work_Tair);
      XML += "</Work_Tair>";
      XML += "<Delay_TAir>";
       XML += String(Delay_TAir);
      XML += "</Delay_TAir>";
      XML += "<Ofset_HA>";
       XML += String(Ofset_HA);
      XML += "</Ofset_HA>";
      XML += "<Work_HA>";
       XML += String(Work_HA);
      XML += "</Work_HA>";
      XML += "<Delay_HA>";
       XML += String(Delay_HA);
      XML += "</Delay_HA>";
      XML += "<Ofset_P>";
       XML += String(Ofset_P);
      XML += "</Ofset_P>";
      XML += "<Work_P>";
       XML += String(Work_P);
      XML += "</Work_P>";
      XML += "<Delay_P>";
       XML += String(Delay_P);
      XML += "</Delay_P>";
      XML += "<Ofset_IL>";
       XML += String(Ofset_IL);
      XML += "</Ofset_IL>";
      XML += "<Work_IL>";
       XML += String(Work_IL);
      XML += "</Work_IL>";
      XML += "<Delay_IL>";
       XML += String(Delay_IL);
      XML += "</Delay_IL>";
      XML += "<Ofset_HO>";
       XML += String(Ofset_HO);
      XML += "</Ofset_HO>";
      XML += "<Work_HO>";
       XML += String(Work_HO);
      XML += "</Work_HO>";
      XML += "<Delay_HO>";
       XML += String(Delay_HO);
      XML += "</Delay_HO>";
      XML += "<Ofset_TO>";
       XML += String(Ofset_TO);
      XML += "</Ofset_TO>";
      XML += "<Work_TO>";
       XML += String(Work_TO);
      XML += "</Work_TO>";
      XML += "<Delay_TO>";
       XML += String(Delay_TO);
      XML += "</Delay_TO>";
      XML += "<Te>";
       XML += String(Te);
      XML += "</Te>";
      XML += "<Hu>";
       XML += String(Hu);
      XML += "</Hu>";
      XML += "<Pressure>";
       XML += String(Pressure);
      XML += "</Pressure>";
      XML += "<IL>";
       XML += String(IL);
      XML += "</IL>";
      XML += "<HuO>";
       XML += String(HuO);
      XML += "</HuO>";
      XML += "<TeO>";
       XML += String(TeO);
      XML += "</TeO>";
      XML += "<CntWater>";
       XML += String(CntWater);
      XML += "</CntWater>";
      XML += "<Alarm>";
       XML += String(Alarm);
      XML += "</Alarm>";
      XML += "<Lamp>";
       XML += String(Lamp);
      XML += "</Lamp>";
      XML += "<Arroy>";
       XML += String(Arroy);
      XML += "</Arroy>";
      XML += "<ipcam>";
       XML += IPCam;
      XML += "</ipcam>";
      XML += "<LampMin_TAir>";
         XML += LampMin_TAir;
      XML += "</LampMin_TAir>";
      XML += "<LampMax_TAir>";
         XML += LampMax_TAir;
      XML += "</LampMax_TAir>";
      XML += "<LampMin_HA>";
         XML += LampMin_HA;
      XML += "</LampMin_HA>";
      XML += "<LampMax_HA>";
       XML += LampMax_HA;
      XML += "</LampMax_HA>";
      XML += "<LampMin_P>";
         XML += LampMin_P;
      XML += "</LampMin_P>";
      XML += "<LampMax_P>";
         XML += LampMax_P;
      XML += "</LampMax_P>";
      XML += "<LampMin_IL>";
         XML += LampMin_IL;
      XML += "</LampMin_IL>";
      XML += "<LampMax_IL>";
         XML += LampMax_IL;
      XML += "</LampMax_IL>";
      XML += "<LampMin_HO>";
         XML += LampMin_HO;
      XML += "</LampMin_HO>";
      XML += "<LampMax_HO>";
         XML += LampMax_HO;
      XML += "</LampMax_HO>";
      XML += "<LampMin_TO>";
       XML += LampMin_TO;
      XML += "</LampMin_TO>";
      XML += "<LampMax_TO>";
         XML += LampMax_TO;
      XML += "</LampMax_TO>";
   XML += "</inputs>";
   
   //terminal.print("XML Lamp= "); terminal.println(Lamp);
   //terminal.flush();
}

void notFound(AsyncWebServerRequest *request) {
    request->send(404, "text/plain", "Page Not found");
}
void set_location() {
      //float lat = gps.location.lat();
      //float lon = gps.location.lng();
      //Blynk.virtualWrite(V7, 1, lat, lon, "Here be pin");
      int index = 0;
      float lat = 56.654917;
      float lon = 37.411122;
      Blynk.virtualWrite(V0, index, lat, lon, "СНТ Дружба"); 
      //myMap.location(index, lat, lon, "СНТ Дружба");
      index = 1;
      lat = 55.713481;
      lon = 37.742151;
      //Blynk.virtualWrite(V0, index, lat, lon, "Квартира");
      myMap.location(index, lat, lon, "Квартира");
}
void set_table() {
  Blynk.virtualWrite(V33, "clr");
  Blynk.virtualWrite(V33, "add", 0, "Temperature Air MIN", String(min_T)); Blynk.virtualWrite(V33, "deselect", 0);
  Blynk.virtualWrite(V33, "add", 1, "Temperature Air MAX", String(max_T)); Blynk.virtualWrite(V33, "deselect", 1);
  Blynk.virtualWrite(V33, "add", 2, "Humidity Air MIN", String(min_H)); Blynk.virtualWrite(V33, "deselect", 2);
  Blynk.virtualWrite(V33, "add", 3, "Humidity Air MAX", String(max_H)); Blynk.virtualWrite(V33, "deselect", 3);
  Blynk.virtualWrite(V33, "add", 4, "Pressure MIN", String(min_P)); Blynk.virtualWrite(V33, "deselect", 4);
  Blynk.virtualWrite(V33, "add", 5, "Pressure MAX", String(max_P)); Blynk.virtualWrite(V33, "deselect", 5);
  Blynk.virtualWrite(V33, "add", 6, "Lighting MIN", String(min_L)); Blynk.virtualWrite(V33, "deselect", 6);
  Blynk.virtualWrite(V33, "add", 7, "Lighting MAX", String(max_L)); Blynk.virtualWrite(V33, "deselect", 7);
  Blynk.virtualWrite(V33, "add", 8, "Night", String(Night)); Blynk.virtualWrite(V33, "deselect", 8);
  Blynk.virtualWrite(V33, "add", 9, "Humidity object MIN", String(min_HG)); Blynk.virtualWrite(V33, "deselect", 9);
  Blynk.virtualWrite(V33, "add", 10, "Humidity object MAX", String(max_HG)); Blynk.virtualWrite(V33, "deselect", 10);
  Blynk.virtualWrite(V33, "add", 11, "Temperature obj. MIN", String(min_TB)); Blynk.virtualWrite(V33, "deselect", 11);
  Blynk.virtualWrite(V33, "add", 12, "Temperature obj. MAX", String(max_TB)); Blynk.virtualWrite(V33, "deselect", 12);
  Blynk.virtualWrite(V33, "add", 13, "OFSET Temp-re Air", String(Ofset_TAir)); Blynk.virtualWrite(V33, "deselect", 13);
  Blynk.virtualWrite(V33, "add", 14, "WORK Temp-re Air", String(Work_Tair)); Blynk.virtualWrite(V33, "deselect", 14);
  Blynk.virtualWrite(V33, "add", 15, "DELAY Temp-re Air", String(Delay_TAir)); Blynk.virtualWrite(V33, "deselect", 15);
  Blynk.virtualWrite(V33, "add", 16, "OFSET Humidity Air", String(Ofset_HA)); Blynk.virtualWrite(V33, "deselect", 16);
  Blynk.virtualWrite(V33, "add", 17, "WORK Humidity Air", String(Work_HA)); Blynk.virtualWrite(V33, "deselect", 17);
  Blynk.virtualWrite(V33, "add", 18, "DELAY Humidity Air", String(Delay_HA)); Blynk.virtualWrite(V33, "deselect", 18);
  Blynk.virtualWrite(V33, "add", 19, "OFSET Pressure", String(Ofset_P)); Blynk.virtualWrite(V33, "deselect", 19);
  Blynk.virtualWrite(V33, "add", 20, "WORK Pressure", String(Work_P)); Blynk.virtualWrite(V33, "deselect", 20);
  Blynk.virtualWrite(V33, "add", 21, "DELAY Pressure", String(Delay_P)); Blynk.virtualWrite(V33, "deselect", 21);
  Blynk.virtualWrite(V33, "add", 22, "OFSET Iluminate", String(Ofset_IL)); Blynk.virtualWrite(V33, "deselect", 22);
  Blynk.virtualWrite(V33, "add", 23, "WORK Iluminate", String(Work_IL)); Blynk.virtualWrite(V33, "deselect", 23);
  Blynk.virtualWrite(V33, "add", 24, "DELAY Iluminate", String(Delay_IL)); Blynk.virtualWrite(V33, "deselect", 24);
  Blynk.virtualWrite(V33, "add", 25, "OFSET Humidity obj.", String(Ofset_HO)); Blynk.virtualWrite(V33, "deselect", 25);
  Blynk.virtualWrite(V33, "add", 26, "WORK Humidity obj.", String(Work_HO)); Blynk.virtualWrite(V33, "deselect", 26);
  Blynk.virtualWrite(V33, "add", 27, "DELAY Humidity obj.", String(Delay_HO)); Blynk.virtualWrite(V33, "deselect", 27);
  Blynk.virtualWrite(V33, "add", 28, "OFSET Temp-re obj.", String(Ofset_TO)); Blynk.virtualWrite(V33, "deselect", 28);
  Blynk.virtualWrite(V33, "add", 29, "WORK Temp-re obj.", String(Work_TO)); Blynk.virtualWrite(V33, "deselect", 29);
  Blynk.virtualWrite(V33, "add", 30, "DELAY Temp-re obj.", String(Delay_TO)); Blynk.virtualWrite(V33, "deselect", 30);
}

void saveConfigCallback() {
   //Serial.println("Should save config");
   shouldSaveConfig = true;
}
void configModeCallback(AsyncWiFiManager *myWiFiManager) {
  //Serial.println("Entered config mode");
  //Serial.println(WiFi.softAPIP()); 
  //Serial.println(myWiFiManager->getConfigPortalSSID());
  myWiFiManager->getConfigPortalSSID();
}

void sbtn(int f) {
  Blynk.virtualWrite(V9, f);
  SetBitPort(HUB1, 7, f); //hub, port, bit
  Lamp = f;
}

void setvar() {
 Flag_in = vl[0].toInt();
 if(Flag_in == 1) {
      min_T = vl[1].toInt(); //mes = request->getParam("min_T")->value();
      max_T = vl[2].toInt(); //mes = request->getParam("max_T")->value(); 
      min_H = vl[3].toInt();
      max_H = vl[4].toInt();
      min_P = vl[5].toInt();
      max_P = vl[6].toInt();
      min_L = vl[7].toInt();
      max_L = vl[8].toInt();
      Night = vl[9].toInt();
      min_HG = vl[10].toInt();
      max_HG = vl[11].toInt();
      min_TB = vl[12].toInt();
      max_TB = vl[13].toInt();
      Ofset_TAir = vl[14].toInt();
      Work_Tair = vl[15].toInt();
      Delay_TAir = vl[16].toInt();
      Ofset_HA = vl[17].toInt();
      Work_HA = vl[18].toInt();
      Delay_HA = vl[19].toInt();
      Ofset_P = vl[20].toInt();
      Work_P = vl[21].toInt();
      Delay_P = vl[22].toInt();
      Ofset_IL = vl[23].toInt();
      Work_IL = vl[24].toInt();
      Delay_IL = vl[25].toInt();
      Ofset_HO = vl[26].toInt();
      Work_HO = vl[27].toInt();
      Delay_HO = vl[28].toInt();
      Ofset_TO = vl[29].toInt();
      Work_TO = vl[30].toInt();
      Delay_TO = vl[31].toInt();
      IPCam = vl[32];
      Flag_in = 0;
      vl[0] = String(Flag_in);
      writeConfig();
      set_table();
  }
}

void reconnectBlynk() {
  if (!Blynk.connected()) {
    Serial.println("Lost connection");
    Blynk.config(_key.c_str());
    if(Blynk.connect()) Serial.println("Reconnected");
    else 
      Serial.println("Not reconnected");
  }
}

void setup()
{
  Serial.begin(115200);
  if(!SPIFFS.begin()) Serial.println("An Error has occurred while mounting SPIFFS");
  initConfig();//установить заводские настройки если файл не создан
  readConfig();
  
  AsyncWiFiManagerParameter custom_blynk_token("blynk", "blynk token", blynk_token, 34);
  AsyncWiFiManager wifiManager(&sslserver, &dns);
  //wifiManager.setSaveConfigCallback(saveConfigCallback);
  
  //wifiManager.resetSettings();
  //shouldSaveConfig = false;
  
  //AsyncWiFiManagerParameter custom_blynk_token("blynk", "blynk token", blynk_token, 34);
  wifiManager.addParameter(&custom_blynk_token);
  //wifiManager.setAPCallback(configModeCallback);
  wifiManager.autoConnect("ClimaticPost", "12345678");
  if(_flag == 0) {
    strcpy(blynk_token, custom_blynk_token.getValue());
    _key = blynk_token; //Serial.println(_key);
  }
  //Blynk.begin("YFPRKTOLDqBT3KRUQDnVtKl3IMvmCeIt", "MGTS_GPON_E73F", "bd6QGTh3");
  _ssid = WiFi.SSID();
  _password = WiFi.psk();
  //Blynk.begin(_key.c_str(), _ssid.c_str(), _password.c_str());
  Blynk.config(_key.c_str());
  bool result = Blynk.connect();
  if (result != true)  {
    Serial.println("BLYNK Connection Fail");
    _flag = 0;
    writeConfig();
    wifiManager.resetSettings();
    ESP.reset();
  }
  _flag = 1;
  writeConfig();
  WiFi.printDiag(Serial);
  sslserver.on("/index.html", HTTP_ANY, [](AsyncWebServerRequest *request){
  if(!request->authenticate(www_username, _password.c_str()) )
      return request->requestAuthentication();
      request->send(SPIFFS, "/index.html");
  });
  sslserver.on("/favicon.ico", HTTP_GET, [](AsyncWebServerRequest *request){
      request->send(SPIFFS, "/favicon.ico", "image/png");
  });
  sslserver.on("/LampOn.png", HTTP_GET, [](AsyncWebServerRequest *request){
      request->send(SPIFFS, "/LampOn.png", "image/png");
  });
  sslserver.on("/LampOff.png", HTTP_GET, [](AsyncWebServerRequest *request){
      request->send(SPIFFS, "/LampOff.png", "image/png");
  });
  sslserver.on("/ajax_inputs", HTTP_GET, [](AsyncWebServerRequest *request){
     buildXML(); //передать клиенту
     request->send( 200, "text/xml", XML );
     Flag_out = 0;
     Flag_in = 0;
  });
  sslserver.on("/lamp", HTTP_GET, [](AsyncWebServerRequest *request){
     int params = request->params();
     if(params != 0) {
        String mes = request->getParam("Lamp")->value();
        int lamp = mes.toInt();
        if(lamp == 1) {
            sbtn(1);
        }
        if(lamp == 0) {
            sbtn(0);
        }
        mes = ""; 
        mes += "<Lamp>";
        mes += String(lamp);
        mes += "</Lamp>";
        request->send( 200, "text/xml", mes );
     }
     else
        request->send( 400, "text/plain", "BAD REQUEST");
      
  });
  sslserver.on("/arroy", HTTP_GET, [](AsyncWebServerRequest *request){
     int params = request->params();
     if(params != 0) {
        String mes = request->getParam("Arroy")->value();
        Arroy = mes.toInt(); //серво вверх
        if(Arroy == 1) {
            --ValServo01;
            servo01.write(ValServo01);
        }
        if(Arroy == 2) {
            ++ValServo01;
            servo01.write(ValServo01); //серво вниз
        }
        if(Arroy == 3) {
            ++ValServo02;
            servo02.write(ValServo02); //серво влево
        }
        if(Arroy == 4) {
              --ValServo02;
              servo02.write(ValServo02); //серво вправо
        }
        mes = ""; 
        mes += "<Arroy>";
        mes += String(Arroy);
        mes += "</Arroy>";
        request->send( 200, "text/xml", mes );
     }
     else
        request->send( 400, "text/plain", "BAD REQUEST");
  });
  sslserver.on("/button02", HTTP_GET, [](AsyncWebServerRequest *request){
     int params = request->params();
     if(params != 0) {
        for(int cnt=0; cnt <  params; cnt++) {
          AsyncWebParameter* p = request->getParam(cnt);
          //p->name();
          vl[cnt] = p->value();
        }
        
        //String mes = request->getParam("Flag_out")->value();
        //Flag_in = mes.toInt(); 
        //IPCam = request->getParam("ipcam")->value();
        //if(Flag_in == 1) writeConfig();
        //Flag_in = 0;
        request->send( 200, "text/xml", "Ok" );
     }
     else
        request->send( 400, "text/plain", "BAD REQUEST");
  });
  sslserver.onNotFound(notFound);
  sslserver.begin();
  //MDNS.addService("https", "tcp", 80);
  timer.setInterval(2000L, sendSensor);
  timer.setInterval(2000L, TimerEventIL);
  timer.setInterval(2000L, TimerEventHUO);
  timer.setInterval(2000L, TimerEventTEO);
  timer.setInterval(2000L, TimerEventEtc);
  timer.setInterval(60 * 1000, reconnectBlynk);
  
  bool status = bme.begin(0x76);
  if (!status) Serial.println("Could not find a valid BME280 sensor, check wiring!");
  adc.begin();
  set_location();
  set_table();
  //writeConfig();
  //ArduinoOTA.setPort(8266);
  //ArduinoOTA.setHostname(host);
  //ArduinoOTA.setPassword(_password.c_str());
  //ArduinoOTA.begin();  
  pinMode(0, OUTPUT); //D3
  digitalWrite(0, LOW);
  pinMode(16, OUTPUT); //D0
  digitalWrite(16, LOW);
  pinMode(2, OUTPUT); //D4 BUILTIN_LED
  digitalWrite(2, LOW);
  SPI.transfer(0);
  SPI.transfer(0);
  digitalWrite(2, HIGH);
  for(int cnt=0; cnt < 3; cnt++) {
      SetBitPort(HUB1, 7, 1);
      delay(500);
      SetBitPort(HUB1, 7, 0);
      delay(500);
   }
  servo01.attach(0); //вверз-вниз
  servo02.attach(16); //влево-вправо
}


void loop()
{
  //if(Blynk.connected())  Blynk.run();
  if(_flag == 1) {
     Blynk.run();
     timer.run(); 
     //ArduinoOTA.handle();
     setvar();
  }
}

Posted it.

Okay, a few comments…

You shouldn’t do more than 10 virtual.Write commands per second. Your set_table function will do many more than this when it’s called. And, you seem to be calling this every time the void loop executes.

All of these timers are attempting to run their associated functions at EXACTLY the same time, which can’t happen with a singe-theadeded processor. You should stagger them.

Pete.

Well. Put everything in one function? Or move all the time of the call? set_table move to one of the calls by timer or by flag

Search the forum for “staggered timers”

It makes sense, if you have functions that you’ve split-up for no good reason. However, you may need some Blynk.run commands in there if they take too long to execute and it would make sense to call them as infrequently as possible.

Pete.

well. I’ll watch it

Sir. Hello! Thank you for your help. Everything became stable.
People sometimes need to point out the obvious. Now everything was logical.
In my previous projects, the same error occurred.
But they work in electricity meters and water meters :).
Therefore, I repeated this until I encountered factors that destroy the program.

*WM: Configuring access point... 
*WM: ClimaticPost
*WM: 12345678
*WM: AP IP address: 
*WM: 192.168.4.1
*WM: HTTP server started
*WM: About to scan()
*WM: About to scan()
*WM: Scan done
*WM: Adding parameter
*WM: blynk
*WM: 
*WM: AutoConnect Try No.:
*WM: 0
*WM: Connecting as wifi client...
*WM: Using last saved values, should be faster
*WM: Connection result: 
*WM: 3
*WM: About to scan()
*WM: Scan done
*WM: WiFi save
*WM: Parameter
*WM: blynk
*WM: *************************************
*WM: Sent wifi save page
*WM: Connecting to new AP
*WM: Connecting as wifi client...
*WM: Info
*WM: Sent info page
*WM: Connection result: 
*WM: 3
[83865] 
    ___  __          __
   / _ )/ /_ _____  / /__
  / _  / / // / _ \/  '_/
 /____/_/\_, /_//_/_/\_\
        /___/ v0.6.1 on ESP8266

[83868] Connecting to blynk-cloud.com:80
[84044] Ready (ping: 78ms).
Mode: STA
PHY mode: N
Channel: 5
AP id: 0
Status: 5
Auto connect: 1
SSID (14): MGTS_GPON_E73F
Passphrase (8): ************
BSSID set: 0

This is the only thing that pops up in a day.
This is probably triggered by Blink. run().
It is possible that something else is incomplete.

[12471603] Connecting to blynk-cloud.com:80
[12471878] Ready (ping: 67ms).

Here are my experiments.
The shift in the response time of the interrupt is also working.
But the simplest logic is to put in one interrupt function.
Just like you said right away.

//timer.setInterval(1000L, sendSensor);
  //timer.setInterval(1400L, TimerEventIL);
  //timer.setInterval(1600L, TimerEventHUO);
  //timer.setInterval(1800L, TimerEventTEO);
  //timer.setInterval(2000L, TimerEventEtc);
  //timer.setInterval(60 * 1000, reconnectBlynk);

  timer.setInterval(2000L, TimerEventSensor);
  //timer.setInterval(1400L, TimerEventIL);
  //timer.setInterval(1600L, TimerEventHUO);
  //timer.setInterval(1800L, TimerEventTEO);
  //timer.setInterval(1000L, TimerEventEtc);
  timer.setInterval(60 * 1000, reconnectBlynk);

The Timer Event Sensor function runs for 1 second.
For some reason, I didn’t measure it right away.
Although I knew that there were serious calculations.