[GELOEST] übergabe zweier Werte aus Text Elementen via Button - Hilfe

  • Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Fips

Neues Mitglied
22 Dezember 2019
19
1
3
36
Struct tm enthält in C++ die Kalenderzeit, mit der Suchmaschiene deiner Wahl findest du für was es gut ist.

Klar wäre es einfach nur die Zeiten zu vergleichen und dann zu Aktivieren/Deaktivieren wenn sie übereinstimme
aber wenn ich es Aktiviere wärend ich in dem Bereich bin, startet es ja nicht.
Das klappt natürlich nicht mit dem Vergleich zweier cstring.
Für die Abfrage ob ich aktuell im Zeitraum bin würde ich mit Integer arbeiten.

Einschaltzeit von der Webseite in ein int umwandeln.
C++:
  String myTime = "12:11";
  myTime.replace(":", "");
  int ein = myTime.toInt();
  Serial.println(ein); // Ausgabe: 1211

Die Abfrage würde dann so aussehen.
C++:
int Uhrzeit = 1216;
int ein = 1211;
int aus = 1255;
if (Uhrzeit >= ein && Uhrzeit < aus) Serial.println("Im Zeitraum");

C++:
#include <ESP8266WiFi.h>
#include <time.h>          // Im EspCore enthalten

const uint32_t SYNC_INTERVAL = 24;                                             // NTP Sync Interval in Stunden einstellen

struct tm tm;

const char* const PROGMEM NTP_SERVER[] = {"fritz.box", "de.pool.ntp.org", "at.pool.ntp.org", "ch.pool.ntp.org", "ptbtime1.ptb.de", "europe.pool.ntp.org"};

void setupTime() {                              // deinen NTP Server einstellen (von 0 - 5 aus obiger Liste) alternativ lassen sich durch Komma getrennt bis zu 3 Server angeben
  configTime("CET-1CEST,M3.5.0,M10.5.0/3", NTP_SERVER[1]);  // Zeitzone einstellen https://github.com/nayarsystems/posix_tz_db/blob/master/zones.csv
}

int localTime() {
  static int zeit;
  static time_t lastsec;
  time_t now = time(&now);
  localtime_r(&now, &tm);
  if (tm.tm_sec != lastsec) {
    lastsec = tm.tm_sec;
    if (!(time(&now) % (SYNC_INTERVAL * 3600))) {
      setupTime();
    }
    zeit = tm.tm_hour * 100 + tm.tm_min;
  }
  return zeit;
}

const char* ssid = "Netzwerkname";             // << kann bis zu 32 Zeichen haben
const char* password = "PasswortvomNetzwerk";  // << mindestens 8 Zeichen jedoch nicht länger als 64 Zeichen

void setup() {
  Serial.begin(115200);
  Serial.println();
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(F("."));
  }
  setupTime();
}

void loop() {
  int ein = 839;
  int aus = 1255;
  static uint32_t previousMillis;
  uint32_t currentMillis {millis()};
  if (currentMillis - previousMillis >= 1000) {
    previousMillis = currentMillis;
    Serial.println(localTime());
    int Uhrzeit = localTime();
    if (Uhrzeit >= ein && Uhrzeit < aus) Serial.println("Im Zeitraum");
  }
}
 

Richi

Neues Mitglied
26 September 2020
20
0
1
37
Code:
if (Uhrzeit >= ein && Uhrzeit < aus) Serial.println("Im Zeitraum");
Und genau mit dieser Zeile ist es eben nicht getan bei mir.
Ich hab jetzt eine Woche an einem Messalgorytmus getüftelt um die Zeitformate miteinander zu vergleichen.
Es ich ohne Wochentage Arbeite und natürlich eine Zeitverdrehung geben kann wenn ich zB: die AN Zeit bei 22:34Uhr liegt und die AUS Zeit bei 0:10Uhr dann ist AUS < AN. Das selbe gild ja für die Minutenbereiche, wenn die AN und AUS Stunde gleich ist, auch. Hat mir echt ein wenig Kopfzerbrechen bereitet. Aber heut scheine ich es vollendet bekommen zu haben. Zumindest schaltet er richtig in sämtlichen Zeit Varianten.
 
Werbung:

Neueste Beiträge