将 Philips Hue 与端口转发结合使用

Posted

技术标签:

【中文标题】将 Philips Hue 与端口转发结合使用【英文标题】:Using Philips Hue with Port Forwarding 【发布时间】:2016-08-16 10:39:04 【问题描述】:

我正在开发利用 Philips Hue SDK 的 android 项目。

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

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

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

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

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

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

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

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

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

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

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

RE:“使用 RESTful API 推出您自己的 SDK 实现”这就是我最终所做的。我厌倦了为 Objective-c 使用 Hue API,并发现将 JSON 读取和写入到 hue 桥,以及将集线器 JSON 解析为对象以为我的应用程序提供数据模型要容易得多,它使用相同的模型和解析代码在 OS X 和 ios 上运行。

以上是关于将 Philips Hue 与端口转发结合使用的主要内容,如果未能解决你的问题,请参考以下文章

执行 UPNP 扫描不会返回 Philips Hue Bridge

如何使用 philips hue API 创建“场景”

LCX端口转发源码分析

如何创建像 Philips Hue 这样的颜色选择器圈

PHILIPS HUE APPLE SDK 的问题

关于端口映射的问题(如何将端口转发给域名)?