我正在寻找有关Google智能家居如何运作的一些说明。 我希望将我当前控制灯光的终端设备与Google Smart Home集成。
我的终端设备正在运行一个使用RTOS的非常小的微控制器(Linux不可用)
以下是我的看法(请更正或评论)
问题
答案 0 :(得分:2)
这是一个非常基本的事情摘要 - 是的。
关键是向Google Home发出命令不让它在本地网络上发送消息。 Google会从其网络发出任何命令,而不是从您的设备发出命令。
这可能看起来像一个小细节,但它不需要是您控制Google与之交谈的“云服务”。 需要是可公开访问的HTTPS端点。这可能是云服务(在大多数情况下也是如此),公共非云服务器,甚至只是一个到您的专用网络的隧道的公共URL(例如使用ngrok)。
最后一步是如何使用自己的云服务 - 您可以在本地计算机上设置控件,并使用ngrok建立隧道。
答案 1 :(得分:1)
我认为一个具体的例子可能是有益的:这里是如何使用像IFTTT这样的中介服务将Google Home连接到您的设备:
在IFTTT上创建一个配方(applet),使用Webhook服务将Google智能助理连接到ngrok隧道。这允许您定义Google Home将识别的简单关键字词组(例如"嘿Google打开我的设备")。然后小程序将调用webhook - 例如ngrok - 使用您可以定义的自定义命令(例如" https://myngroktunnel.ngrok.io/Control.cgi?mydevice=on"),其中myngroktunnel是您的ngrok隧道地址(参见下面的#2),Control.cgi是CGI脚本,你已经放在你的微控制器上了(见下面#3)。
您需要在微控制器上安装并运行ngrok:这将通过ngrok隧道将IFTTT小程序连接到您的微控制器,并为您提供可公开访问的URL,以便将请求转发给您的微控制器。您通常会将ngrok隧道转发到微控制器上的特定端口,在该端口上运行带有CGI脚本的Web服务器(例如Apache)来控制您的设备。网上还有其他安全隧道服务:ngrok只是其中之一。因此,您不必托管自己的Web服务,但必须使用隧道来访问公共服务。
您放在微控制器上的Web服务器具有控制您设备的CGI脚本(例如,假设您有一个Control.cgi脚本可以打开或关闭您的设备,给定一个命令字符串如mydevice = on,例如IFTTT applet中的钩子是" /Control.cgi?mycommand = on"
当然,微控制器上的RTOS能够运行ngrok和web服务器 - 这就是为什么很多人选择使用像Raspberry Pi或Orange Pi这样的单板计算机来运行一种形式的linux来托管并控制他们的设备。由于您的设备的RTOS不是Linux,我建议使用一个Linux设备,然后通过您的LAN将请求转发到您的RTOS设备。