S: Beispiel für NTP, lokale Zeit, Sommerzeit, "without Delay" ohne RTC [gelöst]

Ich suche ein kompaktes Beispiel das folgendes machen soll:

  • lokal (in einer Variable/Structur) zur Laufzeit Uhrzeit Datum zur Verfügung stellen
  • eine periodische NTP Abfrage, z.b. einmal in der Stunde
  • die NTP Abfrage ohne Delays
  • DLS / Sommerzeit Erkennung mit Boardmitteln unter Verzicht von weiteren TimeLib's. Ein Beispiel hätte ich gefunden in der Art von jurs #2 RTC mit Sommerzeit - #3 by jurs - Deutsch - Arduino Forum, mit der Einschräkung auf EU und 2099 kann ich leben.

Zu vermeiden wären:

  • keine langen Delays
  • kein RTC
  • keine großen Libs

Wozu wirds verwendet:
für einen (menschenlesbaren) Zeitstempel einer Logdatei im SPIFFS.

Target also ein ESP/NodeMCU, aber wenn wer sowas schon mit AVR+Ethernet gemacht hat, nehme ich das auch.

Gegoogelt hab ich auch schon fleißig, aber außer jurs' Beispiel habe ich nich viel gefunden.

Hat vieleicht ein anderer User etwas auf seiner Platte, das er teilen kann?

Nachtrag: Die Lösung findet man hier: ESP8266 NTP Abfrage mit Sommerzeit / Winterzeit (NodeMCU, Wemos D1)

Warum Du die Sommerzeitumschaltung nochmal selbst erfinden willst und nicht die Lib von Jurs nimmst, erschließt sich mir nicht.
Der Rest ist in meinem Weihnachtsstern enthalten (der braucht ja keine Sommerzeit).

Gruß Tommy

Danke.
Wie geschrieben, den "6 Zeiler" von jurs nehme ich gerne. Aber große libs vermeide ich wenn es geht.

können wir später ausdiskutieren, jetzt mal deinen Code studieren ...

Hallo,

in den ESP8266 extemsions ist die (Posix-) Timelib mit drin.
Findet man wenig Bespiele dazu,

In der Antwort dort ist noch der Hinweis auf loacaltime(), gmttime() usw.

Die Struktur von tm findet man z.B. hier:
https://github.com/esp8266/Arduino/blob/master/tools/sdk/libc/xtensa-lx106-elf/include/time.h

Default wird alle Stunde beim NTP angefragt.

Ich nutze nur noch time.h seit ich es entdeckt habe,
Sommerzeit mußt Du natürlich selbst klären und den richtigen Offset bei configTime() mitgeben.

Gruß aus Berlin
Michael

auch danke.

Zwischenzeitlich bin ich beim Schweizer Andreas Spiess gelandet, und das ist fast schon 70% dessen was ich suchte.

muss noch etwas ausräumen und die Sache mit der lokalen Zeit noch fertig machen. Es wird ... aber nicht mehr heute.

Welche Probleme hattest Du mit meinem Code?

Gruß nTommy

Der Teil war ja auch für Dein Vorhaben uninteressant, Du wolltest doch die NTP-Abfragen.

Die LPD6803-Lib habe ich etwas aufgebohrt, um die Störfestigkeit des Strips zu erhöhen.

Gruß Tommy

Ich spiele noch immer mit den NTP rum. Aktuell mit dem Beispiel "TimeNTP_ESP8266WiFi" der time.h

Nun stelle ich fest, dass wenn die Internet Anbindung wegfällt

WiFi.hostByName(ntpServerName, ntpServerIP);

über 6 Sekunden wartet, bis es zum Abbruch kommt.
Kann man das früher/schneller erkennen, dass die Namensauflösung nicht funktioniert?

Hintergrund ist, ich kann auf einen Sync verzichten, aber ich will im Fehlerfall nicht 6 Sekunden auf einem Fehler warten.

Du kannst der Methode als 3. Parameter einen Timeout mitgeben.

Gruß Tommy

wäre gut, aber leider

D:\daten\Arduino\downloads\HW_esp\TimeNTP_ESP8266WiFi\TimeNTP_ESP8266WiFi.ino: In function 'time_t getNtpTime()':

TimeNTP_ESP8266WiFi:136: error: no matching function for call to 'ESP8266WiFiClass::hostByName(const char [16], IPAddress&, int)'

   WiFi.hostByName(ntpServerName, ntpServerIP, 1000);

                                                   ^

D:\daten\Arduino\downloads\HW_esp\TimeNTP_ESP8266WiFi\TimeNTP_ESP8266WiFi.ino:136:51: note: candidate is:

In file included from C:\Users\werner\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.3.0\libraries\ESP8266WiFi\src/ESP8266WiFiSTA.h:28:0,

                 from C:\Users\werner\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.3.0\libraries\ESP8266WiFi\src/ESP8266WiFi.h:34,

                 from D:\daten\Arduino\downloads\HW_esp\TimeNTP_ESP8266WiFi\TimeNTP_ESP8266WiFi.ino:18:

C:\Users\werner\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.3.0\libraries\ESP8266WiFi\src/ESP8266WiFiGeneric.h:99:13: note: int ESP8266WiFiGenericClass::hostByName(const char*, IPAddress&)

         int hostByName(const char* aHostname, IPAddress& aResult);

             ^

C:\Users\werner\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.3.0\libraries\ESP8266WiFi\src/ESP8266WiFiGeneric.h:99:13: note:   candidate expects 2 arguments, 3 provided

exit status 1
no matching function for call to 'ESP8266WiFiClass::hostByName(const char [16], IPAddress&, int)'

irgend was zu altes?

aha,
lokal nicht, aber hier drinnen schon ...

ok, ich habe auch im Netz geschaut. Achtung: Die 2.4.0 hat noch einige Probleme. Evtl. nur die Änderung adaptieren.

Gruß Tommy

wird sich die nächsten Tage zeigen, was ich mir damit noch einhandle, aber soweit mal ok bis auf:

Original Beispiel TimeNTP_ESP8266WiFi.ino mit 115200 mit 2.3.0

  Der Sketch verwendet 229781 Bytes (21%) des Programmspeicherplatzes. Das Maximum sind 1044464 Bytes.
  Globale Variablen verwenden 32260 Bytes (39%) des dynamischen Speichers, 49660 Bytes für lokale Variablen verbleiben. Das Maximum sind 81920 Bytes.

Original Beispiel TimeNTP_ESP8266WiFi.ino mit 115200 mit 2.4.0

  Der Sketch verwendet 255579 Bytes (24%) des Programmspeicherplatzes. Das Maximum sind 1044464 Bytes.
  Globale Variablen verwenden 33540 Bytes (40%) des dynamischen Speichers, 48380 Bytes für lokale Variablen verbleiben. Das Maximum sind 81920 Bytes.

Ist doch im Bereich des Rauschens.

Gruß Tommy

Ich wollte zum Nachlesen meinen Sketch zur Verfügung stellen. Ist aber leider zu viel geworden und ich bin am 9000 Zeichen Limit gescheitert.

Daher gibts nur einen externen Link: NTP Abfrage mit Sommerzeit und schnellem Rückkehr in loop

Man kann einen langen Sketch auch sinnvoll auf 2 Postings aufteilen oder als ZIP anhängen. Dann bleibt die Information im Forum.

Gruß Tommy

wenn Listings unbedingt im Forum bleiben sollen, dann sollten die admins endlich mal das Limit der Posts auf mindestens 32k Zeichen raufsetzen. 9k sind wirklich lächerlich.
Anhänge als zip sind viel zu umständlich zum schnell mal reingucken - ich lade die NIE runter und gucke da also auch nie rein.

Falls also kein deutlich höheres Limit, kann man das nur interpretieren als "lange Postings hier im Foum nicht erwünscht, postet sie anderswo"

OT: ich respektiere die Entscheidung eines Limits. Ist halt ein Kompromis zwischen Vollständigkeit und Lesbarkeit. Ähnliches gilt für einen externen Link, man kann ihn folgen - man muss aber nicht. In diesem Sinne - schön' Samstag abend :wink:

Die Frage bei externen Links ist halt: Wie lange existieren diese?

Gruß Tommy

OT: Domain vor etwa 10 Jahren registriert. Dem Design nach zu urteilen auch schon ein paar Jahre "stabil". Also ich sag mal so, das hält noch ne Weile :wink: