Go Down

Topic: S: Beispiel für NTP, lokale Zeit, Sommerzeit, "without Delay" ohne RTC [gelöst] (Read 421 times) previous topic - next topic

noiasca

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 http://forum.arduino.cc/index.php?topic=172044.msg1278536#msg1278536, 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?

DE: Wie man Fragen postet:
1. was hat man (Sketch und Hardware)
2. was SOLL es machen
3. was macht es: IST (Fehlverhalten, Fehlermeldungen, Serial.Output ...)
4. Eine Frage stellen bzw. erklären was man erwartet

Tommy56

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
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

noiasca

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 ...
DE: Wie man Fragen postet:
1. was hat man (Sketch und Hardware)
2. was SOLL es machen
3. was macht es: IST (Fehlverhalten, Fehlermeldungen, Serial.Output ...)
4. Eine Frage stellen bzw. erklären was man erwartet

amithlon

Hallo,

in den ESP8266 extemsions ist die (Posix-) Timelib mit drin.
Findet man wenig Bespiele dazu,
https://arduino.stackexchange.com/questions/42922/get-hour-with-ctime-time-library-with-esp8266

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

noiasca

auch danke.

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

https://github.com/SensorsIot/NTPtimeESP

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

DE: Wie man Fragen postet:
1. was hat man (Sketch und Hardware)
2. was SOLL es machen
3. was macht es: IST (Fehlverhalten, Fehlermeldungen, Serial.Output ...)
4. Eine Frage stellen bzw. erklären was man erwartet

Tommy56

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

noiasca

ein paar Warnings und dann noch ein Exit von 'ner Library wo ich ohnehin nicht die Hardware gehabt hätte.


Code: [Select]

WARNUNG: Bibliothek TimerOne behauptet auf (avr) Architektur(en) ausgeführt werden zu können und ist möglicherweise inkompatibel mit Ihrem derzeitigen Board, welches auf (esp8266) Architektur(en) ausgeführt wird.
In file included from D:\daten\Arduino\downloads\forum\wstern\wstern.ino:33:0:

sketch\settings.h:4:14: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]

 char *ssid = "dfsfsdfsdf";

              ^

sketch\settings.h:6:18: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]

 char *password = "fsfsfssdfs";

                  ^

D:\daten\Arduino\downloads\forum\wstern\wstern.ino: In function 'void setup()':

wstern:176: error: 'class LPD6803' has no member named 'getBuffer'

   buf = strip.getBuffer();

               ^

wstern:178: error: 'class LPD6803' has no member named 'getIntBuffer'

   bufInt = strip.getIntBuffer();

                  ^

exit status 1
'class LPD6803' has no member named 'getBuffer'





hab dann eben vorerst einen anderen Weg eingeschlagen, was nicht heißt, dass ich deinen Code mir nicht noch näher ansehen werde ...
DE: Wie man Fragen postet:
1. was hat man (Sketch und Hardware)
2. was SOLL es machen
3. was macht es: IST (Fehlverhalten, Fehlermeldungen, Serial.Output ...)
4. Eine Frage stellen bzw. erklären was man erwartet

noiasca

es ist zum schreien. Jetzt sehe ich es

#include "LPD6803.h"   

im Download war aber <> 

DE: Wie man Fragen postet:
1. was hat man (Sketch und Hardware)
2. was SOLL es machen
3. was macht es: IST (Fehlverhalten, Fehlermeldungen, Serial.Output ...)
4. Eine Frage stellen bzw. erklären was man erwartet

Tommy56

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
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

noiasca

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

Code: [Select]

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.
DE: Wie man Fragen postet:
1. was hat man (Sketch und Hardware)
2. was SOLL es machen
3. was macht es: IST (Fehlverhalten, Fehlermeldungen, Serial.Output ...)
4. Eine Frage stellen bzw. erklären was man erwartet

Tommy56

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

Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

noiasca

wäre gut, aber leider

Code: [Select]

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?
DE: Wie man Fragen postet:
1. was hat man (Sketch und Hardware)
2. was SOLL es machen
3. was macht es: IST (Fehlverhalten, Fehlermeldungen, Serial.Output ...)
4. Eine Frage stellen bzw. erklären was man erwartet

noiasca

DE: Wie man Fragen postet:
1. was hat man (Sketch und Hardware)
2. was SOLL es machen
3. was macht es: IST (Fehlverhalten, Fehlermeldungen, Serial.Output ...)
4. Eine Frage stellen bzw. erklären was man erwartet

Tommy56

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

Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

noiasca

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
Code: [Select]

  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
Code: [Select]

  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.
DE: Wie man Fragen postet:
1. was hat man (Sketch und Hardware)
2. was SOLL es machen
3. was macht es: IST (Fehlverhalten, Fehlermeldungen, Serial.Output ...)
4. Eine Frage stellen bzw. erklären was man erwartet

Go Up