Garagentor Rule mit Zeitraum

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

freeman121083
Beiträge: 111
Registriert: 16. Jul 2018 06:32

Re: Garagentor Rule mit Zeitraum

Beitrag 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

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

Re: Garagentor Rule mit Zeitraum

Beitrag 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).
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

freeman121083
Beiträge: 111
Registriert: 16. Jul 2018 06:32

Re: Garagentor Rule mit Zeitraum

Beitrag 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'

freeman121083
Beiträge: 111
Registriert: 16. Jul 2018 06:32

Re: Garagentor Rule mit Zeitraum

Beitrag von freeman121083 »

kann es sein das das löschen des Timers so aussehen muss:

tGarage.cancel()

denn jetzt ist der Fehler weg...?

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

Re: Garagentor Rule mit Zeitraum

Beitrag von udo1toni »

Das sollte eigentlich nicht so sein. Vielleicht hat der Parser da einen Fehler. Das Äquivalent

Code: Alles auswählen

if(tGarage !== null) tGarage.cancel
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
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

freeman121083
Beiträge: 111
Registriert: 16. Jul 2018 06:32

Re: Garagentor Rule mit Zeitraum

Beitrag 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.

freeman121083
Beiträge: 111
Registriert: 16. Jul 2018 06:32

Re: Garagentor Rule mit Zeitraum

Beitrag 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

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

Re: Garagentor Rule mit Zeitraum

Beitrag von udo1toni »

Code: Alles auswählen

if(now.getMinuteOfDay > 5 || now.getHourOfDay < 20)  
Das bedeutet: Falls nach 0:05 Uhr oder vor 20:00 Uhr, das heißt, diese Einschränkung ist äquivalent zu

Code: Alles auswählen

if(true)
Sprich, sie ist immer (ohne Ausnahme!) erfüllt.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Antworten