リモコン不要。Amazon EchoでREGZAを操作

サーバーを立てるだけでAmazon EchoでREGZAを操作できるようにしました。

##用意するもの
- Amazon Echo
- REGZA (WoL対応)
- サーバー (PCなど)


#手順
ちょっと長いですが全部で6パートに分かれています。
1. REGZA
2. Node-RED Alexa Home Skill Bridge
5. Alexa
3. 自宅サーバー
4. Node-RED
6. 定型アクション登録



##1. REGZA
まず、REGZAをPCから操作できるようにします。
以下を参考に設定してください。

[REGZAをPCから操作 - Qiita]
(https://qiita.com/atsushi0213/items/e4df61a47280dac5462c)

##2. Node-RED Alexa Home Skill Bridge
次にNode-RED Alexa Home Skill Bridgeを設定します。
下記にアクセスしてユーザー登録してください。
[Node-RED Alexa Home Skill Bridge](https://alexa-node-red.bm.hardill.me.uk/)

ユーザー登録後、デバイスを登録します。
タブメニューのDevicesからAddDeviceをクリックして以下の内容で登録してください。
Nameはこのデバイスを呼ぶときの名称になります。
Alexaではテレビの操作はサポートしていないようで照明のデバイスを代用します。

![スクリーンショット 2018-01-21 16.38.42.png](https://qiita-image-store.s3.amazonaws.com/0/62505/035c4553-6cd2-0fdb-9cda-bd54c41630fa.png)


登録完了するとこのような画面になります。
![スクリーンショット 2018-01-21 16.38.05.png](https://qiita-image-store.s3.amazonaws.com/0/62505/8706c2c7-06ef-20f2-df08-81c35a3d6051.png)

　
##3. Alexa
AlexaにNode-RED Alexa Home Skill Bridgeを登録します。

下記にアクセスしてサイドバーのスキルをクリック、`Node-RED`を検索
https://alexa.amazon.co.jp/

![スクリーンショット 2018-01-21 20.20.33.png](https://qiita-image-store.s3.amazonaws.com/0/62505/d051fa5c-ab9b-7d50-6a69-3c9ce137efd3.png)

スキルを有効にすると別ウィンドウでNode-RED Alexa Home Skill Bridgeのログイン画面が表示されるので、登録したIDとパスワードでログインします。
![スクリーンショット 2018-01-21 20.28.52.png](https://qiita-image-store.s3.amazonaws.com/0/62505/adae25cf-181a-275d-4432-0dfaaa327790.png)

ログイン後、元の画面に戻り端末を検出します。しばらく待つとスマートホームのデバイスにテレビが追加されます。
![スクリーンショット 2018-01-21 20.25.05.png](https://qiita-image-store.s3.amazonaws.com/0/62505/f11ed245-8185-9dc3-02ab-416e604126d7.png)



##4. 自宅サーバー
自宅サーバーを立ててNode-REDを常駐起動させます。

下記の情報を参考にnode.jsとNode-REDをインストールしてください。
[Node-RED日本ユーザ会 : インストール](https://nodered.jp/docs/getting-started/installation)

`node-red`で起動した後、以下にアクセスしてNode-REDのエディタ画面が表示されれば成功です。
http://localhost:1880
![スクリーンショット 2018-01-21 16.56.53.png](https://qiita-image-store.s3.amazonaws.com/0/62505/3900e5c6-c13e-aa57-1bc3-659b037ade68.png)


##5. Node-RED
エディタ画面でNode-REDを設定していきます。

Node-REDでの開発についてはこちらを参考にしてください。
[Node-RED超入門 - Qiita](https://qiita.com/makaishi2/items/5c7b1b6a72b6938cf3d2)

####Step.1 ノードを追加
まず、エディタ画面の右上にあるハンバーガーメニューから
`設定 → Palette → ノードを追加`を選び、`node-red-contrib-alexa-home-skill`を検索して追加してください。
![スクリーンショット 2018-01-21 20.02.31.png](https://qiita-image-store.s3.amazonaws.com/0/62505/ea25da19-ed11-aa57-899a-ecc8960760c0.png)

これで左のサイドバーの一番下にalexaが追加されます。
![スクリーンショット 2018-01-21 17.05.31.png](https://qiita-image-store.s3.amazonaws.com/0/62505/3ecf6437-88e9-96af-74cd-0087859dd3ed.png)

　
####Step.2 alexa homeを配置
サイドバーからalexa homeをキャンバスにドラッグ＆ドロップし、キャンバスに配置したalexa homeをダブルクリックしてください。
![スクリーンショット 2018-01-21 19.34.05.png](https://qiita-image-store.s3.amazonaws.com/0/62505/eced3104-44d7-1f9b-9ae0-2e5eb66679af.png)

Accountにあるペンアイコンをクリックして、Node-RED Alexa Home Skill Bridgeで設定したUsername、Passwordを入力してください。
正しく設定するとDeviceに設定した「テレビ」が表示されます。
![スクリーンショット 2018-01-21 19.40.28.png](https://qiita-image-store.s3.amazonaws.com/0/62505/e4b4b552-1692-1118-630c-9d372fe52176.png)

　
####Step.3 functionを配置
先ほどと同様の手順でfunctionを配置し、コードに下記ソースを入力します。
![スクリーンショット 2018-01-21 19.44.10.png](https://qiita-image-store.s3.amazonaws.com/0/62505/2f2b7dac-4226-72bd-2cde-b774101f67ba.png)


```javascript:function
var newMsg = { payload: "" };

if (msg.command==="TurnOnRequest" || msg.command==="TurnOffRequest") {
    	newMsg.payload = "40BF12"; //Power ON/OFF
} else if (msg.command==="SetPercentageRequest") {
  switch (msg.payload) {
    case 1:
    case 100:
      newMsg.payload = "40BF01";
      break;
    case 2:
      newMsg.payload = "40BF02";
      break;
    case 3:
      newMsg.payload = "40BF03";
      break;
    case 4:
      newMsg.payload = "40BF04";
      break;
    case 5:
      newMsg.payload = "40BF05";
      break;
    case 6:
      newMsg.payload = "40BF06";
      break;
    case 7:
      newMsg.payload = "40BF07";
      break;
    case 8:
      newMsg.payload = "40BF08";
      break;
    case 9:
      newMsg.payload = "40BF09";
      break;
    case 10:
      newMsg.payload = "40BF0A";
      break;
    case 11:
      newMsg.payload = "40BF0B";
      break;
    case 12:
      newMsg.payload = "40BF0C";
      break;
    case 20:
      newMsg.payload = "40BF1A"; //Volume up
      break;
    case 21:
      newMsg.payload = "40BF1E"; //Volume down
      break;
    default:
      break;
  }
}
return newMsg;
```

ソースについて
TurnOnRequestとTurnOffRequestは電源操作ですがどちらも「40BF12」を割り当てています。これはキーがリモコンのボタン割り当てと同じ仕様になっており、リモコンの電源ボタンが1つしかないからです。残念ながら仕様上電源オンとオフを区別することができません。
SetPercentageRequestの1〜12はチャンネル、20、21は音量操作としています。例外的に100をNHKに割り当てていますが、後述の定型アクションでNHKを1%に指定するとなぜか100が返って来たため追加しています。

　
####Step.4 execを配置
同様にexecも設定し、コマンドにシェルスクリプトを設定します。

```
$HOME/tv.sh
```

![スクリーンショット 2018-01-21 19.55.19.png](https://qiita-image-store.s3.amazonaws.com/0/62505/4f752d80-9341-84a7-a0f2-200c88be0878.png)

　
####Step.5 シェルスクリプトを配置
execの実行先になるシェルスクリプトを設置します。

シェルスクリプトのソースは下記です。
シェルスクリプトの引数をREGZAのURLへそのまま渡すだけですが、音量だけは1段階のボリュームの変化が小さいため、ループさせて一度に±4段階動かすようにしました。

```shell:tv.sh
#!/bin/sh
USER="[ID]:[PASS]"; #レグザAppsコネクト設定で入力したID/PASS
URL="http://[固定化したIPアドレス]/remote/remote.htm";

case $1 in
  40BF1[AE] )
    for i in 1 2 3 4
      do
        curl --digest -u "$USER" "$URL?key=$1"
        sleep 0.5
      done
      ;;
  * )
    curl --digest -u "$USER" "$URL?key=$1" ;;

esac
```

ホームディレクトリに上記ファイルを設置して、実行できるようターミナルで権限変更しておいてください。

```
chmod 755 sh.tv
```
　
####Step.6 デプロイ
全てが終わったら各パーツを配線して右上のデプロイをクリックします。
うまくいくとalexa homeがconnectedに変わります。

![スクリーンショット 2018-01-21 20.08.58.png](https://qiita-image-store.s3.amazonaws.com/0/62505/ea2c354f-c187-0d64-d92b-1f1683abea36.png)




##6. 定型アクション登録
この状態でも「アレクサ、テレビをつけて」や「アレクサ、テレビを4にして」と言うとテレビを操作できるのですが、音量やテレビ局名での操作には定型アクションの登録が必要です。
定型アクションはアプリから登録します。
<img width="375" alt="IMG_2253.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/62505/9982591f-338f-416f-13ce-d2a46189379d.png">

####定型アクション追加
ハンバーガーメニューから定型アクションをタップして新しい定型アクションを追加していきます。
実行条件に呼びかける合言葉を入力します。
<img width="375" alt="IMG_2257.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/62505/524417ee-fddd-8682-1d6a-4d82444ecd16.png">


アクションには実際に操作する内容を設定します。
```
スマートホーム → デバイスをコントロール → テレビ
```

日本テレビの場合、パーセントの4%を割り当てているのでそのように設定します。

```
実行条件：「アレクサ、日テレ」
アクション：パーセントを4%
```


<img width="375" alt="IMG_2255.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/62505/c6157c92-0af1-c645-cf1b-a73007cdb404.png">

####音量追加
音量については、20%,21%を割り当てているのでチャンネルと同様に下記のように設定します。

```
実行条件：「アレクサ、テレビの音量を上げて」
アクション：パーセントを20%
```
<img width="375" alt="IMG_2256.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/62505/7cc66f5d-4270-2367-16f1-c4a0d29664ee.png">





##謝辞
実装にあたって以下の情報を参考にさせていただきました。

[Amazon Echoで「○○をつけて」と言って家電を操作する](https://qiita.com/machu/items/122c8403b35748bd5f4c)
[【IoT】４．Node-REDの設定をしてみる - そこらへんのパパの独り言](http://sokora.hatenablog.com/entry/2017/12/13/%E3%80%90IoT%E3%80%91%EF%BC%94%EF%BC%8ENode-RED%E3%81%AE%E8%A8%AD%E5%AE%9A%E3%82%92%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B)