背景
迄今為止,已經(jīng)有相當(dāng)多的語音助手可以在智能手機(jī)或?qū)S迷O(shè)備上使用。雖然它們已經(jīng)提供了廣泛的用途,但它們中的大多數(shù)都收集了大量令人不安的數(shù)據(jù),并且似乎完全依賴于云。另一方面,Snips允許您創(chuàng)建自己的語音助手,該助手專門在設(shè)備上運行,并且可以安裝在RaspberryPi等小型設(shè)備上。
環(huán)保
“隨手關(guān)燈”,這是很多孩子在成長過程中從父母那里聽到的。問題是,有時恰好我們就很容易忘記關(guān)燈或其他電器,而且發(fā)生這種情況的時候并不總是有大人提醒你這樣做——主要是因為你現(xiàn)在可能是大人負(fù)責(zé)。Sudo會嘗試通過成為一個成年人來改變你的習(xí)慣,至少在節(jié)能方面
概述
由于這個項目涉及不同的組件,這里是所涉及的部分的概述:
讓你的房子更智能
設(shè)置Snips
首先要做的是在RaspberryPi上安裝Snips-我使用的是RaspberryPi3-型號B。我首先下載了最新版本的Raspbian并將其刷到SD卡上,創(chuàng)建了一個名為ssh的空文件和另一個名為wpa_supplicant的空文件。conf在SD卡的根目錄,然后我在彈出卡之前填充了我的Wifi憑據(jù)。設(shè)備完成啟動后,您應(yīng)該可以在本地網(wǎng)絡(luò)上看到它,并且可以使用默認(rèn)用戶名和密碼(pi/rapsberry)以及raspberrypi.local主機(jī)名(如果您使用的是MacOS)通過ssh連接到它。之后,我按照這里給出的說明https://docs.snips.ai/getting-started/quick-start-raspberry-pi。
簡而言之,您在開發(fā)機(jī)器上安裝了一個名為Sam(基于nodejs)的工具,Sam將成為您與語音助手交互的主要工具,包括您可以在配置后使用init命令啟動的安裝過程Sam使用其主機(jī)名或IP來定位您的RaspberryPi。
然后您前往Snips控制臺https://console.snips.ai并創(chuàng)建一個新助手。可以在受支持的語言中自由使用適合您的語言。我給我的助手Sue-Do打了電話,并從SnipsAppStore安裝了一個簡單的技能(Joseph的Heure可以讓你向Snips詢問時間)。為助手添加技能后,您可以單擊部署按鈕,該按鈕將為您提供Sam安裝命令,您可以將其復(fù)制/粘貼到您的開發(fā)機(jī)器上。
部署助手后,samstatus命令可讓您查看是否所有snips服務(wù)都在您的設(shè)備上運行(除了似乎從未運行的snips-analytics服務(wù))。
可以準(zhǔn)備好試試你的助手了,只是它現(xiàn)在聽不到你的聲音!為此,您需要一個麥克風(fēng)(和一個揚聲器,以便您可以聽到它的答案)。在揚聲器方面,我使用連接到RaspberryPi的音頻插孔并使用其中一個USB端口供電的有源外部揚聲器完成了我的所有開發(fā)工作。
我使用了SeeedStudio的4麥克風(fēng)陣列,您可以將其插入RaspberryPi(仍然關(guān)閉時)。
最后,在使用samsetupaudio和samtest麥克風(fēng)(或揚聲器)檢查聲音輸出和輸入后,您可以輸入samwatch并通過說“HeySnips”來召喚您的助手,然后要求您知道您的技能安裝將可以執(zhí)行。
設(shè)置家庭助理
接下來,按照HomeAssistant網(wǎng)站上的說明在Raspbian上手動安裝HomeAssistant,包括有關(guān)如何在啟動時自動啟動HomeAssistant的部分(在我們的例子中,Raspbian使用systemd,因此請按照該段中的說明進(jìn)行操作)
請注意,您可以使用raspi-config命令行實用程序來更改RaspberryPi的主機(jī)名,因此可以通過其本地主機(jī)名(在我的情況下為sudo.local)訪問HomeAssistant。
HomeAssistant的使用和設(shè)置變得越來越直觀:例如,我不必設(shè)置我的大部分組件,因為發(fā)現(xiàn)組件會處理這些:只要我輸入網(wǎng)關(guān)代碼,我的IkeaTradfri燈就會被識別
或者,可以通過添加以下行將其添加到您的配置文件(位于/home/homeassistant/.homeassistant/configuration.yaml)中:
連接Snips和家庭助理
Snips使用hermes協(xié)議在其組件之間進(jìn)行通信-正如您將在項目后面看到的那樣,這些組件因此可以單獨使用或交換,從而實現(xiàn)模塊化體驗。hermes依賴MQTT進(jìn)行傳輸,因此Snips安裝包含一個MQTT代理。為了讓HomeAssistant能夠與Snips通信,您只需將MQTT平臺添加到其組件中,指定Snips的MQTT代理作為要使用的代理-在我的情況下,這兩個服務(wù)都在同一個RaspberryPi上運行,所以我只是將此添加到我的配置文件中:
請注意,此頁面上的說明沒有為Snip的MQTT代理端口提供正確的端口(我已經(jīng)提交了一個拉取請求,因此在任何人閱讀此內(nèi)容時可能會更正)。
確保Snips和家庭助理相互匹配
Snips網(wǎng)站上提供的教程讓您清楚地了解通過從商店分叉現(xiàn)有應(yīng)用程序來創(chuàng)建Snips應(yīng)用程序的步驟。我按照教程進(jìn)行操作并創(chuàng)建了一個意圖(我稱之為ikealights)。一旦我到達(dá)名為“代碼操作”的部分,我就稍微改變了一下。正如Snips文檔所提到的,控制臺上的代碼片段旨在用于簡單快速的交互。我發(fā)現(xiàn)將所有代碼保存在RaspberryPi本身上更容易。因此,在為我的代碼配置操作時,我沒有選擇列表中的tradfriHomeAssistant組件,而是選擇了python_script組件(因此下面的屏幕截圖中的代碼片段為空)。
然后我將這些行添加到我的configuration.yaml文件中:
第一個將Snips添加到HomeAssistant,第二個允許我添加自己的代碼片段(在我在與configuration.yaml文件相同的文件夾中創(chuàng)建的python_scripts目錄中)。最后一行允許我在我的配置中包含一個新文件intent_script.yaml(我可以在“intent_script”之后添加這個文件的內(nèi)容)。這個文件允許你告訴HomeAssistant在收到來自Snips的意圖時要采取什么行動——在我們的例子中,我們現(xiàn)在將收到的唯一意圖是一個叫做ikealights的意圖。因此,到目前為止,intent_script.yaml的內(nèi)容如下:
簡而言之,我們首先要聲明我們要回復(fù)的意圖,以及收到它時要做什么——Snips應(yīng)該回答什么,以及要啟動什么操作。就我而言,我實際上要求HomeAssistant啟動一個名為ikealights的python腳本,該腳本在python_script/ikealights.py文件中定義如下:
我正在使用python腳本,因為我在幾個小時前試圖了解腳本如何工作時已經(jīng)編寫了該腳本,因此我懷疑此操作代碼可能已包含在itent_script.yaml中
整個項目現(xiàn)在可以工作了,你已經(jīng)能夠讓Snips開關(guān)你的燈。現(xiàn)在,進(jìn)入耗電技能階段!
耗電追蹤技巧
在HomeAssistant中跟蹤設(shè)備使用情況的最簡單方法是使用history_stats組件。在您的configuration.yaml文件中,添加以下行,將light.streetlight替換為您要跟蹤的燈:
該傳感器將為您提供自午夜以來此特定燈已打開的小時數(shù)。現(xiàn)在,我們可以添加一個Snips能夠回答的新技能:讓我們從最后開始,將這些行添加到我們的intents_scripts文件中,為Snips提供正確的答案:
然后,您可以前往Snips控制臺并添加一個名為消費的新意圖-或您在第一行中輸入的任何內(nèi)容:
然后,您可以創(chuàng)建盡可能多的訓(xùn)練示例,就像您向Snips詢問您的消費情況一樣:“這盞燈今天亮了多少時間?”“今天這盞燈有什么用途?”等。最后,您可以創(chuàng)建響應(yīng)此意圖的應(yīng)用程序,指定要回答它的HomeAssistant組件是answer_script(因為我們這次沒有創(chuàng)建專用的python腳本)
在使用sam部署你的助手后(日志應(yīng)該提到你的新技能),你可以重新啟動HomeAssistant并隨便問Snips你的燈今天花了多少時間打開。
到目前為止,您的助手已經(jīng)學(xué)會了如果您要求消費該回答什么。但由于這不是我們大多數(shù)人的工作方式,我們需要它實際上更進(jìn)一步并啟動對話。因此,我們將創(chuàng)建HomeAssistant所謂的自動化。
基本上我們會設(shè)置一個規(guī)則,如果燈亮了3個小時以上,Snips會詢問你是否要關(guān)閉它。您可以將自動化直接添加到您的configuration.yaml文件中,但最好使用一個名為automations.yaml的單獨文件并將其包含在conf文件中。
在這里,只要我們之前創(chuàng)建的傳感器的值超過3,助手就會通過大聲說出您的詼諧評論來啟動新的對話會話,并期望用戶要求它關(guān)閉燈作為反饋。由用戶實際執(zhí)行此操作,或者只是決定始終保持點亮狀態(tài)。
這種結(jié)構(gòu)意味著您應(yīng)該為每個燈創(chuàng)建一個傳感器和相應(yīng)的自動化,并且您將能夠根據(jù)燈的使用位置選擇不同的觸發(fā)器閾值,有些燈不需要打開超過幾個小時日。
到此為止,我們的助手已經(jīng)可以從文章的開頭開始進(jìn)行臨時設(shè)置,即直接連接到裸Raspberry+ReSpeaker組合的有源揚聲器。
為了創(chuàng)建一個成熟的角色(并保護(hù)PCB免受灰塵影響),我決定為我的助手創(chuàng)建一個外殼。我希望能夠在不移除任何蓋子的情況下拔下它,并且還想擺脫我擁有的揚聲器。
我使用Adafruit的一個小型單聲道放大器從Raspberry的音頻插孔(我購買了一個插孔轉(zhuǎn)接線適配器)接收信號,將其放大并將其發(fā)送到一個小揚聲器。之后剪斷了我擁有的一根微型USB電纜,并使用USB部分連接到放大器的電源輸入端,另一端連接到樹莓的USB端口之一(這個放大器只需要0.4A,USB端口可以上升至0.5A)。我將微型USB部分插入Pi的電源輸入,另一半插入微型USB分線板。這讓我可以將Pi的電源輸入轉(zhuǎn)移到我認(rèn)為合適的任何地方(而不僅僅是Pi本身),而無需將其供電到GPIO。
現(xiàn)在電子設(shè)備已經(jīng)不礙事了,我可以自由地將整個東西集成到我選擇的外殼中:一個我拆開的舊Nabaztag。它是一只可以連接到您的Wifi并檢查您的電子郵件的“兔子”,以滑稽的聲音告訴您天氣等信息。
盡管“兔子”笨重,但我保留了它的內(nèi)部結(jié)構(gòu),因為它允許我仍然使用耳朵并將它們放入現(xiàn)有的插座中(即使我移除了驅(qū)動它們的電機(jī))。
我從MDF上用激光切割出一個簡單的矩形,并為RapsberryPi安裝正確的整體,這樣我就能夠?qū)⒃撁姘鍩嵴澈系胶谏Y(jié)構(gòu)上。我試圖盡可能地安裝電纜,而不必剪斷它們。
有了它,你的助手現(xiàn)在可以告訴你你的燈在前一天或本周已經(jīng)使用了多少時間,這樣你就可以跟蹤你的進(jìn)度。
正常運行時間比前一個少20%)并在一周內(nèi)警告您,如果您當(dāng)天的比率即將到期,以便您可以在每周結(jié)束時實現(xiàn)目標(biāo)。ReSpeaker上的LED可以幫助可視化配額消耗。
-
機(jī)器人
+關(guān)注
關(guān)注
210文章
28129瀏覽量
205894 -
樹莓派
+關(guān)注
關(guān)注
116文章
1697瀏覽量
105461 -
樹莓派3B+
+關(guān)注
關(guān)注
0文章
3瀏覽量
753
發(fā)布評論請先 登錄
相關(guān)推薦
評論