Kino-Vorprogramm mit CinemaVision (Teil 1 2 3)

Kodi-Automatisierung mit CinemaVision-Actions

Das mächtigste Werkzeug beim Erstellen eines Kino-Vorprogramms mit CinemaVision sind Actions. An beliebigen Punkten im Programmablauf könnt Ihr damit Steuerbefehle an andere Geräte senden, die sich im selben Netzwerk wie Kodi befinden. Licht, Leinwand, Maskierung — das alles lässt sich damit steuern, sofern die Geräte über eine Netzwerkschnittstelle verfügen.

CinemaVision Actions

Grundvoraussetzung sind immer Komponenten, die ohnehin schon eine Form der Netzwerk-Steuerung bieten. Eine Verbindung per Netzwerkkabel oder WLAN ist also unumgänglich. Als grobe Daumenregel kann man sagen: Wenn es für ein Gerät eine Smartphone-App gibt, kann man es auch in CinemaVision einbinden.

Steuerung von fast allem

Produkte wie die beliebten Philips Hue bringen ihre eigene Netzwerkanbindung mit. Damit könnt ihr praktisch sofort loslegen. Das macht sich aber auch im Preis des Produktes bemerkbar.

Günstigere Lösungen werden in der Regel per Funk gesteuert, d. h. über Funksteckdosen, Funkdimmer oder ähnliche Aktoren. LED-Module werden meist mit Infrarot-Steuerung hergestellt. In beiden Fällen gibt es eine relativ billig verarbeitete Fernbedienung dazu. Mangels Netzwerk-Fähigkeit benötigt Ihr zusätzliche Technik wie etwa den jbmedia Light-Manager, der per Netzwerk erreichbar ist und Steuerbefehle per Funk oder Infrarot an die Empfänger weiter gibt.

Diese Grundvoraussetzungen werdet Ihr sehr wahrscheinlich schon geschaffen haben. Denn zuerst muss ja mal die Lichtsteuerung ganz allgemein möglich sein, bevor Ihr Euch Gedanken macht, diese in Euer Kino-Vorprogramm einzubinden.

CinemaVision Actions

Nun kommen die Action-Module in einer CinemaVision-Sequenz ins Spiel. Im Gegensatz zu anderen Modulen, wie Trailern oder Audio Format Bumpern, gibt es für Actions keine nennenswerten Parameter. Ihr könnt nur eine Datei auswählen — das ist schon alles.

Eine Action-Datei muss die Endung .cvaction haben und sollte im Verzeichnis Actions innerhalb des CinemaVision-Basisverzeichnisses liegen. Ihr könnt einfach eine neue Textdatei erstellen und die Endung umschreiben. Der Rest des Namens bleibt Euch überlassen.

Zur Bearbeitung der Datei verwendet Ihr am besten einen brauchbaren Texteditor (und damit meine ich nicht Windows Notepad) — eine gute Wahl wäre Sublime Text oder Notepad++. Es wird zwar kein allzu komplizierter Code zu schreiben sein, aber so umgeht Ihr allen möglichen Ärger mit Sonderzeichen und dergleichen.

Die Syntax einer Action

Nun die gute Nachricht: Ihr müsst nicht programmieren können, um eine CinemaVision-Action zu schreiben. Die Syntax ist denkbar einfach. Die Herausforderung besteht eher darin, die notwendigen Befehle zu kennen. Dazu gleich mehr.

Grundsätzlich gibt es drei Arten von Anweisungen in einer Action:

  • Aufrufe eines Geräts
  • Anweisungen
  • Kommentare

Jede Zeile, die mit einem Hash-Zeichen (#) anfängt, ist ein Kommentar. Es empfiehlt sich, mit Kommentaren ein wenig zu dokumentieren, was die Action macht — für sich selbst und für andere.

Aufrufe

Ein Aufruf erfolgt immer in Form einer URL. Angegeben wird stets

  • ein Protokoll
  • die IP-Adresse des Netzwerk-Geräts, evtl. ein Port
  • ein Pfad innerhalb der Schnittstelle des Geräts

Das Protokoll definiert die Art der Kommunikation. Für die meisten Geräte werdet Ihr http benötigen. Die Auswahl ist aber etwas größer:

  • http: erlaubt die Steuerung aller HTTP-basierten Schnittstellen, zum Beispiel mit Befehlen im JSON- oder XML-Format
  • addon: ermöglicht den Aufruf eines Kodi-Addons oder Scripts anhand seiner ID und zusätzlicher Parameter
  • command: führt einen Betriebssystem-Befehl mit Parametern aus
  • module: führt ein importiertes Python-Script mit main()-Methode aus
  • python: führt ein Python-Script auf Betriebssystem-Ebene aus
  • sleep: fügt eine Pause mit einer bestimmten Dauer ein

Die IP-Adresse bestimmt Euer Router für das jeweilige Gerät, sofern Euer Netzwerk für DHCP konfiguriert ist (wenn nicht, werdet Ihr es wahrscheinlich wissen). Die meisten netzwerkfähigen Geräte bieten in ihrem Menü eine Möglichkeit an, ihre IP-Adresse anzuzeigen. Den Port findet man hingegen häufiger in der Dokumentation der Netzwerk-Schnittstelle.

Der Rest der URL kann aus Verzeichnissen, einem Dateinamen und Parametern bestehen. In der Regel bieten Geräte nur wenige Punkte für den Aufruf ihrer Schnittstelle an. Die variablen Anteile — zum Beispiel „Welche Lampe soll geschaltet werden?“ oder „Welche Funktion wird aufgerufen?“ — werden über Parameter übergeben oder wie nachfolgend beschrieben in die Anweisung eingefügt.

Anweisungen

Der eigentliche Inhalt einer Steuerungsanfrage wird in der Anweisung übergeben. Diese Zeile ist optional; sie wird vielleicht gar nicht benötigt, wenn das Gerät schon alle Parameter in der URL entgegen nimmt.

Anweisungen, die auf dem HTTP-Protokoll basieren, können mit den Verfahren POST, PUT oder DELETE abgesetzt werden. Außerdem können zu Beginn HEADERS übergeben werden.

Was genau in einer Anweisung steht, hängt sehr stark von der Schnittstelle des zu steuernden Geräts ab. Die Daten können auf verschiedenste Weise gesendet werden. Die häufigsten Formate sind JSON und XML. Und hier beginnt der schwierige Teil.

Befehlsfolgen und Pausen

Ihr könnt nach diesem Schema beliebig viele Befehle nacheinander in einer Action-Datei angeben. So lassen sich im Grunde Makros anlegen, um verschiedene Funktionen unterschiedlicher Geräte auf einmal auszuführen.

Mit dem folgenden Befehl könnt Ihr außerdem eine Pause in dem Ablauf der Action einbauen:

sleep://3500

CinemaVision wird dann die in Millisekunden angegebene Zeit abwarten, bevor es mit dem nächsten Befehl fortfährt. Das ist besonders praktisch, um das Licht Schritt für Schritt auszuschalten.

Dokumentationen wälzen

Erwähnte ich schon, dass man nicht programmieren muss, um CinemaVision-Actions zu schreiben? Nun ja, das ist nur insofern richtig, als dass man beim Zusammenstellen von Befehlen nicht von Programmieren sprechen kann. Trotzdem ist es notwendig, sich an gewisse Regeln zu halten: die erforderlichen Befehle müssen exakt angegeben werden. Schon der kleinste Syntaxfehler führt dazu, dass ganz einfach gar nichts passieren wird.

Die Dokumentation eines Geräts findet man für gewöhnlich über Google. Da es oft nicht oberste Priorität der Hersteller ist, die Schnittstellen offen zu legen, muss man teilweise schon etwas hartnäckiger suchen.

Bei den gängigen Systemen ist das aber vielleicht gar nicht nötig. Eine Suche nach dem Hersteller und Produktnamen Eurer Geräte in Kombination mit CinemaVision Action liefert meistens schon Beispiele für Befehle — Ihr seid wahrscheinlich nicht die ersten, die dieses Gerät steuern wollen.

Testen der Action

Wenn Ihr im CinemaVision-Modul eine Action-Datei ausgewählt habt, bietet Euch der zweite Eintrag in der Liste an, die Action zu testen. Dadurch wird sie ausgeführt, ohne den eigentlichen Ablauf der Sequenz starten zu müssen.

Testergebnisse einer CinemaVision-Action (letztes Beispiel unten)

Mehr noch: Ihr bekommt als Ergebnis die Antworten zu allen Befehlen aufgelistet. Gerade bei HTTP-basierten Schnittstellen geben Euch die Geräte immer irgend eine Antwort zurück. Die sieht inhaltlich oft ganz ähnlich aus wie Eure Anfrage. Mit Hilfe der Ausgabe des Tests könnt Ihr wenn nötig nach einer Lösung für mögliche Fehler suchen.

Beispiele für Actions

Doch genug der Theorie — wahrscheinlich hilft es Euch viel mehr, wenn Ihr einfach ein paar typische CinemaVision-Actions seht.

In allen Beispielen habe ich Teile, die Ihr durch Eure eigenen Angaben austauschen müsst, in eckigen Klammern angegeben. Grundsätzlich müsst Ihr die [IP-Adresse] des zu steuernden Gerätes einfügen. Manche Geräte benötigen auch noch andere Angaben in Form von Parametern, mit denen Ihr bestimmt, was Ihr eigentlich steuern wollt. Die eckigen Klammern müssen auch weg.

jbmedia Light-Manager

Mit dem folgenden Befehl ruft Ihr eine Lichtszene des Light-Managers auf:

# Light-Manager: Lichtszene aktivieren
http://[IP-Adresse]/control?key=[Szene]

An Stelle von [Szene] fügt Ihr die Nummer der Lichtszene ein, die Ihr starten wollt. Diese entnehmt Ihr Eurer Light-Manager-Konfiguration: In der Software wird die Nummer jeder Lichtszene angezeigt und kann geändert werden.

Nun, genau genommen ist das ja wirklich kein Programmbefehl, sondern eine ganz alltägliche URL. Ihr könntet das genauso gut in die Adresszeile Eures Browsers eingeben, um die Aktion auszulösen. Es zeigt aber sehr schön, wie einfach eine Schnittstelle zu einem Gerät aufgebaut sein kann.

Philips Hue

Mit Hue bietet Philips Leuchtmittel und Steuerung in einem Produkt an. Über die Hue Bridge habt Ihr Zugriff auf alle verbundenen Lampen über das Netzwerk. Der folgende Befehl schaltet zum Beispiel das Licht aus:

# Philips Hue: Licht ausschalten
http://[IP-Adresse]/api/[Benutzer]/groups/[Gruppe]/action
PUT: { "on": false, "transitiontime": 30 }

Neben der IP-Adresse ersetzt Ihr in diesem Befehl [Benutzer] durch den Benutzernamen, der Zugriff auf das System hat. Weiterhin ersetzt Ihr [Gruppe] durch die Nummer der Gruppe, in der sich die Hue-Lampen befinden.

Bei diesem Befehl werden dem eigentlichen Aufruf weitere Daten im JSON-Format übergeben. Dafür kommt der HTTP-Befehl PUT zum Einsatz.

Yamaha AV-Receiver und BD-Player

Aber nicht nur Licht lässt sich mit Hilfe von Actions steuern. Auch AV-Receiver haben Netzwerk-Schnittstellen — die Befehle sind nur meistens etwas komplizierter.

Mit dem folgenden Befehl lässt sich an den meisten AV-Receivern von Yamaha der Eingang auf HDMI 1 umstellen:

# Yamaha AV-Receiver: Eingang HDMI1 wählen
http://[IP-Adresse]:80/YamahaRemoteControl/ctrl
HEADERS: { "Content-Type": "text/xml; charset=UTF-8" }
POST: <YAMAHA_AV cmd="PUT"><Main_Zone><Input><Input_Sel>HDMI1</Input_Sel></Input></Main_Zone></YAMAHA_AV>

Dieser Befehl startet die Wiedergabe bei einem Blu-ray-Player von Yamaha:

# Yamaha Blu-ray-Player: Play
http://[IP-Adresse]:50100/YamahaRemoteControl/ctrl
HEADERS: { "Content-Type": "text/xml; charset=UTF-8" }
POST: <YAMAHA_AV cmd="PUT"><Main_Zone><Play_Control><Play>Play</Play></Play_Control></Main_Zone></YAMAHA_AV>

Die Yamaha-Befehle basieren auf XML und müssen per HTTP-POST gesendet werden. Die Antwort (zu sehen beim Testen des Befehls) sieht sehr ähnlich aus.

Na, kommt Ihr auf Ideen? Wie Ihr Actions nutzt, um am Ende des Vorprogramms einen Film von einem separaten Player wiederzugeben, beschreibe ich im nächsten Teil dieser Serie nochmal genauer.

Keine Netzwerk-Schnittstelle vorhanden?

Früher oder später stößt man an eine Grenze: ein Gerät hat keine Netzwerk-Schnittstelle oder Ihr findet beim besten Willen nicht heraus, wie Ihr sie ansprechen könnt.

Wusstet Ihr, dass der Light-Manager Air auch beliebige Infrarot-Befehle lernen und auf Kommando senden kann? Das ist insofern interessant, weil Ihr damit nahezu jedem Gerät, das über eine herkömmliche Infrarot-Fernbedienung verfügt, eine Netzwerk-Schnittstelle verpasst. CinemaVision soll Euren CD-Player von 1995 starten? Los geht’s!

An angelernte Befehle kommt man leider nicht ganz so universell heran, wie an Lichtszenen. Zunächst ruft Ihr in einem Browser http://[IP-Adresse]/config.xml auf, wobei Ihr auch hier wieder die IP-Adresse des Light-Managers einfügen müsst. Damit listet Euch der Light-Manager sämtliche gespeicherten Befehle auf. Falls das nicht in einer brauchbaren XML-Ansicht zu sehen ist, nehmt einen anderen Browser. Chrome ist prima.

In der Liste sucht Ihr Euch die Zone und den Actuator heraus, unter dem Ihr den Befehl gespeichert habt. Interessant ist dort der Inhalt des <param>-Elements (es gibt mehrere, der erste für on genügt). Das sind die [Parameter], die Ihr für den Aufruf des Light-Managers in der CinemaVision-Action benötigt:

# Light-Manager: gelernten IR-Befehl senden
http://[IP-Adresse]/control?[Parameter]

Die Zeichenkette aus der Liste wird also direkt nach dem Fragezeichen eingefügt. Das sieht im Ergebnis (stark gekürzt) zum Beispiel so aus:

# Light-Manager: gelernten IR-Befehl senden
http://[IP-Adresse]/control?cmd=on,typ,ir,1A,8,9,[...],18,9,6E1&id=115

Auf die gleiche Weise lassen sich angelernte Funk-Befehle aufrufen, um etwa die automatische Maskierung der Leinwand raus und rein zu fahren oder einen elektrischen Vorhang zu öffnen und zu schließen.


Viele weitere Informationen über die Möglichkeiten zur Automatisierung mit Actions findet Ihr in der Dokumentation zu CinemaVision (Registrierung erforderlich). Ein Blick hinein lohnt sich definitiv! Außerdem werden im Download-Bereich jede Menge Beispiele für verschiedene Systeme angeboten, auch wenn nicht alle davon in Europa gängig sind.

Mit CinemaVision-Actions habt Ihr eine unheimlich gute Möglichkeit, einen großen Schritt zur Automatisierung Eures Heimkinos zu machen. Vieles, was sonst nur teureren Universalfernbedienungen mit ausgefallenen Makros vorbehalten ist oder umfassende Programmierkenntnisse erfordert, lässt sich damit abfangen. Hat man einmal verstanden, wie die Befehle für die verwendeten Geräte funktionieren, ist es ein leichtes, das perfekte Kinoprogramm damit einzurichten.

Über Bert Kößler

Seit gut 20 Jahren fasziniert mich das Thema Heimkino. Neben den Filmen selbst gilt meine Leidenschaft besonders der Einrichtung, Steuerung und Automatisierung. Bei Heimkino Praxis teile ich meine vielseitigen Erfahrungen mit Anfängern und fortgeschrittenen Heimkino-Enthusiasten.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.