Anfängerfragen zu Regeln – wie implementiere ich Semaphoren

Startseite Forum ZipaTile / Zipabox – Regeln Anfängerfragen zu Regeln – wie implementiere ich Semaphoren

Schlagwörter: 

Ansicht von 4 Beiträgen - 1 bis 4 (von insgesamt 4)
  • Autor
    Beiträge
  • #3698
    TorWie
    Teilnehmer

    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

     

    #3700
    derHelle
    Administrator

    Hi,

    hast du keinen Sensor der die Anzeigt ob das Tor offen oder geschlossen ist?

    Gruß Helle

    #3705
    pheidkamp
    Teilnehmer

    Hi,

    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 UP

    Regel 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
    ende

    Regel 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
    ende

    Ich glaube so oder so ähnlich lößt du auch Dein Problem

    Gruß
    Peter

    #3706
    Athensboy
    Teilnehmer

    Hi 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?

Ansicht von 4 Beiträgen - 1 bis 4 (von insgesamt 4)
  • Du musst angemeldet sein, um auf dieses Thema antworten zu können.