2018-12-08

Esp32 Zeitstempel MESZ als Arduino Tab.

Zeit.ino

// ****************************************************************
// Sketch Esp32 Zeitstempel Modular(Tab)
// created: Jens Fleischer, 2018-07-15
// last mod: Jens Fleischer, 2018-12-08
// ****************************************************************
// Hardware: Esp32
// Getestet auf: ESP32 Dev Module
/******************************************************************
  Copyright (c) 2018 Jens Fleischer. All rights reserved.

  This file is free software; you can redistribute it and/or
  modify it under the terms of the GNU Lesser General Public
  License as published by the Free Software Foundation; either
  version 2.1 of the License, or (at your option) any later version.
  This file is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  Lesser General Public License for more details.
*******************************************************************/
// Diese Version von Zeitstempel sollte als Tab eingebunden werden.
// #include <WebServer.h> oder #include <WiFi.h> muss im Haupttab aufgerufen werden
// Funktion "setupTime();" muss im setup() nach dem Verbindungsaufbau aufgerufen werden.
/**************************************************************************************/

#include "time.h"

struct tm tm;

const char* const PROGMEM ntpServer[] = {"fritz.box", "de.pool.ntp.org", "at.pool.ntp.org", "ch.pool.ntp.org", "ptbtime1.ptb.de", "europe.pool.ntp.org"};
const char* const PROGMEM dayNames[] = {"Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"};
const char* const PROGMEM dayShortNames[] = {"So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"};
const char* const PROGMEM monthNames[] = {"Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"};
const char* const PROGMEM monthShortNames[] = {"Jan", "Feb", "Mrz", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez"};

void setupTime() {
  configTime(0, 0, ntpServer[0]);     // deinen NTP Server einstellen (von 0 - 5 aus obiger Liste)
  if (getLocalTime(&tm)) {
    setenv("TZ", "CET-1CEST,M3.5.0/02,M10.5.0/03", 1);  // https://github.com/nayarsystems/posix_tz_db/blob/master/zones.csv
    delay(300);
  }
#ifdef DEBUG
  else {
    DEBUG_F("Zeit konnte nicht geholt werden\n");
    return;
  }
  getLocalTime(&tm);
  DEBUG_F(&tm, "Programmstart: %A, %B %d %Y %H:%M:%S\n");
#endif
  server.on("/zeit", []() {

    server.send(200, "application/json",  "\"" + (String)Zeitstempel() + "\"");
    server.sendHeader("Access-Control-Allow-Origin", "*");
  });
}

char* Zeitstempel() {
  static char buf[20];
  static time_t lastsek = 0;
  getLocalTime(&tm);
  static time_t lastday = 0;
  if (tm.tm_sec != lastsek) {
    lastsek = tm.tm_sec;
    strftime (buf, 20, "%d.%m.%Y %T ", &tm);   // http://www.cplusplus.com/reference/ctime/strftime/
    DEBUG(dayNames[tm.tm_wday]);               // druckt den aktuellen Tag
    DEBUG(monthNames[tm.tm_mon]);              // druckt den aktuellen Monat
    DEBUG(dayShortNames[tm.tm_wday]);          // druckt den aktuellen Tag (Abk.)
    DEBUG(monthShortNames[tm.tm_mon]);         // druckt den aktuellen Monat (Abk.)
    if (tm.tm_mday != lastday) {
      lastday = tm.tm_mday;
      configTime(0, 0, ntpServer[0]);     // deinen NTP Server einstellen (von 0 - 5 aus obiger Liste)
      if (getLocalTime(&tm)) {
        setenv("TZ", "CET-1CEST,M3.5.0/02,M10.5.0/03", 1);  // https://github.com/nayarsystems/posix_tz_db/blob/master/zones.csv
        delay(250);
      }
    }
  }
  return buf;
}

Der Aufruf der Funktion Zeitstempel ist nach ausführen von "setupTime();" möglich.
Du kannst "Zeitstempel();" überall in deinem Sketch einbinden.

Beispiele

 
************** Zeitstempel im Setup ******************

void setup() {
 ......
 .........
  setupTime();
Serial.println(Zeitstempel());

 ......
}



*************** Zeitstempel Seriell ******************

void loop() {
 ......
 .........
  static auto letzteMillis = 0;
  auto aktuelleMillis = millis();
  if (aktuelleMillis - letzteMillis >= 1000) {
    Serial.println(Zeitstempel());
    letzteMillis = aktuelleMillis;
  }
 ......
}



************* Logdatei mit Zeitstempel ***************

File f = SPIFFS.open("/logdatei.txt", "a");
if (f && freeSpace(100)) {      // Anpassen an die zu schreibende Anzahl Byte
  f.printf("%s Event ausgelöst\n", Zeitstempel());
}
f.close();

Zurück