Home Assistant 與 Amazon Alexa 串接
TestFlight 無法增加內部測試群組到建置版本
Home Assistant 串接 Alexa 方式 - Haaska (無需 Nabu Casa 訂閱)
我們要使用到的套件為 hasska
全名為 Home Assistant Alexa Skill Adapter
Github repo 位置: https://github.com/mike-grant/haaska
第一步,下載 hasska 的最新版本
撰寫文件的當下,最新版本為 haaska 1.1.0 版本,各位可以先到以下網址
下載 haaska_1.1.0.zip 備用
https://github.com/mike-grant/haaska/releases/tag/1.1.0
第二步 在 Home Assistant 的 Configuration.yaml中,加入設定
1
2
3
4
api:
alexa:
smart_home:
加入後,記得要重新啟動 Home Assistant 讓設定生效
第三步 - 在 HA 的 Profile 中,建立一個 Token
名稱隨便輸入(ex: haaska),記得把產生好的 Token 先記下來,後續會使用到
第四步 - Amazon Developer Console 設定
若是您還沒有 Amazon 帳號的話,記得先建立一個
前往 Amazon Developer Console:
https://developer.amazon.com/home.html
在 Dashboard 右下方,點擊 Login with Amazon
然後選擇 Create a New Security Profile
然後你可以輸入你想要的 Profile Name / Description / 還有 URL
其中這邊的 URL 應該是不會用到 ,不過這邊我還是輸入我 HA 的 URL
建立好後在右邊的齒輪選擇 Web Setting
然後你可以看到你的 ClientID / Client Secret
把這 ClientID / Client Secret 記下來備用
第五步 - Alexa Skills Kit
回到 Amazon Developer Console ,選擇 Alexa Skills Kit
選擇 Create Skill
輸入 Skill 名稱 (可以隨意命名 ex: haaska)
然後選擇Smart Home,回到畫面的上方按下 Create Skill
接著畫面上你可以看到你的 Skill ID, 一樣把它 copy 起來備用
第六步 - AWS Console
若還沒有 AWS 帳號的話,先建立一個
https://console.aws.amazon.com/console/home
然後在 AWS Console 首頁上方的輸入區塊,輸入 IAM 後,開啟它
然後在左邊的 menu,選擇 角色 → 然後按下建立角色
**信任的實體類型選擇 AWS 服務 , **使用案例選擇** Lambda ,按下一步
然後在 許可政策輸入框輸入 basic ,找到 AWSLambdaBasicExecutionRole,勾選後下一步
角色名稱輸入 lambda_basic_execution 然後建立角色
第七步 Lambda Function 設定
回到 AWS Console ,首先在畫面的右上角選擇區域
這邊我是選擇 us-east-1
然後在 console 首頁輸入 Lambda 進到功能中
接著建立函式
輸入函式名稱、選擇 Python3.6
畫面下方的執行角色
則選擇我們剛剛建立的角色,然後建立函式
接著,新增觸發
選擇 Alexa smart home ,然後應用程式ID, 這邊要 Copy 步驟五中得到的 Alexa Skill ID
然後點選 新增
接著,在程式碼區塊的右方,上傳我們在步驟1下載的 zip檔案
上傳後,我們要編輯畫面下方的 處理常式,點選編輯
處理常式中輸入 haaska.event_handler,儲存
完成後,回到程式碼,點兩下 config.json
修改 url 把 localhost 改為你 Home Assistant 的 Domain Name (必需要可以從外部存取!)
bearer_token 則改為第三步中產生的 Token,然後儲存
然後回到畫面最上方的右邊,複制 ARN,先記錄起來
回到 Alexa Developer Console 的 Skill 中,在Default endpoint 貼上 ARN
然後勾選下方的區域 (對應我們 AWS Console 中選擇的區域),一樣貼上相同的 ARN
然後儲存
接著點選左邊的 Account Linking
輸入相關資訊
Your Web Authorization URI:https://www.amazon.com/ap/oa
Access Token URI:https://api.amazon.com/auth/o2/token
Client ID: 第四步取得的 Client ID
Client Secret: 第四步取得的 Client Secret
新增一個 Scope ,輸入 profile
然後 把最下方的三個 Redirect URLs 先儲存下來備用,然後回到最上方儲存
回到 Amazon Developer Console
點選編輯,在 Allowed Return URLs 加入上面記錄的三個 URL,然後儲存
第八步 - 測試
回到 AWS Console
切到測試,然後輸入事件名稱 haaska
事件json貼上以下程式碼
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
"directive": {
"header": {
"namespace": "Alexa.Discovery",
"name": "Discover",
"payloadVersion": "3",
"messageId": "1bd5d003-31b9-476f-ad03-71d471922820"
},
"payload": {
"scope": {
"type": "BearerToken",
"token": "access-token-from-skill"
}
}
}
}
然後點擊測試
發現已經可以成功從我們的 HA 拉到一些資訊了 (例如:裝置清單)
第九步 - Amazon Alexa App
由於台灣不支援 Amazon Alexa app,需要跨區下載,可參考以下連結
在台灣如何使用Amazon Alexa 教學及介紹 - Play智慧家庭
找到 Skills 裡面需要帳號連結,點擊它
再 Enable
可能出現錯誤 1:
確定 Amazon Alexa app 連到 ha 登入網址, clientid 跟 redirect_uri 是不是使用相同的domain
可能出現錯誤2:
unable to link account (把 alexa console 網址中的 port 8123 拿掉)
另外記得 IP分享器的 port 443 要轉到 8123
上面問題解決後,應該就可以連結成功
然後看到 DISCOVER DEVICES 的畫面了
在 Discover Devices 後,應該就可以在 App 中看到所有 Home Assistant 裡的 實體(裝置)!!
其它:
在做完上述流程後,主要是讓你的 Alexa app 中可以看到 HA的裝置
若要在 HA 中控制你的 Alexa , 需要再安裝 Alexa Media Player
https://www.youtube.com/watch?v=0ElXDPw5c1Q&t=715s
最後,若是要使用 Actionable Notification,也就是讓 Alexa 根據你的回答來進行動作的話,可以參考:
Comments powered by Disqus.