Benutzer-Werkzeuge

Webseiten-Werkzeuge


tools:scripting-node-syntax

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
tools:scripting-node-syntax [2019/09/19 17:36] – [Vordefinierte Variablen] akuhtztools:scripting-node-syntax [2022/09/27 08:03] (aktuell) – [Makro konfigurieren] akuhtz
Zeile 9: Zeile 9:
 **Basisbefehle** sind Anweisungen an den Knoten, bestimmte Einstellungen durchzuführen (z.B. bei einem Lichtport die Helligkeit einzustellen). Basisbefehle bestehen aus einem Anweisungswort und zugehörigen Parametern. Befehle und Parameter müssen gültige Anweisungen ergeben, sonst wird die Anweisung nicht ausgeführt. **Basisbefehle** sind Anweisungen an den Knoten, bestimmte Einstellungen durchzuführen (z.B. bei einem Lichtport die Helligkeit einzustellen). Basisbefehle bestehen aus einem Anweisungswort und zugehörigen Parametern. Befehle und Parameter müssen gültige Anweisungen ergeben, sonst wird die Anweisung nicht ausgeführt.
  
-**Templatebefehle** sind vorgelagerte Anweisungen zur Textersetzung. Es wird die Templatesyntax [[https://velocity.apache.org/engine/devel/user-guide.html|velocity]] verwendet. Templatebefehle werden nur im Wizard ab Version 1.9 unterstützt.+**Templatebefehle** sind vorgelagerte Anweisungen zur Textersetzung. Es wird die Templatesyntax [[https://velocity.apache.org/engine/2.3/vtl-reference.html|Velocity Referenz]] und [[https://velocity.apache.org/engine/devel/user-guide.html|Velocity User Guide]] verwendet. Templatebefehle werden nur im Wizard ab Version 1.9 unterstützt.
  
 **Menübefehle** sind nochmal vorgelagert und werden verwendet, um ein Menü anzuzeigen, in welchem Parameter vom Benutzer abgefragt werden - wie z.B. welche Ports verwendet werden sollen. Diese Parameter werden internen Variablen zugewiesen und können dann mit Hilfe der Templates ausgewertet werden. **Menübefehle** sind nochmal vorgelagert und werden verwendet, um ein Menü anzuzeigen, in welchem Parameter vom Benutzer abgefragt werden - wie z.B. welche Ports verwendet werden sollen. Diese Parameter werden internen Variablen zugewiesen und können dann mit Hilfe der Templates ausgewertet werden.
Zeile 41: Zeile 41:
 ## ab Wizard-Build 3540 ## ab Wizard-Build 3540
 set aspect 0 accessory=${selectedAccessory} name="${macroName}_gerade_AC" set aspect 0 accessory=${selectedAccessory} name="${macroName}_gerade_AC"
 +
 +## ab Wizard-Build 4154
 +set feedback 10 name="Station Test"
 </code> </code>
  
Zeile 132: Zeile 135:
 </code> </code>
 ^  config  ^  Parameter  ^  Wert  ^ ^  config  ^  Parameter  ^  Wert  ^
-| macro  | repeat  | Variable o. Zahl ( 0-250 )  |+| macro  | repeat  | Variable o. Zahl ( 1-250: Anzahl Wiederholungen, 0: endlose Wiederholung )  |
 |  | slowdown  | Variable o. Zahl ( 1-250 )  | |  | slowdown  | Variable o. Zahl ( 1-250 )  |
 | macrotime  | day  | Variable o. Zahl ( 0-7, everyday(7) ) | | macrotime  | day  | Variable o. Zahl ( 0-7, everyday(7) ) |
Zeile 192: Zeile 195:
 | servo  | start | | servo  | start |
 | switch | on / off | | switch | on / off |
-| light  | on / off / up / down / neon/ blinka / blinkb / flasha / flashb / doubleflash |+| switchpair | on / off | 
 +| light  | on / off / up / down / neon / blinka / blinkb / flasha / flashb / doubleflash 
 +| input | query0 / query1 |
 | accessoryOkay | no_feedback / query0 / query1 | | accessoryOkay | no_feedback / query0 / query1 |
 | backlight | start | | backlight | start |
Zeile 203: Zeile 208:
 Für die Typen ''delay'' und ''randomDelay'' wird keine ''action'' angegeben. Eine Verzögerung wird wie folgt definiert: \\ ''add step ptype=delay delay=10'' \\ ''add step ptype=randomDelay delay=100'' Für die Typen ''delay'' und ''randomDelay'' wird keine ''action'' angegeben. Eine Verzögerung wird wie folgt definiert: \\ ''add step ptype=delay delay=10'' \\ ''add step ptype=randomDelay delay=100''
  
-Folgendes ist noch nicht, bzw. nur in den Testversionen implementiert+Weitere Beispiele
-ptype  action ^ +<code> 
-| input | query0 query1 |+add step ptype=accessoryOkay action=no_feedback 
 +</code> 
  
  
Zeile 348: Zeile 355:
 | '':servo'' | integer | Auswahlbox der möglichen Servoausgänge des Knotens | | '':servo'' | integer | Auswahlbox der möglichen Servoausgänge des Knotens |
 | '':switch'' | integer | Auswahlbox der möglichen Schaltausgänge des Knotens | | '':switch'' | integer | Auswahlbox der möglichen Schaltausgänge des Knotens |
 +| '':flag'' | integer | Auswahlbox der möglichen Flags des Knotens |
  
  
 ==== VID/PID prüfen ==== ==== VID/PID prüfen ====
 +
 +Mit der Kombination aus PID / VID [[http://www.bidib.org/support/product_id.html|Produktidentifikation]] wird geprüft, ob das Script zu dem gewählten Knoten des Herstellers passt. Wird ein Script nicht auf dem passenden Knoten ausgeführt, bricht die Verarbeitung ab.
 +
 +Die VID (Vendor-ID) und PID (Product-ID) sind Bestandteil der UID (Unique-ID).
 +
 +Beispiel:
 +<code>
 +V 0D P 84002100 << UID
 +  ^    ^
 +  ¦    ¦
 +  ¦    ------- 0x84 --> 132 << PID
 +  ¦
 +  ------------ 0x0D -->  13 << VID
 +</code>
  
 Um die VID und PID zu prüfen, kann die ''##require''-Anweisung benutzt werden: Um die VID und PID zu prüfen, kann die ''##require''-Anweisung benutzt werden:
Zeile 362: Zeile 384:
 ##require(vid="13", pid="129,130,145") ##require(vid="13", pid="129,130,145")
 </code> </code>
 +
 +Die Angabe der VID(PID kann auch als Hex-Zahl erfolgen mit ''0x''-Prefix:
 +<code>
 +## ab Wizard-Build 4154
 +##require(vid="0x0D", pid="0xA0,0x9F,0x53")
 +</code>
 +
 +==== Firmware-Version prüfen ====
 +
 +## ab Wizard-Build 4490
 +
 +Um die Firmware-Version zu prüfen, kann die ''##requireVersion''-Anweisung benutzt werden:
 +<code>
 +##requireVersion(min=1.0.0, max=3.0.0)
 +</code>
 +
 +Mit der obigen Anweisung wird geprüft ob der Knoten eine Firmware-Version >= min und Firmware-Version < max hat. Der max Wert ist also exclusive. Ist dies nicht der Fall wird eine Fehlermeldung angezeigt. Die Werte für die Firmware-Version müssen im Format #.#.# angegeben werden.
  
 ==== Autor ==== ==== Autor ====
Zeile 400: Zeile 439:
   * ''node_enabled_switch_count'' \\ Anzahl der tatsächlich aktiven Switch Ports auf dem Knoten. Bei umschaltbaren Ports kann dieser Wert von ''node_switch_count'' abweichen.   * ''node_enabled_switch_count'' \\ Anzahl der tatsächlich aktiven Switch Ports auf dem Knoten. Bei umschaltbaren Ports kann dieser Wert von ''node_switch_count'' abweichen.
   * ''node_enabled_switchpair_count'' \\ Anzahl der tatsächlich aktiven SwitchPair Ports auf dem Knoten. Bei umschaltbaren Ports kann dieser Wert von ''node_switchpair_count'' abweichen.    * ''node_enabled_switchpair_count'' \\ Anzahl der tatsächlich aktiven SwitchPair Ports auf dem Knoten. Bei umschaltbaren Ports kann dieser Wert von ''node_switchpair_count'' abweichen. 
- +  * ''node_first_backlightport_number'' \\ Nummer des ersten Backlight Port (ab Wizard 1.12.14) 
 +  * ''node_first_inputport_number'' \\ Nummer des ersten Input Port (ab Wizard 1.12.14) 
 +  * ''node_first_lightport_number'' \\ Nummer des ersten Light Port (ab Wizard 1.12.14) 
 +  * ''node_first_servoport_number'' \\ Nummer des ersten Servo Port (ab Wizard 1.12.14) 
 +  * ''node_first_switchport_number'' \\ Nummer des ersten Switch Port (ab Wizard 1.12.14) 
 +  * ''node_first_switchpairport_number'' \\ Nummer des ersten SwitchPair Port (ab Wizard 1.12.14) 
 +  * ''user_lang'' \\ atkuelle Sprache, z.B. ''en'' oder ''de'' (ab Wizard 1.12.4)
  
  
Zeile 437: Zeile 482:
  
  
 +===== Sprachabhängige Fehlermeldung =====
 +
 +Eine sprachabhängige Fehlermeldung kann durch Auswertung der ''$user_lang'' erfolgen:
 +<code>
 +#if ($node_macro_size < $led_count) 
 + #if ($user_lang == "de")
 + $exceptionThrower.throwUserDefined("Maximale Anzahl der Strassenlampen pro Makro auf diesem Knoten: $node_macro_size")
 + #else
 + $exceptionThrower.throwUserDefined("Maximum supported streetlamps per macro on this node: $node_macro_size")
 + #end
 +#end
 +</code>
 +
 +===== Formattierung von Zahlen =====
 +
 +Mit folgender Erweiterung ''$numberTool.format("#0.00", ${var})'' können Zahlen formattiert werden:
 +
 +<code>
 +set switch ${switchPort0} name="SP$numberTool.format("#00", ${switchPort0}) | ${turnoutName} | ${labelStraight}"
 +set switch ${switchPort1} name="SP$numberTool.format("#00", ${switchPort1}) | ${turnoutName} | ${labelBranch}"
 +</code>
 +
 +Weitere Info siehe [[https://velocity.apache.org/tools/3.1/tools-summary.html#NumberTool|Velocity NumberTool]]
 ====== Tricks mit Velocity ====== ====== Tricks mit Velocity ======
  
Zeile 474: Zeile 542:
 ====== Textreste  ====== ====== Textreste  ======
  
-**Tipps zu velocity**\\ +**Tipps zu velocity** 
-Der Kontext ist eine Map<String, Object>, also eine Registry, in der man unter einem Schlüssel (Key) einen Wert (Value) reinhängen kann. Der Kontext wird immer übergeben (kann auch leer sein). + 
-Die #set-Zeilen im Script legen dann die Variablen in den Kontext rein und diese werden dann später beim Ersetzen verwendet. Die aufgerufene Funktion kann die Werte mit dem Key wieder rausholen.+Der Kontext ist eine ''Map<String, Object>'', also eine Registry, in der man unter einem Schlüssel (''key'') einen Wert (Value) reinhängen kann. Der Kontext wird immer übergeben (kann auch leer sein). 
 + 
 +Die ''#set''-Zeilen im Script legen dann die Variablen in den Kontext rein und diese werden dann später beim Ersetzen verwendet. Die aufgerufene Funktion kann die Werte mit dem ''key'' wieder rausholen. 
 Erläuterung hierzu: https://github.com/castleproject/MonoRail/blob/master/MR2/NVelocity/src/NVelocity.Tests/Test/ContextTest.cs Erläuterung hierzu: https://github.com/castleproject/MonoRail/blob/master/MR2/NVelocity/src/NVelocity.Tests/Test/ContextTest.cs
  
-Text wieder anzeigen: velocityEngine.Evaluate() +Text wieder anzeigen: ''velocityEngine.Evaluate()''
  
 Alles ab hier ist noch Sammelsurium ! Alles ab hier ist noch Sammelsurium !
Zeile 493: Zeile 564:
  
  
-===== Script Header  =====+===== Macro Level =====
  
 <WRAP center round important 60%>Aktuell noch kein Support in Wizard und Monitor</WRAP> <WRAP center round important 60%>Aktuell noch kein Support in Wizard und Monitor</WRAP>
- 
-Jedes Script hat mit einem Header in der ersten Zeile zu beginnen. In diesem Header wird festgelegt für welchen Knotentyp und für welche Script Engine Version das Script erstellt wurde. 
- 
-<code> 
-<Head PID=125 VID=13 VER=1.0> 
-</code> 
- 
-Mit der Kombination aus PID / VID [[http://www.bidib.org/support/product_id.html|Produktidentifikation]] wird geprüft, ob das Script zu dem gewählten Knoten des Herstellers passt. Wird ein Script nicht auf dem passenden Knoten ausgeführt, bricht die Verarbeitung ab. Mit der Version der Scripting Engine kann die Script Engine prüfen, ob sie das Script korrekt ausführen kann. 
  
 Zusätzlich ist der Macro-Level zu prüfen. Der Macro-Level bezeichnet den Funktionsumfang der Makro-Engine und wird vom Knoten per Feature bekannt gegeben. Zusätzlich ist der Macro-Level zu prüfen. Der Macro-Level bezeichnet den Funktionsumfang der Makro-Engine und wird vom Knoten per Feature bekannt gegeben.
tools/scripting-node-syntax.1568907371.txt.gz · Zuletzt geändert: 2019/09/19 17:36 von akuhtz

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki