Startseite › Forum › ZipaTile / Zipabox – Regeln › Anfängerfragen zu Regeln – wie implementiere ich Semaphoren
Schlagwörter: #hamlet69
- Dieses Thema hat 3 Antworten und 4 Teilnehmer, und wurde zuletzt aktualisiert vor 6 Jahren, 7 Monaten von Athensboy.
-
AutorBeiträge
-
27/03/2018 um 18:58 Uhr #3698TorWieTeilnehmer
Hallo liebes Forum,
ich befürchte ich brauche Nachhilfe in der Regelerstellung.
Ich habe gelernt, dass ich join verwende um „nachtriggerbare“ Regeln zu haben. Wenn ein Event sich wiederholt kann ich so die laufende Regel stoppen und in einer neuen Instanz starten. Also genau das richtige um einen nachtriggerbaren Treppenhausautomaten zu bauen.
Was mache ich aber, wenn ich exakt eine Regel haben möchte und alle nachkommenden Trigger ignorieren möchte ?
Ich bräuchte eine Art „join“, der aber die gerade laufende Regel nicht stoppt, sondern das Anlaufen einer weiteren Instanz dieser Regel stoppt.
In meiner KNX-Umgebung löse ich das so, dass ich nur auf bestimmte Flanken eines Events reagiere.
Ich gebe mal ein Beispiel – wobei es mir darum geht grundsätzlich zu verstehen, mit welcher Methodik man so etwas löst.
Mein Garagentor kennt nur zwei Zustände bewegen und stoppen, ich habe keine Möglichkeit das Tor gezielt zu öffnen oder zu schließen. Es fährt immer bis zum jeweiligen Endpunkt um dann bei der nächsten Bewegung in die exakt andere Richtung zu fahren.
Es geht mir nun darum ein versehentlich offen gelassenes Garagentor automatisch nach einer bestimmten Zeit zu schließen. Dazu stoße ich einen Bewegungszyklus an dessen Ablauf von der „Vorgeschichte“ abhängt. War die letzte Bewegung eine Aufwärtsbewegung bewege ich das Tor exakt solange, bis ich ein Event bekomme, dass das Tor geschlossen ist.
War die letzte Bewegung eine Abwärtsbewegung, wird das Tor sich zunächst komplett öffnen, danach muss ich eine neue Aktion generieren die das Tor schließt.
Das ist alles soweit kann Problem, das kann man prima in eine Regeln einbauen.
Nun mein Problem.
Ich muss sicherstellen, dass diese Regel nur exakt einmal gestartet wird. Ich bekomme im 30 Sekundentakt Events zugeschickt, dass das Tor geöffnet ist. Sobald das Tor eine bestimmte Zeit geöffnet ist, also eine bestimmte Anzahl Impulse eingelaufen sind, starte ich den Zyklus (oder die Regel) – auch kein Problem.
Nun muss ich aber sicherstellen, dass mit dem nächsten Impuls für ein nicht geschlossenes Garagentor die Regel nicht erneut gestartet wird. Ich muss also einen Mutex um die Regel bauen.
Zwei Idee die ich dazu habe – GLOBALE VARIABLE
Ich frage im ersten Schritt der Regel auf eine globale Variable (Semaphore) ab und starte den Zyklus nur, wenn diese Semaphore nicht gesetzt ist. Am Ende eines Zyklus zum Schließen des Tores (also am Ende der Regel) setze ich die Semaphore wieder zurück.
Im eingeschwungenen Zustand alles kein Problem, aber was passiert bei der ersten Ausführung. Welchen Wert haben Variablen die nicht explizit gesetzt wurden ?
Gibt es eine Möglichkeit Variablen beim Start der Box zu setzen ?
Im vorliegenden Fall könnte ich hingehen und mit jedem Event der Kategorie „Garagentor ist geschlossen“ die Semaphore losgelöst von Ihrem Zustand löschen. Dann habe ich kein Problem wenn beim Restart der Zipabox das Garagentor geschlossen ist, aber auch nur dann.
Zweite Idee (wie ich Sie in meiner KNX-Welt immer einsetze)
Ich reagiere nicht auf das Event selber, sondern nur auf die steigende Flanke. Bedeutet, nur wenn sich der Zustand des Garagentors von „geschlossen=true“ auf „geschlossen=false“ ändert starte ich die Regel. Wie mache ich das mit den Rule-Editor ?
Ich vermisse bei den Sensoren neben „active“, „inactive“ und „any“ so etwas wie „on first edge of active“, und „on first edge of inactive“.
mfg
Torsten
28/03/2018 um 09:32 Uhr #3700derHelleAdministratorHi,
hast du keinen Sensor der die Anzeigt ob das Tor offen oder geschlossen ist?
Gruß Helle
05/04/2018 um 21:15 Uhr #3705pheidkampTeilnehmerHi,
ich hab Dein Problem nicht zu 100% verstanden, ich habe aber so ein ähnliches Problem.
Ich habe ein Fibaro Roller Shutter und ein Jalousie Wandtaster wo ich den Fibaro Roller Shutter nicht unterbringen kann, oder besser gesagt ich möchte die Jalousie an einer zweiten Stelle im Raum ebenfalls manuell rauf- und runterfahren können.
Darum habe ich hinter den zweiten normalen Jalousie Wandtaster ein Fibaro Binär Sensor angeschlossen. Der Binär Sensor hat zwei Eingänge. Einer wird zum Rauf und der andere zum Runterfahren programmiert.
Da man bei dem Roller Shutter aber nicht abfragen kann, ob er sich gerade im Rauf- oder Runterfahrbetrieb befindet, habe ich mir zwei Regeln mit zwei Variablen überlegt.
Virtual Switch 1 = Taster Sensor Down
Virtual Switch 2 = Taster Sensor UPRegel 1:
Wenn Binär Sensor 1 offen
Falls Taster Sensor Down AN oder Taster Sensor Up AN
dann
Jalousie Aktion stopchange
Taster Sensor Down Aktion OFF
Taster Sensor Up Aktion OFF
sonst
Jalousie Aktion startchangedown
HTTP Taster Sensor Down Aktion ON
endeRegel 2:
Wenn Binär Sensor 2 offen
Falls Taster Sensor Down AN oder Taster Sensor Up AN
dann
Jalousie Aktion stopchange
Taster Sensor Down Aktion OFF
Taster Sensor Up Aktion OFF
sonst
Jalousie Aktion startchangeup
Taster Sensor Up Aktion ON
endeIch glaube so oder so ähnlich lößt du auch Dein Problem
Gruß
Peter06/04/2018 um 01:31 Uhr #3706AthensboyTeilnehmerHi phaidkamp
Interessante Aussage „Da man bei dem Roller Shutter aber nicht abfragen kann, ob er sich gerade im Rauf- oder Runterfahrbetrieb befindet“
ich bastle seit Monaten an Regeln an den Jalousien Aktoren rum, und bekomme es einfach nicht hin das bei Doppelklick oder festhalten etwas anderes passieren soll. Muss ich also mit variablen dran arbeiten?
-
AutorBeiträge
- Du musst angemeldet sein, um auf dieses Thema antworten zu können.