INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
NTP- tägliche Aktion
19.12.2018, 11:27
Beitrag #25
RE: NTP- tägliche Aktion
(18.12.2018 22:35)amithlon schrieb:  Hallo,

dann mach es doch einfach ordentlich:
Code:
void loop()
{
  static bool status = false; // ist aus
  static byte sec_old = 60;
...
  if ( timeinfo->tm_sec != sec_old)    // nur alle Sekunde ausgeben
  {
    sec_old = timeinfo->tm_sec;
    Serial.println("Stunde: " + timeinfo->tm_hour);
    Serial.println("Minuten: " + timeinfo->tm_min);
    Serial.println("Sekunden: " + timeinfo->tm_sec);
  }

  if (status ==  false)
  {
...

Es gibt hier keinen Grund für irgendein delay()

Gruß aus Berlin
Michael

Hallo Michael,
auch damit wird nur sinnloses Zeug in die Konsole ausgegeben (Teile des WLAN Passworts, dauerhaft.)- nirgends ist eine ausgabe von diesem vorgesehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
19.12.2018, 11:38
Beitrag #26
RE: NTP- tägliche Aktion
Gib uns doch mal den aktuellen kompletten Sketch. Die Ausgaben sehen danach aus, als würden falsche Speicherstellen überschrieben.
Bitte auch einen Link auf die Time-Lib.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
19.12.2018, 11:44 (Dieser Beitrag wurde zuletzt bearbeitet: 19.12.2018 12:08 von maxm18.)
Beitrag #27
RE: NTP- tägliche Aktion
Code:
#include "time.h"
#include <ESP8266WiFi.h>

char *ssid      = "XXXXXXXXX";              
char *password  = "XXXXXXXXXX";
int pinRelais = D1;

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"};

void setup(){
  Serial.begin(115200);
  Serial.println();
  Serial.println("Booted");
  Serial.println("Connecting to Wi-Fi");

  WiFi.mode(WIFI_STA);
  WiFi.begin (ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(500);
  }
  Serial.println("WiFi connected");
  setupTime();
  pinMode(pinRelais, OUTPUT);
}
void setupTime() {
  configTime(0, 0, ntpServer[0]);                      
  setenv("TZ", "CET-1CEST,M3.5.0/02,M10.5.0/03", 1);
  delay(300);
}

void loop()
{
  static bool status = false; // ist aus
  
  time_t now = time(nullptr);
  struct tm * timeinfo;
  timeinfo = localtime(&now);
  static byte sec_old = 60;

  if ( timeinfo->tm_sec != sec_old)    // nur alle Sekunde ausgeben
  {
    sec_old = timeinfo->tm_sec;
    Serial.println("Stunde: " + timeinfo->tm_hour);
    Serial.println("Minuten: " + timeinfo->tm_min);
    Serial.println("Sekunden: " + timeinfo->tm_sec);
  }


  if (status ==  false)
  {
    if (/*(timeinfo->tm_hour == 22) and */(timeinfo->tm_min == 24) and (timeinfo->tm_sec == 0))
    {
      status == true; // ein
      digitalWrite(pinRelais, HIGH);
    }
  }
  else
  {
    if (/*(timeinfo->tm_hour == 22) and */(timeinfo->tm_min == 24) and (timeinfo->tm_sec == 20))
    {
      status == false; // aus
      digitalWrite(pinRelais, LOW);    
    }
  }
  delay(1000);
}

Was mir aufgefallen ist: Wenn ich die Abfrage auskommentiere, also so:
Code:
Serial.println("Stunde: " /* + timeinfo->tm_hour*/);
    Serial.println("Minuten: "/* + timeinfo->tm_min*/);
    Serial.println("Sekunden: "/* + timeinfo->tm_sec*/);

Dann passen die Konsolen Ausgaben wieder, also Stunde, Minute, Sekunde vollständig, nichts abgeschnitten und keine WLAN Passwörter o.ä.

Das scheint also mit der Abfrage der Zeit zusammenhängen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
19.12.2018, 12:34
Beitrag #28
RE: NTP- tägliche Aktion
Ok. Der Compiler macht keinen impliziten Typecast von timeinfo->tm_hour nach String. Du musst die Ausgabe anders bauen.
Code:
// falsch
Serial.println("Stunde: " + timeinfo->tm_hour);

// richtig Variante 1 explizite Umwandlung
Serial.println("Stunde: " + String(timeinfo->tm_hour));
// richtig Variante 2 - in meinen Augen besser, weil weniger temporäre Stringobjekte benutzt werden
Serial.print("Stunde: "); Serial.println(timeinfo->tm_hour);

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
19.12.2018, 13:28 (Dieser Beitrag wurde zuletzt bearbeitet: 19.12.2018 14:08 von maxm18.)
Beitrag #29
RE: NTP- tägliche Aktion
(19.12.2018 12:34)Tommy56 schrieb:  Ok. Der Compiler macht keinen impliziten Typecast von timeinfo->tm_hour nach String. Du musst die Ausgabe anders bauen.
Code:
// falsch
Serial.println("Stunde: " + timeinfo->tm_hour);

// richtig Variante 1 explizite Umwandlung
Serial.println("Stunde: " + String(timeinfo->tm_hour));
// richtig Variante 2 - in meinen Augen besser, weil weniger temporäre Stringobjekte benutzt werden
Serial.print("Stunde: "); Serial.println(timeinfo->tm_hour);

Gruß Tommy

Danke, das erklärt natürlich den Fehler.
Die Ausgabe passt jetzt auch:
Code:
Stunde: 13
Minuten: 27
Sekunden: 49

Ich teste jetzt das AN/AUS schalten.

Also AN schaltet er zuverlässig, AUS jedoch gar nicht.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
19.12.2018, 17:27 (Dieser Beitrag wurde zuletzt bearbeitet: 19.12.2018 17:55 von Tommy56.)
Beitrag #30
RE: NTP- tägliche Aktion
(19.12.2018 13:28)maxm18 schrieb:  Also AN schaltet er zuverlässig, AUS jedoch gar nicht.
Da könnte Dein delay(1000) schuld sein. Nimm das mal raus bzw. probiere mal
Code:
... and (timeinfo->tm_sec >= 20)

Gruß Tommy

Die Ursache ist gefunden:
Du schreibst == (Vergleich) wo Du Ändern willst = (Zuweisung):
Code:
if (status ==  false)
  {
    if (/*(timeinfo->tm_hour == 22) and */(timeinfo->tm_min == 24) and (timeinfo->tm_sec == 0))
    {
      status == true; // ein      <<<<<******** das muss = heißen (Zuweisung)
      digitalWrite(pinRelais, HIGH);
    }
  }
  else
  {
    if (/*(timeinfo->tm_hour == 22) and */(timeinfo->tm_min == 24) and (timeinfo->tm_sec == 20))
    {
      status == false; // aus      <<<<<******** das muss = heißen (Zuweisung)
      digitalWrite(pinRelais, LOW);    
    }
  }
Da zeigt mal wieder wie man eher das liest, was man lesen will und nicht das, was dort steht.
Erst mit Ausgabe von Status habe ich es gemerkt.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
19.12.2018, 18:09
Beitrag #31
RE: NTP- tägliche Aktion
Hallo Tommy,
Den Delay hatte ich komplett vergessen, ist jetzt draußen! Schaltet leider immer noch nicht aus.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
19.12.2018, 18:10
Beitrag #32
RE: NTP- tägliche Aktion
(19.12.2018 18:09)maxm18 schrieb:  Hallo Tommy,
Den Delay hatte ich komplett vergessen, ist jetzt draußen! Schaltet leider immer noch nicht aus.
Hast Du meinen Beitrag mit == und = gelesen?

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste