// globale Variablen zu Beginn der *.rules Datei definieren!
var Timer tBewegung = null // Timervariable global definieren
rule "Bewegungsmelder mit timeout"
when
Item Huemotionsensor1_Bewegung changed //received command ON // Bewegung wurde erkannt
then
tBewegung?.cancel // zunächst eventuell laufende Timer entfernen
if(Swi_Kleiderschrank).state != ON) Swi_Kleiderschrank.sendCommand(ON) // Licht einschalten, falls noch nicht an.
tBewegung = createTimer(now.plusSeconds(45), [ | // Timer anlegen
if(Swi_Kleiderschrank.state != OFF) Swi_Kleiderschrank.sendCommand(OFF) // Licht ausschalten, falls noch nicht aus
tBewegung = null // Timervariable deinitialisieren
])
end
Ich bekomme folgende Fehlermeldungen in VSC.
2021-01-26 22_48_33-kleiderschrank_pme.rules - OH3_Docker (Arbeitsbereich) - Visual Studio Code.png
Der Swi_Kleiderschrank ist ein Sonoff, welcher wahrscheinlich in ein Shelly getauscht wird.
Ich habe in diesem Thread schon mal geschaut aber ich steige da gerade nicht durch.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Da der HUE-Bewegungsmelder so lange man detektiert wird auch ohne Unterbrechung ein ON sendet, ist die oben gepostete Rule etwas unglücklich, da es keinen erneuten ON-Trigger gibt.
Daher habe ich mir die Rule etwas umgestrickt und mit einer Nachlaufzeit versehen.
Das funktioniert aber auch noch nicht, wie gewünscht, da nachdem der Bewegungsmelder ein OFF gesendet hat und ich den Raum wieder betrete, nicht mehr nachgetriggert wird.
var Timer tBewegung = null // Timervariable global definieren
rule "Bewegungsmelder mit timeout"
when
Item Huemotionsensor1_Bewegung received update ON // Bewegung wurde erkannt
then
tBewegung?.cancel // zunächst eventuell laufende Timer entfernen
if(Swi_Kleiderschrank.state != ON) Swi_Kleiderschrank.sendCommand(ON) // Licht einschalten, falls noch nicht an.
{
if(Swi_Kleiderschrank.state != OFF) createTimer(now.plusSeconds(20)) [ | Swi_Kleiderschrank.sendCommand(OFF)
tBewegung = null
]}
end
Was ich letztlich bräuchte ist irgendwie eine Mischung aus der oberen Variante mit und meiner derzeitigen mit Nachlaufzeit.
udo1toni hat geschrieben: ↑27. Jan 2021 23:57
Ich frage mal andersrum: Wenn er keine Bewegung mehr erkennt, kommt dann (wenigstens einmalig) auch ein OFF?
Ein OFF kommt zeitverzögert, um etwa 9 Sekunden.
Ich habe jetzt schon zig Varianten aus zig Foren probiert aber ich komme nicht zu dem Ergebnis, welches ich gerne hätte, da ich mich mit dem Verschachteln der if-Anweisungen in der Rule schwer tue. Ich habe auch u. A. schon einige Beispiele aus früheren Jahren aus anderen Foren von Dir probiert.
Ich liste nochmal meine Anforderung an die Funktion auf.
- Raum wird betreten > Bewegungsmelder sendet ON > Licht schaltet ein
- Raum wird verlassen/Bewegung wird nicht erkannt > Bewegungsmelder sendet (technisch bedingt nach ca. 9 Sekunden) OFF > Ausschaltverzögerung von X Sekunden beginnt > Licht schaltet aus
- Wird der Raum während der Laufzeit der Ausschaltverzögerung betreten oder wird eine Bewegung erkannt soll die Ausschaltverzögerung zurück gesetzt werden und und die Abfolge von vorn beginnen.
rule "Motion_Maja_Licht mit Timeout"
when
Item OG_IKEA_Motion_Maja_Regal_Status changed
then
if(deConz_Tageslichtsensor_Lightlevel.state.toString == "Dark") {
tBewegung?.cancel
if(OG_IKEA_Motion_Maja_Regal_Status.state == ON)
if(OG_IKEA_Licht_Maja_Regal_Betrieb.state != ON)
OG_IKEA_Licht_Maja_Regal_Betrieb.sendCommand(ON)
else
tBewegung = createTimer(now.plusSeconds(171), [ |
if(OG_IKEA_Licht_Maja_Regal_Betrieb.state != OFF)
OG_IKEA_Licht_Maja_Regal_Betrieb.sendCommand(OFF)
tBewegung = null
])
}
end
In beiden Fällen (Bewegung erkannt oder Bewegung Ende erkannt) wird der Timer gelöscht. Nur im ersten Fall wird das Licht eingeschaltet, falls es noch aus ist. Nur im zweiten Fall wird der Timer gestartet.
Läuft der Timer ab, wird das Licht ausgeschaltet, falls es an ist.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet
KellerK1nd hat geschrieben: ↑2. Feb 2021 13:55
Na deine Bedingung Dunkel greift auf die ganze Rule! Normal brauchst du doch die Bedingung nur zum Einschalten.
Ich bräuchte eigentlich die Bedingung "Dunkel" gar nicht, da es im Kleiderschrank immer dunkel ist.
Ich habe nur das Beispiel von Udo übernommen und angepasst.