Beiträge von Strategy

    Sorry für die späte Antwort.
    Ich habe meine Schritte mit dokumentiert. Würde das Ganze jetzt nicht Tutorial nennen. Aber vielleicht hilft es um das ganze nachzubauen.
    Wichtig ist nochmal: Ich habe das hingefuscht und zusammenkopiert. Du kannst also keine perfekte Lösung erwarten.


    Folgende Informationen habe ich als Basis benutzt. Vielleicht helfen die in der Vertiefung.
    Die konkreten Schritte habe ich weiter unten beschrieben.


    Ich habe mich kostenlos bei HUE Developers angemeldet:
    https://developers.meethue.com…lopment-hue-entertainment


    Es gibt ein Tutorial für die Entertainment API:
    https://developers.meethue.com…ion/hue-entertainment-api
    Hier ist besonders das Kapitel "Getting started with Streaming API" interessant.



    Schritt 1:
    Ermitteln der IP-Adresse der Hue Bridge.
    Hab ich über meine FritzBox gemacht - wird bei mir als Philips-hue gelistet.
    Am besten der Bridge eine feste IP geben, da ich die IP an verschiedenen Stellen hart verwendet habe.


    Schritt 2:
    Weboberfläche für Entwickler (API Debugging) auf der Bridge öffnen:
    http://<IP der Bridge>/debug/clip.html


    Hier einen neuen Benutzer anlegen.
    Dazu in URL /api eingeben
    Im Message Body

    Code
    {
        "devicetype":"myapplication#enigmalight",
        "generateclientkey":true
    }








    Dabei kann der Wert von DeviceType frei gewählt werden.
    Dann auf der Bridge die Taste drücken und den Befehl mittels PUT abschicken.
    Die Antwort enthält den Benutzernamen und den Client Key. Beide Informationen brauchen wir später:




    Code
    [
    	{
    		"success": {
    			"username": "FmIW4HnZcjoYbj2N182288aJFQXhNQXjxcKg9tk3",
    			"clientkey": "D52A6132900ECD521243012A125B21D45"
    		}
    	}
    ]


    Wie das in der Oberfläche aussieht, kann man auch im Screenshot "Benutzer anlegen" sehen.



    Schritt 3:
    Anlegen eines Entertainment-Bereichs in der Hue App.
    Ich hab das auf dem IPhone gemacht, daher hier die Beschreibung für das Iphone.
    Wichtig. Die Positionen der Lampen sind dabei egal, da wir diese später über die Nummer ansprechen. Es müssen jedoch alle Lampen die geschaltet werden sollen dem Entertainment Bereich zugeordnet sein.


    Einstellungen -> Entertainment Bereiche -> Entertainment Bereich erstellen
    Dann den jeweiligen Schritten der App folgen...


    Am Ende ist ein Entertainment Bereich angelegt...



    Schritt 4:
    Identifizieren der URL des Entertainment Bereichs:
    Dazu habe ich wieder die Weboberfläche für das API debugging benutzt:


    URL:
    /api/<Benutzernamen aus Schritt 1>/groups/
    Befehl mit Get absetzen.


    Am Ende der Liste sollte sich der Eintrag für den Entertainment-Bereich finden.
    Den kann man entweder über den vergebenen Namen oder über die Kennzeichnung
    type": "Entertainment" identifzieren.
    Der Bereich ist durch eine Nummer gekennzeichnet. Diese Nummer benötigen wir.



    Schritt 5:
    Anzeigen aller Lampen im Entertainment Bereich:


    Nachdem wir den Entertainment Bereich identifiziert haben müssen wir prüfen ob dieser auch die notwendigen Lampen enthält.
    Das geht wieder über die Weboberfläche für das API debugging benutzt:


    URL:
    /api/<Benutzernamen aus Schritt 1>/groups/<Nummer des Entertainment Bereichs>
    Befehl mit Get absetzen.


    Damit kommen nun die zugeordneten Lampen zurück. In meinem Beispiel die Lampen (lights) 3 und 4


    Schritt 6: (optional)
    Wenn man will kann man schon mal testweise die Lampen in den Entertainment Mode versetzen:


    Wieder mit der API Debugger Weboberfläche.
    URL ist dieselbe wie im Schritt 5
    In den Body muss diesmal rein:

    Code
    {"stream":{"active":true}}

    Und dann das Ganze per PUT raussschreiben.


    Die Antwort sollte in etwa so aussehen (bei mir ist die Entertainment Group die Gruppe 4):



    Code
    [
    	{
    		"success": {
    			"/groups/4/stream/active": true
    		}
    	}
    ]


    In der App sollte jetzt eine Info auftauchen, dass die Lampen in Entertainment-Funktion sind.
    Achtung: Dieser Modus hält nur kurz an, da keine weiteren Befehle folgen.
    Wir können auch leider keine Befehle senden, da ab jetzt alle Kommunikation verschlüsselt erfolgen muss. Es können keine Befehle für die Farbänderung oder Helligkeit per WebAPI gesendet werden.




    Nun geht es darum die Ansteuerung aus der DreamBox zu übernehmen.
    (Ich hab das Konzept bei mi übrigens nicht nur auf der Dreambox sondern auch auf meinem Linux HTPC laufen. Geht genauso)


    Philips verwendet in seinem Tutorial eine Verschlüsselungs-Bibliothek namens mbedtls-2.7
    Da ich keine andere gefunden habe die den Verschlüsselungs-Standard PSK mit TLS_PSK_WITH_AES_128_GCM_SHA256 unterstützt habe ich diese Suite benutzt.
    Da es keine vorkompilierte Version für die DM900 gibt und ich ohnehin den Source Code der Bibliothek verändert habe musst ich die Bibliothek von Hand kompilieren


    Schritt 7:
    Wir brauchen eine Linux Umgebung mit einem C++ Compiler auf der DreamBox.
    Daher habe ich BarryAllen und damit ein vollwertiges Debian installiert.
    Für die Installation gibt es ausreichend tutorials und ich möchte die Installation daher hier nich näher ausführen.


    Schritt 8:
    Um C++ kompilieren zu können habe ich per APT-GET die nötigen kompiler-Tools installiert.
    Bitte fragt mich nicht mehr was alles. Zumindest gcc war erforderlich. Ich glaube auch build-essentials.


    Diesen Auzug habe ich noch mit der Reverse-Search gefunden:


    Code
    apt-get install coreutils ncurses grep wget libz-dev make binutils libssl1.0.0 openssl openssl-dev libcrypto1.0.0 libusb-1.0-0 libusb-1.0-dev




    Schritt 9:
    Übertragen der mbedtls-2.7 Bibliothek
    Ich habe den source code (bzw. das gesamte zip) per ftp auf die Box übertragen.
    Da ich barry allen benutzt habe, liegt der ganze Kram bei mir unter
    /media/ba/ba/debian/home/root/mbedtls-2.7.0/


    Schritt 10:
    Jetzt muss der DTLS client so modifiziert werden, dass er mit der Hue Bridge spricht und dort sowohl die entertainment API aktiviert als auch die entsprechenden Licht Informationen überträgt:


    Die folgende Datei muss editiert werden (Pfad ist relativ)
    programs/ssl/dtls_client.c


    Folgende Anpassungen müssen gemacht werden:
    Zeile 67: IP Adesse der Hue Bridge
    Zeile 71: Der Username den wir in Schritt 2 erstellt haben
    Zeile 97: Der Client Key, den wir in Schritt 2 erstellt haben
    Die Eingabe erfolg in Hex, es müssen also jeweils Blöcke mit 2 Zeichen mit vorangstelltem 0x eingegeben werden.
    Zeile 146:
    Hier wird das Entertainment aktiviert. Die URL die hier steht muss mit der URL aus Schritt 5 (bzw. Schritt 6) ersetzt werden.
    Zeile 395 / Zeile 397:
    Meine Konfiguration verwendet 2 Lampen. Wie in Schritt 5 ermittelt handelt es sich um die Lampen 3 & 4. Diese müssen jetzt hier eingetragen werden. Dabei steht die Lampe 3 bei mir links vom TV und die Lampe 4 rechts vom TV). Diese Werte müssen auf eure Lampen angepasst werden. Achtung auch hier ist wieder HEX kodierung zu verwenden.


    Schritt 11:
    Kompilieren des geänderten Codes:
    Muss in der Debain Umgebung passieren. Bei mir geht das über
    cd /media
    ba.sh chroot debian
    cd /home/root/mbedtls-2.7.0/program
    make clean
    make


    Möglicherweise gibt es Warnungen, aber das build script sollte durchlaufen.
    Im anschluss findet sich im verzeichnis ssl die Datei dtls_client.


    Soweit so gut.
    Das debian image kann man mit dem Befehl exit wieder verlassen...



    Schritt 12:
    Installation des Enigmalight.
    Der Client kann jetzt ganz normal installiert und konfiguriert werden. Entweder über den Paketmanager für die Erweiterungen oder über die Konsole.
    Ich habs über die Konsole gemacht.


    Schritt 13:
    Nachdem das Plugin installiert ist, muss lediglich die normale Konfiguration des Enigmalight Plugins vorgenommen werden wie in jedem anderen Tutorial beschrieben.
    Wichtig ist das in der
    /etc/enigmalight.conf der richtige output eingestellt wird.
    Hier meine Beispieldatei mit den beiden Lampen.
    Ich lasse für die linke Lampe den linken Bereich des Bildschirms abtasten und für die rechte Lampe entsprechend den rechten Bereich.







    Schritt 14:
    Starten von Enigmalight
    Damit sollte sich Enigmalight in Verbindung mit Hue Entertainment jetzt starten lassen.
    /usr/bin/enigmalight


    sollte in etwa zu folgendem output auf der Console führen:




    Und dann sollte es auch schon laufen.
    Ich hatte schonmal Fehler in dieser Ausgabe. Aber beim zweiten Start-Versuch hat es dann immer geklappt.



    Schritt 15:
    Ich hab jeweils ein Script zum Ein- und Ausschalten gemacht.
    Die habe ich im root abgelegt und kann die jetzt über den Datei-Browser der Dreambox benutzen um mein Ambilight ein und aus zu schalten...
    Die jeweiligen Scripte hab ich ebenfalls mit angehängt.



    Ich hoffe das "Tutorial" hilft dem einen oder anderen weiter.
    Oder noch viel besser einer von Euch schafft es meine Ergebnisse in eine ordentliche Lösung zu überführen...



    Gruß,
    Strategy

    Hallo zusammen,


    ich bin leider kein Programmierer sondern eher ein Fuscher :winking_face:
    Aber dennoch möchte ich euch mein Ergebnis in Verbindung mit meinen Philips Hue Go Lampen nicht vorenthalten.


    Ich hatte ebenfalls das Problem mit der großen Verzögerung und war damit sehr unzufrieden.
    Dann hat Philips das Entertainment Programm ins Leben gerufen. Damit soll ja genau der Anwendungsfall Ambilight abgebildet werden: Häufige Farbwechsel und minimale Verzögerung.


    Ich hab mich dann bei Philips angemeldet und hab das Entertainment Tutorial auf die Dream übertragen.
    Mit einem sehr guten Ergebnis: Keine merkliche Verzögerung zwischen Bild und Farbwechsel der HUE. 10 Farbwechsel pro Sekunde...


    Ganz grob was ich getan habe:


    Anpassung der von Philips im Beispiel verwendeten Bibliothek mbedtls2.7 auf meine Lampen Ids und auf die Schnittstelle von Enigmalight
    Kompilieren in C++ auf einem BarryAllen Debian Image direkt auf der Box.
    Installation von Enigmalight und Konfiguration der mbedtls in der enigmalight.conf
    Und mit einigen Versuchen hat es dann hin gehauen...


    Vielleicht kann das ja einer von Euch in eine ausrollfähige Lösung verwandeln...