Table of Contents
Steuern von Rocrail durch externe Taster und LEDs mit xml-scripting
Aufgabenstellung
Um Rocrail ohne Rocview zu nutzen - zB wenn man nur einen RasPi oder ähnliches als Server betreibt - muss man Taster zur Befehlseingabe (über Rückmelder) und LEDs zur Statusanzeige (über Ausgänge) installieren.
Ich habe das an meiner Anlage über einen IO-Baustein (OneControl aus dem BiDiB-System) mit einigen Aktionen realisiert.
6 Taster mit eingebauten LEDs dienen zum Ein- und Ausschalten der Booster, zum Aktivieren und Deaktivieren des Auto-Mode und zum Starten und Stoppen der Loks.
Die LEDs in den Tasten zeigen den jeweiligen Zustand an.
Auch hier bieten die xml-Scripte eine wesentliche Vereinfachung der Aufgabe.
Es genügen zwei Aktionen die jeweils ein Script auslösen:
Ein Script, welches bei Systemstart (Systemaktion / Init) aufgerufen wird und die Ausgänge (LEDs) in einen definierten Zustand bringt.
Ein weiteres Script, welches auf allen Tastern als Aktion liegt und je nach gedrückter Taste entsprechende System-Aktionen auslöst.
Im Plan werden die Rückmelder für die Tasten und die Ausgänge für die LEDs angelegt.
Scripte
Hier das Script zur Auswertung der Taster:
<xmlscript> <!-- Steuerung von Rocrail über externe Taster mit LEDs zur Statusanzeige --> <!-- Taster 1, ID=T1, Funktion= Power On --> <!-- Taster 2, ID=T2, Funktion= Power Off --> <!-- Taster 3, ID=T3, Funktion= Auto On --> <!-- Taster 4, ID=T4, Funktion= Auto Off --> <!-- Taster 5, ID=T5, Funktion= Loks starten --> <!-- Taster 6, ID=T6, Funktion= Loks stoppen --> <!-- LED 1, ID=L1, Anzeige= Power On --> <!-- LED 2, ID=L2, Anzeige= Power Off --> <!-- LED 3, ID=L3, Anzeige= Auto On --> <!-- LED 4, ID=L4, Anzeige= Auto Off --> <!-- LED 5, ID=L5, Anzeige= Loks gestartet --> <!-- LED 6, ID=L6, Anzeige= Loks gestoppt --> <!-- Taste 1 = Power ON --> <if state="fb T1 = true"> <then> <!-- Ist Power AUS? --> <if state="co L2 = on"> <then> <co id="L1" cmd="on"/> <co id="L2" cmd="off"/> <sys cmd="go"/> <exit/> </then> </if> </then> </if> <!-- Taste 2 = Power OFF --> <if state="fb T2 = true"> <then> <!-- Ist Power AN? --> <if state="co L1 = on"> <then> <co id="L2" cmd="on"/> <co id="L1" cmd="off"/> <sys cmd="stop"/> <exit/> </then> </if> </then> </if> <!-- Taste 3 = AutoMode ON --> <if state="fb T3 = true"> <then> <!-- Ist AutoModes AUS? --> <if state="co L4 = on"> <then> <co id="L3" cmd="on"/> <co id="L4" cmd="off"/> <auto cmd="on"/> <exit/> </then> </if> </then> </if> <!-- Taste 4 = AutoMode OFF --> <if state="fb T4 = true"> <then> <!-- Ist AutoMode AN? --> <if state="co L3 = on"> <then> <co id="L4" cmd="on"/> <co id="L3" cmd="off"/> <!-- LED für Lok Start/Stop zurück setzen --> <co id="L5" cmd="off"/> <co id="L6" cmd="on"/> <auto cmd="off"/> <exit/> </then> </if> </then> </if> <!-- Taste 5 = Loks starten --> <if state="fb T5 = true"> <then> <!-- Ist AutoMode AN? --> <if state="co L3 = on"> <then> <!-- Loks gestoppt? --> <if state="co L6 = on"> <then> <co id="L5" cmd="on"/> <co id="L6" cmd="off"/> <auto cmd="start"/> <exit/> </then> </if> </then> </if> </then> </if> <!-- Taste 6 = Loks stoppen --> <if state="fb T6 = true"> <then> <!-- Loks gestartet? --> <if state="co L5 = on"> <then> <co id="L5" cmd="off"/> <co id="L6" cmd="on"/> <auto cmd="stop"/> <exit/> </then> </if> </then> </if> </xmlscript>
Bevor eine Aktion ausgeführt wird, wird überprüft, ob der gewünschte Zustand nicht bereits eingestellt ist.
"Alle Loks starten" ist auch nur möglich, wenn zuvor der AutoMode auf On gestellt wurde.
Hier das Script zum initialisieren der LEDs bei Systemstart:
<xmlscript> <!-- Steuerung von Rocrail über externe Taster mit LEDs zur Statusanzeige. INIT --> <co id="L1" cmd="off"/> <co id="L2" cmd="on"/> <co id="L3" cmd="off"/> <co id="L4" cmd="on"/> <co id="L5" cmd="off"/> <co id="L6" cmd="on"/> </xmlscript>
Konfiguration
Es werden zwei Aktionen zum Starten der Scripte konfiguriert:
Aktion "InitScript" bei Systemstart zum initialisieren der LEDs und "StartScript" zur Auswertung der Tastendrücke.
"InitScript" liegt auf der Systemaktion "init" und "StartScript" liegt als Aktion auf allen Tastern.
Download
Plan und Scripte:
extkeyboardscript.zip