文章

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

Untitled

Untitled

名稱隨便輸入(ex: haaska),記得把產生好的 Token 先記下來,後續會使用到

第四步 - Amazon Developer Console 設定

若是您還沒有 Amazon 帳號的話,記得先建立一個

前往 Amazon Developer Console:

https://developer.amazon.com/home.html

在 Dashboard 右下方,點擊 Login with Amazon

Untitled

然後選擇 Create a New Security Profile

Untitled

然後你可以輸入你想要的 Profile Name / Description / 還有 URL

其中這邊的 URL 應該是不會用到 ,不過這邊我還是輸入我 HA 的 URL

Untitled

建立好後在右邊的齒輪選擇 Web Setting

Untitled

然後你可以看到你的 ClientID / Client Secret

Untitled

把這 ClientID / Client Secret 記下來備用

第五步 - Alexa Skills Kit

回到 Amazon Developer Console ,選擇 Alexa Skills Kit

Untitled

選擇 Create Skill

Untitled

輸入 Skill 名稱 (可以隨意命名 ex: haaska)

然後選擇Smart Home,回到畫面的上方按下 Create Skill

Untitled

接著畫面上你可以看到你的 Skill ID, 一樣把它 copy 起來備用

Untitled

第六步 - AWS Console

若還沒有 AWS 帳號的話,先建立一個

https://console.aws.amazon.com/console/home

然後在 AWS Console 首頁上方的輸入區塊,輸入 IAM 後,開啟它

Untitled

然後在左邊的 menu,選擇 角色 → 然後按下建立角色

Untitled

**信任的實體類型選擇 AWS 服務 , **使用案例選擇** Lambda ,按下一步

然後在 許可政策輸入框輸入 basic ,找到 AWSLambdaBasicExecutionRole,勾選後下一步

Untitled

角色名稱輸入 lambda_basic_execution 然後建立角色

Untitled

第七步 Lambda Function 設定

回到 AWS Console ,首先在畫面的右上角選擇區域

這邊我是選擇 us-east-1

Untitled

然後在 console 首頁輸入 Lambda 進到功能中

Untitled

接著建立函式

Untitled

輸入函式名稱、選擇 Python3.6

Untitled

畫面下方的執行角色

則選擇我們剛剛建立的角色,然後建立函式

Untitled

接著,新增觸發

Untitled

選擇 Alexa smart home ,然後應用程式ID, 這邊要 Copy 步驟五中得到的 Alexa Skill ID

然後點選 新增

Untitled

接著,在程式碼區塊的右方,上傳我們在步驟1下載的 zip檔案

Untitled

上傳後,我們要編輯畫面下方的 處理常式,點選編輯

Untitled

處理常式中輸入 haaska.event_handler,儲存

Untitled

完成後,回到程式碼,點兩下 config.json

修改 url 把 localhost 改為你 Home Assistant 的 Domain Name (必需要可以從外部存取!)

bearer_token 則改為第三步中產生的 Token,然後儲存

Untitled

然後回到畫面最上方的右邊,複制 ARN,先記錄起來

Untitled

回到 Alexa Developer Console 的 Skill 中,在Default endpoint 貼上 ARN

然後勾選下方的區域 (對應我們 AWS Console 中選擇的區域),一樣貼上相同的 ARN

然後儲存

Untitled

接著點選左邊的 Account Linking

Untitled

輸入相關資訊

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

Untitled

然後 把最下方的三個 Redirect URLs 先儲存下來備用,然後回到最上方儲存

回到 Amazon Developer Console

點選編輯,在 Allowed Return URLs 加入上面記錄的三個 URL,然後儲存

Untitled

第八步 - 測試

回到 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"
      }
    }
  }
}

然後點擊測試

Untitled

發現已經可以成功從我們的 HA 拉到一些資訊了 (例如:裝置清單)

Untitled

第九步 - Amazon Alexa App

由於台灣不支援 Amazon Alexa app,需要跨區下載,可參考以下連結

在台灣如何使用Amazon Alexa 教學及介紹 - Play智慧家庭

找到 Skills 裡面需要帳號連結,點擊它

Untitled

再 Enable

Untitled

可能出現錯誤 1:

確定 Amazon Alexa app 連到 ha 登入網址, clientid 跟 redirect_uri 是不是使用相同的domain

可能出現錯誤2: 

unable to link account (把 alexa console 網址中的 port 8123 拿掉)

另外記得 IP分享器的 port 443 要轉到 8123

Untitled

上面問題解決後,應該就可以連結成功

然後看到 DISCOVER DEVICES 的畫面了

Untitled

在 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 根據你的回答來進行動作的話,可以參考:

https://www.youtube.com/watch?v=uoifhNyEErE

Examples · keatontaylor/alexa-actions Wiki

本文章以 CC BY 4.0 授權

Comments powered by Disqus.