DIYHUE Entertainmet "Bridge response is not Valid"

  • Moin zusammen,


    in meinem gestrigen Post wurde mir der Tipp gegeben, mit Hyperion.NG auf meinem Pi 3 mit LibreELEC mal die HUE Entertainment API zu testen, da sie schneller ist als die einzelnen LEDs anzusteuern.


    Ich nutze einen DIYHUE Server auf Debian, der auch bereits mit Entertainment funktioniert (mit Razer Synapse und WS2812B Stripes an einem ESP8266-12F und DIYHUE Ligths). Nun teste ich mit einem ESP8266-01S und DIYHUE Ligths. Dafür habe ich eine neue Entertainment Gruppe erstellt, die Lampen eingefügt und im Hyperion.NG Alpha 9 eingebunden. Der Test beim Einbinden (LEDs nach Auswahl der Entertainment Gruppe aufleuchten lassen) funktioniert. Daher scheint das Setup generell korrekt zu sein. Wenn ich nun aber die Instanz starte, leuchten die LEDs nicht. Ich sehe im Debug Log vom Hyperion.NG folgende Einträge:




    Das Debug Log vom DIYHUE Server zeigt mir keine offensichtlichen Fehler:




    Gibt es noch eine bekannte Inkompatibilität? Ich hätte ja zuerst auf ein Zertifikatsproblem getippt, Die Verbindung kann ja aber offensichtlich aufgebaut werden.

    • Offizieller Beitrag

    Welche Hyperion Version benutzt Du?


    DIYHUE verhält sich nicht immer wie das Original. Dazu hatte ich auch ein Issue eröffnet.
    https://github.com/diyhue/diyHue/issues/422


    plus ich hatte einen Workaround in Hyperion gemacht, um zwischenzeitlich es doch lauffähig zu haben.

  • Ja, klar. An sich ist es das, was in dem Link auch schon drin steht (https://github.com/diyhue/diyHue/issues/422). Das Problem ist offenbar eine "falsche" Antwort vom DIYHUE Server, bzw. ein Format, mit dem die Entertainment API vom Hyperion.NG nicht klar kommt (Abweichung seitens DIYHUE vom ursprünglichen Philips Hue Protokoll).


    Erwartet wird:


    Code
    {
            "success": {
                "/groups/5/stream/active": true
            }
        }


    Zurückgegeben wird aber:


    Code
    {
            "success": {
                "/groups/5/stream": {
                    "active": true
                }
            }
        }


    Man sieht hier, dass die "Verschachtelung" der Antwort tiefer ist als die erwartete Antwort. Somit kommt es zu meinem Fehler.
    Das eigentliche Problem wurde bisher noch nicht gelöst, ein Workaround ist aber, das Serverskript vom DIYHUE Server anzupassen, so wie es im Bugreport beschrieben ist. Dazu habe ich mir das Skript /opt/hue-emulator/HueEmulator3.py editiert und in Zeilen 1855/1856 die genannten Änderungen eingetragen.


    Also vorher:


    Code
    for key, value in put_dictionary.items():
                    response_dictionary.append({"success":{response_location + key: value}})



    Und nachher:


    Code
    for key, value in put_dictionary.items():
                    if isinstance(value,dict):
                        second_key = list(value.keys())[0]
                        response_location += key + '/' + second_key
                        response_dictionary.append({"success":{response_location: value[second_key]}})
                    else:
                        response_dictionary.append({"success":{response_location + key: value}})


    Aufzupassen ist hier mit der Formatierung / Nutzung von Leerzeichen und Tabs. Es sollten zum Einrücken nur Leerzeichen benutzt werden und keine Tabs (Skript startet sonst nicht).


    Es empfiehlt sich, das originale Skript zu kopieren, damit man es notfalls wiederherstellen kann. Ladet ihr es zum Editieren runter und wieder hoch, nicht vergessen mit chmod +x HueEmulator3.py die Berechtigungen zum Ausführen wieder zu setzen.


    Je nach System (bei mir Debian, Ubuntu identisch) stoppt man zuvor den Dienst mit systemctl stop hue-emulator und zum Testen würde ich nach der Änderung das Skript mit /opt/hue-emulator/HueEmulator3.py --debug starten.


    Bekommt Ihr nach dem Start einen dieser Fehler


    Code
    root@diyhue:/opt/hue-emulator# ./HueEmulator3.py --debug
      File "./HueEmulator3.py", line 1861
        response_dictionary.append({"success":{response_location + key: value}})
                          ^
    IndentationError: expected an indented block


    kontrolliert bitte Umbrüche und Leerzeichen der Einrückungen.


    Bitte beachtet, dass die angegebenen Zeilen je nach Version des DIYHUE Servers variieren können! Beim Update des Servers wird die Datei möglicherweise überschrieben.


    Die Gegenprüfung war für mich, dass danach auch noch meine anderen Entertainment-Einbindungen funktionieren. Razer Synapse Hue Integration und Hue Essentials kommen danach weiterhin an die Entertainment Api.


    Ich hoffe, ich konnte es mit meinem Halbwissen einigermaßen passabel beschreiben :)

  • Moin zusammen,


    ich erinnerte mich noch, dass ich hier mal den Tipp bzgl. Problemen zwischen Hyperion.NG und DIYHue hinterlassen hatte - den ich heute gerne aktualisieren möchte.


    Da ich heute in irrer Bastellaune war, habe ich mal Hyperion.NG auf 2.0.14 und den DIYHue Server auf 2022.08 gebracht. Danach stieß ich wieder auf alte Bekannte:


    Code
    2023-01-05T14:25:09.714Z [LEDDEVICE|DiyHue] (ERROR) Device disabled, device 'philipshue' signals error: 'set stream to false: Bridge response is not Valid'
    2023-01-05T14:25:09.716Z [LEDDEVICE|DiyHue] (DEBUG) (LedDevicePhilipsHue.cpp:1324:stopStream()) Stop Entertainment stream. Retrying...
    2023-01-05T14:25:10.237Z [LEDDEVICE|DiyHue] (ERROR) Device disabled, device 'philipshue' signals error: 'set stream to false: Bridge response is not Valid'
    2023-01-05T14:25:10.239Z [LEDDEVICE|DiyHue] (DEBUG) (LedDevicePhilipsHue.cpp:1324:stopStream()) Stop Entertainment stream. Retrying...
    2023-01-05T14:25:10.761Z [LEDDEVICE|DiyHue] (ERROR) Device disabled, device 'philipshue' signals error: 'set stream to false: Bridge response is not Valid'
    2023-01-05T14:25:10.763Z [LEDDEVICE|DiyHue] (ERROR) Device disabled, device 'philipshue' signals error: 'The Entertainment stream did NOT stop. Give up.'


    Dabei stellte ich fest, dass die o.g. Anpassung nicht mehr in der "HueEmulator3.py" erfolgen muss, sondern in der "restful.py" im Unterverzeichnis "flaskUI". Außerdem hat sich ein Variablenname geändert.


    Die Zeilen 317 und 318 müssen ausgetauscht werden:


    Code
            for key, value in putDict.items():
                responseList.append({"success": {response_location + key: value}})


    gegen:


    Code
            for key, value in putDict.items():
                if isinstance(value,dict):
                    second_key = list(value.keys())[0]
                    response_location += key + '/' + second_key
                    responseList.append({"success":{response_location: value[second_key]}})
                else:
                    responseList.append({"success": {response_location + key: value}})

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!