Seite 5 von 5
Re: Garagentor Rule mit Zeitraum
Verfasst: 21. Jul 2018 13:38
von freeman121083
Ich glaub bis ich alles verstanden habe muss ich noch ein paar mal lesen...
Aber ein paar Fragen vorab:
Also wenn das Garagentor innerhalb des Timers zu gemacht wird; wird wieder changed Status getriggert und die rule beginnt von vorne und löscht hiermit= tGarage?cancel erst einmal den alten Timer, oder? jetzt verstehe ich.....
was bedeutet DSL?
Wenn ich einen Timer gelöscht habe, dann brauch ich ihn doch nicht mehr auf null setzen oder?
var Timer tGarage = null // hier gebe ich eine Variable bekannt namens tGarage und setze diese direkt auf null?
"Bin schon ein bisschen begeistert von diesen schier unbegrenzten Möglichkeiten" und ich hatte mir noch einen MDT Logik Modul gekauft um genau solche Dinge abzubilden.
Danke für deine ausführliche Hilfe.
Gruß
Dennis
Re: Garagentor Rule mit Zeitraum
Verfasst: 21. Jul 2018 14:04
von udo1toni
DSL steht für DomainSpecificLanguage. Die Domain ist in diesem Zusammenhang openHAB, das heißt, die Sprache für die Ruleengine hat openHAB-spezifische Erweiterungen. XTend ist die Grundlage hierfür.
var Timer tGarage = null bedeutet "definiere eine
variable vom Typ
Timer mit dem Namen
tGarage und initialisiere sie mit
null" (null bedeutet "nichts")
Wenn ein Timer gecancelt wurde, muss der Zeiger nicht zwingend initialisiert werden. Falls Du natürlich innerhalb einer Rule einen Timer nur dann erzeugst, wenn der Timer null ist, musst Du die Initialisierung vornehmen, da ja sonst Deine Abfrage nicht mehr funktioniert.
Code: Alles auswählen
...
if (tGarage === null) tGarage = createTimer(irgendwas,wasanderes)
...
Wenn der Timer das erste Mal erstellt wird, ist der Inhalt der Variablen null, danach nicht mehr (es sei denn man initialisiert die Variable wieder).
Re: Garagentor Rule mit Zeitraum
Verfasst: 22. Jul 2018 06:39
von freeman121083
und Warum erscheint eine Warnung:
Code: Alles auswählen
2018-07-22 06:36:06.006 [WARN ] [el.core.internal.ModelRepositoryImpl] - Configuration model 'garage_15min.rules' has errors, therefore ignoring it: [9,5]: no viable alternative at input 'tGarage'
Re: Garagentor Rule mit Zeitraum
Verfasst: 22. Jul 2018 07:32
von freeman121083
kann es sein das das löschen des Timers so aussehen muss:
tGarage.cancel()
denn jetzt ist der Fehler weg...?
Re: Garagentor Rule mit Zeitraum
Verfasst: 22. Jul 2018 07:54
von udo1toni
Das sollte eigentlich nicht so sein. Vielleicht hat der Parser da einen Fehler. Das Äquivalent
funktioniert auf jeden Fall. Klammern sind nicht notwendig.
Hast Du die Timer-Variable zu Beginn des Rule-Files definiert? Variablen, die außerhalb einer Rule definiert werden, müssen zu Beginn des Files stehen, vor der ersten Rule:
Code: Alles auswählen
// Name der Datei: meine.rules
// Imports, soweit nicht Standard
import java.lang.irgendwas
import hitchhiker
// File-globale Konstanten
val Number HHantwort = 42
// File-globale Variablen
var String Frage
// Ab hier Rules
rule "Frage berechnen"
when
Item EarthReady changed to OFF
then
Frage = "Was ist 8 multipliziert mit 5?"
if(HHantwort !== null)
logError("frage","Antwort und Frage können nicht im selben Universum existieren!")
end
Re: Garagentor Rule mit Zeitraum
Verfasst: 22. Jul 2018 12:23
von freeman121083
Aber evtl. Hat das mit der Version zu tun. Ich habe openHab Version 2.3.0 im Einsatz.
Habe in mehreren Foren gelesen das Probleme auftauchen können.
Re: Garagentor Rule mit Zeitraum
Verfasst: 22. Jul 2018 21:35
von freeman121083
Hi,
ja so hat es jetzt funktioniert:
Code: Alles auswählen
var Timer tGarage = null //Variable setzen
rule "Garage Timer"
when
Item Garage_kontakt changed
then
if(tGarage !== null) tGarage.cancel // falls noch ein Timer existiert, löschen - unabhängig vom Zustand!
if(Garage_kontakt.state == OPEN) //nur falls Garage geöffnet wurde den Timer erstellen
tGarage = createTimer(now.plusMinutes(15), [|
if(now.getMinuteOfDay > 5 || now.getHourOfDay < 20) // Falls Uhrzeit 19:15:00 - 04:59:59 (19*60 + 14 = 1154 5)
sendTelegram("Dennis", "Garage ist laenger als 15min. auf! ") //Sende Push nachricht
])
end
Re: Garagentor Rule mit Zeitraum
Verfasst: 23. Jul 2018 14:41
von udo1toni
Das bedeutet: Falls nach 0:05 Uhr oder vor 20:00 Uhr, das heißt, diese Einschränkung ist äquivalent zu
Sprich, sie ist immer (ohne Ausnahme!) erfüllt.