Zeit Differenz

Für welche Projekte verwendet Ihr OpenHAB? Was habt Ihr automatisiert? Stellt eure Projekte hier vor.

Moderatoren: Cyrelian, seppy

Wolle17
Beiträge: 39
Registriert: 9. Feb 2023 05:37

Zeit Differenz

Beitrag von Wolle17 »

Guten Abend zusammen.
Ich wollte mir eine Rule für einen Countdown für Kalendereinträge anlegen. Und da meine Echo Countdown rules zu gut funktionieren wollte ich sie einfach ummünzen. Jetzt habe ich aber das Problem dass eine Rule die Zeitdifferenz berechnet, das macht sie aber nur zwischen zwei Uhrzeiten, bei einem Kalender liege meinst aber Tage zwischen der aktuellen Zeit und dem Kalendereintrag.
Vielleicht kann mir ja jemand helfen.

Code: Alles auswählen

 
 configuration: {}
triggers:
  - id: "1"
    configuration:
      itemName: EchoKuche_NachsterTimer
      previousState: UNDEF
    type: core.ItemStateChangeTrigger
conditions: []
actions:
  - inputs: {}
    id: "2"
    configuration:
      type: application/javascript;version=ECMAScript-5.1
      script: >-
        var zdt = Java.type('java.time.ZonedDateTime'); 
        var duration = Java.type('java.time.Duration'); 
        var localTime = Java.type('java.time.LocalTime'); 
        var chronunit = Java.type('java.time.temporal.ChronoUnit');

        var alarm = itemRegistry.getItem("EchoKuche_NachsterTimer").state;
         var countdown = itemRegistry.getItem("EchoKuche_Countdown"); 
         var coutndownMaxSekunden = itemRegistry.getItem("EchoKuche_NachsterTimerMaxSekunden"); 
         var coutndownSekunden = itemRegistry.getItem("EchoKuche_NachsterTimerSekunden"); 
         var jetzt = zdt.now().toLocalTime(); 
         var alarmTime = alarm.getZonedDateTime().toLocalTime(); 
         var diff = duration.between(jetzt, alarmTime);
          var startime = localTime.of(0, 0,0).plus(diff).truncatedTo(chronunit.SECONDS);


        events.postUpdate(countdown, startime.toString()); events.postUpdate(coutndownMaxSekunden, diff.getSeconds()); events.postUpdate(coutndownSekunden, diff.getSeconds());
    type: script.ScriptAction
  - inputs: {}
    id: "3"
    configuration:
      enable: true
      ruleUIDs:
        - 81f01c329e
    type: core.RuleEnablementAction
Vielen Dank im Voraus

nw378
Beiträge: 193
Registriert: 22. Sep 2018 10:38
Answers: 4

Re: Zeit Differenz

Beitrag von nw378 »

So kannst Du einfach die Berechnung der Differenz auf Tage ändern:

Code: Alles auswählen

  var diff = duration.between(jetzt, alarmTime).toDays;
openHAB 4.1.0 @ RPi 4 / SSD - InfluxDB2 und Grafana @ Synology Docker - KNX

Wolle17
Beiträge: 39
Registriert: 9. Feb 2023 05:37

Re: Zeit Differenz

Beitrag von Wolle17 »

Danke für die Antwort,

Leider hat es nicht den erwünschten Erfolg gebracht, der Itemwert liegt noch immer bei -47270 (also die zeitliche Differenz zwischen jetzt (13:13) und der StartUhrzeit des Eintrags (00:00)).
Richtig wäre bei dem nächsten Kalendereintrag ca 558000 Sekunden (also 6 Tage und 11h.

nw378
Beiträge: 193
Registriert: 22. Sep 2018 10:38
Answers: 4

Re: Zeit Differenz

Beitrag von nw378 »

Das ist merkwürdig. Insbesondere wegen dem negativen Vorzeichen. Das bedeutet ja, dass der zu vergleichende Zeitpunkt in der Vergangenheit liegt!

Bist Du Dir sicher, dass EchoKuche_NachsterTimer in der Zukunft liegt?

Füg doch mal unter var diff folgendes ein und schau, was im Log steht:

Code: Alles auswählen

logInfo("Test",diff)
openHAB 4.1.0 @ RPi 4 / SSD - InfluxDB2 und Grafana @ Synology Docker - KNX

Wolle17
Beiträge: 39
Registriert: 9. Feb 2023 05:37

Re: Zeit Differenz

Beitrag von Wolle17 »

Ja, ganz sicher um 00:00 am 08.12., und das Minus weil nur 0Uhr und nicht das Datum berücksichtigt wird, es wird also stumpf zurück anstatt nach vorne gerechnet.

nw378
Beiträge: 193
Registriert: 22. Sep 2018 10:38
Answers: 4

Re: Zeit Differenz

Beitrag von nw378 »

Welches Item / welche Variable zeigt denn die -47270 Sekunden an?

coutndownMaxSekunden und coutndownSekunden weist Du ja Sekunden zu, durch: diff.getSeconds
openHAB 4.1.0 @ RPi 4 / SSD - InfluxDB2 und Grafana @ Synology Docker - KNX

Benutzeravatar
udo1toni
Beiträge: 13696
Registriert: 11. Apr 2018 18:05
Answers: 221
Wohnort: Darmstadt

Re: Zeit Differenz

Beitrag von udo1toni »

Du musst statt LocalTime einfach LocalDateTime verwenden.
Im Übrigen würde ich erwarten, dass JavaTime (zumindest die fraglichen Elemente) bereits direkt in JavaScript zur Verfügung steht (ich nutze allerdings selbst kein JavaScript, kann also auch eine Fehleinschätzung sein)
openHAB4.1.1 stable in einem Debian-Container (bookworm) (Proxmox 8.1.4, LXC), mit openHABian eingerichtet

Wolle17
Beiträge: 39
Registriert: 9. Feb 2023 05:37

Re: Zeit Differenz

Beitrag von Wolle17 »

Hallo Udo,

Ich habe jetzt versucht

Code: Alles auswählen

var localTime = Java.type('java.time.LocalTime'); 
In

Code: Alles auswählen

var localTime = Java.type('java.time.LocalDateTime'); 

zu ändern.
Auch das leider ohne Erfolg.
Muss ich es noch irgendwo anpassen?

Danke und Gruß

Benutzeravatar
udo1toni
Beiträge: 13696
Registriert: 11. Apr 2018 18:05
Answers: 221
Wohnort: Darmstadt

Re: Zeit Differenz

Beitrag von udo1toni »

Na ja, da sind auch noch Methoden toLocalTime, die müssen natürlich ebenfalls in toLocalDateTime geändert werden.
Ob die Startzeit so korrekt ist?

Letztlich muss die Berechnung halt auf DateTime umgestellt werden, alle Bezüge und Funktionen, die nur Time verwenden, müssen auf DateTime geändert werden.
openHAB4.1.1 stable in einem Debian-Container (bookworm) (Proxmox 8.1.4, LXC), mit openHABian eingerichtet

Wolle17
Beiträge: 39
Registriert: 9. Feb 2023 05:37

Re: Zeit Differenz

Beitrag von Wolle17 »

Leider war auch das ohne Erfolg.

Antworten