Seite 1 von 2

Zeit Differenz

Verfasst: 30. Nov 2023 20:28
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

Re: Zeit Differenz

Verfasst: 1. Dez 2023 11:50
von nw378
So kannst Du einfach die Berechnung der Differenz auf Tage ändern:

Code: Alles auswählen

  var diff = duration.between(jetzt, alarmTime).toDays;

Re: Zeit Differenz

Verfasst: 1. Dez 2023 13:18
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.

Re: Zeit Differenz

Verfasst: 1. Dez 2023 13:38
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)

Re: Zeit Differenz

Verfasst: 1. Dez 2023 14:28
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.

Re: Zeit Differenz

Verfasst: 1. Dez 2023 16:15
von nw378
Welches Item / welche Variable zeigt denn die -47270 Sekunden an?

coutndownMaxSekunden und coutndownSekunden weist Du ja Sekunden zu, durch: diff.getSeconds

Re: Zeit Differenz

Verfasst: 1. Dez 2023 19:54
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)

Re: Zeit Differenz

Verfasst: 1. Dez 2023 23:00
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ß

Re: Zeit Differenz

Verfasst: 1. Dez 2023 23:27
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.

Re: Zeit Differenz

Verfasst: 1. Dez 2023 23:56
von Wolle17
Leider war auch das ohne Erfolg.