2016-04-22 65 views
8

我正在开发利用该Philips Hue SDK的Android项目。将Philips Hue与端口转发功能结合使用

我已经实现了一些功能,以便我可以成功控制灯光,但我也试图让应用程序在用户离开家时控制灯光。

我已经设置了端口转发,这样我就可以通过端口80连接到我的公共IP地址,并将它转发给网桥。

这个想法是,用户连接到网桥并使用其本地IP地址上的网桥进行身份验证。用户可以输入外部地址。

我有一个功能,当连接到网桥时,我检查用户是否连接了Wifi,并且他们是否在他们自己的家庭WiFi上,然后设置用户本地桥接网桥地址的PHAccessPoint的IP地址。

如果用户不在wifi上,或者他们只是在家里的wifi上,那么PHAccessPoint的IP地址会更新为用户输入的内容,因为他们是外部地址。

当我这样做时,我一直得到桥没有响应,没有连接或桥已经连接,这种情况继续发生。即使在错误处理程序中,如果我的网桥没有响应或未连接,我确保断开PHAccessPoint并尝试再次重新连接。

我试过禁用心跳间隔或增加它,它没有区别。

但是,如果我在无线上,但仍然通过我的公共IP地址连接它的工作原理,我只有通过移动数据才能得到这个问题。

是否有任何技巧使这项工作我见过其他应用程序做类似的事情,但它不是开源的,所以不能看到他们是如何实现它。

我知道我可以注册到我在圣诞节前做过的飞利浦Hue Remote API,但是我没有回复他们。

感谢您提供的任何帮助。

回答

4

经过大量的反复试验和Android Studio能够反编译SDK,所以我可以看到一些代码,我认为它是官方SDK如何实现的限制。

基本上我认为问题是你创建一个PHAccessPoint对象并设置你的外部ip例如86.85.84.83,当您连接到网桥时,您可以成功连接并获取网桥详细信息,并将网桥配置存储为PHBridge对象。该对象包含网桥的本地网络IP,例如192.168.x.x.当您接着执行其他任何操作时,连接的网桥对象和PHAccessPoint对象不匹配,因此在尝试处理并重新连接时返回无连接错误,因为SDK已将网桥设置为连接SDK返回您已连接并最终陷入循环。

我认为解决这个问题的唯一方法是让服务器通过端口转发公开,然后将消息从服​​务器传递到本地网桥,然后通过服务器返回(因此实际网桥停留本地)或使用RESTful API推出您自己的SDK实现

+0

RE:“使用RESTful API推出您自己的SDK实现”这就是我最终做的。我已经厌倦了与Objective-C的Hue API交战,并发现只需将JSON读写到色调桥,以及将中心JSON解析为对象以为我的应用程序提供数据模型,它使用相同的模型和解析代码在OS X和iOS上运行。 –