23384浏览
查看: 23384|回复: 0

[M10项目] 动画片创意实现:Rick's Wrist 瑞克腕表:远程控制智能家居

[复制链接]
本帖最后由 zoey不种土豆 于 2024-11-1 17:04 编辑

项目前言
在本项目中,作者受到科幻动画片《瑞克和莫蒂》中主人公——天才科学家瑞克制作的Meeseeks Box的启发,基于行空板,制作了一个可以从任何地方控制家里智能家居的ai“腕表”。
Meeseek盒子是一个小型设备,当按下按钮时,可以召唤出Meeseek先生,他们是一个蓝色的、拥有人类形态的生物,专门用来帮助人们完成特定的任务。盒子的使用非常直接:只需按下盒子上的按钮,Meeseek先生就会出现,并询问用户需要什么帮助。用户提出要求后,Meeseek先生会尽其所能去完成这个任务。

动画片创意实现:Rick


准备清单
硬件
Notecarrier F
行空板M10
M5Stack CM4Stack 开发套件(或树莓派)
充电宝*1

软件
Mind+
Arduino IDE
Thonny

灵感来源
每年,我都会举办万圣节派对。今年的主题是“mad”(疯狂的),于是一个疯狂的想法产生了——本次作品的想法始于我的上一个项目:—用行空板语音命令实现橱柜自动开关中,扩展了许多额外的自定义功能的智能家居的设置,它可以控制所有的智能家居设备,还使用 Blues 以实现远程操控。为了让这个项目可以解决更多的问题,我还借助了行空板中 AI 功能。

项目构思
行空板用来发出指令,用 Blues Wireless 来制作它,以便我们可以远程发出命令,并使用 Flask 服务器让我们可以控制智能家居设备,包括自定义设备。Flask 服务器充当命令中心,管理设备交互、AI 处理和 API 集成,以方便定制和功能集成。以上动作,让 ai 指令和更复杂的逻辑都在服务器上处理。把它添加到我们服务器的所有简洁的新功能中,但我们首先需要一种方法来执行命令。
语音指令
以“butler”开头的语音命令作为行空板的触发词。之前的情况是,你必须快速说完指令,否则它会把指令分成多个段。我在这里大幅度加强了语音命令处理逻辑,现在这个问题已经解决了,且运行良好。当行空板识别出指令后,还会显示该指令的文本,这样就能显示出指令实际发送的时间,因为较长的指令有时需要一些时间来处理。
由于行空板有内置按钮,我添加了几行内置指令,以便从两个侧面按钮触发。现在回到我万圣节 Rick 服装的一部分,所以我将它们命名为“Halloween 1 and 2”(万圣节 1 和 2),稍后会用它来激活设备。

动画片创意实现:Rick

项目搭建
回到项目伊始,项目的初始工作名称是“远程遥控器”,即我们可以从任何地方控制我们的智能家居。这就是 Blues 发挥作用的地方。Blues Notecard 可以设置,而无需仅依赖本地 wifi,从而实现真正的远程功能。首先,python 库是 note-python 的,因此我们需要将它包含在我们的行空板项目中。
动画片创意实现:Rick

通过 USB 连接设备。接下来是让它发挥作用。我使用的是 Notecarrier-F,可以查询快速入门指南。首先是创建项目。单击右上角的姓名,转到 View Projects (查看项目),然后单击 Create Project (创建项目)。

动画片创意实现:Rick

这将为你提供以后需要的项目 ID。快速入门指南用于连接设备并与项目一起使用。在 Blues 项目中,创建新路线。我们将使用第一个选项,其中包括 Webhook。
动画片创意实现:Rick
按需要重命名你的路线,我们在这里的主要部分是 url。目前为止,与 Flask 服务器的交互一直通过本地 wifi 进行。注意,我们在使用 Blues 之前要检查 wifi。
为了能从外部访问服务器,我尝试了一些选项,最终使用免费注册的 Local Tunnel 成功了。
安装,只需在你的服务器上运行以下命令,我使用的是树莓派。
  1. npm install -g 本地隧道
复制代码
然后启动你的服务器,我喜欢的功能是你可以指定你的子域。这使它成为你自己的自定义域,但也确保了如果 Local Tunnel 服务器停止,你不需要在 Blues 端更新 url。
  1. lt --port 5000 --subdomain <你的子域在这里>
复制代码
这样,你就可以启动运行一个可以从外部攻击的服务器。我们还需要在 Blues 的 url 中包含主题,因此它应该看起来像这样:
  1. https://<你选择的子域>.loca.lt/command
复制代码
动画片创意实现:Rick
这样,你就可以随时随地使用指令访问服务器。

动画片创意实现:Rick
智能家居设备交互 - The Nest

考虑到所有这些都导致我们能够控制智能家居设备,我们首先需要智能家居设备进行交互。然而,设置控制商店购买的智能家居设备的能力明显比我们预期的要复杂得多。
我希望在家中可用的一个特定功能涉及我的 Nest 恒温器,因此我特别想与它们互动。

让我们快速了解如何设置 Nest 恒温器,以便我们可以从 Flask 服务器访问它:
转到 Google Cloud Console 并创建一个新项目。导航到API和服务>库并启用智能设备管理API。
从API和服务>凭据中,选择创建凭据,然后选择OAuth客户端ID。我们需要能够在我们的程序中进行身份验证,我们将使用这些凭证进行身份验证。
可以下载 client_secrets 文件以在程序中引用和/或记下你的client_id和client_secret。
动画片创意实现:Rick
接下来转到 Device Access Console,设置一个新项目,并复制的 Enterprise ID。
动画片创意实现:Rick

这是我花了很长时间才弄清楚的部分。你需要为特定设备授予权限。我发现最简单的方法是通过以下 url。显然,你要在网址中填写自己的项目 ID、重定向 uri 和客户端 ID,但这样就可以设置权限,你的项目才可以真正运行。如果不这样做,命令可以正常工作,但没有可交互的设备。
动画片创意实现:Rick

自定义功能
如前所述,服务器方面有很多困难的工作。我希望 Nest 能够调整的主要原因不是简单地通过语音命令改变温度 - 这已经可以通过现有设备完成。目标是添加一个非常好的便利功能。
我家楼上的空调声音很大,根本不利于录制。所以,我把一个函数放在一起,我说 “I want to record in x time”。它解析该时间,包括一堆可能的选项,例如 “in an hour”,然后设置几个计时器。它会一直打开空调,直到需要录音,它还会在录音前一分钟打开我的电脑,这样我就可以抢占先机。这是我添加的主要自定义功能,但也包含一个命令,用于打开我的计算机以及设置指定 Nest 恒温器的温度。


让 AI 控制我的智能家居
我不知道这是否是一个好主意,但我觉得这件事情很有趣。
添加这个的原因是瑞克的小工具似乎可以做任何事情。实际上,我无法针对每种可能的情况预测和编程功能。然而,随着我添加越来越多的智能小工具,无论是否是定制的,Ai都可以被用来以最适合我们要求它做什么的方式命令这些设备。
在实际的 AI 部分之前,我添加到服务器的其他自定义功能之一是更新智能设备列表的函数。为了、利用Ai来控制智能家居设备,我们向它传递它的指令、它应该发生的命令、它可以使用的所有智能设备的列表,以及我们期望从它返回的确切格式。
为此使用了Chatgpt-4,它有最新的逻辑,我希望它在复杂请求的情况下真正考虑最佳方法。

动画片创意实现:Rick
要使用该功能,我们使用 ai 启动命令。包括我们的触发词 “butler” ,一个试验是 “butler ai,关闭楼下所有的灯。”然后,它应该识别出它认为应该关闭的灯,向我们发送要执行的操作,然后 Flask 服务器将这些命令传递给相关设备。

总结
动画片创意实现:Rick
Arduino 代码非常简单,但值得注意的是,我更改了自定义设备侦听的主题,这样我们就不会陷入服务器发布到它正在侦听的主题的无限循环中。我可能没有用车库里找到的东西建造一艘宇宙飞船,但我们的家现在比以往任何时候都更智能,现在甚至可以让 AI 控制它。希望你喜欢 - 祝玩得开心!

原文链接:Rick's Wrist - 随时随地控制您的智能家居
项目作者:donutsorelse
发表时间:2024.10.31

延伸阅读:

用行空板语音命令实现橱柜自动开关

rick11.png
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail