4

我想构建一个类似于 Nest Thermostat 的基于 Raspberry Pi (RPi) 的设备,只是我想控制电灯开关。我知道我可以轻松地在 RPi 上编写 Node.js 脚本,然后将其连接到我的本地路由器并使用连接到同一路由器的 PC 来控制它。

但是,我想让它更像一个 Nest。我希望能够通过像 Heroku 这样的云提供商跨不同子网控制 20 个(或更多)RP。

Nest 恒温器不需要用户打开路由器上的端口,以便 Nest 服务器可以与其通信。

Nest 如何在不启用客户路由器中的端口转发的情况下通过网络控制客户的恒温器?

4

3 回答 3

5

博客文章Nest Thermostat API using Node JS and Nest API Update讨论了恒温器和 Nest 实验室服务器之间的 API。尤其是:

API 主要使用 POST 到其 Web 服务器的 JSON 格式数据。

所以有你的答案。通过使用 HTTPS 定期将数据发布到 Nest Web 服务器,Nest 能够避免用户打开其路由器上的任何端口。


值得一提的是,博客文章中的非官方 API(在 node.js 中!)可在 github 上找到:Unofficial Nest API on Node

于 2013-03-20T18:41:53.907 回答
0

我认为恒温器会定期发布带有恒温器序列号的请求以进行嵌套。它可能在 http 标头中设置为无限或更可能有超时,如果没有针对该设备的命令进入,nest 服务器会在一分钟左右后简单地关闭连接。每当nest 关闭连接时,恒温器就会打开一个新连接。当命令请求带有序列号时,它会快速查找以找到当前连接到该恒温器的线程。该命令在当前恒温器请求的负载中发送,执行后,连接关闭,恒温器打开一个新的请求嵌套。

于 2013-08-28T17:45:12.323 回答
0

看看 HTML 5 标准中的 eventSource。它做所有需要的事情。

于 2014-12-21T20:49:43.367 回答