我想构建一个类似于Nest Thermostat的基于Raspberry Pi(RPi)的设备,除了我想控制灯开关。我知道我可以轻松地在RPi上编写Node.js脚本,然后将其连接到我的本地路由器,并通过连接到同一路由器的PC来控制它。
但是,我想让它更像巢。我希望能够通过像Heroku这样的云提供商控制不同子网中的20个(或更多)RP。
Nest恒温器不需要用户在其路由器上打开端口,以便Nest服务器可以与其通信。
如果不在客户的路由器中启用端口转发,Nest如何通过网络控制客户的恒温器?
答案 0 :(得分:5)
博客文章Nest Thermostat API using Node JS and Nest API Update讨论了API 在恒温器和巢实验室服务器之间。特别是:
API主要使用发布到其Web服务器的JSON格式数据。
所以有你的答案。通过使用HTTPS定期将数据发布到嵌套Web服务器,Nest可以避免让用户打开其路由器上的任何端口。
<小时/> 对于它的价值,博客文章中的非官方API(在node.js!中)可以在github上找到:Unofficial Nest API on Node。
答案 1 :(得分:0)
我认为恒温器会定期发出一个带恒温器序列号的请求来嵌套。它可能会在http标头设置为无限或更可能的情况下超时,如果没有该设备的命令进入,则嵌套服务器只需在一分钟左右后关闭连接。每当嵌套关闭连接时,恒温器会打开一个新的连接。当命令请求带有序列号时,它会快速查找以找到当前连接到该恒温器的线程。该命令在当前恒温器请求的有效负载中发送,执行该连接,连接关闭,恒温器打开新的嵌套请求。
答案 2 :(得分:0)
在HTML 5标准中查看eventSource。它可以完成所需的一切。