Netzwerksteuerung eines Heimkinos

Weil die Steuerung meines Heimkinos auf dem herkömmlichen Weg per Infrarot über eine Universalfernbedienung auf Dauer nicht zufriedenstellend war, habe ich einen schon etwas älteren Gedanken wieder aufgegriffen: die Netzwerksteuerung. Moderne Heimkino-Geräte verfügen heute über einen Netzwerk-Anschluss. Darüber lassen sie sich per App auf die eine oder andere Art steuern.

Netzwerksteuerung eines Yamaha AV-Receivers durch die App

Der Grundgedanke der Hersteller ist hierbei, den Anwendern zusätzlichen Komfort zu bieten. So gibt es von Yamaha zum Beispiel eine App für Smartphones und Tablets, die als äußerst brauchbare Alternative zur Fernbedienung dient. Projektoren dagegen werden manchmal in größeren Mengen in bestimmten Einrichtungen installiert und sollten dort zentral gesteuert werden können: alle Geräte zu Beginn der Öffnungszeiten einschalten, am Ende des Tages ausschalten, Wartungsinformationen und Fehler kontrollieren. Die Anwendungsfälle sind grenzenlos und nicht nur für Heimkinos interessant.

Netzwerk-Switch: zur Netzwerksteuerung müssen alle Geräte miteinander verbunden sein Ich beginne mit diesem Artikel eine Serie, in der es auch etwas technischer zugehen wird. Wir sehen uns die Steuerung von Yamaha-Geräten per Netzwerk-Schnittstelle an, versuchen einen Projektor zu bedienen und widmen uns zuletzt der Lichtsteuerung. Im Laufe der Zeit entsteht dabei eine Web-App, die auf beliebigen Geräten ausgeführt werden kann, um das Heimkino rundum zu verwalten. Sozusagen eine Universal-Fernbedienung auf Netzwerk-Basis.

Das ganze geht natürlich schon sehr stark in Richtung Heim-Automatisierung und kann noch für alle möglichen anderen Zwecke genutzt werden. Wir konzentrieren uns darauf, ein Heimkino so weit zu automatisieren, dass wir uns um gar nichts mehr kümmern müssen. Ganz wie im echten Kino.

Yamaha-Geräte: Eine XML-Schnittstelle

Yamaha hat eine sehr umfangreiche Schnittstelle für ihre Receiver und Blu-ray-Player geschaffen. Diese basiert auf simplem HTTP (Post) und ist damit relativ einfach zu nutzen. Wie das genau geht, sehen wir uns im nächsten Artikel genauer an. Yamaha nutzt diese Schnittstelle selbst für die in den App-Stores erhältlichen Yamaha-Fernbedienungen. Damit lassen sich alle Geräte der jüngeren Generationen verwalten. Andere Geräte wie CD- und DVD-Player, MiniDisc-Player, Equalizer und Kassettendecks haben keine Chance gegen die heutigen Multimedia-Genies und wurden deshalb zu Auslaufmodellen degradiert — sie werden praktisch nicht mehr produziert und verfügten auch niemals über einen Netzwerk-Anschluss.

Die App sendet dabei Befehle, wie zum Beispiel den folgenden, über das hauseigene Netzwerk an das Yamaha-Gerät:

<YAMAHA_AV cmd="PUT"><Main_Zone><Volume><Lvl><Val>Up</Val><Exp></Exp><Unit></Unit></Lvl></Volume></Main_Zone></YAMAHA_AV>

Damit wird die Lautstärke erhöht, so als würde man das auf der Fernbedienung machen. Das Gerät antwortet bei Erfolg mit einer sehr ähnlichen Syntax oder gibt einen Fehler zurück, wenn es den Befehl nicht verstanden hat.

Nicht nur die App von Yamaha kann diese Befehle versenden, sondern jeder, der das nötige Wissen über die Schnittstelle hat. Die Dokumentation ist im Netz sehr schwer zu finden (eine Anfrage an den Yamaha-Support hilft aber weiter) und bekommt auch nicht unbedingt das Prädikat “leicht verständlich”. Man merkt förmlich, wie ein paar japanische Entwickler nächtelang Spaß mit Excel hatten.

Steuerung des AV-Receivers über die App
Der Ausschnitt zeigt die Steuerung von Lautstärke und Eingängen eines AV-Receivers.

Damit zum Beispiel ein Smartphone mit einem Yamaha-Gerät kommunizieren kann, müssen sich beide im selben Netzwerk befinden. Das Smartphone wird in der Regel im heimischen WLAN angemeldet sein. Von dort kann es über den Router auch mit allen Geräten kommunizieren, die per Kabel mit diesem Verbunden sind. Neuere Receiver-Modelle verfügen auch über eingebautes WLAN, was die Kabel überflüssig macht. Das alles unterliegt den üblichen Regeln der Kommunikation von Geräten in einem Netzwerk untereinander.

Besonders interessant an den Netzwerk-Befehlen ist, dass damit Dinge möglich sind, die eine normale Fernbedienung nicht kann. Das bietet für technisch begabte Anwender nochmal einen besonderen Mehrwert. Hier ein paar Beispiele:

  • Die Lautstärke kann nicht nur in Schritten von 0,5 dB geändert werden, sondern auch 1 dB, 2 dB oder 5 dB. Außerdem ist der sofortige Wechsel auf einen bestimmten Wert möglich (ohne Zwischenschritte).
  • Die Steuerung von USB, iPod und anderen Quellen kann teilweise blind erfolgen, das heißt, auch dann, wenn die Quelle nicht aktiv oder der Receiver ausgeschaltet ist. Titel können direkt angesprungen werden, anstatt sich durch das Menü zu klicken.
  • Titelinformationen, Spielzeit und Album-Cover können vom Gerät abgefragt werden. Das macht auch die App des Herstellers ausgiebig.
  • Sämtliche Geräte-Einstellungen, egal wie tief sie in den Menüs versteckt sind, können direkt angesprochen, ausgelesen und verändert werden. Man kann zum Beispiel den Audio-Eingang zu einer Video-Quelle mit einem einzigen Befehl wechseln.

Ideale Voraussetzungen also, um damit eine Kino-Schaltzentrale zu basteln. Aber dazu gehören noch andere Geräte…

→ weitere Informationen zur Netzwerk-Steuerung von Yamaha-Geräten

Projektorsteuerung über PJLink

Ein paar findige Japaner (wer sonst) haben sich zusammengetan und einen Standard für die Steuerung von Projektoren und Bildschirmen entwickelt. Dieser nennt sich PJLink und wird von sehr vielen aktuellen Projektoren unterstützt. Somit können Geräte verschiedener Hersteller in einer Organisation auf dem selben Weg verwaltet werden. PJLink umfasst die wichtigsten Funktionen, die eigentlich jeder Projektor hat:

  • Ein- und Ausschalten einschließlich Zustandskontrolle
  • Eingangswahl
  • Auskunft über Projektorstatus, Lampenlaufzeit und Fehlerstatus

Der kleinste gemeinsame Nenner aller Projektoren sozusagen. Die Befehle werden unkomfortabel aber dafür effizient per TCP versendet und die Antworten empfangen. Das sieht zum Beispiel so aus:

%1INPT 31

Damit wird der Eingang auf HDMI 1 eingestellt. Eine sehr sparsame Schreibweise, aber mehr ist auch gar nicht nötig. Die Schnittstelle ist von der Organisation hinter PJLink gut dokumentiert.

Interessant ist auch hierbei, dass der Projektor dadurch einige funktionale Erweiterungen erhält, die über die normale Fernbedienung nicht zugänglich sind:

  • Das Ausschalten erfolgt sofort, kein mehrmaliges Senden des Off-Befehls notwendig.
  • Die Eingangswahl erfolgt, ohne dass der Projektor eine Information darüber im Bild einblendet.
  • Es gibt eine Video-Mute-Funktion, die das Bild auf Schwarz schaltet. Yay!

→ weitere Informationen zur Projektor-Steuerung über PJLink

Erweiterungen von Mitsubishi

Steuerelemente der App für diverse 3D-Einstellungen des Projektors
Steuerelemente der App für diverse 3D-Einstellungen des Projektors

Mitsubishi-Projektoren bieten darüber hinaus ein eigenes Protokoll, das PJLink sehr ähnlich ist. Die Befehle sind noch etwas kürzer gehalten und decken den gesamten Funktionsumfang des Projektors ab. Damit lassen sich alle anderen Funktionen der Fernbedienung (aber auch die von PJLink) nachbilden.

Wie auch bei Yamaha lassen sich Geräteeinstellungen direkt setzen, ohne das Menü aufzurufen. Ein prima Anwendungsbeispiel: Das Gitter-Testbild zur Ausrichtung des Projektors (wenn man mal wieder dran gewackelt hat) kann mit einem Tastendruck aufgerufen werden. Auch die Farbkalibrierung kann so verändert werden, was theoretisch unbegrenztem Speicherplatz für Farbeinstellungen gleich kommt. Die 3D-Feineinstellung kann direkt gesetzt werden, was manuell ziemlich umständlich ist.

→ weitere Informationen zur Netzwerk-Steuerung von Mitsubishi-Projektoren

Netzwerksteuerung für das Licht

Ich verwende zur Lichtsteuerung den Light-Manager von jbmedia. Verständlicherweise war ich sehr froh, zu erfahren, dass auch dieser durch Software ferngesteuert werden kann. Was nützt es schließlich, wenn man alle Geräte im Griff hat, aber dann für das Licht immer noch eine kleine Funkfernbedienung benötigt? Geräte und Licht sollen aufeinander abgestimmt sein und gemeinsam angesteuert werden können. Das Video in diesem Artikel zeigt, warum.

Der folgende Befehl führt die Konfiguration 51 des Light-Managers aus. Wie man sieht, sind die Befehle des Light-Managers von allen bisherigen Schnittstellen die einfachsten.

key=51

Die Anbindung des Light-Managers erfolgt je nach Modell unterschiedlich. Der Light-Manager Mini verfügt nicht über einen Netzwerkanschluss und muss daher per USB mit einem PC verbunden sein. Auf dem PC muss die Software Lightman Studio laufen, die einen kleinen Webserver bereitstellt. Dieser nimmt dann die HTTP-Anfragen wie im Beispiel entgegen und leitet sie per USB-Kabel an den Light-Manager weiter. Einfach, stabil, aber mit sehr vielen Abhängigkeiten.

Um den PC als Bindeglied zu umgehen, gab es von jbmedia die WiFi-Bridge. Diese verbindet sich mit dem WLAN und enthält seitens der Hardware einen Webserver, der darüber angesprochen wird. Die Bridge sendet die Befehle dann per Infrarot-Signal weiter an den Light-Manager. Auch wenn das zwei Geräte sind, ist diese Lösung in Ordnung, weil sie unabhängig von Standort und Aktivität eines PCs ist. Leider wird die WiFi-Bridge nicht mehr produziert und ist nur noch gelegentlich gebraucht zu bekommen.

Stattdessen gibt es jetzt den wesentlich komfortableren Light-Manager Air. Der ist zwar deutlich teurer, bringt aber erheblich mehr Funktionen und Möglichkeiten mit. Neben verschiedenen Sensoren und Unterstützung für mehr Funkmodule ist er nämlich gleich mit einem Webserver ausgestattet. Eine Verbindung zu einem PC ist damit überflüssig. Der Light-Manager Air hängt sich in ein WLAN-Netzwerk ein und wird damit auch für unsere App erreichbar.

→ weitere Informationen zur Netzwerksteuerung eines Light-Managers folgen hier

Einen PC oder irgend eine andere Art von Server benötigt man allerdings trotzdem, denn:

Webserver benötigt

Irgendetwas muss die Befehle an die einzelnen Geräte weitergeben. Wie Ihr gesehen habt, handelt es sich um die verschiedensten Schnittstellen, vornehmlich HTTP und reines TCP. Wie ich eingangs schrieb, soll das Ergebnis eine Web-App sein. Das ist einfach, bietet viele Gestaltungsmöglichkeiten und ist mit beliebigen Geräten kompatibel: Sie läuft überall, wo ein Browser vorhanden ist.

Eine Web-App ist nichts anderes als eine normale Website, nur eben mit anderen Funktionen. JavaScript kann grundsätzlich die Aufrufe der Befehle übernehmen, sowohl für HTTP, wenn das Gerät einen Webservice zur Verfügung stellt, als auch für TCP oder andere Protokolle. Das Problem dabei: die Same Origin Policy. Diese besagt, dass Scripts in Websites nur Ressourcen aufrufen können, die auf der selben Domain erreichbar sind, wie das Script selbst. Geht aber nicht, weil die Web-App unter der einen IP-Adresse (Domain) erreichbar ist, die einzelnen Geräte aber jeweils unter einer anderen. Damit es funktioniert, müsste man die Sicherheitsrichtlinien des Browsers umgehen (geht nicht) oder die Geräte eine bestimmte Kennung senden lassen, die sie als vertrauenswürdig ausweisen (geht leider auch nicht).

Deshalb muss der Webserver, der die App ausliefert, die Kommunikation übernehmen. Für das Backend habe ich zwei Wege ausprobiert: PHP als verbreitete Programmiersprache in diesem Bereich und Node.js als die etwas modernere Lösung auf Basis von JavaScript. Letztendlich bin ich bei Node.js hängen geblieben, weil mir die Einfachheit der Lösung sehr gut gefiel. Es kann aber genauso gut jede andere Programmiersprache verwendet werden, die sich im Rahmen eines Webservers ausführen lässt.

Die App stellt also alle Anfragen an Ihren eigenen Webserver, der sie dann an die Geräte weiterleitet. Die einfachste Lösung für PHP-Entwickler dürfte XAMPP als Webserver sein. Später kann man das dann auf einem Raspberry Pi laufen lassen. Für Node.js ist nichts weiter als die Plattform selbst erforderlich, da der Webserver in Node.js einfach mal so mit entwickelt wird.

Funktionalität der App

Wie auch immer, technischer Kram eben. Wie das im Detail funktioniert, werdet Ihr in den folgenden Artikeln zu diesem Thema sehen. Das Ergebnis soll letztendlich eine Webanwendung sein, die sich in den meisten Belangen wie eine normale App auf einem beliebigen System verhält.

Yamaha AV-Receiver durch die App gesteuertUnd weil das größtenteils HTML ist, kann es relativ einfach angepasst werden. So kann sich jeder Bastler seine ganz persönliche Universal-Fernbedienung bauen, die ganz auf sein Kino abgestimmt ist. Außer Kenntnissen in HTML und JavaScript ist nicht viel erforderlich. Zumindest ist das mein langfristiges Ziel für diese Lösung.

Eine ganz entscheidende Funktion dieser selbst entwickelten Universal-Fernbedienung sind Makros. Wie ich hier schon des öfteren erwähnte sind Makros, also Abfolgen von Befehlen, eine ganz entscheidende Funktion für Heimkinos. Schließlich will man mit einem einzigen Tastendruck den Film starten. Mit der App liegt es allein in den Händen des Programmierers, welche Befehle zu welchem Zeitpunkt ins Netzwerk gesendet werden. Makros sind also das kleinste Problem.

Hinzu kommt, dass Befehle auch ohne Weiteres zeitgesteuert ausgeführt werden können. Den Film zu einer bestimmten Uhrzeit oder nach Ablauf eines Countdowns starten? Kein Problem. Projektor aus und zurück zur Pausenmusik, sobald der Film abgelaufen ist? Geht ebenso, wenn man genug Zeit und Geduld aufbringt.


So kann mit der Zeit eine kleine Schaltzentrale für das Heimkino entstehen, mit der sich der komplette Ablauf automatisieren lässt. Genau wie im echten Kino. Klingt vielleicht verrückt, macht aber Spaß. Für diejenigen, die mir dabei nacheifern und selbst die Steuerung ihres Kinos in die Hand nehmen wollen, sind die folgenden Artikel dieser Serie gedacht. Auf die weiter oben genannten Schnittstellen werde ich dabei jeweils nochmal im Einzelnen eingehen.

→ ein Resümee zur realisierten Funktionalität der App rundet diesen Beitrag ab

8 Gedanken zu „Netzwerksteuerung eines Heimkinos

  1. Hallo,
    ich bin zufällig auf deinen Blog gestoßen und finde ihn wirklich sehr interessant und informativ.

    Ich habe zwar kein eigenes Heimkino und auch nur einen kleinen Monitor zum Video gucken, dafür aber inzwischen einen Yamaha RX775 Receiver mit zwei einigermaßen guten Lautsprechern. In den nächsten Jahren soll die Multimedia-Ausstattung aber noch wachsen 😉

    Da ich Softwareentwickler bin, fand ich deinen Beitrag zu der XML-Schnittstelle besonders interessant (war mir völlig unbekannt) und ich gedenke damit mal etwas rumzuspielen, weshalb ich mich auch mal direkt an den Yamaha-Support gewandt habe…

    Auf jeden Fall vielen Dank für deinen gelungenen Blog! Ich werde ihn sicherlich in Zukunft genauer verfolgen 🙂

    Weiter so!
    Markus

    1. Vielen Dank für das Lob! Und viel Spaß mit dem Yamaha, Du wirst ihn lieben. Schau in ein paar Tagen nochmal rein. Der nächste Artikel beschäftigt sich näher mit der XML-Schnittstelle. Das dürfte den Einstieg leichter machen.

  2. Hallo, Ich habe viele deiner Beiträge gelesen und habe viel dabei gelernt; besonders mit Universalverbediener. Eine klare Konzept aber für Netzwerksteuerung eines Heimkinos fehlt mir immer noch. Ich habe DENON AVR-X4100. Sie verfügt über wlan Verbindung. Player ist auch von Denon. Beamer ist Epson,EH-TW9200W. Ich möchte dies alles mit den Leuchten zusammen per iPad oder iPod steuern und zwar in Macros. Light manager mini oder Pro und Funksteckdosen kann ich auch besorgen. Die Frage ob man mit diesen Komponenten-Team erfolg hat?

    1. Grundsätzlich ja. Du müsstest aber annähernd den selben Aufwand betreiben wie ich hier. Sowohl Denon-Geräte als auch Epson-Beamer sollten über die Möglichkeit der Netzwerk-Steuerung verfügen. Das lässt sich schnell googeln, bzw. ist daran zu erkennen, dass es vom Hersteller schon Apps gibt.

      Jetzt könntest du die Dokumentationen suchen und das ähnlich wie hier gezeigt runter programmieren. Viel Spaß. 😉

      Die einzige andere Möglichkeit, Makros mit verschiedenen Geräten zu erstellen, führt über eine handelsübliche Universalfernbedienung. Kommt eben darauf an, ob du was programmieren kannst und willst, oder ob es was fertiges sein muss.

      Was es definitiv nicht gibt: Apps zur Netzwerksteuerung für Geräte verschiedener Hersteller. Jeder Hersteller gibt seine eigene App heraus, die nur mit seinen Geräten funktioniert. Sozusagen als Alternative zur Fernbedienung. Da ist mir aber auch keine bekannt, wo man Makros einrichten kann.

      Es gibt grundsätzlich Ansätze für “universelle” Netzwerk-Apps, die viele Marken unterstützen. Diese sind aber allesamt unausgereift, unprofessionell, hässlich, werden nicht richtig weiter entwickelt oder es mangelt an gewissen Basis-Features. Deshalb betreibe ich ja auch diesen Aufwand hier.

      Darüber hinaus gibt es für iPad und iPhone kleine Infrarot-Erweiterungen zum Anstecken und entsprechende Apps dazu. Somit werden diese Geräte im Grunde zu normalen IR-Universalfernbedienungen. Würde ich aber nicht in Erwägung ziehen: sie haben den größten Nachteil von Apps (keine Hardware-Buttons) und den größten Nachteil der Universalfernbedienungen (Infrarot, was z. B. die Harmonies gekonnt durch Funk umgehen) miteinander vereint. Dann lieber eine Harmony.

  3. Erst einmal großes Lob für den Artikel. Ich bin auf dem Sektor des Heimkinos Neuling bin. Ich bin aber Automationsfreak habe mein hause mit Smarthome aus ausgerüstet. Dann würde ich auch gerne mein Heimkino automatisieren. Daher die Frage womit hast du das genau programmiert da die Lösung mit einer App genau das ist was ich mir auch vorstellen.

    1. Hallo Patrick,

      vielen Dank! Ich bin nicht ganz sicher, ob ich verstehe, worauf Deine Frage abzielt. Wie in den hier verlinkten Artikeln beschrieben, verwende ich Node.js für die Programmierung. Es sind aber auch Beispiele für PHP zu finden (obwohl ich das nicht mehr nutze). War Deine Frage anders gemeint?

Stelle eine Frage

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

Hinweise zur Verarbeitung Deiner Angaben und Widerspruchsrechte: Datenschutzerklärung