8

我正在开发利用飞利浦 Hue SDK 的 Android 项目。

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

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

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

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

如果用户不在 wifi 上,或者他们在家庭 wifi 上,则 PHAccessPoint IP 地址将更新为用户输入的外部地址。

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

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

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

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

我已经注册了 Philips Hue Remote API,但我没有收到他们的回复。

4

1 回答 1

5

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

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

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

于 2016-04-29T10:35:45.287 回答