Wenn item = ein dann nach 1h Stunde ausschalten

Alles zu Rules, Items, Sitemaps unter openHAB 1.X

Moderatoren: seppy, udo1toni

Kito
Beiträge: 16
Registriert: 7. Jul 2019 15:30

Re: Wenn item = ein dann nach 1h Stunde ausschalten

Beitrag von Kito » 21. Jul 2019 22:22

Mhhh, bin erst heute dazu gekommen um zu testen. Habe deinen Code bei mir einsetzen wollen, dann funktioniert aber z.b. eine Test-Rule nicht bei mir. Das heißt doch, dass an dem code etwas nicht stimmt. Nehme ich den Code nämlich raus, wird die Test rule ausgeführt...

So habe ich es jetzt hinterlegt gehabt:

Code: Alles auswählen

var Timer tSunset = null
rule "zwei Minuten nach sunset"
when
    Channel 'astro:sun:xxx:set#event' triggered START
then
    tSunset?.cancel
    tSunset = createTimer(now.plusMinutes(2), [|
        gSUG.allMembers.forEach[i | i.sendCommand(DOWN)]
    ])
end
Und dann wäre noch eine weitere Frage. Wenn ich eine ähnliche Rule für den Sonnenaufgang haben möchte, muss ich dann den Teil "var Timer tSunset = null" erneut vor die weitere rule schreiben? Also dann auch wieder so, nur mit abweichendem Namen beim Timer: Oder muss dann dann nicht mehr rein?

Code: Alles auswählen

var Timer tSunset1 = null
rule "Kueche auf bei SAG"
when
    Channel 'astro:sun:xxx:rise#event' triggered START
then
    tSunset1?.cancel
    tSunset1 = createTimer(now.plusMinutes(30), [|
        sendCommand(ku_r_rol_all,UP)]
    )
end

Benutzeravatar
udo1toni
Beiträge: 1565
Registriert: 11. Apr 2018 18:05
Wohnort: Darmstadt

Re: Wenn item = ein dann nach 1h Stunde ausschalten

Beitrag von udo1toni » 22. Jul 2019 22:50

Die Variable ist eine globale Variable, weil sie außerhalb der Rule definiert wird. Das bedeutet aber, sie muss ganz oben in das File, vor die erste Rule in der Datei. das sieht dann also so aus:

Code: Alles auswählen

// Kopf der *.rules Datei
// Alle globalen Variablen werden zu Beginn der Datei definiert
var Timer tSunset = null


// Ende der Definition globaler Variablen und Konstanten
// ab hier können Rules stehen

rule "zwei Minuten nach sunset"
when
    Channel 'astro:sun:xxx:set#event' triggered START
then
    tSunset?.cancel
    tSunset = createTimer(now.plusMinutes(2), [|
        gSUG.allMembers.forEach[i | i.sendCommand(DOWN)]
    ])
end
Wenn Du mehrere Timer einsetzen willst, die unabhängig voneinander agieren sollen, muss für jeden Timer eine eigene globale Variable definiert werden, aber alle ganz oben in der Datei.

Kito
Beiträge: 16
Registriert: 7. Jul 2019 15:30

Re: Wenn item = ein dann nach 1h Stunde ausschalten

Beitrag von Kito » 27. Jul 2019 10:02

Ich danke dir für die Erklärung, es funktioniert soweit.. Was ich noch gern haben würde bei dieser rule, dass ich per Telegram eine Nachricht bekomme, wenn die Rule ausgeführt wurde. An sich funktioniert Telegram bei mir, aber ich bekomme es nicht mit dieser rule hin.

Hier muss ich doch den Befehl von Telegram einfach in die Rule mit eintragen oder? Aber damit geht es nicht.

Code: Alles auswählen

rule "zwei Minuten nach sunset"
when
    Channel 'astro:sun:xxx:set#event' triggered START
then
    tSunset?.cancel
    tSunset = createTimer(now.plusMinutes(2), [|
        gSUG.allMembers.forEach[i | i.sendCommand(DOWN)]
    sendTelegram("bot1", "Die Rollos zur Straße wurden heruntergefahren.")
    ])
end

Benutzeravatar
udo1toni
Beiträge: 1565
Registriert: 11. Apr 2018 18:05
Wohnort: Darmstadt

Re: Wenn item = ein dann nach 1h Stunde ausschalten

Beitrag von udo1toni » 27. Jul 2019 14:26

Das sollte eigentlich genau so funktionieren.

Ich nutze kein sendTelegram, aber da es keine weiteren Abhängigkeiten gibt...

Don Stefano
Beiträge: 42
Registriert: 24. Mär 2018 23:02

Re: Wenn item = ein dann nach 1h Stunde ausschalten

Beitrag von Don Stefano » 28. Jul 2019 09:00

In der Rule wär jetzt ein paar geschweifte Klammern notwendig.

Mobil gesendet


Benutzeravatar
udo1toni
Beiträge: 1565
Registriert: 11. Apr 2018 18:05
Wohnort: Darmstadt

Re: Wenn item = ein dann nach 1h Stunde ausschalten

Beitrag von udo1toni » 29. Jul 2019 10:28

Nein, da fehlen keine geschweiften Klammern. Das Lambda ist ein eigener Kontext. Da es keine Verzweigungen gibt, sollten geschweifte Klammern überflüssig sein.

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast