Ankündigung

Einklappen
Keine Ankündigung bisher.

Szenensteuerung per Schalter mit Rückmeldung und Präsenzsteuerung

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    X1 Szenensteuerung per Schalter mit Rückmeldung und Präsenzsteuerung

    Nachdem ich über einen längeren Zeitraum für mein Projekt eine "herkömmliche" Szenensteuerung vorgesehen und auch schon im GPA visualisiert hatte, habe ich das nun etwas umgearbeitet:

    Basis:
    • Nutzung der X1-Logiken und Szenenfunktionen
    • 4 Räume/Bereiche in einer gewerblichen Mieteinheit / Fotostudio
    • alle Funktionen werden standardmässig über PM und Szenen gesteuert. Eine manuelle Steuerung aller Einzelfunktionen ist bewusst nicht vorgesehen -> eher wird eine neue Szene ergänzt bzw. angepasst.
    Das Ziel:
    • Steuerung von ca. 4 bis 6 Szenen mit "Schalter" und Rückmeldung der aktiven Szene (dadurch Einsparen einer Kachel "Statusanzeige Text")
    • Automatische Aktivierung bzw. Abhängigkeit bestimmter Szenen durch GA-Gruppenadressen (z.B. Präsenzmelder, Sensoren)

    Die Umsetzung:
    • 2 Logikblätter:
      • 1x Definition der aktiven Szene mit Kachel "Schalter" (in meinem Fall über interne "Variablen-Datenpunkte" gelöst, bei dem Wunsch nach Auslösung über normale Tastsensoren sollte man je Szene 2 GA's dafür anlegen (1x E/A und 1x RM) und diese in der ETS mit dafür freigeschalteten Binär-Adressen verbinden)
      • 1x "Abhören" welcher Raum gerade welche Szene benötigt und diese Szene auslösen. Alle Szenengruppen sind identisch angelegt und haben sowohl eine "Aus", eine "Standby" und die normalen Szenen. In meinem Fall gibt es auch noch die Szenengruppe "Zentral". Bei Präsenz im Raum wird die über die Schalter ausgewählte Szene ausgelöst/aktiviert. Bei Nichtpräsenz wird in die Szene "Standby" in dem Raum gewechselt.
      • Zusätzlich wird beim Aktivieren bzw. Deaktivieren der Scharfschaltung der EMA noch eine vordefinierte Szene aufgerufen bzw. die Ausgänge deaktiviert.
    • Bei deaktivierter Scharfschaltung senden alle Haupt-Präsenzmelder ein EIN und AUS auf die für die Steuerung definierten GA's
    Das Ergebnis:
    • ohne die Formelberechnung von hyman hätte ich das nicht zum Laufen bekommen (mal wieder ein Danke an Dich und Deine Bausteine), finde den Ansatz mit den Logikblättern zwar grundsätzlich suboptimal aber es gibt in meinen Augen aktuell keine andere Alternative.
    • Es funktioniert in dieser 1. Version genau so, wie es soll und erlaubt das Umschalten zwischen den Szenen und eine simple Bedienung. Es wird noch weitere Optimierung geben oder Euch fallen Verbesserungen ein, dann setze ich das um und dokumentiere es hier ebenfalls.
    Die Details:

    aktualsierter Screenshot auf Basis Anpassung Blatt 1:
    Screenshot (895).png


    Bei Auslösung eines "Schalters"/Szene werden alle anderen Schalter ausgeschaltet. Über die Formelberechnung wird die Gruppenadresse für die aktive Szene gesetzt.

    Formel 1 für die jeweilige Szene: ({Aus:B} & _isAusValueSet_) ? 1 : (int?)null
    Formel 2.....x symbolisch: ({Standby:B} & _isStandbyValueSet_) ? 2 : (int?)null


    Screenshot (876).png Screenshot (877).png Screenshot (878).png Screenshot (879).png

    Die aktive Szene ist nun gesetzt / "eingeschaltet" und wird über ein weiteres Logikblatt verarbeitet:


    Screenshot (880).png



    Screenshot (881).png Screenshot (882).png Screenshot (883).png Screenshot (884).png Screenshot (885).png


    Formel 1-10 sichtbar,

    Formel 11: {Scharfschaltung1} & !_previousOut1_ ? (double?){SzeneAus} : ( !{Scharfschaltung1} & _previousOut1_ ? (double?){SzeneAn} : null )

    Formel 12: !{Scharfschaltung1} & ( {SzeneAktiv} != {SzeneAus} ) & ( {Studio} | {Büro} | {Flur} | {Nebenraum} ) ? (double?){SzeneAktiv} : ( !{Scharfschaltung1} & !{Studio} & !{Büro} & !{Flur} & !{Nebenraum} ? (double?){SzeneStandby} : ( {Scharfschaltung1} & ( {SzeneAktiv} == {SzeneAus} ) ? (double?){SzeneAus} : null ) )

    Formel 13 bis 16 (da ändert sich nur die Variable für den Raum: !{Scharfschaltung1} & ( {SzeneAktiv} != {SzeneAus} ) & {Studio} ? (double?){SzeneAktiv} : ( !{Scharfschaltung1} & !{Studio} ? (double?){SzeneStandby} : ( {Scharfschaltung1} & ( {SzeneAktiv} == {SzeneAus} ) ? (double?){SzeneAus} : null ) )


    Verwendete Gruppenadressen:
    • Verbunden mit X1-Datenpunkten in der ETS (aktive Szenennummer)
    Screenshot (887).png
    • Verbunden mit X1-Datenpunkten in der ETS (Auslöser für die Räume)
    Screenshot (888).png
    • Variablen Datenpunkte im X1-Datenpunkten (Schalter / Auslöser für die aktive Szene)
    Screenshot (889).png


    Aufbau der Szenen:

    Screenshot (890).png Screenshot (891).png



    Viellleicht kann dieser Ansatz dem einen oder anderen User bei einer ähnlichen Umsetzung helfen.


    Gruss und schönen Sonntag
    Angehängte Dateien
    Zuletzt geändert von araeubig; 10.03.2024, 12:57.

    #2
    Zitat von araeubig Beitrag anzeigen
    Formel 1: {Aus:B} & !{Standby:B} & !{Arbeiten:B} & !{Besprechen:B} & !{Denken:B} & !{Fotografieren:B} & !{An:B} ? (double?)1 : (!{Aus} & {Standby} & !{Arbeiten} & !{Besprechen} & !{Denken} & !{Fotografieren} & !{An} ? (double?)2 : (!{Aus} & !{Standby} & {Arbeiten} & !{Besprechen} & !{Denken} & !{Fotografieren} & !{An} ? (double?)3 : (!{Aus} & !{Standby} & !{Arbeiten} & {Besprechen} & !{Denken} & !{Fotografieren} & !{An} ? (double?)4 : (!{Aus} & !{Standby} & !{Arbeiten} & !{Besprechen} & {Denken} & !{Fotografieren} & !{An} ? (double?)5 : (!{Aus} & !{Standby} & !{Arbeiten} & !{Besprechen} & !{Denken} & {Fotografieren} & !{An} ? (double?)6 : (!{Aus} & !{Standby} & !{Arbeiten} & !{Besprechen} & !{Denken} & !{Fotografieren} & {An} ? (double?)7 : null))))))
    Wenn ich das richtig verstehe, soll hier die Nummer der zuletzt aktivierten Szene ausgegeben werden. Warum als double / NUMBER? Ist doch konzeptionell eine Ganzzahl (int / INTEGER)...

    Außerdem frage ich mich: Würde es nicht ausreichen, jeden aktuell mit true empfangenenen Szenenauslöser direkt auf die entsprechende Szenennummer abzubilden, ohne die anderen auf false zu prüfen? Also pro Szenenauslöser Formeln etwa so:
    • ({Aus:B} & _isAusValueSet_) ? 1 : (int?)null​
    • ({Standby:B} & _isStandbyValueSet_) ? 2 : (int?)null
    • ...​
    Die Berücksichtigung von _is...ValueSet_ verhindert, dass "alte" true-Eingaben im aktuellen Lauf noch wirken können. Es sollten in der Regel nicht zwei neue Szenenauslöser auf einmal kommen (und wenn doch gewinnt der mit der höheren Nummer). Alle Ausgänge gehen auf GA 0/7/10.

    Diese Variante finde ich deutlich übersichtlicher und erweiterungsfreundlicher.

    Beim zweiten Logikblatt verstehe ich schon nicht, was einige der Eingabwerte bedeuten und wozu die Ausgabewerte dienen. Deshalb kann ich nur zu Formalien was schreiben:
    • Auch dort verwendest Du vielfach double / NUMBER als Typ des Ausgabewerts, wo int / INTEGER sachgerechter wäre.
    • Formel 11 verstehe ich als Flankendetektor/Wertgenerator für Scharfschaltung1: Steigende Flanke --> Szene "Aus"; Fallende Flanke --> Szene "An". Ausgang 11 schreibt – wie die Formelberechnung im ersten Logikblatt – auf die GA für die Szenennummer. Damit sind aber die einzelnen booleans für die Szenen nicht mehr up-to-date. Oder werden diese durch die zwingend folgende Szenenauslösung noch aktualisiert?

    Kommentar


      #3
      Zitat von hyman Beitrag anzeigen
      double / NUMBER?
      Mein Fehler durch das Zusammenkopieren in VSC und Einfügen im GPA - jep int ist absolut korrekt.

      Werde Deinen Ansatz nachher mal testen für Blatt 1. Zu Blatt 2 schreibe ich nachher noch eine Ergänzung (und ändere da natürlich auch auf int). Merci und Gruss

      Kommentar


        #4
        hyman

        Blatt 1 geändert und int-Fehler korrigiert - dazu in Beitrag 1 die Formel dazu angepasst. Es ist schon so, dass nicht zwei Auslöser auf einmal kommen werden und dazu wird die Logik "etwas" performanter und die Erweiterung mit neuen Szenen ist einfacher.

        Screenshot (895).png

        Kommentar


          #5
          Zitat von hyman Beitrag anzeigen
          Beim zweiten Logikblatt verstehe ich schon nicht, was einige der Eingabwerte bedeuten und wozu die Ausgabewerte dienen. Deshalb kann ich nur zu Formalien was schreiben:
          • Auch dort verwendest Du vielfach double / NUMBER als Typ des Ausgabewerts, wo int / INTEGER sachgerechter wäre.
          • Formel 11 verstehe ich als Flankendetektor/Wertgenerator für Scharfschaltung1: Steigende Flanke --> Szene "Aus"; Fallende Flanke --> Szene "An". Ausgang 11 schreibt – wie die Formelberechnung im ersten Logikblatt – auf die GA für die Szenennummer. Damit sind aber die einzelnen booleans für die Szenen nicht mehr up-to-date. Oder werden diese durch die zwingend folgende Szenenauslösung noch aktualisiert?
          Das erste Blatt definiert die aktuell gültige Szene auf der Adresse 0/7/10 und das zweite Blatt liest auf der 0/7/14 die aktuell gültige Szene. Du hast recht, dass die einzelnen booleans nun nicht mehr Stimmig sind bei Scharf-Unscharfschaltung (be mir sind diese Schalter ausgeblendet und deshalb für mich nicht störend) werde das aber in dem Blatt beheben und ebenso oben aktualisieren. Die ints-Fehler behebe ich dabei auch.

          Die Eingabewerte sind Auslöser der Bewegungsmelder pro Raum:

          Bei Präsenz sendet dieser eine 1 und die aktuell gültig Szene wird aufgerufen - bei Abwesenheit sendet der PM eine 0 und die Standby Szene für den Raum wird aufgerufen.

          Wenn die EMA scharfgeschaltet ist, ist dieser Lichtausgang gesperrt und eine einzelne Leuchtengruppe pro Raum geht an oder aus und die Leuchtengruppe "Szene" ist gesperrt.

          Kommentar

          Lädt...
          X