我打算为 Amazon Alexa 构建一套技能,将与在我家的 RaspberryPi 上运行的自定义软件套件集成。

我正在努力弄清楚如何让 Echo/Dot 本身直接对 raspberry pi 进行 API 调用 - 无需通过互联网,因为目标设备除了内部网连接之外什么都没有 - 它能够接收来自本地网络上的设备的命令,但无法通过世界访问。

根据我的阅读,典型的工作流程如下

Echo -> Alexa Service -> Lambda

Lambda 函数将向智能家居设备返回一组数据;使用这个返回值

最佳答案

我有同样的问题,我的解决方案是将SQS用作消息总线,这样就不需要从Internet上访问我的RaspberryPi。

Echo <-> Alexa Service <-> Lambda -> SQS -> RaspberryPi
                             A                 |
                             +------ SQS <-----+

只要以下条件,它就可以正常工作:
  • 您可以在RaspberryPi上启用SQS的长时间轮询(20秒),并将每个请求的最大消息数设置为1
  • 您没有在Alexa和RaspberryPi之间往返的并发消息

  • 这带来了以下好处:
  • 的最大消息大小为1,即使队列中有一个长消息超时,即使队列中有一条消息可用,SQS请求也将立即返回。
  • ,整个月一次仅向SQS进行一次长时间轮询,这符合100万个SQS免费套餐的要求。
  • 没有特殊的防火墙权限,无法从Internet访问您的RaspberryPi,因此从lambda进行的RaspberryPi连接始终“可以正常工作”。
  • 比将RaspberryPi暴露于互联网更安全,因为没有开放的端口可供恶意程序攻击
  • 10-04 22:40