使用 Amazon Alexa 自定义传感器读数

物联网 智能家居 MQTT 亚历克斯 传感器 节点红色
2021-06-10 10:56:43

TLDR:
我想通过询问 Alexa 来查询当前的湿度传感器读数:

“现在的湿度是多少,Alexa?”

答案应该类似于:

“当前湿度为 56.7%”

这是我的设置:

  • 我有一堆带有各种传感器的 ESP8266,它们通过 WLAN 上的 MQTT 发布传感器读数
  • MQTT 代理在同一 LAN 中的 Raspberry Pi 上运行
  • 我还在 Raspberry Pi 上运行了 NodeRed,我在其中使用了Node-RED Alexa Home Skill Bridge,它非常适合向网络中的不同节点发送命令

我在找什么:

  • 我希望能够向 Alexa 询问我的任何传感器的当前传感器读数,并让她的回答具有正确的值
  • 理论上,我理解 Node-RED Alexa Home Skill Bridge 至少应该提供查询设备温度读数的机会,当您在美国/英国时。
  • 但是,尽管我尝试过,但这似乎不适用于我的德语 Alexa
  • 此外,我当然也更愿意直接询问 Alexa 例如当前的湿度,而不必滥用温度查询

有什么方法可以实现我打算做的事情,例如通过使用现有的技能或 NodeRed 扩展?

2个回答

Alexa 目前没有任何支持湿度的设备类型,因此使用 Smart Home Skills 无法做到这一点。1

这是设备类型及其功能列表

您可以创建自己的常规技能,但这意味着询问诸如“ Alexa,询问 FooBar 湿度是多少”之类的问题。Node-RED有一个节点可以做普通技能,但它已经被它的作者抛弃了多年。您可以仅使用 HTTP-in/HTTP-response 节点来实现您自己的节点,但这需要做更多的工作。

1 Smart Home Skills 有一项新功能,允许您使用CustomIntent添加自己的自定义命令这目前仅处于测试阶段,如果允许进行测试,则需要构建自定义智能家居技能。

(Node-RED Alexa Home Skill Nodes 的作者)

最后,我能够实现我的目标,即能够查询 Alexa 以获取自定义传感器读数,而无需对我自己的技能进行编程。


我的设置中使用了以下元素

  1. 一个树莓派在我家局域网节点RED安装就可以了
  2. 一些来源的传感器信号(在我的情况下的NodemcuDHT22经由MQTT发送湿度读数到树莓PI,其中传感器MQTT代理正在运行)
  3. 一个Amazon Echo(不需要和树莓派在同一个局域网中!)
  4. @hardillbNode-RED Alexa Home Skill Bridge节点
  5. Alexa的远程控制shell脚本,可以让你发出任何文本到语音命令你的Alexa设备

以下是需要采取步骤

  1. 在@hardillb 的Node-RED Alexa Home Skill Bridge 中注册新设备任何设备和名称组合都可以。我选择了一个智能插头并将其命名为“Humidity_at_home”。
  2. 现在让 Alexa搜索新设备。
  3. 在 Alexa 应用程序创建一个Alexa 例程,您可以在其中使用自定义语音触发器(在我的例子中:“Alexa,当前湿度水平是多少”)打开虚拟设备“Humidity_at_home”。
  4. 在 Node-RED 中,为设备“Humidity_at_home”配置一个 Alexa Home Skill Bridge 节点根据来自 Alexa 的命令(“Humidity_at_home”插件开/关)msg.command,节点输出元素将具有值TurnOnRequest/ TurnOffRequest
  5. 在 node-red 中,当“Humidity_at_home”节点被触发并输出时msg.command = "TurnOnRequest"通过exec 节点向 Echo 设备发出文本到语音命令,调用Alexa-remote-control shell 脚本,例如使用以下命令:

    alexa_remote_control.sh -d "Your Echo's name" -e speak:'Here is the text string you construct as answer to your Alexa request for the humidity level value'
    

不用说,您可以使用任何类型的虚拟设备和设备的任何类型的设置来触发 node-red 中的操作。