HomeSteuerungKodi-Automatisierung mit CinemaVision-Actions
Serie Kino-Vorprogramm mit CinemaVision (Teil 1 2 3 4 5 6 7 8 9)

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.

12 Kommentare zu „Kodi-Automatisierung mit CinemaVision-Actions“

  1. Hallo,
    Hast du Erfahrung mit dem Aufruf von https Befehlen in der CinemaVision Action? Ein http Aufruf klappte bei mir ohne Probleme. Aber seit ich auf http bin, Krieg ich in meiner Haussteuerung keine Anweisung durch.

    1. Ich hab’s noch nicht probiert, könnte mir aber vorstellen, dass das nicht unterstützt wird.

      Innerhalb einer Haussteuerung hat HTTPS nicht so furchtbar viel Sinn. HTTPS benötigt ja eigentlich ein Zertifikat, um die Gegenstelle sicher zu authentifizieren. Ein Zertifikat kann nur für eine Domain ausgestellt werden. Im Heimnetz gibt es aber keine Domains, sondern alles läuft über die IP-Adressen. Das richtig aufzusetzen ist also nicht ganz trivial, und bringt auch nicht wirklich was.

      1. Ja ist richtig. Ich greife allerdings auch von unterwegs auf FHEM (Haussteuerung) zu. So kann ich etwas ruhiger schlafen.
        ich habe das jetzt in ein Action.py eingepflegt kann ich die ganz einfach öffnen?
        Also in der Action.txt steht jetzt
        python:// d:\CinemaVision\Actions\Action.py

        Ist das so einfach?
        Grüße

  2. Hallo Bert,

    hast du schon Erfahrung wie man dem Lightmanager Mini in Verbindung mit dem Harmony Hub die Action Module einbringen kann?

    VG
    Thomas

    1. Hallo Thomas,

      du müsstest dafür den Harmony Hub steuern können. Meines Wissens nach hat Logitech dafür aktuell keine API freigegeben. Kann mich aber irren.

      Tu dir einen Gefallen und hol dir den Light-Manager Air. Da liegen Welten dazwischen.

  3. Hallo Bert,

    ich habe oben den Philips Hue Befehl „Licht ausschalten“ gelesen.

    PUT: { „on“: false, „transitiontime“: 30 }
    Wird mit „transitiontime“: 30 das Licht langsam gedimmt?

    Ich habe LED-Bänder, welche man nicht dimmen kann, sondern nur ausschalten.
    Wäre dann der Befehl: PUT: { „on“: false } ??

    Gibt es zu diesen Befehlen irgendwo eine Übersicht?

    1. Hallo Horst,

      wenn du weitere Befehle brauchst, musst du dich wohl oder übel durch die Philips Hue API Documentation fressen. Ziemlich übel, wenn man sowas nicht gewohnt ist.

      Im Fall von nicht dimmbaren Lichtern sollte dann folgendes richtig sein:
      PUT: { "on": false, "transitiontime": 0 }

      Wobei auch deine Kurzversion funktionieren sollte. Und selbst die ursprünglich hier gezeigte Variante müsste funktionieren – wenn ein Aktor einen Befehl nicht ausführen kann, dürfte er ihn einfach ignorieren.

  4. Hallo Bert,
    mein Heimkino ist bewusst nicht über WLAN oder Netzwerkkabel eingebunden (da ich nicht streame und unsere Internetverbindung ohnehin nicht dolle ist).

    Macht es dennoch Sinn bzw. ist es über überhaupt möglich einen RaspberryPi mit Cinemavision zu nutzen, wenn ich den Pi nur über HDMI mit dem AV-Receiver verbinde? Wenn ich es richtig verstehe, müsste ich doch eine ganz normale Abfolge von Intro / Trailern / Werbung hinterlegen können, die er dann abspielt und müsste nur selbst anschließend manuell den HDMI-Eingang zum Blu-Ray Player wechseln, um den Film zu starten?

    Oder bin ich dann besser bedient, indem ich einfach eine feste Vorprogrammabfolge über einen USB-Stick zuspiele? (Vorteil von der Pi-Variante wäre ja, dass zufällig aus einem Pool von hinterlegten Spots / Trailern abgespielt werden könnte.)

    Vielleicht steckt da ja irgendwo ein grundsätzlicher Denkfehler drin, bin in dem Thema so überhaupt nicht bewandert…

    1. Hi Andreas,

      du kannst die Trailer und alles theoretisch direkt mit auf dem Raspberry Pi ablegen. Dann läuft das auch ohne Netzwerkverbindung. Allerdings ist das extrem unpraktisch und auch Kodi macht so nicht wirklich Spaß.

      Es macht also durchaus Sinn, zumindest den Pi ins Heimnetz einzubinden und die Trailer usw. auf einem Netzwerkpfad abzulegen, um sie leichter austauschen zu können bzw. überhaupt Zugriff darauf zu haben, ohne den Pi aus dem Kino zu entfernen.

      Die Variante mit dem USB-Stick kannst du eigentlich knicken. Würde mich wundern, wenn du einen Player hast/findest, der in der Lage ist, mehrere Dateien flüssig von einem Stick abzuspielen, ohne zwischendurch irgendwelche Menüs, Dateinamen oder Ladekringel anzuzeigen. Das ist der Hauptvorteil von CinemaVision (von der zufälligen Auswahl mal abgesehen) – es läuft einfach wirklich wie ein Kinoprogramm ab.

  5. Egal wieviel Prozent ich in der Lautstärke beim Audio Bumper eingestellte, er spielt immer mit voller Kraft. Wie kann das sein?
    Kennst Du zufällig die Befehle für eine .cvaction für den Denon AVR-X2500 damit ich die Lautstärke direkt am AVR reguliere?
    Oder kann ich das anders erreichen?

    1. Hi Sven,

      das Problem mit der Lautstärke hatte ich auch schon. Scheint so ein typischer CinemaVision-Bug zu sein. Habe noch keine Lösung dafür gefunden.

      Die Denon-Befehle kenne ich nicht. Die musst du dann Googeln oder beim Hersteller anfragen.

Kommentar verfassen

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

Warenkorb