Google 智能家居与我的物联网设备集成(需要说明)
Google Smart Home integration with my IoT device (clarification needed)
我正在寻找有关 Google 智能家居工作原理的说明。
我希望将我当前控制灯的终端设备与 Google 智能家居集成。
我的终端设备是 运行 一个使用 RTOS 的非常小的微控制器(Linux 不可用)
我是这样看的(请指正或评论)
- 据我了解,这需要我托管自己的云服务
哪个会与我当前的终端设备通信?
- 然后我的云服务将与 Google 云服务通信。
- 我的云服务定义了与多个终端设备通信的协议
- Google 智能家居定义与我的云服务对话的协议
问题
- 有什么方法可以在没有我自己的云服务的情况下做到这一点吗?
这是一个非常基本的总结 - 是的。
这里的关键点是向 Google 主页发出命令 而不是 让它在您的本地网络上发送消息。 Google 从他们的网络发出任何命令 - 而不是从您的设备。
这可能看起来像是一个小细节,但它不需要是您控制的 Google 与之交谈的 "cloud service"。它 需要是 public 可访问的 HTTPS 端点。这可能是一个云服务(在大多数情况下都是),一个 public 非云服务器,甚至只是一个 public URL 有一个通往你的私人网络的隧道(例如 ngrok)。
最后一个是您真正拥有自己的云服务的方法 - 您可以在本地计算机上设置控件,并使用 ngrok 建立隧道。
我认为一个具体的例子可能会有所帮助:以下是如何使用 IFTTT 等中介服务将 Google 主页连接到您的设备:
在 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)。
您需要在您的微控制器上安装 运行 ngrok:这将通过 ngrok 隧道将 IFTTT 小程序连接到您的微控制器,并为您提供可公开访问的 URL 将请求转发给您的微控制器。您通常会将 ngrok 隧道转发到微控制器上的特定端口,您在其中 运行 使用 CGI 脚本连接 Web 服务器(例如 Apache)以控制您的设备。 Web 上还有其他可用的安全隧道服务:ngrok 只是其中之一。因此,您不必托管自己的网络服务,但您必须使用通往可公开访问的服务的隧道。
您放置在微控制器上的网络服务器具有控制您设备的 CGI 脚本(例如,假设您有一个 Control.cgi 脚本可以打开或关闭您的设备,给出类似 mydevice=on 的命令字符串,例如 IFTTT 小程序中的挂钩是“/Control.cgi?mycommand=on”
当然,微控制器上的 RTOS 应该能够 运行ning ngrok 和网络服务器 - 这就是为什么许多人选择使用像 Raspberry Pi 这样的单板计算机的原因或 Orange Pi 运行宁一种 linux 的形式来托管和控制他们的设备。由于您设备的 RTOS 不是 linux,我建议获得一个 linux 设备,然后通过您的 LAN 将请求转发到您的 RTOS 设备。
我正在寻找有关 Google 智能家居工作原理的说明。 我希望将我当前控制灯的终端设备与 Google 智能家居集成。
我的终端设备是 运行 一个使用 RTOS 的非常小的微控制器(Linux 不可用)
我是这样看的(请指正或评论)
- 据我了解,这需要我托管自己的云服务 哪个会与我当前的终端设备通信?
- 然后我的云服务将与 Google 云服务通信。
- 我的云服务定义了与多个终端设备通信的协议
- Google 智能家居定义与我的云服务对话的协议
问题
- 有什么方法可以在没有我自己的云服务的情况下做到这一点吗?
这是一个非常基本的总结 - 是的。
这里的关键点是向 Google 主页发出命令 而不是 让它在您的本地网络上发送消息。 Google 从他们的网络发出任何命令 - 而不是从您的设备。
这可能看起来像是一个小细节,但它不需要是您控制的 Google 与之交谈的 "cloud service"。它 需要是 public 可访问的 HTTPS 端点。这可能是一个云服务(在大多数情况下都是),一个 public 非云服务器,甚至只是一个 public URL 有一个通往你的私人网络的隧道(例如 ngrok)。
最后一个是您真正拥有自己的云服务的方法 - 您可以在本地计算机上设置控件,并使用 ngrok 建立隧道。
我认为一个具体的例子可能会有所帮助:以下是如何使用 IFTTT 等中介服务将 Google 主页连接到您的设备:
在 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)。
您需要在您的微控制器上安装 运行 ngrok:这将通过 ngrok 隧道将 IFTTT 小程序连接到您的微控制器,并为您提供可公开访问的 URL 将请求转发给您的微控制器。您通常会将 ngrok 隧道转发到微控制器上的特定端口,您在其中 运行 使用 CGI 脚本连接 Web 服务器(例如 Apache)以控制您的设备。 Web 上还有其他可用的安全隧道服务:ngrok 只是其中之一。因此,您不必托管自己的网络服务,但您必须使用通往可公开访问的服务的隧道。
您放置在微控制器上的网络服务器具有控制您设备的 CGI 脚本(例如,假设您有一个 Control.cgi 脚本可以打开或关闭您的设备,给出类似 mydevice=on 的命令字符串,例如 IFTTT 小程序中的挂钩是“/Control.cgi?mycommand=on”
当然,微控制器上的 RTOS 应该能够 运行ning ngrok 和网络服务器 - 这就是为什么许多人选择使用像 Raspberry Pi 这样的单板计算机的原因或 Orange Pi 运行宁一种 linux 的形式来托管和控制他们的设备。由于您设备的 RTOS 不是 linux,我建议获得一个 linux 设备,然后通过您的 LAN 将请求转发到您的 RTOS 设备。