Garagentor Rule mit Zeitraum
-
- Beiträge: 111
- Registriert: 16. Jul 2018 06:32
Re: Garagentor Rule mit Zeitraum
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
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
- udo1toni
- Beiträge: 13866
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Garagentor Rule mit Zeitraum
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.
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).
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)
...
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 111
- Registriert: 16. Jul 2018 06:32
Re: Garagentor Rule mit Zeitraum
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'
-
- Beiträge: 111
- Registriert: 16. Jul 2018 06:32
Re: Garagentor Rule mit Zeitraum
kann es sein das das löschen des Timers so aussehen muss:
tGarage.cancel()
denn jetzt ist der Fehler weg...?
tGarage.cancel()
denn jetzt ist der Fehler weg...?
- udo1toni
- Beiträge: 13866
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Garagentor Rule mit Zeitraum
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
if(tGarage !== null) tGarage.cancel
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
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 111
- Registriert: 16. Jul 2018 06:32
Re: Garagentor Rule mit Zeitraum
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.
Habe in mehreren Foren gelesen das Probleme auftauchen können.
-
- Beiträge: 111
- Registriert: 16. Jul 2018 06:32
Re: Garagentor Rule mit Zeitraum
Hi,
ja so hat es jetzt funktioniert:
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
- udo1toni
- Beiträge: 13866
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Garagentor Rule mit Zeitraum
Code: Alles auswählen
if(now.getMinuteOfDay > 5 || now.getHourOfDay < 20)
Code: Alles auswählen
if(true)
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet