Seite 1 von 1
Timer mit x.y sekunden in rule ?
Verfasst: 14. Mär 2023 08:44
von Mattes
Hallo zusammen,
bei der Migration auf OH3 stosse ich gerade auf ein neues Problem - in der rule (erstellt als file) funktioniert die Funktion timer mit zehntel-Sekunden nicht ;( da bräuchte ich wohl mal eure Hilfe..
der Timer mit der Definition :
createTimer(now.plusSeconds(5) funktioniert... setze ich da aber 5.5 oder 5,9 ein wird das ignoriert - die Laufzeit verändert sich nicht.
Bei der Recherche im Forum habe ich als Lösung
createTimer(now.plusMillis(x)) gefunden.
Das funktioniert leider nicht und liefert einen Fehler:
'plusMillis' is not a member of 'java.time.ZonedDateTime';
Ich hbenötige aber einen/mehrere timer mit 2,5 sec.
Habt ihr eine Idee wieso (now.plusMillis(x)) bei mir zum Fehler führt? es scheint ja irgendwie prinzipiell zu funktionieren (ausser bei mir

)
Danke schon mal für eure Hilfe
Re: Timer mit x.y sekunden in rule ?
Verfasst: 14. Mär 2023 09:23
von UausO
Hallo
Ich habe im englischen Forum nachgeschaut, und bin auf nowplusNanos gestoßen.
Re: Timer mit x.y sekunden in rule ?
Verfasst: 14. Mär 2023 12:50
von udo1toni
So ist es.
openHAB
2 nutzte noch
Joda Time, welches die Methode
.plusMillis(long) hatte.
openHAB
3 nutzt
JavaTime, welches "nur" die Methode
.plusNanos(long) unterstützt.
Also, natürlich gibt es noch jede Menge andere Methoden, aber eben kein
.plusMillis().

Re: Timer mit x.y sekunden in rule ?
Verfasst: 14. Mär 2023 19:13
von Mattes
Hallo,
erst mal danke für die Infos - das mit den Nanos hatte ich auch irgendwo gelesen und probiert... hab da vielleicht was falsch gemacht

Also werde ich das mal so testen

- hab nur über die unzähligen Nullen gestaunt (der timer 2,5 sek = 2500000000 nanos
so getestet - funzt
Danke euch...
Re: Timer mit x.y sekunden in rule ?
Verfasst: 16. Mär 2023 13:12
von Mattes
Hallo,
das mit den Nanos funktioniert ja nun... aber warum kommt die Fehlermeldung:
2023-03-16 12:57:41.956 [INFO ] [el.core.internal.ModelRepositoryImpl] - Validation issues found in configuration model '0A.rules', using it anyway:
Invalid number format: Integer literal is out of range: 2500000000
Die Zeile sieht so aus:
if (KNX_0_0_14.state == OFF && Shelly3.state == "stop") {
logInfo("Info","logInfo Jalousie WL L Verstellen Auf gestartet")
Shelly3.sendCommand("open")
createTimer(now.plusNanos(2500000000), [ |
Shelly3.sendCommand("stop")
logInfo("Info","logInfo Jalousie WL L Verstellen stop")
])
}
Ich hatte die logInfo eingebaut um die rule zu testen - ein wertvoller Tip von Udo

Die rule funktioniert beide logInfo kommen...warum kommt jetzt noch die Warnung / Fehler ? muss da irgendwo noch in den Konfigs was eingestellt werden?
Re: Timer mit x.y sekunden in rule ?
Verfasst: 16. Mär 2023 16:45
von udo1toni
Das ist natürlich Quatsch, denn plusNanos erwartet einen Long Wert, kein Integer, und deshalb funktioniert die Rule auch anstandslos. Die Meldung ist ja auch nur auf Level Info und betrifft nur die Code Validation. Vermutlich könntest Du gezielt eine lokale Long Konstante anlegen, in der Du den Wert speicherst und diese angeben.
Etwas, was ich noch nicht ausprobiert habe, was aber nach Doku ebenfalls funktionieren könnte:
Code: Alles auswählen
createTimer(now.plus(2500,ChronoUnit.MILLIS),[|
// Timer-Code
])
denn beim allgemeinen .plus() wird die ChronoUnit angegeben, und da gibt es selbstverständlich auch Millisekunden, Mikrosekunden, Dekaden, halbe Tage, was das Herz so begehrt (incl. die Unendlichkeit...)
https://docs.oracle.com/javase/8/docs/a ... oUnit.html