背景
迄今為止,已經有相當多的語音助手可以在智能手機或專用設備上使用。雖然它們已經提供了廣泛的用途,但它們中的大多數都收集了大量令人不安的數據,并且似乎完全依賴于云。另一方面,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可以幫助可視化配額消耗。
-
機器人
+關注
關注
211文章
28390瀏覽量
206959 -
樹莓派
+關注
關注
116文章
1707瀏覽量
105611 -
樹莓派3B+
+關注
關注
0文章
3瀏覽量
761
發布評論請先 登錄
相關推薦
評論