使用飞利浦Hue端口转发

时间:2016-04-22 17:22:27

标签: android philips-hue

我正在研究利用飞利浦Hue SDK的Android项目。

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

我已设置端口转发,以便我可以通过端口80连接到我的公共IP地址,然后将其转发到网桥。

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

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

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

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

我已尝试禁用心跳间隔或增加心跳间隔,但没有任何区别。

但是,如果我在wifi上但仍然通过我的公共IP地址连接它可以工作,我只会遇到这个问题,如果通过移动数据。

是否有任何技巧可以完成这项工作我已经看到其他应用程序做了类似的事情,但它不是开源的,所以无法看到它们是如何实现它的。

我已注册飞利浦Hue Remote API,但我没有回复。

1 个答案:

答案 0 :(得分:4)

经过大量试验和错误,Android Studio能够反编译SDK,因此我可以看到一些代码,我认为这是对官方SDK实现方式的限制。

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

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