背景
迄今为止,已经有相当多的语音助手可以在智能手机或专用设备上使用。虽然它们已经提供了广泛的用途,但它们中的大多数都收集了大量令人不安的数据,并且似乎完全依赖于云。另一方面,Snips允许您创建自己的语音助手,该助手专门在设备上运行,并且可以安装在RaspberryPi等小型设备上。
环保
“随手关灯”,这是很多孩子在成长过程中从父母那里听到的。问题是,有时恰好我们就很容易忘记关灯或其他电器,而且发生这种情况的时候并不总是有大人提醒你这样做——主要是因为你现在可能是大人负责。Sudo会尝试通过成为一个成年人来改变你的习惯,至少在节能方面
概述
由于这个项目涉及不同的组件,这里是所涉及的部分的概述:
让你的房子更智能
设置Snips
首先要做的是在RaspberryPi上安装Snips-我使用的是RaspberryPi3-型号B。我首先下载了最新版本的Raspbian并将其刷到SD卡上,创建了一个名为ssh的空文件和另一个名为wpa_supplicant的空文件。conf在SD卡的根目录,然后我在弹出卡之前填充了我的Wifi凭据。设备完成启动后,您应该可以在本地网络上看到它,并且可以使用默认用户名和密码(pi/rapsberry)以及raspberrypi.local主机名(如果您使用的是MacOS)通过ssh连接到它。之后,我按照这里给出的说明https://docs.snips.ai/getting-started/quick-start-raspberry-pi。
简而言之,您在开发机器上安装了一个名为Sam(基于nodejs)的工具,Sam将成为您与语音助手交互的主要工具,包括您可以在配置后使用init命令启动的安装过程Sam使用其主机名或IP来定位您的RaspberryPi。
然后您前往Snips控制台https://console.snips.ai并创建一个新助手。可以在受支持的语言中自由使用适合您的语言。我给我的助手Sue-Do打了电话,并从SnipsAppStore安装了一个简单的技能(Joseph的Heure可以让你向Snips询问时间)。为助手添加技能后,您可以单击部署按钮,该按钮将为您提供Sam安装命令,您可以将其复制/粘贴到您的开发机器上。
部署助手后,samstatus命令可让您查看是否所有snips服务都在您的设备上运行(除了似乎从未运行的snips-analytics服务)。
可以准备好试试你的助手了,只是它现在听不到你的声音!为此,您需要一个麦克风(和一个扬声器,以便您可以听到它的答案)。在扬声器方面,我使用连接到RaspberryPi的音频插孔并使用其中一个USB端口供电的有源外部扬声器完成了我的所有开发工作。
我使用了SeeedStudio的4麦克风阵列,您可以将其插入RaspberryPi(仍然关闭时)。
最后,在使用samsetupaudio和samtest麦克风(或扬声器)检查声音输出和输入后,您可以输入samwatch并通过说“HeySnips”来召唤您的助手,然后要求您知道您的技能安装将可以执行。
设置家庭助理
接下来,按照HomeAssistant网站上的说明在Raspbian上手动安装HomeAssistant,包括有关如何在启动时自动启动HomeAssistant的部分(在我们的例子中,Raspbian使用systemd,因此请按照该段中的说明进行操作)
请注意,您可以使用raspi-config命令行实用程序来更改RaspberryPi的主机名,因此可以通过其本地主机名(在我的情况下为sudo.local)访问HomeAssistant。
HomeAssistant的使用和设置变得越来越直观:例如,我不必设置我的大部分组件,因为发现组件会处理这些:只要我输入网关代码,我的IkeaTradfri灯就会被识别
或者,可以通过添加以下行将其添加到您的配置文件(位于/home/homeassistant/.homeassistant/configuration.yaml)中:
连接Snips和家庭助理
Snips使用hermes协议在其组件之间进行通信-正如您将在项目后面看到的那样,这些组件因此可以单独使用或交换,从而实现模块化体验。hermes依赖MQTT进行传输,因此Snips安装包含一个MQTT代理。为了让HomeAssistant能够与Snips通信,您只需将MQTT平台添加到其组件中,指定Snips的MQTT代理作为要使用的代理-在我的情况下,这两个服务都在同一个RaspberryPi上运行,所以我只是将此添加到我的配置文件中:
请注意,此页面上的说明没有为Snip的MQTT代理端口提供正确的端口(我已经提交了一个拉取请求,因此在任何人阅读此内容时可能会更正)。
确保Snips和家庭助理相互匹配
Snips网站上提供的教程让您清楚地了解通过从商店分叉现有应用程序来创建Snips应用程序的步骤。我按照教程进行操作并创建了一个意图(我称之为ikealights)。一旦我到达名为“代码操作”的部分,我就稍微改变了一下。正如Snips文档所提到的,控制台上的代码片段旨在用于简单快速的交互。我发现将所有代码保存在RaspberryPi本身上更容易。因此,在为我的代码配置操作时,我没有选择列表中的tradfriHomeAssistant组件,而是选择了python_script组件(因此下面的屏幕截图中的代码片段为空)。
然后我将这些行添加到我的configuration.yaml文件中:
第一个将Snips添加到HomeAssistant,第二个允许我添加自己的代码片段(在我在与configuration.yaml文件相同的文件夹中创建的python_scripts目录中)。最后一行允许我在我的配置中包含一个新文件intent_script.yaml(我可以在“intent_script”之后添加这个文件的内容)。这个文件允许你告诉HomeAssistant在收到来自Snips的意图时要采取什么行动——在我们的例子中,我们现在将收到的唯一意图是一个叫做ikealights的意图。因此,到目前为止,intent_script.yaml的内容如下:
简而言之,我们首先要声明我们要回复的意图,以及收到它时要做什么——Snips应该回答什么,以及要启动什么操作。就我而言,我实际上要求HomeAssistant启动一个名为ikealights的python脚本,该脚本在python_script/ikealights.py文件中定义如下:
我正在使用python脚本,因为我在几个小时前试图了解脚本如何工作时已经编写了该脚本,因此我怀疑此操作代码可能已包含在itent_script.yaml中
整个项目现在可以工作了,你已经能够让Snips开关你的灯。现在,进入耗电技能阶段!
耗电追踪技巧
在HomeAssistant中跟踪设备使用情况的最简单方法是使用history_stats组件。在您的configuration.yaml文件中,添加以下行,将light.streetlight替换为您要跟踪的灯:
该传感器将为您提供自午夜以来此特定灯已打开的小时数。现在,我们可以添加一个Snips能够回答的新技能:让我们从最后开始,将这些行添加到我们的intents_scripts文件中,为Snips提供正确的答案:
然后,您可以前往Snips控制台并添加一个名为消费的新意图-或您在第一行中输入的任何内容:
然后,您可以创建尽可能多的训练示例,就像您向Snips询问您的消费情况一样:“这盏灯今天亮了多少时间?”“今天这盏灯有什么用途?”等。最后,您可以创建响应此意图的应用程序,指定要回答它的HomeAssistant组件是answer_script(因为我们这次没有创建专用的python脚本)
在使用sam部署你的助手后(日志应该提到你的新技能),你可以重新启动HomeAssistant并随便问Snips你的灯今天花了多少时间打开。
到目前为止,您的助手已经学会了如果您要求消费该回答什么。但由于这不是我们大多数人的工作方式,我们需要它实际上更进一步并启动对话。因此,我们将创建HomeAssistant所谓的自动化。
基本上我们会设置一个规则,如果灯亮了3个小时以上,Snips会询问你是否要关闭它。您可以将自动化直接添加到您的configuration.yaml文件中,但最好使用一个名为automations.yaml的单独文件并将其包含在conf文件中。
在这里,只要我们之前创建的传感器的值超过3,助手就会通过大声说出您的诙谐评论来启动新的对话会话,并期望用户要求它关闭灯作为反馈。由用户实际执行此操作,或者只是决定始终保持点亮状态。
这种结构意味着您应该为每个灯创建一个传感器和相应的自动化,并且您将能够根据灯的使用位置选择不同的触发器阈值,有些灯不需要打开超过几个小时日。
到此为止,我们的助手已经可以从文章的开头开始进行临时设置,即直接连接到裸Raspberry+ReSpeaker组合的有源扬声器。
为了创建一个成熟的角色(并保护PCB免受灰尘影响),我决定为我的助手创建一个外壳。我希望能够在不移除任何盖子的情况下拔下它,并且还想摆脱我拥有的扬声器。
我使用Adafruit的一个小型单声道放大器从Raspberry的音频插孔(我购买了一个插孔转接线适配器)接收信号,将其放大并将其发送到一个小扬声器。之后剪断了我拥有的一根微型USB电缆,并使用USB部分连接到放大器的电源输入端,另一端连接到树莓的USB端口之一(这个放大器只需要0.4A,USB端口可以上升至0.5A)。我将微型USB部分插入Pi的电源输入,另一半插入微型USB分线板。这让我可以将Pi的电源输入转移到我认为合适的任何地方(而不仅仅是Pi本身),而无需将其供电到GPIO。
现在电子设备已经不碍事了,我可以自由地将整个东西集成到我选择的外壳中:一个我拆开的旧Nabaztag。它是一只可以连接到您的Wifi并检查您的电子邮件的“兔子”,以滑稽的声音告诉您天气等信息。
尽管“兔子”笨重,但我保留了它的内部结构,因为它允许我仍然使用耳朵并将它们放入现有的插座中(即使我移除了驱动它们的电机)。
我从MDF上用激光切割出一个简单的矩形,并为RapsberryPi安装正确的整体,这样我就能够将该面板热粘合到黑色结构上。我试图尽可能地安装电缆,而不必剪断它们。
有了它,你的助手现在可以告诉你你的灯在前一天或本周已经使用了多少时间,这样你就可以跟踪你的进度。
正常运行时间比前一个少20%)并在一周内警告您,如果您当天的比率即将到期,以便您可以在每周结束时实现目标。ReSpeaker上的LED可以帮助可视化配额消耗。
全部0条评论
快来发表一下你的评论吧 !