Seite 1 von 1

[gelöst] Regel mit Wartezeit

Verfasst: 27. Okt 2019 13:14
von leupy
Hallo,
ich habe Problem mit einer Regel mit Wartezeit.
Ich will bedingt wenn ein Dummy Schalter (Feuer) eingeschalte ist eine zuvor eingeschaltet Lampe (RFKey1) nach 1sec ausschalten und wieder nach 1 sec einschalten.
Damit schalte ich in der Außenlampe (RFKey1) die LED Leuchtmittel in den Feuermodus.

Code: Alles auswählen

rule "Feuer"
when 

        Item RFKey1 changed from ON
then 
        if
        (Feuer.state != ON) return;  // wenn Schalter aus(nicht an) , keine Aktionen

        else if
        Thread::sleep(10000)            //Warten 1 sec
                sendCommand (RFKey1, OFF)       //Außenlampe aus
        Thread::sleep(10000)            //Warten 1 sec   
                sendCommand (RFKey1, ON)        //Außenlampe ein     
end
im voraus Danke für eure Hilfe

Re: Regel mit Wartezeit

Verfasst: 27. Okt 2019 15:32
von leupy
Hallo wieder,
hier meine zweite Variante die aber auch nicht Funktioniert. :(

Code: Alles auswählen

rule "Feuer"
when 

        Item RFKey1 changed from OFF to ON 
then       
        if (Feuer.state == ON)                                                  //  wenn Schalter aus , keine Aktionen
        createTimer(now.plusSeconds(1)) [| sendCommand (RFKey1, OFF) ) ]        //Warten 1 sec Außenlampe aus          
                     
        createTimer(now.plusSeconds(1)) [| sendCommand (RFKey1, On) )  ]        //Warten 1 sec  Außenlampe ein 
else 
        return
end     

Re: Regel mit Wartezeit

Verfasst: 27. Okt 2019 21:36
von eiGelbGeek
Kann so ja auch nicht funktionieren ;-) du erstellst 2 Timer mit jeweils 1 Sekunde .... die rule läuft komplett durch und hat dann 2 Timer die nach 1 Sekunde auslösen sollen.... heisst das nach einer Sekunde gleichzeitig ein OFF und ON kommt ;-) zusätzlich kommt das ON nicht durch ... weil du On und nicht ON geschrieben hast ;-)

Versuche es mal so :-)

Code: Alles auswählen

rule "Feuer"
when 
  Item RFKey1 changed from OFF to ON 
then
  if (Feuer.state == ON) {
    createTimer(now.plusSeconds(1)) [| RFKey1.sendCommand(OFF) ]
    createTimer(now.plusSeconds(2)) [| RFKey1.sendCommand(ON) ]
  }
end

Re: Regel mit Wartezeit

Verfasst: 28. Okt 2019 00:26
von udo1toni
Sauberer wäre es, das Ganze mit einem Timer zu erledigen:

Code: Alles auswählen

var Timer tFeuer = null

rule "Feuer"
when 
    Item RFKey1 changed from OFF to ON 
then
    if(Feuer.state != ON || tFeuer !== null) return;
    tFeuer = createTimer(now.plusSeconds(1), [| 
        if(RFKey1.state == ON) {
            RFKey1.sendCommand(OFF)
            tFeuer.reschedule(now.plusSeconds(1))
        } else {
            RFKey1.sendCommand(ON)
            tFeuer = null
        }
    ])
end
Der Timer wird nur angelegt, wenn der Schalter Feuer den Status ON hat und der Timer nicht läuft.
Der Timer wird nach einer Sekunde ausgeführt. Für den Fall, dass RFKey1 auf ON steht, schaltet es auf OFF und startet den Timer neu, sonst schaltet es auf ON und löscht den Zeiger auf den Timer.
Der vorliegende Code kann nicht aus Versehen mehrfach getriggert werden - im Gegensatz zur einfacheren Variante mit zwei unkontrollierten Timern.

Re: Regel mit Wartezeit

Verfasst: 28. Okt 2019 18:10
von leupy
Danke für die schnelle Hilfe,
es läuft.