Seite 3 von 3

Re: RTC mit Raspberrymatic/CCU synchronisieren

Verfasst: 11.08.2020, 09:05
von stan23
Oder aber so:

Code: Alles auswählen

/* treat timezone as 6 bit signed integer */
int8_t timezone = msg.buffer()[10] << 2;
timezone = timezone >> 3;	/* ToDo: handle half hours in case AskSin++ devices will ever be used in these timezones ;)*/
Soweit ich weiß wird beim signed shift das Vorzeichen beachtet.

Ja die halben Stunden habe ich wohl irgendwann mal auf der Landkarte gesehen...

Re: RTC mit Raspberrymatic/CCU synchronisieren

Verfasst: 11.08.2020, 15:28
von jp112sdl
Funktioniert!

Re: RTC mit Raspberrymatic/CCU synchronisieren

Verfasst: 12.08.2020, 16:45
von ichdenkenicht
Ja funktioniert wunderbar mit SetInterfaceClock und
jp112sdl hat geschrieben:
11.08.2020, 07:48
Ich hab mich mal der populären TimeLib von PaulStoffregen bedient, die ich auch in anderen Projekten benutze.

Code: Alles auswählen

  virtual bool process(Message& msg) {
    if (getMasterID() == msg.from()) {
      if(msg.type() == AS_MESSAGE_TIMESTAMP) {
        if (msg.command() == AS_ACTION_SET) {
         DPRINTLN("Got TIMESTAMP Message");
         static const uint32_t sec2000 = 946684800;

         int8_t timezone = msg.buffer()[10] / 2;

         uint32_t tPayload =
            (((uint32_t)msg.buffer()[11]) << 24) +
            (((uint32_t)msg.buffer()[12]) << 16) +
            (((uint32_t)msg.buffer()[13]) << 8) +
            (((uint32_t)msg.buffer()[14]))       ;

         uint32_t unixtime = sec2000 + tPayload;

         setTime(unixtime);

         time_t t = now();
         DPRINT("UTC   Time is ");DDEC(day(t));DPRINT(".");DDEC(month(t));DPRINT(".");DDEC(year(t));DPRINT(" ");DDEC(hour(t));DPRINT(":");DDEC(minute(t));DPRINT(":");DDECLN(second(t));

         adjustTime(timezone * 3600);
         t = now();
         DPRINT("local Time is ");DDEC(day(t));DPRINT(".");DDEC(month(t));DPRINT(".");DDEC(year(t));DPRINT(" ");DDEC(hour(t));DPRINT(":");DDEC(minute(t));DPRINT(":");DDECLN(second(t));
        }
      }
    }

    return ChannelDevice::process(msg);
  }
  

Code: Alles auswählen

Got TIMESTAMP Message
UTC   Time is 11.8.2020 5:38:30
local Time is 11.8.2020 7:38:30
Die Prüfung auf negative Zeitverschiebung fehlt noch.
AST/ADT UTC-4/-3 wäre 3A als Zeitzone. Da ist sicher irgendein Bit als Negativkennzeichen? Da fehlt mir das Wissen, wie man von 3A ( auch geteilt durch 2?) auf -4 kommt...
Vielen Dank ihr alle, brauch ich ja fast gar nichts mehr selber machen :Q

Re: RTC mit Raspberrymatic/CCU synchronisieren

Verfasst: 07.09.2020, 15:34
von Gromit
Hallo zusammen. Ich versuche gerade die "Tageszeit von HMCFGLAN für Arduino-Mini mit M-LC-Dim1PWM-CV und CC1101 über Asksinpp holen", siehe viewtopic.php?f=76&t=59990&e=1&view=unread#p594608

Da ich auch die TimeLib von PaulStoffregen benutze, würde ich den CODE von oben gerne testen.
Leider bin ich noch etwas planlos, an welcher Stelle in meinem Asksinpp-Code ich

Code: Alles auswählen

virtual bool process(Message& msg)...
einsetzen soll:
https://asksinpp.de/Projekte/psi/HM-LC-Dim1PWM/#platine
https://github.com/AskSinPP/asksinpp.de ... M_btns.ino

Könnt ihr mir ein paar Tipps geben? Habe ich das richtig verstanden, dass SetInterfaceClock von der CCU bzw. FHEM selbst zyklisch ausgeführt wird und damit automatisch das benötigte Uhrzeit-Datenpacket an alle Aktoren sendet?

Vielen Dank schonmal!

Re: RTC mit Raspberrymatic/CCU synchronisieren

Verfasst: 07.09.2020, 18:12
von jp112sdl
Die DimmerDevice Klasse nicht aus der Dimmer.h verwenden, sondern im Sketch implementieren.
Da dann den TIMESTAMP-Code reinpacken.
Gromit hat geschrieben:
07.09.2020, 15:34
Habe ich das richtig verstanden, dass SetInterfaceClock von der CCU bzw. FHEM selbst zyklisch ausgeführt wird und damit automatisch das benötigte Uhrzeit-Datenpacket an alle Aktoren sendet?
Ob FHEM das macht, weiß ich nicht. Die CCU macht es, ja.
Mit crontab -l kannst du schauen, wie oft der Befehl aufgerufen wird (bei mir alle 6 Stunden)

Re: RTC mit Raspberrymatic/CCU synchronisieren

Verfasst: 13.09.2020, 15:37
von Gromit
Super vielen Dank für die schnelle und hilfreiche Antwort. Ich werde es in Kürze ausprobieren und wieder berichten.