# Technische Dokumentation (DE)

# XML Projektdatei

Am Anfang einer jeden Konfiguration muss ein Mapping erstellt werden, also eine Konfiguration die dem System sagt, welchen Banner er wo darstelllen muss. Für die Basics reicht der Dialog beim Erstellen eines neuen Projektes in der Regel aus. Es gibt aber Konfigurationen die z.B. über mehrere Bildschirme gehen. Hier muss man manuell in die Konfiguration eingreifen. Die folgenden Seiten geben einen Überblick über die Verfügbaren TAGS in der XML Datei und ihre Auswirkungen

# Individuelles XML Mapping

Die Position von LED-Panels wird normalerweise automatisch berechnet. Auf die linke Seite ist die Grundlinie. Nach dem Erstellen einer Datei ist es immer Null (x = 0). Auf der rechten Seite wird es auf den errechneten rechten Rand begrenzt. Dieser Wert ist sichtbar in jedem XML unter dem Tag &lt;MAXCOLWIDTH&gt;

[![Screenshot at Jan 19 15-13-07.png](https://docs.ledviz.com/uploads/images/gallery/2022-01/scaled-1680-/daB7jZ8MT60JKvkq-screenshot-at-jan-19-15-13-07.png)](https://docs.ledviz.com/uploads/images/gallery/2022-01/daB7jZ8MT60JKvkq-screenshot-at-jan-19-15-13-07.png)

Um eine Konfiguration mit mehreren Bildschirmen zu handhaben, muss das Ausgabefenster auf einem oder mehreren erweiterte Bildschirm wird so angepasst, dass er alle Bildschirme abdeckt. Da sich die Ausgabe immer über ein Fenster erstreckt, müssen hierzu die erweiterten Bildschrime nebeneinander in einer Reihenfolge von links nach rechts angeordnet werden. Diese Einstellungen können Sie in den Anzeigeeinstellungen von Windows vorgenommen werden.

[![Screenshot at Jan 19 15-15-56.png](https://docs.ledviz.com/uploads/images/gallery/2022-01/scaled-1680-/dla5rmveOaEVgf81-screenshot-at-jan-19-15-15-56.png)](https://docs.ledviz.com/uploads/images/gallery/2022-01/dla5rmveOaEVgf81-screenshot-at-jan-19-15-15-56.png)

Als Hardwarelösung kann hier eine Matrox TripleHead2Go oder DualHead2Go zum Einsatz kommen. Durch die Extender von Matrox wird die Auflösung an einem DVI / HDMI oder DSP Anschluss erweitert und anschließend wieder in einzelne Bildschirm Signale aufgeteilt. Alternativ, wenn die Grafikkarte mehrere Ausgänge hat, kann das Ausgabefenster von LEDVIZ auch in der Höhe oder Breite geändert werden, so das es die komplette Ausgabe ausfüllt.

### Ausgabebereiche neu Positionieren

Jede Anzeigefläche ist mit der linke Seite an der vorherigen Anzeigenfläche ausgerichtet. Bei der Berechnung der Position wird der Y-Wert, also die vertikale Positionierung, solange beibehalten bis ein Zeilenumbruch erfolgen muss. Mit dem Zeilenumbrucht die die Anzeige um seine Höhe nach unten veschoben und wieder neu links mit X = 0 angesetzt. Es gibt grundsätzlich 3 Werte um eine Anzeigenfläche direkt an eine andere Position zu bewegen:

<table border="1" class="align-center" id="bkmrk-%3Cposx%3E-%3F-%3C%2Fposx%3E-wei" style="height: 103px; width: 76.41975308641975%; border-collapse: collapse;"><tbody><tr style="height: 29px;"><td class="align-left" style="width: 31.74474959612278%; height: 29px;"><span style="color: #0000ff;">**&lt;POSX&gt; ? &lt;/POSX&gt;**</span></td><td class="align-left" style="width: 68.25525040387723%; height: 29px;">Weißt der Anzeigenfläche einen neuen horizonalen X Wert zu</td></tr><tr style="height: 29px;"><td class="align-left" style="width: 31.74474959612278%; height: 29px;"><span style="color: #0000ff;">**&lt;POSY&gt; ? &lt;/POSY&gt;**</span></td><td class="align-left" style="width: 68.25525040387723%; height: 29px;">Weißt der Anzeigenfläche einen neuen vertikalen Y Wert zu</td></tr><tr style="height: 45px;"><td class="align-left" style="width: 31.74474959612278%; height: 45px;"><span style="color: #0000ff;">**&lt;BASEX&gt; ? &lt;/BASEX&gt;**</span></td><td class="align-left" style="width: 68.25525040387723%; height: 45px;">Weißt der Berechnungroutine einen neuen horizontalen X Wert für die linke Seite im Fall eines Zeilenumbruchs zu</td></tr></tbody></table>

Bitte beachten Sie, dass die XML Tags immer Großgeschrieben werden. Wenn die Werte einer Anzeigenfläche geändert wurde, sind diese dan die Ausgangsbase für alle weiteren Berechnungen, d.h. das folgende Element wird dort wieder rechts angesetzt usw. Die Rechte Seite für den Zeilenumbruch wird dabei immer über folgende Formel berechnet:

**Rechte Seite = &lt;BASEX&gt; + &lt;MAXCOLWIDTH&gt;**

Das bedeutet, wenn Sie den &lt;BASEX&gt; Wert ändern, ändert sich automatisch auch immer die Position der rechten Seite, die den Zeilenumbruch erzeugt. Sie können den &lt;BASEX&gt; Wert so oft ändern wie Sie möchten, es gibt hier keine Begrenzungen.

### Erzeugen eines Umbruchs in einer Anzeigenfläche

Manchmal ist es notwendig, die Ausgabe einer Anzeigenfläche zu unterbrechen und an einer anderen Stell fortzusetzen. Einen Umbruch innerhalb einer Anzeigenfläche kann durch folgenden XML Tag erzwungen werden:

<table border="1" class="align-center" id="bkmrk-%3Cbreak%3E-%3F-%3C%2Fbreakx%3E-" style="height: 76px; width: 76.41975308641975%; border-collapse: collapse;"><tbody><tr style="height: 29px;"><td class="align-left" style="width: 31.74474959612278%; height: 29px;"><span style="color: #0000ff;">**&lt;BREAK&gt; ? &lt;/BREAK&gt;**</span></td><td class="align-left" style="width: 68.25525040387723%; height: 29px;">Definiert den Umbruch innerhalb einer Anzeigenfläche nach definierten Anzahl an Pixeln</td></tr></tbody></table>

Nur der Umbruch selbst reicht an der Stelle aber noch nicht aus. Im gleichen Schritt müssen nun auch neue Koordinaten zum Fortsetzen der Ausgabe angegeben werden:

<table border="1" class="align-center" id="bkmrk-%3Cbreakx%3E-%3F-%3C%2Fbreakx%3E" style="height: 91px; width: 76.41975308641975%; border-collapse: collapse;"><tbody><tr style="height: 29px;"><td class="align-left" style="width: 31.906300484652665%; height: 29px;"><span style="color: #0000ff;">**&lt;BREAKX&gt; ? &lt;/BREAKX&gt;**</span></td><td class="align-left" style="width: 68.09369951534734%; height: 29px;">Weißt einen neuen horizonalen X Wert für das fortsetzen der Anzeigenfläche zu</td></tr><tr style="height: 29px;"><td class="align-left" style="width: 31.906300484652665%; height: 29px;"><span style="color: #0000ff;">**&lt;BREAKY&gt; ? &lt;/BREAKY&gt;**</span></td><td class="align-left" style="width: 68.09369951534734%; height: 29px;">Weißt einen neuen vertikalen Y Wert für das Fortsetzen der Anzeigenfläche zu</td></tr></tbody></table>

Ebenfalls kann hier auch direkt gleich die Zuweisung eines neuen &lt;BASEX&gt; Wertes vorgenommen werden, dann ab der umzubrechenden Stelle zu verwenden ist:

<table border="1" class="align-center" id="bkmrk-%3Cbreakbasex%3E-%3F-%3C%2Fbre" style="height: 88px; width: 83.08641975308642%; border-collapse: collapse;"><tbody><tr style="height: 29px;"><td class="align-left" style="width: 42.80102355570385%; height: 29px;"><span style="color: #0000ff;">**&lt;BREAKBASEX&gt; ? &lt;/BREAKBASEX&gt;**</span></td><td class="align-left" style="width: 57.198976444296164%; height: 29px;">Zuweisung eines neuen &lt;BASEX&gt; Wertes durch den Umbruch</td></tr></tbody></table>

Auch unterstützt werden bis zu 2 weitere Umbrüche:

<table border="1" class="align-center" id="bkmrk-%3Cbreak2%3E-%3F-%3C%2Fbreak2%3E" style="height: 58px; width: 82.96296296296296%; border-collapse: collapse;"><tbody><tr><td class="align-left" style="width: 46.030463881837065%;"><span style="color: #0000ff;">**&lt;BREAK2&gt; ? &lt;/BREAK2&gt;**</span></td><td class="align-left" style="width: 62.34244606295172%;">Definiert einen zweiten Umbruch innerhalb einer Anzeigenfläche nach definierten Anzahl an Pixeln</td></tr><tr style="height: 29px;"><td class="align-left" style="width: 46.030463881837065%; height: 29px;"><span style="color: #0000ff;">**&lt;BREAK2X&gt; ? &lt;/BREAK2X&gt;**</span></td><td class="align-left" style="width: 62.34244606295172%; height: 29px;">Weißt einen neuen horizonalen X Wert für das fortsetzen der Anzeigenfläche zu</td></tr><tr style="height: 29px;"><td class="align-left" style="width: 46.030463881837065%; height: 29px;"><span style="color: #0000ff;">**&lt;BREAK2Y&gt; ? &lt;/BREAK2Y&gt;**</span></td><td class="align-left" style="width: 62.34244606295172%; height: 29px;">Weißt einen neuen vertikalen Y Wert für das Fortsetzen der Anzeigenfläche zu</td></tr></tbody></table>

bzw.

<table border="1" class="align-center" id="bkmrk-%3Cbreak3%3E-%3F-%3C%2Fbreak3%3E" style="height: 58px; width: 82.96296296296296%; border-collapse: collapse;"><tbody><tr><td class="align-left" style="width: 46.030463881837065%;"><span style="color: #0000ff;">**&lt;BREAK3&gt; ? &lt;/BREAK3&gt;**</span></td><td class="align-left" style="width: 62.34244606295172%;">Definiert einen dritten Umbruch innerhalb einer Anzeigenfläche nach definierten Anzahl an Pixeln</td></tr><tr style="height: 29px;"><td class="align-left" style="width: 46.030463881837065%; height: 29px;"><span style="color: #0000ff;">**&lt;BREAK3X&gt; ? &lt;/BREAK3X&gt;**</span></td><td class="align-left" style="width: 62.34244606295172%; height: 29px;">Weißt einen neuen horizonalen X Wert für das fortsetzen der Anzeigenfläche zu</td></tr><tr style="height: 29px;"><td class="align-left" style="width: 46.030463881837065%; height: 29px;"><span style="color: #0000ff;">**&lt;BREAK3Y&gt; ? &lt;/BREAK3Y&gt;**</span></td><td class="align-left" style="width: 62.34244606295172%; height: 29px;">Weißt einen neuen vertikalen Y Wert für das Fortsetzen der Anzeigenfläche zu</td></tr></tbody></table>

### Erzeugen eines vorzeitigen Zeilenumbruchs

Für den Fall das die Ausgabe nicht am Standardwert des Zeilenumbruches geändert werden soll, sonder z.B. früher oder auch später, kann einer Anzeigenfläche ein individueller Rechter Rand für den Umbruch mitgeteilt werden.

<table border="1" class="align-center" id="bkmrk-%3Cmaxx%3E-%3F-%3C%2Fmaxx%3E-zuw" style="height: 29px; width: 75.92592592592591%; border-collapse: collapse;"><tbody><tr style="height: 29px;"><td class="align-left" style="width: 31.805481208006977%; height: 29px;"><span style="color: #0000ff;">**&lt;MAXX&gt; ? &lt;/MAXX&gt;**</span></td><td class="align-left" style="width: 68.19451879199303%; height: 29px;">Zuweisung eines neuen Wertes für einen Zeilenumbruch</td></tr></tbody></table>

Dieser &lt;MAXX&gt; Wert gilt aber <span style="text-decoration: underline;">ausschließlich</span> für das jeweilige Element das diesen Wert beinhaltet. Alle anderen Anzeigenflächen richten sie weiterhin nach den Standardwerten aus em XML

<p class="callout info">Wenn früher in der Zeile umgebrochen werden soll, und die anderen Werte wie &lt;BASEX&gt; sich nicht ändern, kann damit oft auch der einfache &lt;BREAK&gt; ersetzt werden. Wenn möglich, sollte dem &lt;MAXX&gt; Wert immer der Vorzug vor einem &lt;BREAK&gt; gegeben werden!</p>

### Sonderfälle

Da &lt;POSX&gt; oder &lt;POSY&gt; Werte mit einem 0 Wert, nicht angegeben werden müssen, gibt es einen Fall der zu einem logischen Problem bei der Verarbeitung der XML führt. Es ist kein direkter Rücksprung auf die Koordinaten X = 0 und Y = 0 möglich. In diesem Fall kann der Workaround angewendet werden und der &lt;BASEX&gt; Wert auf -1 und der &lt;POSX&gt; auf +1 gestellt werden. Mit der darauf folgenden Anzeigenfläche, können über die Definition des genauen &lt;POSX&gt; Wert diese dann wieder richtig gestellt werden. Es muss immer mindestens ein Wert von &lt;POSX&gt; oder &lt;POSY&gt; oder &lt;BASE&gt; größer oder kleiner 0 angeben sein damit diese 3 Werte verarbeitet von LEDVIZ verarbeitet werden.

### XML Beispiele

```
<SEGMENT1 id="1">
	<POSX>1920<⁄POSX>
	<POSY>0</POSY>
	<BASEX>1920</BASEX>
	<NAME>Panel 2</NAME>
	<WIDTH>1080</WIDTH>
	<HEIGHT>60<⁄HEIGHT>
<⁄SEGMENT1>
```

oder

```
<SEGMENT4 id="4">
	<BREAK>512</BREAK>
	<BREAK>1920<⁄BREAK>
	<BREAKY>0<⁄BREAKY>
	<BREAKBASEX>1920<⁄BREAKBASEX>
	<NAME>Panel 5</NAME>
	<WIDTH>1080</WIDTH>
	<HEIGHT>60</HEIGHT>
<⁄SEGMENT4>
```

# Schnittstellen

Die folgenden Seiten beinhalten eine Beschreibung über der verschieden Schnittstelle für die Steuerung von LEDVIZ von außen. Über diese Schnittstellen können externe Trigger, z.B. über vMix oder auch jede andere Anwendung an LEDVIZ übergeben werden. Die Ausgabe der LED Bande kann dadurch im Verbund mit anderen Programmen und Anzeigen (z.B. Videowand) gesteuert werden.

# REST-API

Im folgenden wird näher auf die Funktionalität und Befehle der Rest-API eingegangen.

## Anwendungsbereich

Die Rest-API stellt einen einfachen Zugriff für externe Anwendungen zur Verfügung. Der Zugriff erfolgt dabei über das HTTP Protokoll. Befehle werden dabei wie der Aufruf einer Webseite an LEDVIZ gesendet. Die aufgerufenen Seite werden dabei als Befehle interpretiert. Anwendungen wie vMix sind in der Lage solche HTTP Request zu senden.

Wird z.B. ein bestimmtes Video gespielt, kann dies mit einem solchen Aufruf verknüpft werden, um gleichzeitig den richtigen Content auf der Videowand und der LED Bande anzuzeigen. Dies kann zum Beispiel bei der Vorstellung einer Mannschaft vor einem Spiel genutzt werden.

## Einstellungen

In Bezug auf die Rest-API gibt es nicht viel einzustellen. Den Dialog dazu erreichen Sie oben über die Menüleiste im Hauptprogramm unter dem Punkt "Steuerung".

Grundsätzlich stehen 2 Parameter zur Verfügung:

[![dialog_settings_restapi.png](https://docs.ledviz.com/uploads/images/gallery/2022-01/scaled-1680-/n8ZjBKqLW164svUm-dialog-settings-restapi.png)](https://docs.ledviz.com/uploads/images/gallery/2022-01/n8ZjBKqLW164svUm-dialog-settings-restapi.png)

Über die Option "Rest-API aktivieren" wird der Port zur externen Ansteuerung geöffnet. Im Gegensatz zu den anderen Schnittstellen, ist diese Schnittstelle immer aktiv. Zusätzlich haben sie hier die Möglichkeit den gewünschten Port anzugeben.

Als Standard ist hier der Port 12400 eingestellt.

Der externe Trigger muss hierbei über den ausgewählten Port und das HTTP Protokoll an LEDVIZ weitergeleitet werden.

<p class="callout danger">Secured Socket Layer Anfragen über HTTPS werden von LEDVIZ aufgrund des fehlenden Zertifikates nicht unterstützt</p>

Folgende Befehle stehen über die Rest-API zur Verfügung:

### Befehle

#### Sequenzen abspielen

<p class="callout info">http://localhost:12400/play  
http://localhost:12400/play/5  
http://localhost:12400/play/5?beispiel.xml</p>

Mit dem ersten Befehl wird nur der Play-Button getriggert, während der zweite Befehl direkt die Sequenz 5 im aktuellen Projekt ansteuert. Der letzte Befehl erweitert den Trigger um ein Projekt.

Über den Play Befehl kannst auch eine Sequenz mit DMX oder MIDI ID triggern.  
**Wichtig:** Die Suche nach dieser ID erfolgt immer in allen Projekten!

<p class="callout info">http://localhost:12400/play/dmx/25  
http://localhost:12400/play/midi/ABC</p>

Im Gegensatz dazu steht das Abspielen über vordefinierte Tasten. Genauso wie im Programm direkt, können auch die Short-cuts, also F1 bis F20 und 0 bis 9, angesprochen werden:

<p class="callout info">http://localhost:12400/key/F1</p>

#### Abspielen pausieren

Folgender Befehl triggert den Pause-Button in der Anwendung um den Abspielvorgang anzuhalten:

<p class="callout info">http://localhost:12400/pause</p>

#### Abspielen stoppen

Folgender Befehl triggert den Stop-Button in der Anwendung um den Abspielvorgang komplett anzuhalten:

<p class="callout info">http://localhost:12400/stop</p>

#### Abspielen fortsetzen

Folgender Befehl triggert den Pause-Button in der Anwendung um den Abspielvorgang fortzusetzen:

<p class="callout info">http://localhost:12400/continue</p>

#### Shortcut-Sequenz beenden und zurück zur ursprünglichen Playlist

Folgender Befehl beendet das Abspielen einer Sequenz, die über einen Short-Cut aufgerufen wurde und kehrt zurück zur ursprünglichen Position in der Playlist. Nach dem Rücksprung wird die ursprüngliche Sequenz neu gestartet und von Anfang an gespielt.

<p class="callout info">http://localhost:12400/resume</p>

Für den Fall das es sich bei der Sequenz um einen Overlay handelt, so können diese über folgenden Befehl zurückgesetzt werden

<p class="callout info">http://localhost:12400/overlay/reset</p>

#### Zur nächsten Sequenz springen

Folgender Befehl triggert den Next-Button in der Anwendung um die nächste verfügbare Sequenz in der Liste abzuspielen:

<p class="callout info">http://localhost:12400/next</p>

#### Zur vorherigen Sequenz springen

Folgender Befehl triggert den Back-Button in der Anwendung um die vorherige verfügbare Sequenz in der Liste abzuspielen:

<p class="callout info">http://localhost:12400/prev</p>

#### Ausgabe auf Schwarz blenden (Fade-To-Black)

Folgender Befehl triggert den FTB-Button in der Anwendung um Ausgabe auf Schwarz auszublenden:

<p class="callout info">http://localhost:12400/ftb</p>

#### Gesamte Helligkeit und Helligkeitszonen regeln

Folgender Befehl triggert den Schieberegler um die globale Helligkeit zu steuern:

<p class="callout info">http://localhost:12400/brightness/???</p>

Anstelle der **???** muss hier ein Wert zwischen 0 und 100 angegeben werden. Der Wert repräsentiert den prozentualen Transparenzwert eines Schwarzen Layers, der On-Top der Ausgabe gezeichnet wird.

Als Zusatz wird zur Unterstützung der StreamDeck TurnWheels, neben den exakten Werten, auch die Werte "up" and "down" bereitgestellt, die jeweils die Helligkeit um +/- 5% ändern

<p class="callout info">http://localhost:12400/brightness/up  
http://localhost:12400/brightness/down</p>

Um Helligkeitszonen anzusprechen ist der entsprechende Wert der Zone hinzuzufügen, z.B. "/brightness1/" bis "/brightness8/". Die Variablen sind analog zur gesamten Helligkeit anzuwenden.

#### Sequenzen sperren / entsperren

Um Sequenzen zu sperren oder freizugeben bitte folgenden Befehl verwenden

<p class="callout info">http://localhost:12400/sequence/lock/10</p>

10 ist dabei die Sequenz und der Befehl würde für das aktuelle Preset angewendet werden. Wenn der Befehl in einem bestimmten Preset ausgeführt werden soll, dann den gewünschten Preset mit : anhängen, also z.B.:

<p class="callout info">http://localhost:12400/sequence/lock/10:3</p>

Dieser Befehl sperrt die 10te Sequenz im 3ten Preset. Analog dazu lautet der Befehl zum entsperren ".../unlock/..."

<p class="callout info">http://localhost:12400/sequence/unlock/10  
[http://localhost:12400/sequence/unlock/10:3](http://localhost:12400/sequence/unlock/10:3)</p>

#### Presets der Sequenzen auswählen

Zur Auswahl der Sequenzen die abgespielt werden sollen, besteht die Möglichkeit direkt eine Auswahl am rechten Bildschirmrand von LEDVIZ zu treffen. Diese Auswahl wird in einem Preset zusammengefaßt und gesteuert.

Über die API können die vorhanden Presets 1 - 9 direkt ausgewählt werden.

<p class="callout info">http://localhost:12400/preset/&lt;preset&gt;</p>

Der Tag &lt;preset&gt; kann hierbei eine Nummer von 1 bis 9 enthalten. Unabhängig davon ob die Presets umbenannt wurden verbleibt die Angabe des &lt;preset&gt; immer bei 1 - 9. Eine Auswahl über den Namen wird nicht unterstützt.

#### LiveText ansteuern

Um einen Tag Wert für die LiveText Darstellung an LEDVIZ zu übergeben, verwenden sie folgenden Befehl

<p class="callout info">http://localhost:12400/tags/&lt;tag-name&gt;?&lt;tag-value&gt;</p>

#### CuePoints setzen und aufrufen

In einer PlayList können über die REST-Api Sprungmarken gesetzt und auch wieder aufgerufen werden. Das ermöglicht die gezielte Ansteuerung einzelner Sequenzen z.B. als Rücksprung aus Sequenzen mit ShortCuts

CuePoints werden mit der Option /set/ gesetzt. Der Name kann dabei ein belibiger Alphanumerischer String sein.

<p class="callout info">http://localhost:12400/cue/set/&lt;cue-point-name&gt;</p>

Um zu einem gespeicherten CuePoint zurück zu kehren wird der CuePoint mit seinem Namen direkt aufgerufen

<p class="callout info">http://localhost:12400/cue/&lt;cue-point-name&gt;</p>

Eine zusätzliche Angabe von XML Dateien als Parameter ist bei CuePoints nicht nötig. Der CuePoint enthält bereits den Verweis auf die entsprechende XML Datei.

CuePoints werden nicht gespeichert und stehen nur während der Laufzeit zur Verfügung in der sie auch erstellt wurden. Nach einem Neustart ist die Liste der CuePoints leer. Sollen feste Sprungmarken vergeben werden, so kann das über "midi" oder "dmx" Kennungen realisiert werden.

#### Steuerungen aktivieren / deaktivieren

Mit den Steuerungsmodulen können neben der der RestAPI auch andere verschiedene Protokolle für die Steuerung von LEDVIZ genutzt werden. Steuerungen können über die API wie folgt aktiviert oder deaktiviert werden

<p class="callout info">http://localhost:12400/control/hippo/true  
http://localhost:12400/control/hippo/false </p>

<p class="callout info">http://localhost:12400/control/dmx/true  
http://localhost:12400/control/dmx/false </p>

<p class="callout info">http://localhost:12400/control/midi/true  
http://localhost:12400/control/midi/false </p>

#### Sonderfunktionen ausführen

Über die Sonderfunktionen einer Sequenz kann ein bestimmtes Verhalten beim Abspielen von Animationen durchgeführt werden. Eine dieser Funktion ist z.B. stop / continue beim Abspielen von Videos.

Sollte eine Sequenz an einer Stop-Marke stehen kann sie über folgenden REST-Api Befehl forgesetzt werden

<p class="callout info">http://localhost:12400/gfx/continue </p>

#### Sprungmarken aufrufen

Über die Sonderfunktionen gesetzten Sprungmarken könne auch geziel aufgerufen werden. Das gilt sowohl für Sprungmarken vor und hinter dem aktuellen Abspielpunkt. Der Aufruf erfolgt über folgenden Befehl:

<p class="callout info">http://localhost:12400/gfx/jump/&lt;stop&gt;</p>

Der Wert von Stop kann hier die Werte 1 - 4 haben.

#### Ändern von Content

Geladene Videos können über die REST-Api von extern über folgenden Link geändert werden:

<p class="callout info">http://localhost:12400/file/dmx/1/&lt;filename&gt;  
http://localhost:12400/file/midi/ABC/&lt;filename&gt;</p>

# DMX512 ArtNET

LEDVIZ besitzt ebenfalls eine Unterstützung für das DMX512 ArtNET Protokoll, das vor allem im Zusammenspiel mit Lichttechnik verwendet wird. Hier kann LEDVIZ z.B. über eine ARKAOS System remote und synchron zu anderen Elementen gesteuert werden.

<p class="callout warning">Aufgrund der extremen hohen Frequenz mit der DMX512 Befehle gesendet werden, eignet sich das DMX512 Protokoll nicht zur Übertragung über ein reguläres Ethernet. Es sollte immer ein separates Netzwerk aufgebaut werden, z.B. über einen zusätzlichen USB - ETHERNET Adapter, damit der Zugriff auf das Netzwerk als solches nicht gestört wird.</p>

## Anwendungsbereich

Über das DMX Protokoll werden in der Praxis vor allem Lichteinheiten im showprogramm gesteuert. Über die gesendeten Werte können Helligkeit, Farbwerte und X/Y/Z for Spots gesteuert werden.

Im Zusammenspiel mit der LED Band können dann gezielt Abläufe eines Showprogrammes gesteuert werden.

## Einstellungen

Bevor die DMX Steuerung genutzt werden kann müssen einige Parameter eingestellt werden. Den Dialog für die Einstellungen erreichen Sie über die Menüleiste oben unter dem Punkt Steuerung.

[![dialog_settings_dmx.png](https://docs.ledviz.com/uploads/images/gallery/2022-01/scaled-1680-/IuO3GiXDupuWGjBJ-dialog-settings-dmx.png)](https://docs.ledviz.com/uploads/images/gallery/2022-01/IuO3GiXDupuWGjBJ-dialog-settings-dmx.png)

Grundsätzlich besteht das Protokoll aus einer reinen Abfolge von Werten. Jede Liste wird durch eine ID, dem Universe gekennzeichnet. Dem Universe folgen 512 Werte, die jeweils von 0 bis 255 gehen können. Die genutzen Kanäle für LEDVIZ sind immer aufeinanderfolgend. Es muss deshalb nur der erste Kanal angegeben werden. Dabei werden folgende Werte unterstützt:

<table border="1" class="align-center" id="bkmrk-1-helligkeit-2-seque" style="width: 54.19753086419753%; border-collapse: collapse;"><tbody><tr><td class="align-center" style="width: 14.876493124029402%;">**Kanal + 0**</td><td class="align-left" style="width: 51.90032744767906%;">Helligkeit</td></tr><tr><td class="align-center" style="width: 14.876493124029402%;">**Kanal + 1** </td><td class="align-left" style="width: 51.90032744767906%;">Sequenz ID</td></tr><tr><td class="align-center" style="width: 14.876493124029402%;">**Kanal + 2**</td><td class="align-left" style="width: 51.90032744767906%;">Geschwindigkeit der Animation</td></tr><tr><td class="align-center" style="width: 14.876493124029402%;">**Kanal + 3**</td><td class="align-left" style="width: 51.90032744767906%;">Trigger für den Play Button (Wert 255 = Play)</td></tr></tbody></table>

<p class="callout success">Hinweis: Der Play-Befehl wird nur getriggert, wenn zuvor ein Wert empfangen wurde, der kleiner 255 ist!</p>

Die Überwachung von eingehenden DMX Befehlen ist für den Zeitraum aktiv, für die Abfrage aktiv ist. Über das Menü "Steuerung" kann diese Überwachung aktiviert werden. Ein aktive DMX Überwachung wird durch einen blauen Balken oberhalb der Playliste deutlich gekennzeichnet.

[![bar_dmx.png](https://docs.ledviz.com/uploads/images/gallery/2022-01/scaled-1680-/INzhmyceTIYxcZ3m-bar-dmx.png)](https://docs.ledviz.com/uploads/images/gallery/2022-01/INzhmyceTIYxcZ3m-bar-dmx.png)

Zusätzlich werden oben rechts durch das aufblinken des DMX512 Symbols eingehenden Befehle angezeigt. Bleibt das Symbol grau, bedeuted die das LEDVIZ keine DMX Befehle erkennt.

<p class="callout info">Sollte es Probleme mit dem Empfang vom DMX Befehlen geben, bitte überprüfen Sie ob der UDP Port **6454** in der Firewall geöffnet und die Daten auf dem PC empfangen werden können.</p>

# MIDI

Neben dem DMX und Rest-API unterstützt LEDVIZ auch das MIDI Protokoll. Über diese Protokoll können sehr einfach externe Bedieneinheiten angeschlossen und somit in LEDVIZ z.B. die Helligkeit über Schieberegler oder Sequenzen direkt auf Knopfdruck angesteuert werden.

# LiveText

Mit der LiveText Schnittstelle können dynamische Elemente wie Spielstände, Zeiten oder Wettquoten in Videos eingebettet und live dargestellte werden.

# Allgemeine Informationen

Mit dieser Funktion haben Sie die Möglichkeit einen oder mehrere Texte von außen auf der Bande live darzustellen und zu ändern.

Beispiele aus der Praxis sind unter anderem:

- Spielstände
- Uhrzeiten
- Wettquoten
- statistische Spielauswertungen
- dynamischer Content wie z.B. Twitter

Die Darstellung wird über einen zusätzlichen Layer über der jeweiligen Werbung realisiert. Das funktioniert sowohl über statischen Grafiken, also auch über Animationen.

LEDVIZ selbst führt hier intern eine Liste an Tags und zugehörigen Texten. Immer wenn der Text geändert wird, wird dieser an die Ausgabe weitergegeben. Die Ausgabe erzeugt eine transparente Textur und legt diese als Layer über die jeweiligen Grafik.

Die Liste an Tags wird global geführt und ist immer auf eine Grafik oder Animation bezogen. Egal wo in der Ausgabe diese Grafik eingesetzt wird, wird der Layer erstellt und dargestellt. Für eine Grafik oder Animation können gleichzeitig mehrere Tags erzeugt werden. Die Menge der Tags für die LiveText Layer ist nur durch die Performance des jeweiligen Rechners begrenzt. In der Praxis wurden hier bereits Sequenzen mit mehr als 25 LiveText Ausgaben in der Fussball-Bundesliga, gesteuert durch einen Twitter/Instagram-Crawler, realisiert.

Dadurch das sich die Darstellung auf Text beschränkt, wird die Darstellung von Bildern oder Emojis zur Zeit noch nicht unterstützt.

# Einrichtung eines Tags

Aktuell gibt es noch keine Einrichtungsmöglichkeit über LEDVIZ selbst, so das die Tags für den LiveText Layer zur Zeit noch manuell im XML erfasst werden müssen.

Der Definitionsblock muss sich durch &lt;TAGS&gt; geklammert auf der obersten Ebene, genauso wie z.B. die Helligkeitszonen oder Segmente befinden. Hier ein Beispiel:

```XML
  <TAGS>
    <TAG>
      <TAG-FILE>BNN_LIVE_Premium_15min.avi</TAG-FILE>
      <TAG-NAME>#TAG1</TAG-NAME>
      <TAG-VALUE>2:0</TAG-VALUE>
      <TAG-DEFAULT>WILLKOMMEN</TAG-DEFAULT>
      <TAG-FONT>Tahoma</TAG-FONT>
      <TAG-SIZE>50</TAG-SIZE>
      <TAG-COLOR-RED>255</TAG-COLOR-RED>
      <TAG-COLOR-GREEN>255</TAG-COLOR-GREEN>
      <TAG-COLOR-BLUE>255</TAG-COLOR-BLUE>
      <TAG-BOLD>1</TAG-BOLD>
      <TAG-ITALIC>0</TAG-ITALIC>
      <TAG-CAPITALIZE>0</TAG-CAPITALIZE>
      <TAG-COUNT>4</TAG-COUNT>
      <TAG-Y>10</TAG-Y>
      <TAG-X>1024</TAG-X>
      <TAG-X2>2048</TAG-X2>
      <TAG-X3>4096</TAG-X3>
      <TAG-X4>8192</TAG-X4>
      <TAG-LINE-WIDTH>2550</TAG-LINE-WIDTH>
      <TAG-TIME-IN>2</TAG-TIME-IN>
      <TAG-TIME-OUT>20</TAG-TIME-OUT>
      <TAG-ALIGN>center</TAG-ALIGN>
    </TAG>
      … (evtl. weitere Tags) …

</TAGS>
```

Die einzelnen Untertags sind relativ selbsterklärend, werden aber zur Sicherheit hier nochmal aufgeführt:

<table border="1" id="bkmrk-%3Ctag-file%3E-%28string%29-" style="border-collapse: collapse; width: 100%; height: 1024px;"><tbody><tr style="height: 29px;"><td style="width: 23.82716%; height: 29px;">**&lt;TAG-FILE&gt;**</td><td style="width: 19.012345%; height: 29px;"><span style="color: #008080;">(string)</span>

<span style="color: #008080;">z.B. "werbung.avi"</span>

</td><td style="width: 57.160494%; height: 29px;">Der Name der Datei für die der Text-Layer erstellt werden soll</td></tr><tr style="height: 61px;"><td style="width: 23.82716%; height: 61px;">**&lt;TAG-NAME&gt;**</td><td style="width: 19.012345%; height: 61px;"><span style="color: #008080;">(string)</span>

<span style="color: #008080;">z.B. "TAG1"</span>

</td><td style="width: 57.160494%; height: 61px;">Der Name des Tags mit dem der Tag von außen her angesprochen wird. Dieser Name muss eindeutig sein und kann nur für diesen Tag verwendet werden.</td></tr><tr style="height: 61px;"><td style="width: 23.82716%; height: 61px;">**&lt;TAG-VALUE&gt;**</td><td style="width: 19.012345%; height: 61px;"><span style="color: #008080;">(string)</span>

<span style="color: #008080;">z.B. "2:0"</span>

</td><td style="width: 57.160494%; height: 61px;">Dieser Wert enthält den aktuellen gespeicherten Wert und muss nicht angegeben werden, es sei denn Sie möchten den LiveText Wert vorbelegen</td></tr><tr style="height: 61px;"><td style="width: 23.82716%; height: 61px;">**&lt;TAG-DEFAULT&gt;**</td><td style="width: 19.012345%; height: 61px;"><span style="color: #008080;">(string)</span>

<span style="color: #008080;">z.B. "WILLKOMMEN"</span>

</td><td style="width: 57.160494%; height: 61px;">Der Wert dieses Tags wird immer dann verwendet, wenn ein leerer Wert mitgeteilt wurde, also im Prinzip der Wert &lt;TAG-VALUE&gt; nicht belegt ist</td></tr><tr style="height: 109px;"><td style="width: 23.82716%; height: 109px;">**&lt;TAG-FONT&gt;**</td><td style="width: 19.012345%; height: 109px;"><span style="color: #008080;">(string)</span>

<span style="color: #008080;">z.B. "Tahoma"</span>

</td><td style="width: 57.160494%; height: 109px;">Der Windowsname der zu verwendenden Schriftart. Es muss hierbei der Name der Schriftartverwendet werden. Den genauen Namen können Sie den Installierten Schriftarten der Windowsinstallation entnehmen. Der Dateiname der Schriftart spielt hier keine Rolle, das Tag bezieht sich auf den Namen unter dem die Schriftart in Windows registriert ist</td></tr><tr style="height: 61px;"><td style="width: 23.82716%; height: 61px;">**&lt;TAG-SIZE&gt;**</td><td style="width: 19.012345%; height: 61px;"><span style="color: #008080;">(integer)</span>

<span style="color: #008080;">z.B. 50</span>

</td><td style="width: 57.160494%; height: 61px;">Der Wert enthält die zu verwendende Schriftgröße. Zur besseren Lesbarkeit sollten hier Werte von &gt;50 verwendet werden</td></tr><tr style="height: 29px;"><td style="width: 23.82716%; height: 29px;">**&lt;TAG-COLOR-RED&gt;**</td><td style="width: 19.012345%; height: 29px;"><span style="color: #008080;">(integer)</span>

<span style="color: #008080;">0 bis 255</span>

</td><td style="width: 57.160494%; height: 29px;">Der rote Farbwert für den zu verwendenden Text.</td></tr><tr style="height: 29px;"><td style="width: 23.82716%; height: 29px;">**&lt;TAG-COLOR-GREEN&gt;**</td><td style="width: 19.012345%; height: 29px;"><span style="color: #008080;">(integer)</span>

<span style="color: #008080;">0 bis 255</span>

</td><td style="width: 57.160494%; height: 29px;">Der grüne Farbanteil</td></tr><tr style="height: 29px;"><td style="width: 23.82716%; height: 29px;">**&lt;TAG-COLOR-BLUE&gt;**</td><td style="width: 19.012345%; height: 29px;"><span style="color: #008080;">(integer)</span>

<span style="color: #008080;">0 bis 255</span>

</td><td style="width: 57.160494%; height: 29px;">Der blaue Farbanteil</td></tr><tr style="height: 29px;"><td style="width: 23.82716%; height: 29px;">**&lt;TAG-BOLD&gt;**</td><td style="width: 19.012345%; height: 29px;"><span style="color: #008080;">(bool)</span>

<span style="color: #008080;">z.B. 0 oder 1</span>

</td><td style="width: 57.160494%; height: 29px;">Bestimmt ob der Text fett oder normal gezeichnet wird.</td></tr><tr style="height: 29px;"><td style="width: 23.82716%; height: 29px;">**&lt;TAG-ITALIC&gt;**</td><td style="width: 19.012345%; height: 29px;"><span style="color: #008080;">(bool)</span>

<span style="color: #008080;">z.B. 0 oder 1</span>

</td><td style="width: 57.160494%; height: 29px;">Bestimmt ob der Text kursiv gezeichnet wird.</td></tr><tr style="height: 57px;"><td style="width: 23.82716%; height: 57px;">**&lt;TAG-CAPITALIZE&gt;**</td><td style="width: 19.012345%; height: 57px;"><span style="color: #008080;">(bool)</span>

<span style="color: #008080;">z.B. 0 oder 1</span>

</td><td style="width: 57.160494%; height: 57px;">Bestimmt ob der gesamt Text in Großbuchstaben umgewandelt werden soll.</td></tr><tr><td style="width: 23.82716%;">**&lt;TAG-COUNT&gt;**</td><td style="width: 19.012345%;"><span style="color: #008080;">(integer)</span>

<span style="color: #008080;">0 bis 4</span>

</td><td style="width: 57.160494%;">gibt die Anzahl der zu berücksichtigen &lt;TAG-X?&gt; Werte an.</td></tr><tr style="height: 45px;"><td style="width: 23.82716%; height: 45px;">**&lt;TAG-X&gt;**

**&lt;TAG-X2&gt;**

**&lt;TAG-X3&gt;**

**&lt;TAG-X4&gt;**

</td><td style="width: 19.012345%; height: 45px;"><span style="color: #008080;">(integer)</span></td><td style="width: 57.160494%; height: 45px;">Dieser Wert bestimmt die horizonale Position in Pixeln innerhalb der Grafik. Der Wert 0 befindets sich hierbei links.</td></tr><tr style="height: 93px;"><td style="width: 23.82716%; height: 93px;">**&lt;TAG-Y&gt;**</td><td style="width: 19.012345%; height: 93px;"><span style="color: #008080;">(integer)</span></td><td style="width: 57.160494%; height: 93px;">Dieser Wert bestimmt die vertikale Position in Pixeln innerhalb der Grafik. Der Wert 0 befindets sich hierbei oben. Bitte beachten Sie hierbei das die Schriftarten in der Regel etwas Freiraum oberhalb der Buchstaben besitzen und der Text nicht direkt pixelgenau an der Position beginnt.</td></tr><tr style="height: 101px;"><td style="width: 23.82716%; height: 101px;">**&lt;TAG-LINE-WIDTH&gt;**</td><td style="width: 19.012345%; height: 101px;"><span style="color: #008080;">(integer)</span></td><td style="width: 57.160494%; height: 101px;">Dieser Wert gibt die maximale Breite des Textes an.

Ist dieser Wert größer 0, dann wird der Text bei Erreichen des Wertes automatisch umgebrochen. Die Schrifgröße wird dann entsprechend angepaßt und verkleinert.

</td></tr><tr style="height: 80px;"><td style="width: 23.82716%; height: 80px;">**&lt;TAG-TIME-IN&gt;**</td><td style="width: 19.012345%; height: 80px;"><span style="color: #008080;">(decimal)</span>

<span style="color: #008080;">z.B. 15.4</span>

</td><td style="width: 57.160494%; height: 80px;">Dieser Wert bestimmt den Zeitpunkt, wann der Text während des Abspielens erscheinen soll. Der Wert repräsentiert die Zeit in Sekunden, wobei hier Dezimale Werte mit einem Punkt als Dezimalzeichen zulässig sind.</td></tr><tr style="height: 57px;"><td style="width: 23.82716%; height: 57px;">**&lt;TAG-TIME-OUT&gt;**</td><td style="width: 19.012345%; height: 57px;"><span style="color: #008080;">(decimal)</span>

<span style="color: #008080;">z.B. 15.4</span>

</td><td style="width: 57.160494%; height: 57px;">Dieser Wert bestimmt den Zeitpunkt, wann der Text während des Abspielens ausgeblendet werden soll.</td></tr><tr style="height: 64px;"><td style="width: 23.82716%; height: 64px;">**&lt;TAG-ALIGN&gt;**</td><td style="width: 19.012345%; height: 64px;"><span style="color: #008080;">(string)</span>

<span style="color: #008080;">z.B. left, right, center</span>

</td><td style="width: 57.160494%; height: 64px;">Der Text kann an den durch &lt;TAG-X&gt; Koordinaten vorgegebenen Wert ausgerichtet werden. Zulässige Wert sind left, right und center</td></tr><tr><td style="width: 23.82716%;">**&lt;TAG-TYPE&gt;**</td><td style="width: 19.012345%;"><span style="color: #008080;">(string)</span>

<span style="color: #008080;">z.B. text, progress, image</span>

</td><td style="width: 57.160494%;">Der Standardwert ist Text, allerdings kann hier auch definiert werden, das es sich um ein Bild handelt. Der Wert in &lt;TAG-VALUE&gt; und &lt;TAG-DEFAULT&gt; wird dann als Verweis auf ein Bild interpretiert.</td></tr><tr><td style="width: 23.82716%;">**&lt;TAG-WIDTH&gt;**

**&lt;TAG-HEIGHT&gt;**

</td><td style="width: 19.012345%;"><span style="color: #008080;">(integer)</span>

</td><td style="width: 57.160494%;">Größer der Ausgabe des referenzierten Bildes im Fall des &lt;TAG-TYPE&gt; "image"</td></tr><tr><td style="width: 23.82716%;">**&lt;TAG-MIDI&gt;**

</td><td style="width: 19.012345%;"><span style="color: #008080;">(string),(string)</span>

</td><td style="width: 57.160494%;">Sollte eine Sequenz über einen Midi-Key für einen Aufruf verfügen, kann dieser Tags angewiesen werden, zusätzlich zum Dateinamen nur bei dieser Midi-Sequenzen angezeigt zu werden. Mehrere Midi-Keys können getrennt durch Komma eingegeben werden</td></tr></tbody></table>

Bitte beachten das der Renderer Zeichen, wie Return oder doppelte Leerzeichen vor der Darstellung entfernt. Um die Grafik zu positionieren empfiehlt es sich zuerst mit einem Wert von 0 für &lt;TAG-TIME-IN&gt; und einem hohen Wert, z.B. 999 für &lt;TAG-TIME-OUT&gt; zu beginnen und erst später die Abstimmung der Ein und Ausblendzeiten vorzunehmen.

# Ansteuerung des Textes

### Ansteuerung über UDP Schnittstelle

LEDVIZ hält hierfür permanent einen UDP Port offen. Alle Anfragen der Art beginnen mit einem Hashtag gefolgt von dem Tag-Namen. Die Trennung des Textes erfolgt durch eine Pipe |. Ein Beispiel eines Textes könnte also wie folgt aussehen:

 `#TAG1|Hello world!`

Wird ein Tag-Element für einen LiveText empfangen wird dieses direkt an die Ausgabe weitergegeben. Das hat zur Folge das der Layer auch sofort aktualisiert wird. Der Text kann also während seiner Laufzeit jederzeit und mehrfach, während er ausgespielt wird, aktualisiert werden.

Die UDP Daten werden auf Port **28077** im UTF8 Format erwartet.

Aktuell wird noch an einer Eingabemaske unter Nutzung der bestehenden REST API gearbeitet. Neben dem Call über die RestAPI ist geplant eine Webseite mit verfügbarren Tags und Eingabe direkt als HTML Seite zur Verfügung zu stellen.

### Ansteuerung über den LEDVIZ Operational HUB

Der LEDVIZ Operational Hub ist eine Webseite die Funktionen von LEDVIZ als Webseite bereitstellt. Zugriff auf den Hub erfolgt über den Aufruf [http://localhost:19399](http://localhost:19399). Anstelle von localhost kann auch der spezifische Rechnername oder die IP angegeben werden. Somit ist eine Remote Eingabe der Texte über dritte Systeme jederzeit möglich.

Nach dem Aufruf des LEDVIZ Operational Hub im Browser sollte folgende Seite angezeigt werden:

[![screen_hub.png](https://docs.ledviz.com/uploads/images/gallery/2022-09/scaled-1680-/tbUgbD0STXoK7QYe-screen-hub.png)](https://docs.ledviz.com/uploads/images/gallery/2022-09/tbUgbD0STXoK7QYe-screen-hub.png)

Hier kann über den Menüpunkt oben Links ein dialog für die Eingabe von Texten geöffnet werden. Es werden nur die Tags gelistet, die auch im aktuellen Projekt enthalten sind. Eingaben können hier direkt vorgenommen und gesendet werden.

[![screen_hub_livetext.png](https://docs.ledviz.com/uploads/images/gallery/2022-09/scaled-1680-/M2SE7WzM6HqYb86h-screen-hub-livetext.png)](https://docs.ledviz.com/uploads/images/gallery/2022-09/M2SE7WzM6HqYb86h-screen-hub-livetext.png)

### Sonstige Tools

Zum Testen der Schnittstelle kann ein kleines Tool verwendet werden, das ursprünglich für die Bereitstellung von Wettquoten für ein Trainingsspiel des 1.FC Köln gegen den Watford FC erstellt wurde: [https://www.ledviz.de/download/LEDVIZlive.zip](https://www.ledviz.de/download/LEDVIZlive.zip). Das Tool verwendet die Tags:

`#QUOTE-WIN-FCK` `#QUOTE-WIN-WTF` `#QUOTE-TOR-FCK` `#QUOTE-TOR-WTF`

# KINEXON Connector

Die Daten für die LiveText Schnittstelle können aus verschiedenen Quellen kommen. Unter anderem wurde bereits eine Schnittstelle zu Kinexon realisert. Kinexon sammelt über Tracker verschiedenste statistische Daten z.B. in der Handball-Bundesliga.

Der Connector dient hier als Vermittler zwischen Kinexon und LEDVIZ. Die Daten werden in Realtime von der Kinexon Schnittstelle abgefragt und als Tags im LiveText Format an LEDVIZ weitergegeben. Hierbei werden die Daten aufbereitet und in Textform umformatiert. Ausgangspunkt sind die abgerufenen Daten im JSON Format der Kinexon REST-API.

  
[![kinexon.png](https://docs.ledviz.com/uploads/images/gallery/2022-09/scaled-1680-/hGDwWdZzJFlO0LZu-kinexon.png)](https://docs.ledviz.com/uploads/images/gallery/2022-09/hGDwWdZzJFlO0LZu-kinexon.png)

