Stránka 1 z 2

Chyba synchronizace času u ESP8266-1 *vyřešeno*

Napsal: 30 lis 2025, 15:44
od hafca
Upoutal mě WiFi termostat a chtěl jsem to použít k ovládání kotle. Jenže to chodilo asi jen autorovi. Kompilace projde v pořádku, nahrání do ESP taky OK, na telefonu se naloguji, mohu tam měnit hodnoty, ale to je všechno. Čas neběží.
V sérivém monitoru vidím opakující se chybu a nevím co s tím. Zkoušel jsem různé knihovny, ale marně. Zkusil jsem i AI, ale ta mě do toho jen zamotala.
Mohl by mě někdo poradit, kde by mohla být chyba?

Kód: Vybrat vše

*wm:AutoConnect: SUCCESS 
*wm:STA IP Address: 192.168.0.154
192.168.0.154
HTTP server started
1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1  
2 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1  
3 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1  
4 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1  
5 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1  
6 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1  
7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1  
Time Sync error: Got NTP time: 15:22:35 30/11/2025
error
0
0
0:0:0
 
error
0
0
0:0:0
 
error
0
0
0:0:0

Napsal: 30 lis 2025, 17:03
od samec
Úžasné, keď robíš niečo a netušíš čo. :lol:

Zrejme sa to ESP pripája nejako??? na nejaký server???, alebo modul???, lebo ESP samé o sebe časostroj nemá. Nuž ale to už si vykonzultuj s autorom kódu, keď si lenivý sa naučiť programovať.

Napsal: 30 lis 2025, 17:18
od Valdano
Když chcete používat nějaký cizí projekt, který jste sám nenapsal tak je potřeba, abyste měl aspoň trochu přehled o tom jak co funguje, jinak se může stát, že vůbec nedokážete najít případný problém.

ESP nemá vlastní RTC čip, který by byl zálohovaný baterií tak jako to má běžně PC. Takže k tomu, aby v ESP fungoval čas musíte po každém zapnutí provést synchronizaci času. Pak teprve po úspěšném provedení synchronizace bude čas v ESP běžet, ale jen do vypnutí. Po zapnutí bude zase potřeba provést synchronizaci času. Synchronizace času se provádí prostřednictvím NTP serveru.

V programu thermostat.ino, který je na tom vámi odkazovaném webu jako příklad, se provádí synchronizace času vždy jednou po zapnutí ve funkci setup().

Problém je v tom, že v tom zdrojáku je definován odkaz na již nefunkční NTP server viz tento řádek

NTP.begin("fr.pool.ntp.org", 1, true);

Nahraďte ho odkazem na funkčním NTP server ntp.nic.cz viz níže.

NTP.begin("ntp.nic.cz", 1, true);

K provedení synchronizace musí být v době zapnutí toho ESP v rámci Wifi sítě, ke které se to ESP připojuje samozřejmě dostupný Internet, aby se ESP mohlo připojit na ten NTP server.

Další problém bude v tom, že ve zdrojáku thermostat.ino se ESP nepřipojuje na jinou Wifi s dostupným Internetem, ale sama vytváří vlastní izolovaný AP bod což znamená, že bude bez připojení k Internetu tj. i výše zmíněný funkční NTP server bude nedostupný.

Ve zdrojáku thermostat.ino jsou dvě varianty funkce connexion(). První, která je zakomentovaná /* */ je určena k připojení k existující Wifi síti tj. ta co obsahuje WiFi.begin(ssid, password);

Druhá varianta funkce connexion(), která je v tom zdrojáku skutečně použitá vytváří vlastní izolovaný AP bod viz wifiManager.setAPCallback.

Takže kromě té již výše uvedené úpravy v odkazu na NTP server musíte ještě navíc zakomentovat tu druhou variantu funkce connexion() a odkomentovat tu první s tím, že musíte v horní části zdrojáku nadefinovat ssid a password (tj. heslo)

const char* ssid = "??????";
const char* password = "??????";


pro přípojení k vaší lokální Wifi, ke které se bude ESP připojovat a která by měla mít dostupné připojení na Internet, aby se ESP mohlo připojit k tomu NTP serveru.

Pokud se chcete synchronizaci času přes Internet vyhnout tak si můžete k tomu ESP dokoupit třeba tento modul s RTC čipem a do programu si k tomu doplnit i obsluhu. Inspirovat se můžete podle tohoto návodu, který je k Arduinu tj. pro ESP si to budete muset upravit třeba podle tohoto návodu. Pak bude stačit osadit ten modul baterií, čas v modulu jednou nastavit a pak už se o čas nemusíte řadu let starat, protože chod času v době vypnutí udrží ta baterie.

Tu synchronizaci vůči NTP serveru si můžete v programu pozměnit na povel tak, aby jste mohl čas srovnat když se bude RTC čas po nějaké době už dost rozcházet s platným časem třeba za rok a nebo si namísto té synchronizace vůči NTP dodělejte do toho webového rozhraní ESP, přes které k tomu přistupujete, možnost ručního nastavení času. S ručním nastavením času byste se obešel bez Internetu i bez RTC, ale mělo by to tu nevýhodu, že byste v takovém případě musel po každém zapnutí ESP čas znovu ručně nastavit jinak by čas v ESP neběžel.

Napsal: 30 lis 2025, 20:32
od hafca
ESP se připojí na WiFi a já jí vidím v telefonu. V té ESP jsou uložené 3 webové stránky na které se bez problému dostanu přes 192.168.4.1. Na výpisu z serial monitoru co jsem sem dal je vidět, že si čas načte. Takže není potřeba nic dalšího. Nefunguje jen ta synchronizace.

Napsal: 30 lis 2025, 20:54
od asdf
Koukal jsem do kódu a přijde mi, že ty hlášky "Time Sync error" a "Got NTP time" se nemůžou vypsat obě. Nedělal jsi tam nějaké změny?

Napsal: 30 lis 2025, 20:59
od hafca
Ne, je to původní. Mám ještě jednu upravenou verzi, kde je čidlo teploty BMP280 a je to stejné.

Napsal: 30 lis 2025, 21:06
od asdf
Já tam našel tenhle kód:

Kód: Vybrat vše

  if (error) {
    Serial.print("Time Sync error: ");
    if (error == noResponse)
      Serial.println("NTP server not reachable");
    else if (error == invalidAddress)
      Serial.println("Invalid NTP server address");
    }
  else {
    Serial.print("Got NTP time: ");
    Serial.println(NTP.getTimeDateString(NTP.getLastNTPSync()));
  }
Máš ho tam taky tak? Přece nemůže udělat obojí, ne?

Napsal: 30 lis 2025, 21:18
od hafca
Mám tam tohle

Kód: Vybrat vše

 
  NTP.begin("fr.pool.ntp.org", 1, true);
  NTP.setInterval(60);

  NTP.onNTPSyncEvent([](NTPSyncEvent_t error) {
  if (error) {
    Serial.print("Time Sync error: ");
    if (error == noResponse)
      Serial.println("NTP server not reachable");
    else if (error == invalidAddress)
      Serial.println("Invalid NTP server address");
    }
  else {
    Serial.print("Got NTP time: ");
    Serial.println(NTP.getTimeDateString(NTP.getLastNTPSync()));
  }
});

Napsal: 30 lis 2025, 21:23
od asdf
Hmm, to je ono. Je to divné. Tak se to možná volá dvakrát. Jednou s chybou, podruhé bez chyby.

Napsal: 30 lis 2025, 21:33
od hafca
Na konci toho výpisu se volá refresh_planning, ale jestli je to tím jsem nezjistil.

Kód: Vybrat vše

void refresh_planning(){
   int c=0;
  for(int j=1;j<=7;j++){
    Serial.print(j);
    Serial.print(" ");
  for(int i=1;i<=24;i++){
   c++;
   planning[j-1][i-1]=prog[c-1];
   Serial.print( planning[j-1][i-1]);
   Serial.print(" ");
  }
  Serial.println(" ");
}


Napsal: 30 lis 2025, 21:39
od pocitujlasku
kedze v arduino IDE nema zapnuty timestamp, tak predpokladam, ze prvykrat ntp sa deje v case, ked este nie je na wifi a potom po 60 sekundach (ako ma nastaveny interval). alebo sa ta kniznica pokusa pri prvom zlyhani o dalsi pokus o niekolko sekund a ten uz je ok.
chcelo by to vyhodit tie 2 if a nechat si vypisat konkretny error.

Napsal: 30 lis 2025, 22:12
od asdf
A zavolat tohle jde? (třeba z PC-čka): "http://"+ip+"/control?cmd=GPIO,2,0"

Napsal: 01 pro 2025, 13:16
od hafca
Tady je výpis bez těch if

Kód: Vybrat vše

*wm:AutoConnect: SUCCESS 
*wm:STA IP Address: 192.168.0.154
192.168.0.154
HTTP server started
1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1  
2 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1  
3 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1  
4 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1  
5 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1  
6 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1  
7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1  
Got NTP time: 00:00:00 01/01/1970
Got NTP time: 13:14:44 01/12/2025
error
0
0
0:0:0
 
error
0
0

Napsal: 01 pro 2025, 16:07
od asdf
Podle mě ta hláška error nejspíš znamená, že mu nejde zavolat tohle URL:
asdf píše:A zavolat tohle jde? (třeba z PC-čka): "http://"+ip+"/control?cmd=GPIO,2,0"
Tím chce asi vypnout/zapnout kotel. Jde ti to URL zavolat z PC?

Napsal: 01 pro 2025, 16:20
od hafca
Nejde, hlásí to chybu. V tom druhém ESP bude asi špatný program. Nedokážu v něm uložit heslo a SSID. Autor tam dal odkaz, který už nefunguje a tak zkouším co se dá.