アレクサからRaspberryPiに何かさせるためのテンプレート

## 前置き
こんちには！
エンジニアのまるさんかくです。

今回はアレクサからRaspberryPiに指示をするための初期設定とテンプレートを記載します。
RaspberryPiをスマートホーム家電として動作させたり、RaspberryPiを中継ハブとして他のデバイスを動作させたりするための第一歩として当記事が参考になればと思います。

## 内容
アレクサに対し特定の音声で指示することで、RaspberryPi上のシェルスクリプトを動作できるようにする
※アレクサアプリから直接シェルスクリプトを実行させることも可能

## 用意するもの
- アレクサ対応デバイス(スマートフォンでも可)
- Raspberry Pi
- ホストPC
- スマートフォン

## 構成
アレクサ→NodeREDスキル→NodeRED Alexa Home Skill Bridge → RaspberryPi

## 用語説明
### NodeREDとは
処理や分岐等を表すノードを線でつなぎ、ハードウェアやAPI、オンラインサービスを制御するためのツールです。
```
Node-REDはハードウェアデバイス、APIおよびオンラインサービスを新しく興味深い方法で接続するためのツールです。
Node-RED日本ユーザー会から引用
```

https://qiita.com/haru15komekome/items/491d4e78eac76a677d19

### NodeRED Alexa Home Skill Bridgeとは
NodeREDとAlexa Home Skillを連携するためのNodeREDモジュールです。
```
このサイトは、node-red-contrib-alexa-home-skill Node-REDモジュールを使用するための登録ポイントです 。
このノードとサービスを使用すると、Amazon Echo のホーム スキル システムと連携する独自の「デバイス」を作成でき、Node-RED と接続できる基本的にすべてのものを音声制御できるようになります。
NodeRED Alexa Home Skill Bridge HPから引用
```

# 初期設定
### Node-RED Alexa Home Skill Bridgeの登録・設定

:::note warn
この手順は Raspberry Pi/ホストPC/スマートフォンいずれかで実行
:::

   - アカウント登録
     1. サイトにアクセス
        https://alexa-node-red.bm.hardill.me.uk/
     2. アカウント登録
        画面上部のRegisterをクリックし、アカウント登録
         ![Node-RED Alexa Hone Skill Bridge_paint.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3692990/92b6ffa5-3ddb-8f53-6d5e-af860a1dc7a8.png)
   - デバイスの設定
     1. Devicesを開く
     2. Add Deviceを選択
        ![Node-RED Alexa Hone Skill Bridge_Devices.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3692990/8d6b5811-fdd3-66b2-4bd2-bc3302d9f74d.png)
     3. Name, Description, Actionsを記入しOK
        - Name  
            デバイス名(記入必須)
        - Description
            デバイスの説明(記入必須)
        - Actions
            デバイスの動作内容  
            今回は音声をシェルスクリプト実行のトリガにするだけのため、OnのみでOK  
            詳しく知りたい方は下記参照  
            https://alexa-node-red.bm.hardill.me.uk/docs
            ![Node-RED Alexa Hone Skill Bridge_AddNewDevices.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3692990/7e5bd631-2526-dc73-5f9f-870f86901cde.png)
実行後、デバイスが表示される
![Node-RED Alexa Hone Skill Bridge_Test.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3692990/5c1a2903-8f14-45b7-5990-41697aceeccd.png)

## Alexaスキルの追加

:::note warn
この手順はスマートフォン上で実行
:::

- アレクサアプリのインストール
    <img width=200" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3692990/86bed2f4-83d1-aa60-6133-9c7a90bf4a0c.png">
    
- アレクサにNode-REDスキルを追加する
      1. アプリを開き、スキル追加
        "スキル・ゲーム"を選択
        <img width=200" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3692990/15d74c75-8e5c-1340-1796-b5cd331286b4.png">
      2. Node-REDスキルを追加
        Node-REDを検索し、Node-REDスキルを追加する
        <img width=200" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3692990/3618966c-d593-3067-2ea6-ccd14fac08e9.png">
        <img width=200" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3692990/fd1314b9-9ac0-3935-4fd8-9a16a39f6681.png">

## NodeRedの初期設定

:::note warn
この手順はRaspberryPi上で実行
:::

- NodeREDのインストール
 プリインストールされていれば不要
  ```
  $ bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)
  ```
- NodeREDの起動
方法1 or 方法2を実行  

    方法1. 下記コマンドを実行
    ```
    $ node-red-pi --max-old-space-size=256
    ```
    方法2. アイコンをクリック
    ![RaspberryPi_Node-REDアイコン_paint.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3692990/68e87559-a795-3614-823b-434ad7ab4b88.png)

下記は必要に応じて実行
- NodeREDの自動起動設定
    ```
    $ sudo systemctl enable nodered.service
    ```

## NodeRED Alexa用プラグイン設定

:::note warn
この手順はホストPC上で実行
:::
   - RaspberryPiのNodeREDにアクセス
     Webブラウザを開き、下記アクセス
        http://RaspberryPiのIPアドレス:1880/
        ![Node-RED_Webアクセス.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3692990/31d765dd-64e9-6e76-4c43-35ae9c89891d.png)

   - NodeREDにAlexa用プラグイン追加
    右上のハンバーガーボタンをクリックし、"パレットの管理"をクリック
    ![Node-RED_パレット管理.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3692990/0d56cf00-ed06-ef07-a851-46ac32997300.png)
    ユーザー設定のパレットからalexaと検索し、node-red-contrib-alexa-home-skillを追加
![Node-RED_alexa-home-skill追加.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3692990/b57c3b59-7f51-3dd4-c1db-e4afde1fb865.png)
追加すると左側のパレットにalexaのノードが追加される
![Node-RED_Alexaノード.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3692990/09a7eedd-2c66-7296-a8cf-02d6cfc63b20.png)


# プロジェクト作成
## シェルスクリプト作成

:::note warn
この手順はRaspberryPi上で実行
:::

- 動作させるシェルスクリプトを作成
    例：テキストファイルを作成するシェルスクリプト
    ```make_text.sh
    touch sample.txt 
    ```
## NodeREDのプロジェクト作成
:::note warn
この手順はホストPC上で実行
:::

- RaspberryPiのNodeREDにアクセス
    Webブラウザを開き、下記アクセス
    http://RaspberryPiのIPアドレス:1880/
    ![Node-RED_Webアクセス.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3692990/31d765dd-64e9-6e76-4c43-35ae9c89891d.png)
    - 新規プロジェクト作成
        
    - ノードの配置
        各ノードをドラッグ＆ドロップして、各端子を線で繋げる
        ![Node-RED_プロジェクト構成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3692990/1379265a-ee4a-fba3-2669-f856d76258b7.png)
        アレクサノードをダブルクリックして編集
        Accountの右側の鉛筆マークからアカウントログイン
        ログインするとNode-RED Alexa Home Skill Bridgeで登録したデバイスがDeviceから選択可能になる
![Node-RED_ノード編集.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3692990/c953535e-1318-3a26-4def-fb02847ddd6d.png)
        execノードをダブルクリックして編集
        コマンドに作成したシェルスクリプトのフルパスを指定する
        ![Node-RED_execノード編集.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3692990/49c62dfc-260d-430e-b01a-2edec05c3156.png)
        
## Alexa 定型アクションの登録
   - アレクサのデバイス追加
       アレクサアプリを開き、デバイスを追加
       デバイスの+ボタンを押す
        <img width=200" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3692990/aa99c3f3-04f0-dd1f-636e-7dba46b064e6.png">
        "デバイスを追加"を選択
        <img width=200" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3692990/176bb27f-13d2-abb3-838c-3133b3bfb53a.png">
        "その他"を選択
        <img width=200" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3692990/2a64bb5e-142a-1286-40e5-18214ba5bb63.png">
        "デバイスを検出"ボタンを押す
        <img width=200" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3692990/13d39c33-6a4a-906e-caff-b5c18ffb9cef.png">
        Wi-Fiのアイコンを選択
        <img width=200" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3692990/7a6ed3c9-7707-cdf0-5449-fa737b446529.png">
        指示に従い、デバイスをセットアップ
        <img width=200" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3692990/ed1dc412-c7ad-aee3-bb4f-2ffd9498cc5e.png">

   - 定型アクションの設定
    "スキル・ゲーム"を選択
    <img width=200" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3692990/3d2e26c7-ae87-d3a8-bf2b-55551d01f216.png">
    右上の+ボタンを押す
    <img width=200" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3692990/a77c1eb2-d75c-7f97-c2f9-b468cedc6f14.png">
    "アクションを追加"を選択
    <img width=200" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3692990/6e3544bb-87fa-2284-db7b-7b252ece1d7c.png">
    "スマートホーム"を選択
    <img width=200" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3692990/7ed532cd-5464-977c-858e-d852539754a9.png">
    "すべてのデバイス"を選択
    <img width=200" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3692990/2b7ec100-03f3-1dad-6eb7-b8ec66291801.png">
    登録したデバイス名が表示されているので、そのデバイスを選択
    <img width=200" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3692990/e3977fbf-db92-d01d-9872-05293167e9fd.png">
    実行条件を設定し、保存
    <img width=200" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3692990/579791fc-3bd6-5640-680a-3e0e1e1a3952.png">


## 実行
1. 音声実行
    「アレクサ、<定型アクションで設定したフレーズ>」
    例: 「アレクサ、ファイル作って」
    
2. アプリ実行
    - 定型スキルの再生ボタンから直接実行できる
            <img width=300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3692990/c483baca-6508-9841-e3b6-c9ece1e39d4d.png">

実行後、sample.txtが作成される
※他にもスケジュール実行やアラームと連動して実行等もできます


## 最後に
今回はアレクサからRaspberryPiに音声で指示をするための初期設定とテンプレートを記載しました。
こちらを応用して自分だけのスマートホームデバイスを作成してみてはいかがでしょうか。


## 参考サイト
[AlexaからRaspberry Piを経由して家電を音声で操作する](https://www.zumid.net/entry/raspberry-pi-alexa-home-app/)
[NodeRED RaspberryPiで実行する](https://nodered.jp/docs/getting-started/raspberrypi)