Skip to content

[DE] Bedingte Trigger

walli545 edited this page Dec 30, 2020 · 2 revisions

Mithilfe von bedingten Triggern kann für alle Arten von Triggern (Zeit, Astro) eine zusätzliche Abfrage eingebaut werden, die beim Auslösen des Triggers durchgeführt wird. Ist diese Abfrage (Bedingung) war, löst der Trigger mit dem eingestellten Wert aus. Trifft die Bedingung nicht zu, geschieht nichts.

Um bedingte Trigger anzulegen, muss folgendermaßen vorgegangen werden:

  1. Im Vis Edit Modus müssen für jedes Widget eine Reihe von States angegeben werden, die für das Anlegen von Bedingungen zur Verfügung stehen sollen. Dies geschieht mit den Optionen Anzahl State für Bedingungen, Bedingung State Id[1-10], Bedingung State Alias[1-10].

  2. Im Vis View Modus:

    2.1. Editieren Sie den Trigger, der eine Bedingung erhalten soll.

    2.2. Klicken Sie anschließend auf das Plus Symbol neben Bedingung.

    2.3. Wählen Sie einen State aus, der überprüft werden soll.

    2.4. Mit Gleich oder Ungleich wählen Sie aus, ob der Trigger auslöst, wenn der erste Wert gleich bzw. ungleich dem nächsten Wert ist.

    2.5 Mit Mit Konstante wählen Sie aus, ob der Wert, den der in 2.3 ausgewählte State zum Zeitpunkt, an dem der Trigger auslöst, gegen einen festen, also konstanten, Wert oder gegen den Wert eines anderen States verglichen werden soll.

    2.5.1. Mit Konstante: Geben Sie im letzten Eingabefeld einen Wert an, den der in 2.3 ausgewählte State haben, bzw. nicht haben soll (abhängig von 2.4). Dabei wird beim Auslösen des Triggers der Wert des States abgefragt, in eine Zeichenkette umgewandelt und anschließend mit dem Konstanten Wert verglichen. Dabei wird ein boolscher State zu true oder false. Dies sollte auch mit Zahlen funktionieren, nur bei Gleitkommazahlen aufpassen.

    2.5.2 Ohne Konstante: Wählen Sie einen zweiten State aus. Beim Auslösen des Triggers werden die aktuellen Werte beider States abgefragt, in Zeichenketten umgewandelt und miteinander verglichen.

Komplexe Bedingungen

Über das Widget können nur einfache Gleichheitsbedinugungen angelegt werden. Werden komplexere Bedingungen benötigt, müssen diese über JavaScript-Code oder über ein Blockly-Script im JavaScript Adapter implementiert werden und über einen State abfragbar gemacht werden.

  1. Legen Sie einen neuen State, der die Bedingung abbildet an, z.B. unter 0_userdata.0. Der State sollte vom Typ Datenpunkt und vom Datenpunkttyp Logikwert sein.
  2. Erstellen Sie ein neues Script. Es können meherere komplexe Bedingungen in einem Script implementiert werden.
  3. Hier ist ein Beispiel für ein solches Script, die eigene Implementierung kann natürlich hiervon abweichen:
on({
    id: [ // Aufführen aller States, die an der Bedingung beteiligt sind
        '0_userdata.0.bool1',
        '0_userdata.0.number1',
        '0_userdata.0.string1'
    ],
    change: 'any'`
},
    () => {
        // Abfragen der aktuellen Werte der States
        const bool1 = getState('0_userdata.0.bool1').val;
        const number1 = getState('0_userdata.0.number1').val;
        const string1 = getState('0_userdata.0.string1').val;

        // Überprüfen der Bedingung
        const result = bool1 && number1 > 10 && string1.startsWith('abc');

        // Schreiben des Ergebnisses in den State, der die Bedingung abbildet
        setState('0_userdata.0.KomplexeBedingung', result);
    }
);
  1. Einstellen, dass der neu angelegte State im View für Bedingungen zur Verfügung steht.
  2. Hinzufügen einer Bedingung zu einem Trigger im Vis View mit den Einstellungen Gleich Mit Konstante true.