RTC mit Raspberrymatic/CCU synchronisieren

Entwicklung und Bau von Hardware aller Art, die im HM-Umfeld eingesetzt werden kann

Moderator: Co-Administratoren

Benutzeravatar
stan23
Beiträge: 2030
Registriert: 13.12.2016, 21:14
System: Alternative CCU (auf Basis OCCU)
Wohnort: Altmühltal
Hat sich bedankt: 576 Mal
Danksagung erhalten: 335 Mal
Kontaktdaten:

Re: RTC mit Raspberrymatic/CCU synchronisieren

Beitrag von stan23 » 11.08.2020, 09:05

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...
Viele Grüße
Marco

RaspberryMatic als VM auf einem NUC mit Proxmox und USB-Funkmodul
~80 Geräte (HM, HmIP, HMW, HBW, AskSin)

jp112sdl
Beiträge: 12085
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 847 Mal
Danksagung erhalten: 2139 Mal
Kontaktdaten:

Re: RTC mit Raspberrymatic/CCU synchronisieren

Beitrag von jp112sdl » 11.08.2020, 15:28

Funktioniert!

VG,
Jérôme ☕️

---
Support for my Homebrew-Devices: Download JP-HB-Devices Addon

ichdenkenicht
Beiträge: 3
Registriert: 09.08.2020, 19:23
System: Alternative CCU (auf Basis OCCU)

Re: RTC mit Raspberrymatic/CCU synchronisieren

Beitrag von ichdenkenicht » 12.08.2020, 16:45

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

Gromit
Beiträge: 5
Registriert: 22.07.2020, 14:23
System: keine Zentrale (nur Pairing, FHEM etc.)

Re: RTC mit Raspberrymatic/CCU synchronisieren

Beitrag von Gromit » 07.09.2020, 15:34

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!

jp112sdl
Beiträge: 12085
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 847 Mal
Danksagung erhalten: 2139 Mal
Kontaktdaten:

Re: RTC mit Raspberrymatic/CCU synchronisieren

Beitrag von jp112sdl » 07.09.2020, 18:12

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)

VG,
Jérôme ☕️

---
Support for my Homebrew-Devices: Download JP-HB-Devices Addon

Gromit
Beiträge: 5
Registriert: 22.07.2020, 14:23
System: keine Zentrale (nur Pairing, FHEM etc.)

Re: RTC mit Raspberrymatic/CCU synchronisieren

Beitrag von Gromit » 13.09.2020, 15:37

Super vielen Dank für die schnelle und hilfreiche Antwort. Ich werde es in Kürze ausprobieren und wieder berichten.

Antworten

Zurück zu „Hardwareentwicklung und Selbstbau von Aktoren und Sensoren“