Trigger

Ein Trigger gehört zu einem Gerät und besteht aus einer Speicheradresse und einer Liste von Bedingungen und damit verknüpften Methoden des Geräts. Er überwacht den Wert der Speicheradresse und kann bei Änderungen des Wertes prüfen, ob nun eine der zuvor definierten Bedingungen (ausgelöst durch die Wertänderung) zutrifft. Ist dies der Fall, ruft der Trigger die dazugehörige Methode auf. Da Methoden ab LogoControl v0.4 nicht nur Aktionen auf der LOGO auslösen können, sondern auch beliebige Shell-Scripte starten können, macht es dies zu einem mächtigen Werkzeug.

Beispiel gefällig? Wie wäre es mit E-Mail verschicken bei Überschreiten eines Wertes, eine Push-Nachricht (Pushbullet) auf das Smartphone beim Öffnen der Haustür, Wake-Up-On-LAN des Büro PCs beim Einschalten des Büro-Lichtes usw. und das alles getriggert von eurer LOGO. In meiner Anbindung an FHEM verwende ich die Trigger beispielsweise zum Schalten von FHEM-Geräten durch einen an die LOGO angeschlossenen Taster.

Ein Trigger wird wie die Attribute und Methoden in der config.xml definiert. Er muss immer einem Device untergeordnet sein und er kann auch nur die Methoden aufrufen welche zu diesem Device gehören. Allerdings sagt ja niemand, dass ein Device nur ein real existierendes „Stück Hardware“ sein muss. Man kann auch ein „Dummy Device“ anlegen, und dort z.B. seine Trigger zum Aufruf von Shell-Scripten sammeln.

Trigger <trigger>
<trigger plc="myLogo" address="100.4" datatype="bit">
	<onValue value="1" method="1" />
	<onValue value="2" method="2" />
</trigger>
XML-Attribut Beschreibung
plc Die ID der PLC von welcher das Attribut gelesen werden soll. Es muss im <settings> Block der config.xml eine entsprechende PLC mit dieser ID existieren.
address VVM-Speicheradresse der LOGO, ab welcher das Attribut gelesen werden kann. Dabei können sowohl benannte Adressen (z.B. I6,Q4,M22…) als auch direkte Speicheradressen verwendet werden. Bei direkter Adressierung steht je nach Datentyp (siehe „datatype“) hier nur das byte (z.B. 254 für byte, word, dword) oder in der Form [byte].[bit] (z.B. 150.2 für den Datentyp „bit“)
datatype Datentyp des Attributs. Bestimmt die Länge der zu lesenden Bytes an der durch „address“ angegeben Start-Position. Mögliche Werte: bit, byte, word, dword, uword. Die Angabe des Datentyps ist optional. Für benannte Adressen (z.B. I6,Q4,M22…) erkennt LogoControl den Datentyp automatisch und die Angabe kann entfallen. Für alle andere Adressen wird bei fehlendem „datatype“ der Standard „byte“ bzw.  bei Vorhandensein eines Punktes (.)  in „address“ der Standard „bit“ gewählt. Ist die Standard-Logik nicht ausreichend muss der „datatype“ explizit gesetzt werden.
 <onValue>

Das sind die Bedingungen, die bei Wertänderungen der durch den Trigger überwachten Adresse  ausgewertet werden. Es können beliebig viele onValue-Blöcke pro Trigger definiert werden. Pro „value“  ist eine Methoden-ID „method“ anzugeben, welche bei Eintreffen der im „value“ Parameter definierten Bedingung aufgerufen wird. Diese Methode muss ich gleichen Device existieren wie der Trigger selbst. Die onValue-Liste wird der Reihe nach abgearbeitet. Sobald eine „value“-Bedingung zutrifft wird die weitere Auswertung abgebrochen. Der Wert von „value“ wird als Regulärer Ausdruck ausgewertet, es kann hier also nicht nur eine feste Zahl sondern auch ein beliebig komplexer Ausdruck (z.B. eine RegEx für Zahlen zwischen 300 und 399) stehen. In jedem Fall wird ein Trigger nur dann ausgelöst (also die zugehörige Methode aufgerufen), wenn zuvor die Bedingung noch nicht zutraf, nun aber zutrifft. Solange also dieselbe Bedingung weiter zutrifft (obwohl sich der Wert geändert hat) wird kein weiteres Ereignis ausgelöst.

Tipp zum Auswerten aller Wertänderungen (z.B. für Logfiles)
XML-Attribut Beschreibung
value Ein Regulärer Ausdruck welcher bei Wertänderungen an der überwachten Speicheradresse ausgewertet wird.
method Die id einer Method, welche beim Eintreffen der Bedingung aufgerufen wird. Die Methode muss sich im selben Device befinden wie der Trigger.

 Beispiel

<device id="49" name="Shell Scripts">
	<method id="1" name="Push Haustür-Alarm" script="pushbullet.sh 'Haustür' 'wurde geöffnet'" />
	<trigger plc="myLogo" address="0.4" datatype="bit">
		<onValue value="2" method="1" />
	</trigger>
</device>