Smart TV mit per Sprachsteuerung und mobilen Geräten bequem steuern

Smart TV mit Webbrowser und Ansicht eines Blogs

Smart TV

Im Smarthome wird alles vernetzt und aneinander gekoppelt. Geräte sollen zentral gesteuert und überwacht werden können. Doch neben Lampen oder Thermostaten, lassen sich noch viele weitere Geräte integrieren.

Smart TVs bieten in der Regel bereits Schnittstellen, welche eine Steuerung per App erlauben. Diese Schnittstellen basieren auf den Netzwerkprotokollen, wodurch du unabhängig von etwaigen Funkmodulen oder ähnlichem bist. Zudem ist eine Steuerung über das Netzwerk durchaus zuverlässig, da man den Smart TV oftmals per Kabel an das eigene Netzwerk angeschlossen hat.

Die Schnittstellen des Smart TV lassen sich nutzen, um sie über OpenHAB zu integrieren. Doch wie findet man diese Schnittstellen heraus und wie nutzt man sie für eine effiziente Steuerung des Geräts? Auf diese Gesichtspunkte möchte ich gerne in diesem Beitrag eingehen. Neben einer allgemeinen Beschreibung möchte ich auch gezielt ein Beispiel für die Integration anhand eines Sony Bravia liefern, für welchen ich bereits eine eigene Vermittlungsschicht geschrieben habe. Dadurch ist OpenHAB ganz bequem in der Lage, die Schnittstellen des Fernsehers anzusprechen. Doch dazu später mehr.

Die Gedanken zur Integration

Mit der Integration eines Geräts verfolgt man ein konkretes Ziel. In der Regel wird dieses Ziel sein, dass du dein TV mithilfe von Smartphone, Tablet oder Computer steuern kannst. Ebenso möchtest du in einem Smarthome eventuell den TV mit deiner Stimme steuern können oder ihn – wenn du im Urlaub bist – automatisieren, um damit einen weiteren Schutz gegen Einbruch zu haben.

Je nach Szenario ist es wichtig, die richtige Lösung zu finden. Möchtest du nur bequem vom Tablet das Programm wechseln, so solltest du dich nach einer geeigneten App in den Stores umsehen. Viele Hersteller, darunter auch Sony, liefern für ihre Geräte bereits die passende App, so dass du ohne großen Aufwand zu deinem Ziel gelangst.

Bei der grundsätzlichen Integration ins Smarthome ist der Aufwand jedoch etwas größer. Du brauchst einen zentralen Punkt, welcher Zugriff auf das Gerät hat und diesen anderen Geräten wiederum zur Verfügung stellt. Diese Zentrale ist später auch für die Automatisierung zuständig. In meinem Fall ist meine Zentrale ein Raspberry Pi, welcher OpenHAB installiert hat. Über OpenHAB habe ich eine Schnittstelle für den Amazon Echo und Apples HomeKit.

Die Steuerung im Detail

Dein Smart TV braucht von dir Informationen darüber, was er tun soll. Jedes Mal, wenn du auf der Fernbedienung einen Knopf drückst, wird ein bestimmtes Kommando übergeben, welches der Fernseher ausführt. Genauso wird es über deine Smarthome-Zentrale gemacht. Der Unterschied besteht jedoch darin, dass du deiner Zentrale sagst, sie soll dem Fernseher ein Kommando überliefern. Hierfür müssen die unterschiedlichen Funktionen hinterlegt werden, welche du ausführen möchtest.

Nutzt du für die Steuerung eine eigene Software, so werden in dieser die verschiedenen Funktionen angelegt und über eine andere Schnittstelle wiederum verfügbar gemacht. Das kann so aussehen, dass OpenHAB eine bestimmt URL aufruft und dadurch deine Software ein Kommando verschickt. Hierfür braucht dein Smart TV eine feste IP-Adresse im Netzwerk, welche man in nahezu jedem Router hinterlegen kann. Bei der FritzBox läuft das sogar noch einfacher ab: dein Gerät verbindet sich mit dem Netzwerk und erhält eine IP. Unterhalb von dieser kannst du auswählen, dass dieses Gerät immer wieder diese IP-Adresse bekommt.

Bei der Umsetzung der Software sind dir nahezu keine Grenzen gesetzt. Du kannst auf verschiedene Programmiersprachen zurückgreifen und die nutzen, welche dir am besten liegt. Aber auch als Neuling kannst du mit ein wenig Aufwand etwas tolles auf die Beine stellen. Wenn du dir nun also denkst, dass du das nicht schaffen kannst, dann sei nicht entmutigt. Jeder fängt einmal klein an und macht seine ersten Erfahrungen. Und sind wir doch mal ehrlich, wenn es für rein private Zwecke gedacht ist, dann muss ja auch nicht alles perfekt wie vom Profi sein. Hauptsache du hast Spaß bei dem, was du tust!

Wie du die Schnittstellen deines Smart TV findest

Bevor du versuchst mit Abhörtechniken oder ähnlichem zu arbeiten, versuchst du über eine Webrecherche an weitere Informationen zu kommen. Oftmals haben bereits Personen vor dir nach Schnittstellen gesucht und diese freundlicherweise zur Verfügung gestellt, so dass du dir hier eine Menge Arbeit sparen kannst.

Beispiele für Quellen zur API-Nutzung:

Solltest du für deinen Smart TV hingegen keine Schnittstellen im Netz finden, so kannst du auch den Netzwerkverkehr abhören und dadurch versuchen an die Schnittstellen zu kommen. Die FritzBox beispielsweise liefert schon von Werk aus die Möglichkeit, dass du dein Netzwerk abhören kannst und die daraus entstandene Datei in WireShark öffnen kannst. Dort findest du alles, was in deinem Netzwerk passiert. Hier ist es jedoch nicht einfach die richtigen Pakete herauszufinden. Mit ein wenig Übung und ein paar Details (bspw. IP-Adresse des TVs), kannst du jedoch an die Schnittstellen kommen.


Einschub zum Wort API: Wenn jemand von einer API spricht, meint er Application Programming Interface. Hierbei handelt es sich lediglich um den Fachausdruck für eine Programmierschnittstelle.


Entwicklung einer Vermittlungsschicht

Damit du nun deine gefundenen Schnittstellen auch nutzen kannst, implementierst du eine Vermittlungsschicht zwischen deinen Geräten und deinem Smart TV. Hierfür habe ich auf PHP zurückgegriffen, was einen funktionierenden Webserver voraussetzt. Dieser muss lokal in deinem Netzwerk erreichbar sein, da externe Server keinen Zugriff auf dein Netzwerk haben und auch nicht haben sollten. Im Internet findest du hierfür sehr gute Anleitungen. Einsetzen kannst du beispielsweise den Nginx auf dem Raspberry Pi.

Nginx ist ein leichtgewichtiger Webserver, der problemlos auf dem Raspberry Pi betrieben werden kann. In Frage kommen würde auch der Apache Webserver, welcher jedoch etwas mehr Ressourcen verschlingt als der Nginx.

Das Grundgerüst

In PHP reicht es dir im Grunde aus, wenn du dir ein Skript schreibst, welches über Parameter in der URL deine gewünschte Aktion ausführen. Hierfür brauchst du die globale Variable $_GET. Technisch gesehen machst du hiermit allerdings etwas sehr unschönes. Eine Anfrage an deinen Smart TV ist ein POST-Request. Das bedeutet, du verschickst Daten, welche dieser weiter verarbeitet. Implementierst du nun eine GET-Schnittstelle, wird diese später auf ein POST-Request umgelegt. Für OpenHAB ist dies jedoch sehr einfach zu steuern, da das System nur eine Website aufrufen muss ohne etwas zu übergeben.

Deine spätere URL könnte diese Form haben: http://raspberrypi/control/index.php?action=poweroff

Die Angabe hinter action= definiert, was passieren soll. Dieser String wird von deinem Skript abgefangen und ausgewertet, was in diesem Fall in aller Regel mit einer switch-case-Anweisung erfolgt. Diese prüft Schritt für Schritt, ob der übermittelte String auf einen hinterlegten String zutrifft. Sollte das der Fall sein, geht die Verarbeitung weiter.

Beispielhafter Aufbau deiner Index.php

$action= $_GET["action"];

switch ($action) {
 case "braviaOff":
  $bravia = new Bravia();
  $answer = $bravia->powerOff();
  $bravia = null;
  break;
 case "braviaVolumeUp":
  $bravia = new Bravia();
  $answer = $bravia->volumeUp();
  $bravia = null;
  break;
 case "braviaVolumeDown":
  $bravia = new Bravia();
  $answer = $bravia->volumeDown();
  $bravia = null;
  break;
}

Den Smart TV ansprechen

Hast du nun dein Grundgerüst geschaffen, so baust du dir die Anfragen an deinen Smart TV zusammen. Du definierst die IP-Adresse, den Befehl und baust eine Verbindung über curl auf.

Als kleinen Tipp kann ich dir auf den Weg geben, dass du den Verbindungsaufbau über eine eigene Methode laufen lässt. Dieser Methode übergibst du jeweils nur das, was an den TV übergeben werden muss. Danach baut die Methode deine Anfrage zusammen und verschickt diese an den Fernseher. Theoretisch kannst du hier den Rest auch über Methoden lösen, allerdings würde ich dir empfehlen, eine Klasse für die komplette Abwicklung zu erstellen.

Diese Klasse enthält alle Funktionen, welche du später haben möchtest und den Verbindungsaufbau zu deinem Fernseher. Sollten nämlich nun mehrfach hintereinander Befehle ankommen, so wird für jede Abwicklung eine eigene Instanz deiner Klasse erstellt, so dass die Wahrscheinlichkeit von Problemen verringert wird.

Dein Skript enthält also eine Einstiegsseite (index.php) mit einem $_GET Parameter, welcher über eine switch-case-Anweisung ausgewertet wird. Bei einem Treffer wird eine neue Instanz deiner Klasse erstellt, worüber du dann die entsprechende Methode (beispielsweise lauterSchalten() ) aufrufst. Diese Methode ruft wiederum eine andere Methode, an welche sie die Daten übergibt. Danach wird die Verbindung zum Smart TV aufgebaut und der Befehl verschickt.

Beispiel für eine Klasse in PHP

class Bravia {
		
private function sendCommand($command = null) {
 if($command != null) {
  $config = file_get_contents(__DIR__ ."/../config.json");
  $bravia = json_decode($config)->control->Bravia;
  $body = "";
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, "http://". $braviaAddress ."/sony/IRCC");
  curl_setopt($ch, CURLOPT_POST, 1);
  curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/xml'));
  curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  $output = utf8_decode(curl_exec($ch));
  curl_close($ch);

  return json_encode(array("OK" => "Command send"));
 }
		
 public function powerOff() {
  $answer = $this->sendCommand("AAAAAQAAAAEAAAAvAw==");
  return $answer;
 }
}

Anmerkung: Leider lässt WordPress die Ausgabe von XML-SOAP nicht zu, weshalb ich an dieser Stelle zu einem Screenshot greife.


Smart TV per SOAP-Request

SOAP-Request

Das Projekt ist auf Github verfügbar. Hier kann jeder gerne zu diesem Quellcode greifen und ihn nach seinen Wünschen verändern.

Alternativen zu PHP

Je nach deinen Kenntnissen kannst du auch auf andere Programmiersprachen zurückgreifen, wie beispielsweise Java, JavaScript oder C#. Wichtig ist, dass du eine Webschnittstelle brauchst, welche von OpenHAB aufgerufen werden kann, denn sonst wird es nicht funktionieren.

Wer hingegen mehr Spaß an Linux hat, könnte sich auch problemlos ein Shell-Skript zusammen basteln, welches diese Aufgaben übernimmt. Je nach Befehl hast du ein eigenes Shell-Skript, welches von OpenHAB aufgerufen werden muss. Diese Lösung finde ich hingegen nicht so schön, da ich eher den Webbereich vorziehe.

RESTful Webservice

Neben einer Schnittstelle über einen Query-String (so nennt man das ?action= im Fachbereich), kannst du dir auch einen RESTful Webservice bauen. Über diesen hast du die Möglichkeit, schönere URLs zu generieren und diese für den Einsatz im Smarthome zu nutzen. Ein Link in einem RESTful Webservice würde in aller Regel so aussehen: http://raspberrypi/control/poweroff

Welchen Weg du gehen möchtest, hängt ganz allein von dir ab. Als Einsteiger würde ich dir jedoch den oben genannten Weg empfehlen, da dieser in der Umsetzung leichter und schneller vonstatten geht.

Kategorien: Smart Home

2 Kommentare

need all of these parts, · 29. Oktober 2017 um 04:38

Write more, thats all I have to say. Literally, it seems
as though you relied on the video to make your point.
You definitely know what youre talking about, why waste your intelligence on just
posting videos to your site when you could be giving us something enlightening to read?

Alexa gegen Google Home - Wer hat die Nase vorn? · 2. März 2018 um 00:47

[…] so dass man diesen per Echo steuern kann ohne die Fernbedienung zu nutzen. Wer also bereits seinen Fernseher mit Sprache steuern kann, der wird hier auf alle Fälle auf seine Kosten kommen. Vielleicht können wir ja dann eines Tages […]

Schreibe einen Kommentar

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

Translate »