Wenn dies dein erster Besuch hier ist, lies bitte zuerst die Hilfe - Häufig gestellte Fragen durch. Du musst dich vermutlich registrieren, bevor du Beiträge verfassen kannst. Klicke oben auf 'Registrieren', um den Registrierungsprozess zu starten. Du kannst auch jetzt schon Beiträge lesen. Suche dir einfach das Forum aus, das dich am meisten interessiert.
Danke für die Ansätze, aber ich habe so ein Szenario, welches einfach einfacher mit einer Schleife wäre (Pseudocode):
Code:
rule "Haus verlassen"
when
Abwesenheit steht bevor (Taste gedrückt)
then
Haustür entriegeln (Benutzer öffnet Tür)
solange Haustür noch offen:
warten
Wenn Haustür zu:
Abschließen
Strom sparen (Bereiche/Licht/Verbraucher abschalten)
end
Gibt es vielleicht eine Sprachreferenz, die ich noch nicht gesehen habe?
Den Syntax habe ich sonst aus den Beispielen im Wiki und hier aus dem Forum
Mit Cron/Item Trigger könnte ich den Fall auch abfrühstücken, aber bräuchte für die Statusspeicherung noch zusätzliche Variablen/Items, die zwischen den Regeln vermitteln. Das will ich nicht wirklich - habe schon genug Variablen/Items
Gruß
Sascha
Ich hab so etwas in einer minütlichen Regel.
Da werden Zustände abgefragt und reagiert.
Über Zähler verzögere ich auch bestimmte Aktionen z.b.
- jemand anwesend, dann Zähler auf 16
- keiner anwesend, Zähler wird minütlich auf 0 runter gezählt
- erreicht er 1 dann werden Standby Geräte abgeschaltet
rule "Abwesenheits Sequenz"
When
Item Abwesenheitstaste changed from OFF to On
Then
sendCommand(AbwesenheistStatus1,ON)
sendCommand(Haustüre,"entriegeln")
End
Rule "Haustüre öffnen nach Abwesenheitsschalter gedrückt"
When
Item Haustüre changed from OPEN to CLOSED
Then
If (AbwesenheistStatus1.status == ON) {
sendCommand(Haustuerschloss, "closed")
sendCommand(Haus, "Stromsparmode")
SendCommand(AbwesenheistStatus1, OFF)
}
End
Rule "States on Start setzen"
When
System started
Then
sendCommand(AbwesenheistStatus1'0, OFF)
End
rule "Test"
when
Item Auto_Light changed to ON
then
logInfo("runtime.busevents", "Kommode AUS")
sendCommand(L_Kommode, OFF)
while(L_Pilzlampe.state == ON) {
Thread::sleep(1000)
logInfo("runtime.busevents", "Warten")
}
logInfo("runtime.busevents", "Kommode AN")
sendCommand(L_Kommode, ON)
end
Code:
21:51:36.764 INFO o.o.m.script.runtime.busevents[:53] - Kommode AUS
21:51:37.263 INFO runtime.busevents[:22] - L_Kommode received command OFF
21:51:37.862 INFO runtime.busevents[:26] - L_Kommode state updated to OFF
21:51:39.146 INFO o.o.m.script.runtime.busevents[:53] - Warten
21:51:40.157 INFO o.o.m.script.runtime.busevents[:53] - Warten
21:51:41.168 INFO o.o.m.script.runtime.busevents[:53] - Warten
21:51:42.178 INFO o.o.m.script.runtime.busevents[:53] - Warten
21:51:43.189 INFO o.o.m.script.runtime.busevents[:53] - Warten
21:51:44.200 INFO o.o.m.script.runtime.busevents[:53] - Warten
21:51:45.211 INFO o.o.m.script.runtime.busevents[:53] - Warten
21:51:46.222 INFO o.o.m.script.runtime.busevents[:53] - Warten
21:51:47.232 INFO o.o.m.script.runtime.busevents[:53] - Warten
21:51:48.244 INFO o.o.m.script.runtime.busevents[:53] - Warten
21:51:49.255 INFO o.o.m.script.runtime.busevents[:53] - Warten
21:51:50.266 INFO o.o.m.script.runtime.busevents[:53] - Warten
21:51:50.296 INFO runtime.busevents[:22] - L_Pilzlampe received command OFF
21:51:50.845 INFO runtime.busevents[:26] - L_Pilzlampe state updated to OFF
21:51:51.277 INFO o.o.m.script.runtime.busevents[:53] - Warten
21:51:51.418 INFO o.o.m.script.runtime.busevents[:53] - Kommode AN
Habe meine Abwesenheitsregel nun auch produktiv am Laufen
Code:
val max = 60
// Tür aufziehen
sendCommand(Frontdoor, 16)
// Energie sparen und abwesend wenn Tür auf und dann zu
max = 60
while(Frontdoor.state == CLOSED) {
Thread::sleep(500)
max = max - 1
if (max==0) return
}
max = 90
while(Frontdoor.state == OPEN) {
Thread::sleep(500)
max = max - 1
if (max==0) return
}
createTimer(now.plusSeconds(3)) [|
sendCommand(Present, OFF)
]
Hier gibt es eine Sprachreferenz, die anscheinend für die Scripte/Regeln gilt: Xtend - Modernized Java
Auch wenn es Funktioniert, einen Thread lange Schlafen zu legen und solche Warteschleifen sind eigentlich keine gute Idee, ich würde mir daher noch mal die von Rak skizzierte Lösung anschauen!
Wir verarbeiten personenbezogene Daten über die Nutzer unserer Website mithilfe von Cookies und anderen Technologien, um unsere Dienste bereitzustellen. Weitere Informationen findest Du in unserer Datenschutzerklärung.
Indem Du unten auf "ICH stimme zu" klickst, stimmst Du unserer Datenschutzerklärung und unseren persönlichen Datenverarbeitungs- und Cookie-Praktiken zu, wie darin beschrieben. Du erkennst außerdem an, dass dieses Forum möglicherweise außerhalb Deines Landes gehostet wird und bist damit einverstanden, dass Deine Daten in dem Land, in dem dieses Forum gehostet wird, gesammelt, gespeichert und verarbeitet werden.
Kommentar