2016-04-22 23 views
8

Sto lavorando a un progetto Android che utilizza l'SDK Philips Hue.Utilizzo di Philips Hue con Port Forwarding

Ho implementato alcune delle funzionalità in modo da poter controllare correttamente le luci, ma sto anche cercando di far sì che l'app controlli le luci quando l'utente è fuori casa.

Ho impostato il port forwarding in modo che possa connettermi al mio indirizzo IP pubblico tramite la porta 80 e lo inoltra al bridge.

L'idea è che l'utente si connetta al bridge e autentica con il bridge sui propri indirizzi IP locali. L'utente è quindi in grado di inserire ciò che è l'indirizzo esterno.

Ho una funzione che durante la connessione al bridge, controllo se l'utente ha connesso il wifi e sono sul proprio wifi di casa. Quindi ho impostato l'indirizzo IP del PHAccessPoint sull'indirizzo del bridge bridge locale dell'utente.

Se l'utente non è sul wifi, o lo è, ma sul wifi di casa, l'indirizzo IP di PHAccessPoint viene aggiornato a ciò che l'utente ha inserito poiché si tratta di un indirizzo esterno.

Quando eseguo questa operazione, continuo a ricevere Bridge che non risponde, non connesso o bridge già collegato e ciò continua a verificarsi rapidamente. Anche se nel gestore degli errori, se ricevo il bridge che non risponde o non è connesso, mi assicuro di disconnettere il PHAccessPoint e tentare di riconnetterlo di nuovo.

Ho provato a disattivare l'intervallo di heartbeat o ad aumentarlo e non fa alcuna differenza.

Se tuttavia sono collegato al Wi-Fi ma continuo a connettersi tramite il mio indirizzo IP pubblico, ho riscontrato questo problema solo se si passa attraverso i dati mobili.

Ci sono trucchi per fare questo lavoro Ho visto altre app fare qualcosa di simile ma non è open source quindi non vedo come l'hanno implementata.

Sono consapevole del fatto che posso registrarmi all'API Philips Hue Remote che ho fatto prima di Natale ma non ho ricevuto alcuna risposta da parte loro.

Grazie per l'aiuto che puoi fornire.

risposta

4

Dopo un sacco di tentativi ed errori e Studio Android è in grado di decompilare l'SDK in modo da poter vedere alcuni del codice penso che sia una limitazione di come viene implementato l'SDK ufficiale.

Fondamentalmente penso che il problema è che si crea un oggetto PHAccessPoint e si imposta l'ip esterno, ad es. 86.85.84.83, quando ti connetti al bridge, ti connetti e ottieni i dettagli del bridge e memorizza la configurazione del bridge come un oggetto PHBridge. Questo oggetto contiene l'IP della rete locale del bridge, ad es. 192.168.x.x. Quando poi si fa qualcos'altro, l'oggetto bridge connesso e l'oggetto PHAccessPoint non corrispondono e quindi viene restituito un errore senza connessione, quando si tenta di gestirlo e riconnettersi, perché l'SDK ha un bridge configurato come connesso SDK restituisce che sei già connesso e finisci per rimanere bloccato in un loop.

Penso che l'unico modo per aggirare questo sarebbe avere un server che viene esposto tramite il port forwarding e che i messaggi vengono passati dal server al bridge locale e quindi tornare indietro anche se il server (quindi il ponte reale rimane locale) o per implementare la propria implementazione dell'SDK utilizzando l'API RESTful

+0

RE: "eseguire la propria implementazione dell'SDK utilizzando l'API RESTful" Questo è quello che ho concluso.Mi sono stancato di combattere con l'API Hue per l'obiettivo-c, e ho scoperto che era molto più semplice leggere e scrivere JSON sul bridge hue, nonché analizzare l'hub JSON in oggetti per fornire il modello dati per la mia applicazione, che funziona su OS X e iOS usando lo stesso modello e il codice di analisi. –

Problemi correlati