Seite 1 von 1

Garage lueftung Rules

Verfasst: 23. Nov 2019 19:58
von djuscha
ich möchte angezeigt bekommen wenn ich meine Garage lüfte. Hab schalter offen und zu .aber irgentetwas klappt bei mir nicht
das ist meine rule


Code: Alles auswählen

var Timer tGaragel = null

rule "Garage lueftet"
when
    Item Sonoffsv2auf changed from ON to OFF or
    Item Sonoffsv3zu changed from ON to OFF

then
if(tGaragel !== null)tGaragel.cancel
    tGaragel = createTimer(now.plusSeconds(30),
    if (Sonoffsv2auf .state == OFF||Sonoffsv3zu .state == OFF )
      [ |
            sendTelegram("bot1", " Garage wird gelüftet ") 
			Sonoffsv3.sendCommand ("ON")
    	])
     if (Sonoffsv2auf .state == ON ) 

	 ( 
			Sonoffsv3.sendCommand ("OFF")
	 )
	 if (Sonoffsv3zu .state == ON ) 

	 ( 
			Sonoffsv3.sendCommand ("OFF")
	 )	

end
wenn ich garage öffne oder schliesse und 30 sec vergehen und die Garage noch nicht offen und noch nicht zu ist bin ich im lüftungsmodus.
jetzt bekomme ich zweimal meldung das ich lüfte obwohl garage in 20 sec zu oder offen ist.
Sonoffsv3 ist mein lüftungswitch

Re: Garage lueftung Rules

Verfasst: 24. Nov 2019 00:05
von udo1toni
Die Frage ist ja, was machen die Schalter? Wenn die Tür geschlossen ist, ist Sonoffsv3zu ON und wenn die Tür offen ist, ist Sonoffsv2auf ON?
Also ist auf jeden Fall einer der beiden Kontakte OFF (die if-Anweisung ist also immer erfüllt, abgesehen davon, dass sie an der falschen Stelle steht). Weiterhin hast Du diverse Fehler (Leerzeichen an der falschen Stelle, falsche Formulierungen...)
Außerdem denkst Du zu kompliziert. Diese Rule sollte wie gewünscht funktionieren:

Code: Alles auswählen

var Timer tGaragel = null

rule "Garage lueftet"
when
    Item Sonoffsv2auf changed or
    Item Sonoffsv3zu changed
then
    tGarage1?.cancel
    if(triggeringItem.state == OFF)
        tGaragel = createTimer(now.plusSeconds(30), [ |
            sendTelegram("bot1", "Garage wird gelüftet.") 
            Sonoffsv3.sendCommand(ON)
        ])
    else
        Sonoffsv3.sendCommand(OFF)
end
Sobald einer der Kontakte seinen Zustand ändert, triggert die Rule (nicht nur, wenn der Kontakt auf OFF wechselt).
Zu Beginn wird ein Timer gecancelt, falls er läuft (die Schreibweise entspricht dem if(tGarage1 !== null) tGarage1.cancel)
Falls das triggernde Item den Zustand OFF hat, hat das Tor eine der Endlagen verlassen, also wird der Timer gestartet. Falls das triggernde Item den Zustand ON hat, hat das Tor eine seiner Endlagen erreicht und das Item Sonoffsv3 auf OFF gesetzt. Der Timer läuft zu diesem Zeitpunkt nicht (er wurde je zu Beginn der Rule abgebrochen).
Wenn der Timer endet, bedeutet das, dass sich zwischenzeitlich keine Zustandsänderung der Torkontakte ergeben hat -> das Tor steht zwischen beiden Endlagen, also wird Sonoffsv3 auf ON gesetzt.

Re: Garage lueftung Rules

Verfasst: 24. Nov 2019 12:57
von djuscha
udo1toni hat geschrieben: 24. Nov 2019 00:05 Die Frage ist ja, was machen die Schalter? Wenn die Tür geschlossen ist, ist Sonoffsv3zu ON und wenn die Tür offen ist, ist Sonoffsv2auf ON?
ja so ist es
udo1toni hat geschrieben: 24. Nov 2019 00:05 (Leerzeichen an der falschen Stelle, falsche Formulierungen...)
Außerdem denkst Du zu kompliziert.
:) das stimmt .Hab mit else schon probiert aber hatte als Fehler..

Code: Alles auswählen

tGaragel ?.cancel
das so geht ohne

Code: Alles auswählen

(tGaragel !== null) 
wusste ich nicht, hatte da auch als Fehler

Vielen Dank ,das läuft wie ich wollte.. Auf deine Hilfe ist immer Verlass!!!!!

Re: Garage lueftung Rules

Verfasst: 24. Nov 2019 18:53
von udo1toni
Wie gesagt... Leerzeichen sind nicht beliebig erlaubt.

Falsch:

Code: Alles auswählen

tGaragel ?.cancel
Richtig:

Code: Alles auswählen

tGaragel?.cancel