Bei "strftime" den Wert von (weekday %w) um 1 erhöhen.

  • Hallo

    Bei einem ESP8266 Projekt mit RTC soll die NTP Zeit zum setzen der RTC benutzt werden.

    Leider ist bei "strftime" der Sonntag = 0 und bei der "uRTCLib" zum setzen der RTC ist der Sonntag = 1

    Wie kann ich das Problem lösen.

  • Bei "strftime" den Wert von (weekday %w) um 1 erhöhen.? Schau mal ob du hier fündig wirst!

  • Zur hilfreichsten Antwort springen
  • Moin md_fg,

    Tell: Hatte ich auch erst gedacht. Meine Überlegung:

    Code
    strftime (dsbuf, sizeof(dsbuf), "%S,%M,%H,%w+1,%d,%m,%Y", &tm);

    Was aber wenn der Wochentag gerade 7 ist?

    @ md_fg wäre es nicht einfacher die Lib anzupassen?

    73 de Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"
    Vielleicht trifft man sich in der RPi-Plauderecke.
    Linux ist zum Lernen da, je mehr man lernt um so besser versteht man es.

  • Bernd666: es gibt 7 Tage in der Woche, also 0..6

    Und die Idee mit dem +1 im Format-String klappt auch nicht:

    Spoiler anzeigen

    48,27,13,2+1,14,04,

    48,27,13,3,14,04,2020

  • Wirklich?

    Oder wird da auf ein Array falsch zugegriffen. Denn normalerweise ist beim amerikanschen Datumsformat (also dem normalen bei den allermeisten *ix Systemen ohne spezielle Konfiguation) die Woche mit dem Sonntag begonnen und der Sonntag als erster Tag definiert. Da wäre es schon sehr komisch, wenn der Sonntag den Index 1 hätte.

    Computer ..... grrrrrr

    • Offizieller Beitrag

    Gibt es sowas wie dictionary objekte in c? So dass du dir einfach ein Mapping baust um den richtigen int zum jeweiligen Tag zu holen?

    Der Unterschied zwischen Genie und Wahnsinn definiert sich im Erfolg.

  • Versuch mal die RTClib von Adafruit.

    Dort ist Sunday=0

    Zitat

    To install, use the Arduino Library Manager to search for "RTClib", find "RTClib by Adafruit" and install the library.

    Please note that dayOfTheWeek() ranges from 0 to 6 inclusive with 0 being 'Sunday'.

    https://github.com/adafruit/RTClib

    Offizieller Schmier und Schmutzfink des Forum.
    Warum einfach wenn's auch schwer geht ?

    Kein Support per PN !
    Fragen bitte hier im Forum stellen. So hat jeder etwas davon.

  • Rasp-Berlin: Da wäre es schon sehr komisch, wenn der Sonntag den Index 1 hätte.

    Ich hab auch so meine Zweifel, aber md_fg hat es so spezifiziert

    dbv: Gibt es sowas wie dictionary objekte in c?

    Noeh, aber man koennte ein Array als Lookup-Table nehmen.

    Die Reihenfolge des Wochentage ist aber in allen mir bekannten Kalendern gleich und deshalb kommt man oft mit Addition und Modulo aus.

  • Hallo

    Danke an alle

    Der Beitrag von Tell aus #4 erreicht genau das was ich wollte.

    Code
    tm.tm_wday += 1 ;
    // zeigt dann richtig die 3 für Dienstag
    15:44:56.511 -> DsBuffer
    15:44:56.511 -> 55,44,15,3,14,04,2020
    
    // Die "uRTCLib.h" benutzt die 1 für Sonntag und die 7 für Sonnabend. Damit ist die 3 OK

    Die RTClib von Adafruit muss ich noch testen.

    Das nächste Problem kommt beim setzen der RTC die Bibliothek verlangt folgendes.

    Code
    rtc.set(0, 34, 16, 5, 20, 02, 20);
    // RTCLib::set(byte second, byte minute, byte hour, byte dayOfWeek, byte dayOfMonth, byte month, byte year)
    
        Serial.println(F("Debug: Die RTC wird mit der NTP Zeit gesetzt: "));  // Debug
        rtc.set(dsbuf);
    
    // Die Arduino IDE bringt diesen Fehler:   no matching function for call to 'uRTCLib::set(char [23])'

    Mein char dsbuf[23] muss auf byte zerlegt werden aber wie

  • Hallo Tell

    Die Idee ist super aber die Arduino IDE ist sehr eigen.

    Code
    rtc.set( (byte)tm.tm_sec, (byte)tm.tm_min, (byte)tm.tm_hour, (byte)tm.tm_wday, (byte)tm.tm_mday, (byte)tm.tm_mon, (byte)tm.tm_year );
    expected primary-expression before '.' token
    
    rtc.set ((byte) tm.tm_sec) ;
    no matching function for call to 'uRTCLib::set(byte)'
    
    rtc.set (byte tm.tm_sec) ;
    expected primary-expression before 'tm'
  • Hallo

    Es wird noch verückter als Test habe diesen Code benutzt.

    Das Ergebnis davon

    Warum ist der Monat und das Jahr wieder falsch.

    22:02:25.870 -> Lost power status: POWER OK

    22:02:25.870 -> 25,02,22,3,15,04,20 # OK

    22:02:25.870 -> DsBuffer

    22:02:25.870 -> 25,02,22,3,15,04,20 # OK

    22:02:25.870 -> Debug: RTC setzen mit :

    22:02:25.870 -> 25,2,22,4,15,3,120 # Fehler bei Monat und Jahr

  • Hallo

    Mit dem geänderten Code sieht es dann gut aus.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!