Datum und Zeit in eine Variable bringen um damit weiterzuarbeiten

Hallo Leute ich habe ein kleines Problem.

Ich schaffe es ja mir die aktuelle Zeit von einem Zeitserver zu holen und diese Seriell auszugeben, aber …
wie schaffe ich es diese Ausgabe in eine Variable zu packen um damit weiterzuarbeiten?

hier noch mal mein gebastelte :

/*
 * Zeit Tests
 * 09.04.2020
 * 
 */


#define NTP_SERVER "de.pool.ntp.org"
#define TZ_INFO "WEST-1DWEST-2,M3.5.0/02:00:00,M10.5.0/03:00:00" // Western European Time

#include <WiFi.h>       // Load Wi-Fi library
#include <ESPmDNS.h>    // DNS Auflösung
//#include "time.h"
//#include<netzwerk.h>    //meine Localen Netzwerkeinstellungen 


IPAddress local_IP(192, 168, 43, 166);
IPAddress gateway(192, 168, 43, 1);
IPAddress subnet(255, 255, 255, 0);
IPAddress primaryDNS(8, 8, 8, 8); 
IPAddress secondaryDNS(8, 8, 4, 4);

void setup() {
  setenv("TZ", TZ_INFO, 1);             
  tzset();
  WiFi.mode(WIFI_STA);  
  Serial.begin(115200);
 
 
  if (!WiFi.config(local_IP, gateway, subnet, primaryDNS, secondaryDNS)) {
    Serial.println("STA Failed to configure");
  }

  Serial.print("Connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi connected!");
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
  Serial.print("ESP Mac Address: ");
  Serial.println(WiFi.macAddress());
  Serial.print("Subnet Mask: ");
  Serial.println(WiFi.subnetMask());
  Serial.print("Gateway IP: ");
  Serial.println(WiFi.gatewayIP());
  Serial.print("DNS: ");
  Serial.println(WiFi.dnsIP());
  

ZeitHolen();  //Zeitserver abfragen




}  // ENDE void Setup()

void loop() {
          tm local;
          getLocalTime(&local);
          Serial.println(&local, "Datum: %d.%m.%y  Zeit: %H:%M:%S -- %X"); // Zeit Datum Print Ausgabe formatieren
          Serial.println("...............");
          Serial.println(millis() );
          Serial.println("...............");
          Serial.println(time_t());
          Serial.println(&local, "%X");
          Serial.println(time_t("&local"));
          delay(10000);

} // ENDE void loop



void ZeitHolen()
{
  Serial.println("Hole NTP Zeit");
  struct tm local;
  configTzTime(TZ_INFO, NTP_SERVER); // ESP32 Systemzeit mit NTP Synchronisieren
  getLocalTime(&local, 10000);      // Versuche 10 s zu Synchronisieren

}

Du hast sie doch bereits in local stehen. Schau mal in die time.h

Gruß Tommy

hmm danke für die schnelle Antwort aber das ist mir so zu hoch. kannst du mir mal ein Beispiel basteln?

Dann beschreibe doch erst mal, was Du machen willst, also was in der Variablen stehen soll und was Du damit anfangen willst.

Gruß Tommy

ich möchte eigentlich nur die Stunde rausfiltern und vergleichen wenn vor oder nach Stunde X dann soll Y geschehen.

Wenn Du das fortlaufend machen willst, solltest Du auch etwa höchstens aller Stunden das Zeitholen ausführen.
Ansonsten:

void loop() {
          tm local;
          getLocalTime(&local);
          int stunde = local.tm_hour;

Gruß Tommy

Ok Dankeschön werde es morgen gleich versuchen umzusetzen.

LG Immanuel

Ich muss mich mal kurz mit einklinken, weil ich ein ganz ähnliches Problem habe.
Und zwar nehme ich Bilder in Intervallen mit der ESP32cam auf, die ich nach jedem Bild in den Tiefschlaf versetze.
Der Abruf vom Zeitserver klappt auch super, aber ich würde das Intervall verständlicherweise nachts etwas vergrössern, also ab 22:00 bis 05:00 reicht ein stündliches Bild aus.

int TIME_TO_SLEEP = 600;
  int th = timeinfo.tm_hour; // +2 nötig
  if (th > 19 or th < 3) { 
    TIME_TO_SLEEP = 3600;
  } else {
    TIME_TO_SLEEP = 600;
  }
  if (internet_connected == false) {
    TIME_TO_SLEEP = 1800;
  }

Also tagsüber klappt das auch mit den 10min (600) in der else Anweisung, aber die if Anweisung geht überhaupt nicht.
Ich kann es mir nicht erklären, aber es wird dann immer die 1800 ausgewählt (obwohl Verbindung vorhanden (auf Server gespeichert)) Wenn ich das weglasse, wird fast im Sekundentakt ein Bild aufgenommen. (Bis der Akku alle ist)
Also es geht ja jetzt irgendwie, aber ich würde es gerne verstehen.

Warum kannst Du keinen eigenen Thread aufmachen?

Der Code ist unvollständig. Du kennst die Ursache. Behebe sie doch einfach.

Tommy56:
Wenn Du das fortlaufend machen willst, solltest Du auch etwa höchstens aller Stunden das Zeitholen ausführen.
Ansonsten:

void loop() {

tm local;
         getLocalTime(&local);
         int stunde = local.tm_hour;




Gruß Tommy

Danke genau dass war es was mir gefehlt hat.

eine Frage nebenbei gibt es eigentlich irgendwo eine Auflistung der befehle usw mit einer kurzen Beschreibung auch der Parameter usw? so ähnlich wie seinerzeit selfhtml, glaube ich war es?

LG Immanuel

foto2004:
eine Frage nebenbei gibt es eigentlich irgendwo eine Auflistung der befehle usw mit einer kurzen Beschreibung auch der Parameter usw? so ähnlich wie seinerzeit selfhtml, glaube ich war es?

cplusplus.com für die Sprache wäre ein Anlaufpunkt.
Die eingesetzten libs bringen meist ein readme und eine keywords.txt mit.

OK danke.

jetzt habe ich doch noch eine Frage wie kann ich die ausgäbe die ich seriell ausgeben kann:

Serial.println(&local, "Datum: %d.%m.%y Zeit: %H:%M:%S");

genau so in eine Variable bringen?

weil String DD = &local, "Datum: %d.%m.%y Zeit: %H:%M:%S"; geht ja nicht.

Du suchst vermutlich snprintf() oder seine Brüder.

Guck doch einfach mal in die Referenz, ein Link wurde dir doch in #10 schon gegeben.

http://www.cplusplus.com/reference/ctime/strftime/

Gruß Fips

ja habe ich mir schon angeschaut aber da verstehe ich nur Bahnhof.

String DD = strftime, "Datum: %d.%m.%y Zeit: %H:%M:%S"; bringt nur Fehler

Da ist doch ein Beispiel dabei, warum nimmst Du das nicht?

Gruß Tommy

foto2004:
ja habe ich mir schon angeschaut aber da verstehe ich nur Bahnhof.

String DD = strftime, "Datum: %d.%m.%y Zeit: %H:%M:%S"; bringt nur Fehler

Löse dich von der "String Klasse" !

Gruß Fips

Tut mir leid aber das Beispiel ist zu hoch für mich. Ich bin da kein Profi .... nur Gelegenheitsstümper naja .... so in der Richtung

Welche Klasse könnt ich sonnst verwenden?

Wenn du "char array" nicht verstehst dann arbeite halt mit der "struct tm".

http://www.cplusplus.com/reference/ctime/tm/

Gruß Fips

foto2004:
Tut mir leid aber das Beispiel ist zu hoch für mich. Ich bin da kein Profi .... nur Gelegenheitsstümper naja .... so in der Richtung

Wenn Du nicht an der Erweiterung Deiner Kenntnisse arbeitest, wirst Du das immer bleiben. Und nach ein paar Minuten aufgeben ist kein "daran arbeiten".

Gruß Tommy