Rule ausführen wenn Status = ON

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
Epicblue
Beiträge: 26
Registriert: 20. Jan 2020 03:18

Rule ausführen wenn Status = ON

Beitrag von Epicblue »

Hallo zusammen,

ich würde gerne eine Rule erstellen diese soll ungefähr so ablaufen:
Ich habe ein Item (Allgemein_Nachtschicht ). Das schalte ich über BasicUi ein wenn ich Nachschicht habe. Das ganze soll verhindern das der Rolladen im Schlafzimmer automatisch hochfährt. Dafür habe ich ein Item (KNX_EG_Schlafzimmer_Rolladen_Sperren) erstellt welches über KNX mit den Jalousienaktor verknüpft ist.Das ganze Funkltioniert auch soweit.
Hier die bisherige Rule.

Code: Alles auswählen

rule "Nachtschicht aktiv"
            when
                Item Allgemein_Nachtschicht received command ON
            then
                KNX_EG_Schlafzimmer_Rolladen_Sperren.sendCommand(ON)
        end

        rule "Nachtschicht inaktiv"
            when
                Item Allgemein_Nachtschicht received command OFF
            then
                KNX_EG_Schlafzimmer_Rolladen_Sperren.sendCommand(OFF)
        end
Erste Problem: Ist es möglich den oben genannten Code in einer Regel zusammenzufassen?

Zweites Problem, da ich den Rolladen nicht mehr bedienen kann wenn ich aufstehe, außer ich setze "Allgemein_Nachtschicht " wieder auf Off. Würde das ganze gerne mit einer Zeit lösen. Beispielsweise das der Rolladen erst ab 12:00 wieder bedienbar ist (KNX_EG_Schlafzimmer_Rolladen_Sperren = OFF).

Hier der Code. Inhaltich wird er falsch sein.

Code: Alles auswählen

        rule "Test"
            when 
                if (Allgemein_Nachtschicht.state == ON) {}
            then
            	if (now.getHourOfDay >= 12){  
                KNX_EG_Schlafzimmer_Rolladen_Sperren.sendCommand(ON)}
                else {
                KNX_EG_Schlafzimmer_Rolladen_Sperren.sendCommand(OFF)}
        end

eiGelbGeek
Beiträge: 226
Registriert: 11. Aug 2019 06:39
Answers: 4

Re: Rule ausführen wenn Status = ON

Beitrag von eiGelbGeek »

Teste es mal so ... ist noch früh aber müsste alles von dir gewollte berücksichtigt haben ;-)

Code: Alles auswählen

rule "Nachtschicht aktiv/inaktiv"
when
  Time cron "0 0 12 ? * * *" or
  Item Allgemein_Nachtschicht received command
then
if (receivedCommand == ON) {
  KNX_EG_Schlafzimmer_Rolladen_Sperren.sendCommand(ON)
} else {
    if (Allgemein_Nachtschicht.state == ON && KNX_EG_Schlafzimmer_Rolladen_Sperren.state == ON) {
      KNX_EG_Schlafzimmer_Rolladen_Sperren.sendCommand(OFF)
      Allgemein_Nachtschicht.postUpdate(OFF)
    }
}
end
Du könntest im else Zweig natürlich auch noch einbauen, das der Rolladen dann automatisch geöffnet wird :D

Code: Alles auswählen

rule "Nachtschicht aktiv/inaktiv"
when
  Time cron "0 0 12 ? * * *" or
  Item Allgemein_Nachtschicht received command
then
if (receivedCommand == ON) {
  KNX_EG_Schlafzimmer_Rolladen_Sperren.sendCommand(ON)
} else {
    if (Allgemein_Nachtschicht.state == ON && KNX_EG_Schlafzimmer_Rolladen_Sperren.state == ON) {
      if (now.getHourOfDay() == 12) KNX_EG_Schlafzimmer_Rolladen.sendCommand(UP)
      KNX_EG_Schlafzimmer_Rolladen_Sperren.sendCommand(OFF)
      Allgemein_Nachtschicht.postUpdate(OFF)
    }
}
end

Epicblue
Beiträge: 26
Registriert: 20. Jan 2020 03:18

Re: Rule ausführen wenn Status = ON

Beitrag von Epicblue »

Hallo danke dir schonmal :)
konnte es noch nicht testen, hätte aber noch ein paar Fragen. Hab sie mal hinter dem Code gestellt.

Code: Alles auswählen

rule "Nachtschicht aktiv/inaktiv"
when
  Time cron "0 0 12 ? * * *" or						//hier wird abgefragt ob 12 Uhr ist oder
  Item Allgemein_Nachtschicht received command		//ob das Item einen Befehl empfangen hat.Also wenn ich ihn in der Sitemap ändere Ist das korrekt?
then
if (receivedCommand == ON) {							//welchen Befehl fragt er hier genau ab? Den aus dem "when" Bereich?
  KNX_EG_Schlafzimmer_Rolladen_Sperren.sendCommand(ON)
} else {
    if (Allgemein_Nachtschicht.state == ON && KNX_EG_Schlafzimmer_Rolladen_Sperren.state == ON) {
      KNX_EG_Schlafzimmer_Rolladen_Sperren.sendCommand(OFF)
      Allgemein_Nachtschicht.postUpdate(OFF)			//hier wird der Status intern aktualisiert oder? warum schreibe ich nicht sendCommand(OFF)
    }
}
end

eiGelbGeek
Beiträge: 226
Registriert: 11. Aug 2019 06:39
Answers: 4

Re: Rule ausführen wenn Status = ON

Beitrag von eiGelbGeek »

Epicblue hat geschrieben: 21. Jan 2020 02:18 //hier wird abgefragt ob 12 Uhr ist oder
Epicblue hat geschrieben: 21. Jan 2020 02:18 //ob das Item einen Befehl empfangen hat.Also wenn ich ihn in der Sitemap ändere Ist das korrekt?
Die Rule wird um 12 Uhr und/oder durch das Item getriggert.
Epicblue hat geschrieben: 21. Jan 2020 02:18 //welchen Befehl fragt er hier genau ab? Den aus dem "when" Bereich?
Hier wird abgefragt ob ein ON Command durch den Trigger gesendet wurde, sprich er geht nur in den IF Zweig wenn er ein ON Command bekommen hat, um 12 Uhr geht er direkt in den ELSE Zweig.
Epicblue hat geschrieben: 21. Jan 2020 02:18 //hier wird der Status intern aktualisiert oder? warum schreibe ich nicht sendCommand(OFF)
postUpdate ändert nur den Zustand des Item's aber löst die Rule nicht nochmal aus, bei einen sendCommand würde die Rule nochmal unnötig getriggert werden.


Wenn es nicht immer um 12 Uhr ausgeschaltet werden soll, sondern die Zeiten zum ausschalten flexibel sein sollen, kann man das natürlich auch einbauen. Ich habe ein ähnliches Szenario als "Wecker"

Code: Alles auswählen

//################################################//
//Wecker Aktionen zum gesetzen Zeitpunkt ausführen//
//################################################//

rule "Wecker Aktionen zum gesetzen Zeitpunkt ausführen"
when
    Time cron "0 0/15 * ? * * *"
then
    var minute_now = now.getMinuteOfHour
    var hour_now = now.getHourOfDay
    var Alarm_Clock_Time_Aktion = ((Alarm_Clock_Time_Set_Minute.state as DecimalType).intValue == minute_now &&
                        (Alarm_Clock_Time_Set_Stunde.state as DecimalType).intValue == hour_now)
    if(Alarm_Clock_Time_Aktion){
      //Hier muss noch mein Sonos System eingeschaltet werden und einen entsprechenden Radio Sender abspielen :-)
      Alle_Rolladen_Auf.sendCommand(ON) // Dieser Befehl muss noch modifiziert werden, das alle paar Minuten der Rolladen ein Stück weiter geöffnet wird, oder erstmal langsam das Licht hoch gedimmt und dann der Rolladen geöffnet wird.
      Alarm_Clock_Time_Set.sendCommand(0) //Hier werden weitere Aktionen ausgelöst... siehe ganz unten :-) Anrufbeantworter ausgeschaltet, Klingel wieder eingeschaltet etc pp.
    }
end

//#####################################################//
//Wecker Zeit in Stunden und Minuten an Items übergeben//
//#####################################################//

rule "Wecker Zeit in Stunden und Minuten an Items übergeben"
when
    Item Alarm_Clock_Time_Set changed
then
    switch (Alarm_Clock_Time_Set.state){
        case 0:{Alarm_Clock_Time_Set_Stunde.postUpdate(90.0) Alarm_Clock_Time_Set_Minute.postUpdate(0.0)}
        case 1:{Alarm_Clock_Time_Set_Stunde.postUpdate(0.0) Alarm_Clock_Time_Set_Minute.postUpdate(0.0)}
        case 2:{Alarm_Clock_Time_Set_Stunde.postUpdate(0.0) Alarm_Clock_Time_Set_Minute.postUpdate(15.0)}
        case 3:{Alarm_Clock_Time_Set_Stunde.postUpdate(0.0) Alarm_Clock_Time_Set_Minute.postUpdate(30.0)}
        case 4:{Alarm_Clock_Time_Set_Stunde.postUpdate(0.0) Alarm_Clock_Time_Set_Minute.postUpdate(45.0)}
        case 5:{Alarm_Clock_Time_Set_Stunde.postUpdate(1.0) Alarm_Clock_Time_Set_Minute.postUpdate(0.0)}
        case 6:{Alarm_Clock_Time_Set_Stunde.postUpdate(1.0) Alarm_Clock_Time_Set_Minute.postUpdate(15.0)}
        case 7:{Alarm_Clock_Time_Set_Stunde.postUpdate(1.0) Alarm_Clock_Time_Set_Minute.postUpdate(30.0)}
        case 8:{Alarm_Clock_Time_Set_Stunde.postUpdate(1.0) Alarm_Clock_Time_Set_Minute.postUpdate(45.0)}
        case 9:{Alarm_Clock_Time_Set_Stunde.postUpdate(2.0) Alarm_Clock_Time_Set_Minute.postUpdate(0.0)}
        case 10:{Alarm_Clock_Time_Set_Stunde.postUpdate(2.0) Alarm_Clock_Time_Set_Minute.postUpdate(15.0)}
        case 11:{Alarm_Clock_Time_Set_Stunde.postUpdate(2.0) Alarm_Clock_Time_Set_Minute.postUpdate(30.0)}
        case 12:{Alarm_Clock_Time_Set_Stunde.postUpdate(2.0) Alarm_Clock_Time_Set_Minute.postUpdate(45.0)}
        case 13:{Alarm_Clock_Time_Set_Stunde.postUpdate(3.0) Alarm_Clock_Time_Set_Minute.postUpdate(0.0)}
        case 14:{Alarm_Clock_Time_Set_Stunde.postUpdate(3.0) Alarm_Clock_Time_Set_Minute.postUpdate(15.0)}
        case 15:{Alarm_Clock_Time_Set_Stunde.postUpdate(3.0) Alarm_Clock_Time_Set_Minute.postUpdate(30.0)}
        case 16:{Alarm_Clock_Time_Set_Stunde.postUpdate(3.0) Alarm_Clock_Time_Set_Minute.postUpdate(45.0)}
        case 17:{Alarm_Clock_Time_Set_Stunde.postUpdate(4.0) Alarm_Clock_Time_Set_Minute.postUpdate(0.0)}
        case 18:{Alarm_Clock_Time_Set_Stunde.postUpdate(4.0) Alarm_Clock_Time_Set_Minute.postUpdate(15.0)}
        case 19:{Alarm_Clock_Time_Set_Stunde.postUpdate(4.0) Alarm_Clock_Time_Set_Minute.postUpdate(30.0)}
        case 20:{Alarm_Clock_Time_Set_Stunde.postUpdate(4.0) Alarm_Clock_Time_Set_Minute.postUpdate(45.0)}
        case 21:{Alarm_Clock_Time_Set_Stunde.postUpdate(5.0) Alarm_Clock_Time_Set_Minute.postUpdate(0.0)}
        case 22:{Alarm_Clock_Time_Set_Stunde.postUpdate(5.0) Alarm_Clock_Time_Set_Minute.postUpdate(15.0)}
        case 23:{Alarm_Clock_Time_Set_Stunde.postUpdate(5.0) Alarm_Clock_Time_Set_Minute.postUpdate(30.0)}
        case 24:{Alarm_Clock_Time_Set_Stunde.postUpdate(5.0) Alarm_Clock_Time_Set_Minute.postUpdate(45.0)}
        case 25:{Alarm_Clock_Time_Set_Stunde.postUpdate(6.0) Alarm_Clock_Time_Set_Minute.postUpdate(0.0)}
        case 26:{Alarm_Clock_Time_Set_Stunde.postUpdate(6.0) Alarm_Clock_Time_Set_Minute.postUpdate(15.0)}
        case 27:{Alarm_Clock_Time_Set_Stunde.postUpdate(6.0) Alarm_Clock_Time_Set_Minute.postUpdate(30.0)}
        case 28:{Alarm_Clock_Time_Set_Stunde.postUpdate(6.0) Alarm_Clock_Time_Set_Minute.postUpdate(45.0)}
        case 29:{Alarm_Clock_Time_Set_Stunde.postUpdate(7.0) Alarm_Clock_Time_Set_Minute.postUpdate(0.0)}
        case 30:{Alarm_Clock_Time_Set_Stunde.postUpdate(7.0) Alarm_Clock_Time_Set_Minute.postUpdate(15.0)}
        case 31:{Alarm_Clock_Time_Set_Stunde.postUpdate(7.0) Alarm_Clock_Time_Set_Minute.postUpdate(30.0)}
        case 32:{Alarm_Clock_Time_Set_Stunde.postUpdate(7.0) Alarm_Clock_Time_Set_Minute.postUpdate(45.0)}
        case 33:{Alarm_Clock_Time_Set_Stunde.postUpdate(8.0) Alarm_Clock_Time_Set_Minute.postUpdate(0.0)}
        case 34:{Alarm_Clock_Time_Set_Stunde.postUpdate(8.0) Alarm_Clock_Time_Set_Minute.postUpdate(15.0)}
        case 35:{Alarm_Clock_Time_Set_Stunde.postUpdate(8.0) Alarm_Clock_Time_Set_Minute.postUpdate(30.0)}
        case 36:{Alarm_Clock_Time_Set_Stunde.postUpdate(8.0) Alarm_Clock_Time_Set_Minute.postUpdate(45.0)}
        case 37:{Alarm_Clock_Time_Set_Stunde.postUpdate(9.0) Alarm_Clock_Time_Set_Minute.postUpdate(0.0)}
        case 38:{Alarm_Clock_Time_Set_Stunde.postUpdate(9.0) Alarm_Clock_Time_Set_Minute.postUpdate(15.0)}
        case 39:{Alarm_Clock_Time_Set_Stunde.postUpdate(9.0) Alarm_Clock_Time_Set_Minute.postUpdate(30.0)}
        case 40:{Alarm_Clock_Time_Set_Stunde.postUpdate(9.0) Alarm_Clock_Time_Set_Minute.postUpdate(45.0)}
        case 41:{Alarm_Clock_Time_Set_Stunde.postUpdate(10.0) Alarm_Clock_Time_Set_Minute.postUpdate(0.0)}
        case 42:{Alarm_Clock_Time_Set_Stunde.postUpdate(10.0) Alarm_Clock_Time_Set_Minute.postUpdate(15.0)}
        case 43:{Alarm_Clock_Time_Set_Stunde.postUpdate(10.0) Alarm_Clock_Time_Set_Minute.postUpdate(30.0)}
        case 44:{Alarm_Clock_Time_Set_Stunde.postUpdate(10.0) Alarm_Clock_Time_Set_Minute.postUpdate(45.0)}
        case 45:{Alarm_Clock_Time_Set_Stunde.postUpdate(11.0) Alarm_Clock_Time_Set_Minute.postUpdate(0.0)}
        case 46:{Alarm_Clock_Time_Set_Stunde.postUpdate(11.0) Alarm_Clock_Time_Set_Minute.postUpdate(15.0)}
        case 47:{Alarm_Clock_Time_Set_Stunde.postUpdate(11.0) Alarm_Clock_Time_Set_Minute.postUpdate(30.0)}
        case 48:{Alarm_Clock_Time_Set_Stunde.postUpdate(11.0) Alarm_Clock_Time_Set_Minute.postUpdate(45.0)}
        case 49:{Alarm_Clock_Time_Set_Stunde.postUpdate(12.0) Alarm_Clock_Time_Set_Minute.postUpdate(0.0)}
        case 50:{Alarm_Clock_Time_Set_Stunde.postUpdate(12.0) Alarm_Clock_Time_Set_Minute.postUpdate(15.0)}
        case 51:{Alarm_Clock_Time_Set_Stunde.postUpdate(12.0) Alarm_Clock_Time_Set_Minute.postUpdate(30.0)}
        case 52:{Alarm_Clock_Time_Set_Stunde.postUpdate(12.0) Alarm_Clock_Time_Set_Minute.postUpdate(45.0)}
        case 53:{Alarm_Clock_Time_Set_Stunde.postUpdate(13.0) Alarm_Clock_Time_Set_Minute.postUpdate(0.0)}
        case 54:{Alarm_Clock_Time_Set_Stunde.postUpdate(13.0) Alarm_Clock_Time_Set_Minute.postUpdate(15.0)}
        case 55:{Alarm_Clock_Time_Set_Stunde.postUpdate(13.0) Alarm_Clock_Time_Set_Minute.postUpdate(30.0)}
        case 56:{Alarm_Clock_Time_Set_Stunde.postUpdate(13.0) Alarm_Clock_Time_Set_Minute.postUpdate(45.0)}
        case 57:{Alarm_Clock_Time_Set_Stunde.postUpdate(14.0) Alarm_Clock_Time_Set_Minute.postUpdate(0.0)}
        case 58:{Alarm_Clock_Time_Set_Stunde.postUpdate(14.0) Alarm_Clock_Time_Set_Minute.postUpdate(15.0)}
        case 59:{Alarm_Clock_Time_Set_Stunde.postUpdate(14.0) Alarm_Clock_Time_Set_Minute.postUpdate(30.0)}
        case 60:{Alarm_Clock_Time_Set_Stunde.postUpdate(14.0) Alarm_Clock_Time_Set_Minute.postUpdate(45.0)}
        case 61:{Alarm_Clock_Time_Set_Stunde.postUpdate(15.0) Alarm_Clock_Time_Set_Minute.postUpdate(0.0)}
        case 62:{Alarm_Clock_Time_Set_Stunde.postUpdate(15.0) Alarm_Clock_Time_Set_Minute.postUpdate(15.0)}
        case 63:{Alarm_Clock_Time_Set_Stunde.postUpdate(15.0) Alarm_Clock_Time_Set_Minute.postUpdate(30.0)}
        case 64:{Alarm_Clock_Time_Set_Stunde.postUpdate(15.0) Alarm_Clock_Time_Set_Minute.postUpdate(45.0)}
        case 65:{Alarm_Clock_Time_Set_Stunde.postUpdate(16.0) Alarm_Clock_Time_Set_Minute.postUpdate(0.0)}
        case 66:{Alarm_Clock_Time_Set_Stunde.postUpdate(16.0) Alarm_Clock_Time_Set_Minute.postUpdate(15.0)}
        case 67:{Alarm_Clock_Time_Set_Stunde.postUpdate(16.0) Alarm_Clock_Time_Set_Minute.postUpdate(30.0)}
        case 68:{Alarm_Clock_Time_Set_Stunde.postUpdate(16.0) Alarm_Clock_Time_Set_Minute.postUpdate(45.0)}
        case 69:{Alarm_Clock_Time_Set_Stunde.postUpdate(17.0) Alarm_Clock_Time_Set_Minute.postUpdate(0.0)}
        case 70:{Alarm_Clock_Time_Set_Stunde.postUpdate(17.0) Alarm_Clock_Time_Set_Minute.postUpdate(15.0)}
        case 71:{Alarm_Clock_Time_Set_Stunde.postUpdate(17.0) Alarm_Clock_Time_Set_Minute.postUpdate(30.0)}
        case 72:{Alarm_Clock_Time_Set_Stunde.postUpdate(17.0) Alarm_Clock_Time_Set_Minute.postUpdate(45.0)}
        case 73:{Alarm_Clock_Time_Set_Stunde.postUpdate(18.0) Alarm_Clock_Time_Set_Minute.postUpdate(0.0)}
        case 74:{Alarm_Clock_Time_Set_Stunde.postUpdate(18.0) Alarm_Clock_Time_Set_Minute.postUpdate(15.0)}
        case 75:{Alarm_Clock_Time_Set_Stunde.postUpdate(18.0) Alarm_Clock_Time_Set_Minute.postUpdate(30.0)}
        case 76:{Alarm_Clock_Time_Set_Stunde.postUpdate(18.0) Alarm_Clock_Time_Set_Minute.postUpdate(45.0)}
        case 77:{Alarm_Clock_Time_Set_Stunde.postUpdate(19.0) Alarm_Clock_Time_Set_Minute.postUpdate(0.0)}
        case 78:{Alarm_Clock_Time_Set_Stunde.postUpdate(19.0) Alarm_Clock_Time_Set_Minute.postUpdate(15.0)}
        case 79:{Alarm_Clock_Time_Set_Stunde.postUpdate(19.0) Alarm_Clock_Time_Set_Minute.postUpdate(30.0)}
        case 80:{Alarm_Clock_Time_Set_Stunde.postUpdate(19.0) Alarm_Clock_Time_Set_Minute.postUpdate(45.0)}
        case 81:{Alarm_Clock_Time_Set_Stunde.postUpdate(20.0) Alarm_Clock_Time_Set_Minute.postUpdate(0.0)}
        case 82:{Alarm_Clock_Time_Set_Stunde.postUpdate(20.0) Alarm_Clock_Time_Set_Minute.postUpdate(15.0)}
        case 83:{Alarm_Clock_Time_Set_Stunde.postUpdate(20.0) Alarm_Clock_Time_Set_Minute.postUpdate(30.0)}
        case 84:{Alarm_Clock_Time_Set_Stunde.postUpdate(20.0) Alarm_Clock_Time_Set_Minute.postUpdate(45.0)}
        case 85:{Alarm_Clock_Time_Set_Stunde.postUpdate(21.0) Alarm_Clock_Time_Set_Minute.postUpdate(0.0)}
        case 86:{Alarm_Clock_Time_Set_Stunde.postUpdate(21.0) Alarm_Clock_Time_Set_Minute.postUpdate(15.0)}
        case 87:{Alarm_Clock_Time_Set_Stunde.postUpdate(21.0) Alarm_Clock_Time_Set_Minute.postUpdate(30.0)}
        case 88:{Alarm_Clock_Time_Set_Stunde.postUpdate(21.0) Alarm_Clock_Time_Set_Minute.postUpdate(45.0)}
        case 89:{Alarm_Clock_Time_Set_Stunde.postUpdate(22.0) Alarm_Clock_Time_Set_Minute.postUpdate(0.0)}
        case 90:{Alarm_Clock_Time_Set_Stunde.postUpdate(22.0) Alarm_Clock_Time_Set_Minute.postUpdate(15.0)}
        case 91:{Alarm_Clock_Time_Set_Stunde.postUpdate(22.0) Alarm_Clock_Time_Set_Minute.postUpdate(30.0)}
        case 92:{Alarm_Clock_Time_Set_Stunde.postUpdate(22.0) Alarm_Clock_Time_Set_Minute.postUpdate(45.0)}
        case 93:{Alarm_Clock_Time_Set_Stunde.postUpdate(23.0) Alarm_Clock_Time_Set_Minute.postUpdate(0.0)}
        case 94:{Alarm_Clock_Time_Set_Stunde.postUpdate(23.0) Alarm_Clock_Time_Set_Minute.postUpdate(15.0)}
        case 95:{Alarm_Clock_Time_Set_Stunde.postUpdate(23.0) Alarm_Clock_Time_Set_Minute.postUpdate(30.0)}
        case 96:{Alarm_Clock_Time_Set_Stunde.postUpdate(23.0) Alarm_Clock_Time_Set_Minute.postUpdate(45.0)}
    }
    if (Alarm_Clock_Time_Set.state != 0) {
      if (Fritzbox_Privater_Anrufbeantworter.state != ON) Fritzbox_Privater_Anrufbeantworter.sendCommand(ON)
      if (Klingel_OnOff_Switch.state != OFF) Klingel_OnOff_Switch.sendCommand(OFF)
      if (Licht_GaesteWC.state != ON) Licht_GaesteWC_LED_Oben_Level.sendCommand(0)
    }
    if (Alarm_Clock_Time_Set.state == 0) {
      if (Fritzbox_Privater_Anrufbeantworter.state == ON) Fritzbox_Privater_Anrufbeantworter.sendCommand(OFF)
      if (Klingel_OnOff_Switch.state != ON) Klingel_OnOff_Switch.sendCommand(ON)
      if (Licht_GaesteWC.state != ON) {
        Licht_GaesteWC_LED_Oben_Farbe.sendCommand("GREEN")
        if (Nacht_Modus.state == ON) {
          Licht_GaesteWC_LED_Oben_Level.sendCommand(10)
        } else {
            Licht_GaesteWC_LED_Oben_Level.sendCommand(20)
        }
      }
      if (weckerGaesteWCLEDTimer.state == ON) weckerGaesteWCLEDTimer.sendCommand(OFF)
    }
end
Die zugehörigen Items:

Code: Alles auswählen

Number Alarm_Clock_Time_Set "Variable zum setzen der Weckzeit"
Number Alarm_Clock_Time_Set_Minute "Variable zum setzen der Weckzeit (Minute)"
Number Alarm_Clock_Time_Set_Stunde "Variable zum setzen der Weckzeit (Stunde)"
Ups schönes Denglisch eingebaut ;-)

Epicblue
Beiträge: 26
Registriert: 20. Jan 2020 03:18

Re: Rule ausführen wenn Status = ON

Beitrag von Epicblue »

Hallo, super Erklärung. Vielen Dank. :)

Ich hätte noch eine Frage.

Ich möchte eine Pumpe zu 3 verschieden Zeiten anschalten. 2x soll sie 3 Stunden laufen und 1x 5 Stunden.
Habe dazu erfolgreich folgende Regel erstellt. Würde diese aber gerne zu einer Regel zusammenfassen, sofern das möglich ist. Hast du dazu noch ein Idee oder Denkanstoss?

Code: Alles auswählen

    //Zirkulationspumpe Warmwasser einschalten 5:00-8:00 / 11:00-14:00 / 17:00-22:00
        rule "Zirkulationspumpe 5:00 & 11:00 "
            when
                Time cron "0 0 5 ? * * *" or
                Time cron "0 0 11 ? * * *"
            then
                KNX_Aussen_GarageHof_Zirkulationspumpe_Schalten.sendCommand(ON)
                (createTimer(now.plusHours(3)) [|
                KNX_Aussen_GarageHof_Zirkulationspumpe_Schalten.sendCommand(OFF)
                ])
        end
        rule "Zirkulationspumpe 17:00 "
            when
                Time cron "0 0 17 ? * * *"
            then
                KNX_Aussen_GarageHof_Zirkulationspumpe_Schalten.sendCommand(ON)
                (createTimer(now.plusHours(5)) [|
                KNX_Aussen_GarageHof_Zirkulationspumpe_Schalten.sendCommand(OFF)
                ])
        end
Genauso möchte ich diese Regel zusammenfassen.

Code: Alles auswählen

    //Tag =1 / Nacht = 0 Objekt für KNX Bus
        rule "Tag = 1 / Nacht = 0"
            when
                Channel 'astro:sun:home:rise#event' triggered START
            then
                KNX_Tag_Nacht.sendCommand(ON)
        end

        rule "Tag = 0 / Nacht = 1"
            when
                Channel 'astro:sun:home:set#event' triggered START
            then
                KNX_Tag_Nacht.sendCommand(OFF)

eiGelbGeek
Beiträge: 226
Registriert: 11. Aug 2019 06:39
Answers: 4

Re: Rule ausführen wenn Status = ON

Beitrag von eiGelbGeek »

Die erste Rule wäre so am einfachsten zusammen gefasst

Code: Alles auswählen

//Zirkulationspumpe Warmwasser einschalten 5:00-8:00 / 11:00-14:00 / 17:00-22:00
rule "Zirkulationspumpe 5:00, 11:00 und 17:00"
when
  Time cron "0 0 5 ? * * *" or
  Time cron "0 0 11 ? * * *" or
  Time cron "0 0 17 ? * * *"
then
  KNX_Aussen_GarageHof_Zirkulationspumpe_Schalten.sendCommand(ON)
  if (now.getHourOfDay() == 17) {
    (createTimer(now.plusHours(5)) [| KNX_Aussen_GarageHof_Zirkulationspumpe_Schalten.sendCommand(OFF)])
  } else {
      (createTimer(now.plusHours(3)) [| KNX_Aussen_GarageHof_Zirkulationspumpe_Schalten.sendCommand(OFF)])
  }
end
Bei Channel als Trigger kann ich dir gerade nicht helfen... damit habe ich selbst auch noch nicht gearbeitet... aber es gibt bestimmt jemanden hier der was schlaues dazu sagen kann :-)

eiGelbGeek
Beiträge: 226
Registriert: 11. Aug 2019 06:39
Answers: 4

Re: Rule ausführen wenn Status = ON

Beitrag von eiGelbGeek »

Allerdings ist die Frage ob so lange Timer wirklich sinnvoll sind ... denn du kannst nicht unbegrenzt viele Timer haben... ich meine 10 Stück gleichzeitig gehen. Danach wird es zu Fehlern führen.

Für die Rule würde ich das Expire Binding benutzen.
https://www.openhab.org/addons/bindings ... re-binding

Code: Alles auswählen

//Zirkulationspumpe Warmwasser einschalten 5:00-8:00 / 11:00-14:00 / 17:00-22:00
rule "Zirkulationspumpe 5:00, 11:00 und 17:00"
when
  Time cron "0 0 5 ? * * *" or
  Time cron "0 0 11 ? * * *" or
  Time cron "0 0 17 ? * * *" or
  5HourExpirePumpe changed from ON to OFF or
  5HourExpirePumpe changed from ON to OFF
then
if (KNX_Aussen_GarageHof_Zirkulationspumpe_Schalten.state == OFF ) {
  KNX_Aussen_GarageHof_Zirkulationspumpe_Schalten.sendCommand(ON)
  if (now.getHourOfDay() == 17) {
    5HourExpirePumpe.sendCommand(ON)
  } else {
      3HourExpirePumpe.sendCommand(ON)
  }
} else {
    KNX_Aussen_GarageHof_Zirkulationspumpe_Schalten.sendCommand(OFF)
}
end

//Items für das Expire Binding
Switch 3HourExpirePumpe "Nach 3 Stunden Command OFF" { expire="3h,command=OFF" }
Switch 5HourExpirePumpe "Nach 5 Stunden Command OFF" { expire="5h,command=OFF" }

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

Re: Rule ausführen wenn Status = ON

Beitrag von udo1toni »

Mir wäre jetzt nichts davon bekannt, dass es Einschränkungen bezüglich des Schedulers gäbe. Die einzige Einschränkung, die sich ergibt, ist, dass es default "nur" 10 Threads gibt (früher waren es 2, deswegen die Anführungszeichen), die der Scheduler für Code Execution zur Verfügung hat. Die Liste der Scheduled Events darf aber beliebig lang werden. Man sollte halt nur darauf achten, dass nicht mehr als 10 (2) Scheduled Tasks zum selben Zeitpunkt triggern.

Da die Ein- und Ausschaltzeiten festliegen, wäre es in diesem Fall übrigens das einfachste, zwei Rules mit den fixen Schaltzeiten zu definieren, eine zum Einschalten, die andere zum Ausschalten.

Was die Rollladensperre betrifft, denke ich, dass Du zu kompliziert an die Sache heran gehst. Du hast ein Sperrobjekt für den Rollladen definiert, aber, warum? Woher bekommt der Rollladen den Befehl, hochzufahren (der hier unterdrückt wird)? Wäre es nicht viel einfacher, in der Steuerung den Rollladen nur dann hochzufahren, wenn das Nachtschicht-Item ausgeschaltet ist? (Ich habe das für unser Wohnzimmer so gelöst - falls wir Übernachtungsgäste haben, fahren die Läden nicht schon bei Sonnenaufgang auf. In der manuellen Bedienung ergeben sich aber keine Einschränkungen.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

eiGelbGeek
Beiträge: 226
Registriert: 11. Aug 2019 06:39
Answers: 4

Re: Rule ausführen wenn Status = ON

Beitrag von eiGelbGeek »

udo1toni hat geschrieben: 24. Jan 2020 05:02 Mir wäre jetzt nichts davon bekannt, dass es Einschränkungen bezüglich des Schedulers gäbe. Die einzige Einschränkung, die sich ergibt, ist, dass es default "nur" 10 Threads gibt (früher waren es 2, deswegen die Anführungszeichen), die der Scheduler für Code Execution zur Verfügung hat. Die Liste der Scheduled Events darf aber beliebig lang werden. Man sollte halt nur darauf achten, dass nicht mehr als 10 (2) Scheduled Tasks zum selben Zeitpunkt triggern.
Danke für die Erklärung :-) Dann habe ich es wohl etwas falsch in Erinnerung gehabt :P

Antworten