Google 智能家居与我的物联网设备集成(需要说明)

Google Smart Home integration with my IoT device (clarification needed)

我正在寻找有关 Google 智能家居工作原理的说明。 我希望将我当前控制灯的终端设备与 Google 智能家居集成。

我的终端设备是 运行 一个使用 RTOS 的非常小的微控制器(Linux 不可用)

我是这样看的(请指正或评论)

问题

  1. 有什么方法可以在没有我自己的云服务的情况下做到这一点吗?

这是一个非常基本的总结 - 是的。

这里的关键点是向 Google 主页发出命令 而不是 让它在您的本地网络上发送消息。 Google 从他们的网络发出任何命令 - 而不是从您的设备。

这可能看起来像是一个小细节,但它不需要是您控制的 Google 与之交谈的 "cloud service"。它 需要是 public 可访问的 HTTPS 端点。这可能是一个云服务(在大多数情况下都是),一个 public 非云服务器,甚至只是一个 public URL 有一个通往你的私人网络的隧道(例如 ngrok)。

最后一个是您真正拥有自己的云服务的方法 - 您可以在本地计算机上设置控件,并使用 ngrok 建立隧道。

我认为一个具体的例子可能会有所帮助:以下是如何使用 IFTTT 等中介服务将 Google 主页连接到您的设备:

  1. 在 IFTTT 上创建一个食谱(小程序)以使用 Webhook 服务将 Google Assistant 连接到 ngrok 隧道。这允许您定义 Google 主页将识别的简单关键字词组(如 "Hey Google turn on my device")。然后小程序将调用一个 webhook - 例如ngrok - 使用您可以定义的自定义命令(如“https://myngroktunnel.ngrok.io/Control.cgi?mydevice=on”),其中 myngroktunnel 是您的 ngrok 隧道地址(见下文#2),Control.cgi 是您放置的 CGI 脚本你的微控制器(见下面#3)。

  2. 您需要在您的微控制器上安装 运行 ngrok:这将通过 ngrok 隧道将 IFTTT 小程序连接到您的微控制器,并为您提供可公开访问的 URL 将请求转发给您的微控制器。您通常会将 ngrok 隧道转发到微控制器上的特定端口,您在其中 运行 使用 CGI 脚本连接 Web 服务器(例如 Apache)以控制您的设备。 Web 上还有其他可用的安全隧道服务:ngrok 只是其中之一。因此,您不必托管自己的网络服务,但您必须使用通往可公开访问的服务的隧道。

  3. 您放置在微控制器上的网络服务器具有控制您设备的 CGI 脚本(例如,假设您有一个 Control.cgi 脚本可以打开或关闭您的设备,给出类似 mydevice=on 的命令字符串,例如 IFTTT 小程序中的挂钩是“/Control.cgi?mycommand=on”

当然,微控制器上的 RTOS 应该能够 运行ning ngrok 和网络服务器 - 这就是为什么许多人选择使用像 Raspberry Pi 这样的单板计算机的原因或 Orange Pi 运行宁一种 linux 的形式来托管和控制他们的设备。由于您设备的 RTOS 不是 linux,我建议获得一个 linux 设备,然后通过您的 LAN 将请求转发到您的 RTOS 设备。