Node-RED Alexa Home Skill Bridgeを設定する[On Onion Omega2+]

![image.png](https://qiita-image-store.s3.amazonaws.com/0/100712/9da645c0-3c47-7650-f1fb-de255804c386.png)
[前回](https://qiita.com/spiderx_jp/items/51366fc03d565568a61f)、node-red-contrib-alexa-home-skill のインストールまで完了しました。
今回は、Node-RED Alexa Home Skill Bridge の設定を行い、Node-Red に Alexa ノードを登録するところまで、やってみたいと思います。

やることは、以下の４つです。
尚、赤外線リモコンを実際操作する部分は、次のフェーズでやる予定です。

1. [Node-RED Alexa Home Skill Bridge](https://alexa-node-red.bm.hardill.me.uk/)でアカウントを作成する。
2. 制御するデバイスを作成する。
3. Alexaスキル「Node-Red」を追加し、アカウントをリンクする。
4. Node-Red でフローを作成する。

#0. 前提条件
- Onion Omega2 Plus
    - BusyBox v1.26.2
    - Ω-ware: 0.1.10 b160
    - Linux 4.4.46 mipsel LE
- 2GB Micro-SD Card
    - パーティション2分割
        - 512MB=スワップ、残り=システム領域
- Omega2拡張ドック
- Node.js  version: v4.3.1
- Node-RED version: v0.18.4
- node-red-contrib-alexa-home-skillインストール済み

#1. アカウントの作成
Alexa（Amazon Echo Dot）と Node-Red にインストールした node-red-contrib-alexa-home-skill を連携させるには、[Node-RED Alexa Home Skill Bridge](https://alexa-node-red.bm.hardill.me.uk/)にアカウントを作成する必要があります。

アカウント作成は[こちら](https://alexa-node-red.bm.hardill.me.uk/newuser)でできます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/100712/dbf847b8-a96f-a096-0699-e50390cbb5f7.png)

#2. 制御デバイスの追加
アカウントを登録したら、ログインします。
[Devices]タブから、制御するデバイスを登録します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/100712/945d0bc4-9cae-ca0c-bfc3-d90ebf14b1a1.png)

とりあえず、以下で追加してみました。

|項目  |値  |
|---|---|
|Name               |リビングライト    |
|Description        |リビングのライト  |
|Actions           |On, Off, +%, -%をチェック           |
|Application Type  |LIGHTをチェック            |

![image.png](https://qiita-image-store.s3.amazonaws.com/0/100712/d92ba51c-dc32-cb5e-d6de-57c14002168b.png)

「リビングライト」が登録されました。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/100712/26919ffe-a3df-08d5-cdbb-d49687364b1f.png)

#3. Alexaスキル「Node-Red」の追加とアカウントリンク
スマホやタブレットの Amazon AlexaアプリでAlexaスキル「Node-Red」スキルを追加・有効化します。
※PCからも「https://alexa.amazon.co.jp」でできると思います。

<img width="375" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/100712/ff4dde78-05f8-bf15-486c-8461e7732bab.png">

有効化の際に、[Node-RED Alexa Home Skill Bridge](https://alexa-node-red.bm.hardill.me.uk/)で作成したアカウントとのリンクを要求されますので、ユーザ名とパスワードを入力して、認証します。

<img width="375" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/100712/0b80f300-7ac4-3c3d-7238-7ecee50e53b9.png">

認証が終わると、デバイスの検出を促す画面がでるので、デバイスの検出を行います。
検出ができたら、以下のようにスマートホーム画面に、Node-RED Alexa Home Skill Bridge で作成した「リビングライト」が表示されます。
<img width="375" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/100712/ac62028c-3636-e252-5d25-5789f471dd75.png">



<b><font color="Red">実は、ここにたどり着くのに２つ問題がありました。</font></b>
１つ目は、<font color="Red">アカウントリンクできない問題</font>でした。
ユーザとパスワード入力後、アカウントリンクが完了せず、Alexaスキルの「Node-Red」が有効化されない状態でした。私がアカウント作成したのは、半年くらい前で、Raspberry-Piで試行していた際に作成してから、使っていない期間が結構ありました。何が原因かわかりませんでしたが、新たなアカウントを作成して、そのアカウントでリンクをかけたら上手くいきました。

２つ目は、アカウントの問題解決後、今度は、<font color="Red">デバイスの検出で何も検出されないという問題</font>が発生しました。何度やってもダメで、最後に、Node-RED Alexa Home Skill Bridge でのデバイス登録を、英語の名称（Name）で登録してみました（Descriptionも適当に英語で入力、日本語のデバイスは残したまま）。なんと、これで解決できました。
尚、その後は、日本語のみのデバイス登録も問題ありません。こちらも原因不明です。

#4. Node-Red フロー作成と接続確認
ノードの一覧でフローを作成して、Alexaとの接続確認を行います。

##フロー作成
まず、ノード一覧から、「alexa home」と「debug」をフローペインにドラッグして、2つを接続します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/100712/c042e00b-6c6c-ba7f-05ae-09e4b2f6d02f.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/100712/f22ededc-1953-db1f-83ae-52173d767d3c.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/100712/5404713e-29bb-0f1d-76fb-701c27ff282e.png)

「Alexa Home」をダブルクリックすると、「Account」、「Device」を設定する画面が表示されるので、「Account」の設定に Node-RED Alexa Home Skill Bridge のアカウント情報を入力します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/100712/7fa6e95e-ec7f-ce59-628d-de618d3f25c1.png)

入力後、「Device」部分の更新ボタンを押すと、デバイスが選択可能になりますので、デバイス「リビングライト」を選択し、「完了」ボタンで設定画面を閉じます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/100712/c1c643c6-3b0a-2a8b-bbfd-2046b309d3b0.png)

これで、接続確認用のフローが完成しました。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/100712/f950e01c-9105-9f3c-ce94-cbb746f23948.png)

このフローを「デプロイ」ボタンでデプロイします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/100712/3584a678-fb2e-09a8-ad56-b397649a2b9f.png)

デプロイ時にエラーメッセージが出力される場合がありますが、無視しても大丈夫っぽいです（タイミングの問題？）。

```Console:Node-RED-Log
Jul 21:40:02 - [error] [alexa-home-conf:82372a7e.ad4a18] Error: connect ECONNREFUSED 34.240.81.189:8883
```

##接続確認
Alexaに問いかけて、実際に接続できているかを確認します。

以下の内容をAlexaに問いかけてみます。
自分：「Alexa、リビングライトを付けて」
Alexa：「はい」
自分：「Alexa、リビングライトを消して」
Alexa：「はい」
自分：「Alexa、リビングライトを暗くして」
Alexa：「はい」
自分：「Alexa、リビングライトを明るくして」
Alexa：「はい」

Node-RED のデバッグペインは、以下のように表示されます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/100712/cdd0b53a-2b9d-56ea-9f9f-05633f538fba.png)

Node-REDのログファイルにも、同じ内容が出力されます。

- 「Alexa、リビングライトを付けて」

```Console:Node-RED-Log
2 Jul 21:43:35 - [info] [debug:a60137fd.c462a8] true
```

- 「Alexa、リビングライトを消して」

```Console:Node-RED-Log
2 Jul 21:43:42 - [info] [debug:a60137fd.c462a8] false
```

- 「Alexa、リビングライトを暗くして」

```Console:Node-RED-Log
2 Jul 21:44:25 - [info] [debug:a60137fd.c462a8] -25
```

- 「Alexa、リビングライトを明るくして」

```Console:Node-RED-Log
2 Jul 21:44:31 - [info] [debug:a60137fd.c462a8] 25
```

AlexaとNode-REDとの接続確認まで完了しました。
次は、フローに分岐を設けて、赤外線学習リモコンとの接続を行おうと思います。

以上