Hallo zusammen!
Heute werde ich euch zeigen, was ich gemacht habe, um das Ambilight meines Fernsehers mit Gladys zu steuern.
Haftungsausschluss
Dieser Leitfaden zeigt euch nur den Teil der Ambilight-Steuerung und nicht die Installation der Ambilight-Lösung (die ich euch eventuell später vorstellen könnte, falls es euch interessiert).
Was ist Ambilight?
Ich glaube, der Name ist von Phillips geschützt, aber seit die Technologie auf den Markt kam, ist es so etwas wie ein generischer Begriff geworden, um die Synchronisation von Lichtern mit dem Bild des Fernsehers zu bezeichnen (oft über LEDs, die hinter dem Fernseher angeordnet sind).
Voraussetzungen
- Eine bereits konfigurierte Installation von HyperionNG Hyperion GitHub
- Ein Zigbee-Knopf in meinem Fall: Sonoff-Knopf
- Oder NodeRed installiert und ein Samsung-Fernseher mit dem von Samsung entwickelten Betriebssystem TIZEN
Los geht’s
Ich werde euch zwei Lösungen vorstellen.
Die erste besteht darin, das Ambilight über einen Zigbee-Knopf ein- oder auszuschalten.
Die zweite besteht darin, das Ambilight je nach Zustand des Fernsehers (ein- oder ausgeschaltet) ein- oder auszuschalten.
Erste Lösung
Das ist ganz einfach. Wenn man auf die Startseite unserer Hyperion-Instanz gelangt, landet man auf dem Dashboard
Wie man sieht, ist vieles aktiviert, aber was wirklich Ressourcen verbraucht, sind die LEDs, und die sind deaktiviert.
Um das Bild meines Fernsehers zu erfassen, verwende ich eine Weitwinkel-Webcam, die direkt vor dem Bildschirm platziert ist. Dadurch kann ich mehrere Quellen nutzen (Freebox, Konsole und sogar YouTube oder Plex in der nativen App auf dem Fernseher).
Das Ziel ist es also, die LEDs ein- oder auszuschalten. Dazu bietet Hyperion eine API, die direkt über HTTP-Anfragen zugänglich ist.
Zuerst müssen wir also ein Authentifizierungstoken abrufen, um mit Hyperion über HTTP kommunizieren zu können
Man klickt auf Netzwerkdienste und im Bereich Token-Verwaltung fügt man eine Beschreibung hinzu und erstellt ein Token (das man gut aufbewahrt)
Zurück in Gladys, nachdem unser Zigbee-Knopf gepaart wurde, erstellen wir eine Szene, um die LEDs bei einem Klick einzuschalten, und eine weitere Szene, um sie beim Doppelklick auszuschalten
In der Szene fügen wir einen Auslöser hinzu: Bei Zustandsänderung des Geräts
Man wählt den gewünschten Knopf aus und vergleicht, ob sein Zustand gleich 1 ist (was einem Klick entspricht)
Dann fügt man die Aktion hinzu: HTTP-Anfrage senden
Methode: POST
URL: http://[url-deiner-hyperion-instanz]/json-rpc oder http://[ip-deiner-hyperion-instanz]:[port]/json-rpc
Header: Einen Header mit dem Namen Authorization und dem zuvor generierten Token als Wert hinzufügen
Body:
{
"command":"componentstate",
"componentstate":{
"component":"LEDDEVICE",
"state":true
}
}
Um die LEDs auszuschalten, wiederholt man die vorherigen Schritte, ändert den Wert des Knopfes auf 2 für den Doppelklick und ersetzt im Body der HTTP-Anfrage « state »:true durch « state »:false.
Zweite Lösung
Ich brauche den Knopf nicht mehr, da ich meinen Fernseher in NodeRED angeschlossen habe.
In NodeRED habe ich die Bibliothek installiert: node-red-contrib-samsung-tv-control
Mein Workflow ist wie folgt:
Die erste Zeile muss einmal ausgeführt werden, um das Token des Fernsehers abzurufen und mit ihm zu kommunizieren. Dafür haben wir einen ersten Knoten
Der zweite Knoten ermöglicht das Abrufen des Tokens. Dafür muss ein Gerät konfiguriert werden
Man gibt die IP-Adresse des Fernsehers sowie die MAC-Adresse ein und lässt den Teil Token leer, den man später abrufen wird.
Der dritte Knoten dient dazu, das Token für den Fernseher in der NodeRED-Konsole anzuzeigen.
Nach dieser Konfiguration kann man sein Template ausführen, wobei man sicherstellt, dass der Fernseher eingeschaltet ist.
Auf dem Fernseher wird eine Nachricht angezeigt, um einem Gerät die Kontrolle über den Fernseher zu erlauben. Man muss dies mit der Fernbedienung akzeptieren.
Sobald das Token abgerufen wurde, kann man das Token-Feld in der Konfiguration des Geräts aktualisieren. Man kann dann den ersten Knoten deaktivieren, um zu vermeiden, dass der Fernseher bei jeder Ausführung des Templates nach einem Token gefragt wird.
Jetzt gehen wir zurück zu Gladys, um ein MQTT-Gerät zu erstellen, mit dem der Zustand des Fernsehers abgerufen werden kann.
Wir erstellen also ein Gerät vom Typ Sensor mit dem Wert 0 oder 1.
Wir gehen zurück zu NodeRED.
Der zweite Datenstrom für den Fernseher verwendet die Box SamsungTV Is Alive. Um ihn auszulösen, verwenden wir einen Knoten vom Typ Inject, der alle 30 Sekunden ausgeführt wird, um den Zustand des Fernsehers abzurufen und ihn auf das MQTT-Topic zu senden
Die Box SamsungTV Is Alive hat zwei Ausgänge: einen mit 0 und einen mit 1. Um ihn auf das MQTT-Topic zu senden, muss eine kleine Transformation vorgenommen werden, daher die Verwendung eines Knotens vom Typ Function
Hier führt man für den Ausgang 1 die gleiche Manipulation mit msg.payload = 0 für den Ausgang 0 durch.
Jetzt, wo wir den Zustand unseres Fernsehers in Gladys abgerufen haben, können wir eine Szene wie zuvor erstellen, nur dass wir anstelle des Knopfes unser Fake-MQTT-Gerät als Zustandsänderung des Geräts verwenden.
Man wird darauf achten, das Kontrollkästchen anzukreuzen: Nur ausführen, wenn der Schwellenwert überschritten wird (und nicht bei jedem gesendeten Wert).
Sonst wird alle 30 Sekunden eine Anfrage an Hyperion gesendet, und das könnte ihn zum Absturz bringen.
Und das war’s, ihr könnt euer Ambilight genießen, ohne euer Telefon benutzen zu müssen, um es ein- oder auszuschalten.











