我打算为Amazon Alexa构建一套技能,这些技能将与我家中在RaspberryPi上运行的自定义软件套件集成。
我正在努力弄清楚如何让Echo / Dot本身直接对raspberry pi进行API调用 - 无需通过互联网,因为目标设备将只有 Intranet connection - 它将能够从本地网络上的设备接收命令,但无法通过世界访问。
根据我的阅读,典型的工作流程如下
nm -f label_image | grep event_base
U _event_base_dispatch
U _event_base_new
Lambda函数将向智能家居设备返回一团数据;使用此返回值
是否可以,在收到lambda的响应后,如何让Alexa设备自己向本地网络上的设备发出API请求?
答案 0 :(得分:7)
我有同样的问题,我的解决方案是使用SQS作为消息总线,这样我的RaspberryPi就不需要从互联网上访问。
Echo <-> Alexa Service <-> Lambda -> SQS -> RaspberryPi
A |
+------ SQS <-----+
只要符合以下条件,这项工作正常:
这样可以带来以下好处:
答案 1 :(得分:2)
您可以尝试使用AWS IoT:
Echo <-> Alexa Service <-> Lambda <-> IoT <-> RaspberryPi
我虽然将此用于我的Alexa RasberryPi项目,但放弃了这个想法,因为AWS IoT不提供永久免费套餐。但免费等级不再是一个问题,因为亚马逊现在提供Alexa AWS促销信用。 https://developer.amazon.com/alexa-skills-kit/alexa-aws-credits
答案 2 :(得分:2)
一种可能是在rPi上安装node-red。 Node-red具有插件(https://flows.nodered.org/node/node-red-contrib-alexa-local)来模拟Philips的色相,并使Alexa直接与其对话。这是即时响应。缺点是它仅适用于3个命令:on
,off
,set to x %
。对于控制灯光,阴影和空调的软件/设备非常有用。
答案 3 :(得分:1)
前一段时间在this论坛上得到了答案,我不敢告诉你情况自那以后没有改变:
Alexa基于云,需要访问互联网/亚马逊服务器才能运行,因此您无法在没有外部访问权限的情况下在内部网中使用它。
答案 4 :(得分:1)
我曾经使用过几种解决方法。
第一种方法是我使用过的方法: 我设置了If This That That(IFTTT)来监听来自Alexa的特定短语,然后通过Telegram安全聊天/消息服务传输命令,我在那里使用了聊天机器人#34;在我的树莓PI上运行,阅读并处理这些消息。
我最近看到的第二种方法是使用IFTTT将行添加到谷歌电子表格中,树莓派可以监控并采取行动。
我对这些方法的性能/延迟并不特别满意,但如果我使用类似的方法编写自定义Alexa服务,它至少可以消除IFTTT延迟。
答案 5 :(得分:0)
您可以使用代理来实现此目的。 BST有一个工具,我目前使用那个http://docs.bespoken.tools/en/latest/commands/proxy/
因此,您可以使用本地计算机而不是使用Lambda
。
基本上它变成了Echo -> Alexa Service -> Local Machine
将npm bst安装到本地计算机https://www.npmjs.com/package/bespoken-tools
npm install bespoken-tools --save
转到项目index.js文件夹并运行代理命令
bst proxy lambda index.js
这会给你一个网址如下:
https://proxy.bespoken.tools?node-id=xxx-xxx-xxx-xxx-xxxxxxxx
现在转到developer.amazon上的alexa技能,然后点击配置你的技能。
选择您的服务端点为https并输入由BST打印的网址
然后单击“保存”,然后将本地计算机作为最终结束点。
答案 6 :(得分:0)
只需使用https://ngrok.com/之类的服务在您的rPi中打开SSH隧道,然后作为端点或通过lambda与之通信即可。