2016-04-22 9 views
8

Ich arbeite an einem Android-Projekt, das dieses Philips Hue SDK verwendet.Verwenden von Philips Hue mit Portweiterleitung

Ich habe einige der Funktionen implementiert, so dass ich die Lichter erfolgreich steuern kann, aber ich versuche auch, die App die Lichter zu steuern, wenn der Benutzer nicht zu Hause ist.

Ich habe Portweiterleitung eingerichtet, so dass ich über Port 80 eine Verbindung zu meiner öffentlichen IP-Adresse herstellen kann und diese an die Bridge weiterleitet.

Die Idee ist, dass der Benutzer eine Verbindung zur Bridge herstellt und sich mit der Bridge über seine lokalen IP-Adressen authentifiziert. Der Benutzer kann dann eingeben, was die externe Adresse ist.

Ich habe eine Funktion, die bei der Verbindung mit der Brücke, ich überprüfe, ob der Benutzer Wifi verbunden ist und sie auf ihrem eigenen home wifi bin ich dann die IP-Adresse des PHAccessPoint der Benutzer lokale Brücke Brücke Adresse.

Wenn der Benutzer nicht auf WLAN ist, oder sie sind aber auf dem Heim-Wifi, dann wird die PHAccessPoint IP-Adresse aktualisiert, was der Benutzer eingegeben hat, da sie externe Adresse sind.

Wenn ich dies tue, bekomme ich entweder Bridge nicht reagiert, nicht verbunden oder Bridge bereits verbunden und dies geschieht schnell. Auch wenn ich im Fehlerhandler die Bridge nicht oder nicht verbunden bekomme, vergewissere ich mich, dass ich den PHAccessPoint abkopple und versuche, die Verbindung erneut herzustellen.

Ich habe versucht, das Heartbeat-Intervall zu deaktivieren oder zu erhöhen und es macht keinen Unterschied.

Wenn ich aber auf dem WLAN bin aber trotzdem über meine öffentliche IP-Adresse verbinde funktioniert es, ich bekomme dieses Problem nur, wenn ich durch mobile Daten gehe.

Gibt es irgendwelche Tricks, um diese Arbeit zu machen Ich habe andere Apps gesehen, die etwas ähnliches tun, aber es ist nicht Open Source, also kann ich nicht sehen, wie sie es implementiert haben.

Ich bin mir bewusst, dass ich mich bei Philips Hue Remote API anmelden kann, was ich vor Weihnachten getan habe, aber ich habe keine Antwort von ihnen erhalten.

Vielen Dank für Ihre Hilfe.

Antwort

4

Nach vielen Versuch und Irrtum und Android Studio in der Lage, das SDK zu dekompilieren, so dass ich etwas Code sehe ich denke, es ist eine Einschränkung, wie das offizielle SDK implementiert ist.

Grundsätzlich denke ich, das Problem besteht darin, dass Sie ein PHAccessPoint-Objekt erstellen und Ihre externe IP z. 86.85.84.83, wenn Sie eine Verbindung zur Bridge herstellen, verbinden Sie sich erfolgreich und rufen Sie die Bridging-Details ab, und die Bridge-Konfiguration wird als PHBridge-Objekt gespeichert. Dieses Objekt enthält die lokale Netzwerk-IP der Brücke, z.B. 192.168.x.x. Wenn Sie dann zu etwas anderem kommen, stimmen das verbundene Brückenobjekt und das PHAccessPoint-Objekt nicht überein, und daher wird kein Verbindungsfehler zurückgegeben, wenn versucht wird, dies zu handhaben und erneut zu verbinden, da das SDK eine Brücke als verbunden eingerichtet hat SDK gibt zurück, dass Sie bereits verbunden sind und Sie in einer Schleife stecken bleiben.

Ich denke, der einzige Weg um dies zu sein wäre entweder einen Server, der über Port-Forwarding ausgesetzt ist und die Nachrichten werden vom Server an die lokale Brücke weitergegeben und dann wieder durch den Server (so bleibt die eigentliche Brücke lokal) oder um eine eigene Implementierung des SDK mit der RESTful-API zu rollen

+0

RE: "rollen Sie Ihre eigene Implementierung des SDK mit der RESTful API" Das ist, was ich getan habe.Ich habe es satt, mit der Hue API für objective-c zu kämpfen, und fand heraus, dass es viel einfacher war, einfach JSON in die hue-Bridge zu schreiben und zu lesen, sowie den JSON-Hub in Objekten zu analysieren, um das Datenmodell für meine Anwendung bereitzustellen. Das Programm läuft unter OS X und iOS mit dem gleichen Modell und Parsing-Code. –

Verwandte Themen