Amazon Echo + rasberry pi + Nature Remoで家電操作

前回電気を良い感じに点灯するscriptを書いたので、これをraspberry-piから起動する設定を実施。

以下作業メモ

1. Node-RED Alexa Home Skill Bridgeの登録

Node-RED Alexa Home Skill Bridgeにアクセスし、Registerのリンクをクリックする f:id:yFujita:20180821225712p:plain

下記画面の項目を入力し、「Register」ボタンをクリック https://alexa-node-red.bm.hardill.me.uk/f:id:yFujita:20180821225802p:plain

「Device」→「Add Device」ボタンをクリック
f:id:yFujita:20180821230024p:plain

バイスを登録。
とりあえずは電源のON/OFFを実行したいので以下の設定
f:id:yFujita:20180821231011p:plain

Node-RED Alexa Home Skill Bridgeの設定は以上。


2. AlexaスキルにNode-RED追加

iphoneのAlexaアプリより以下の手順を実行
* スキルで「Node-RED」検索
* 「有効にする」ボタンをクリック
* 1で作成したアカウント・パスワードを入力し「Authorize」ボタンを押す。
* 正常にリンクされました のメッセージを確認
* 「端末の検出」ボタンをクリック
* 1で作成した「Light」というデバイスが存在することを確認

以上でNode-Redスキルの設定は完了


3. raspberry-piにNode-Redをインストール

インストール方法はこのRunning on Raspberry Piを参考に実施。

何もしない状態でも確かにNode-Redは入っている模様 f:id:yFujita:20180821232618p:plain

念の為Upgradingを実行
一般ユーザで下記コマンドを実行

$ update-nodejs-and-nodered

正常終了することドキドキ待つこと5分あまり、問題なく終了した模様
f:id:yFujita:20180821233551p:plain

下記コマンドを実行し、Node-Red自動起動の設定を実施

$ sudo systemctl enable nodered.service

下記コマンドでNode-Redの起動

$ node-red-start

ブラウザからhttp://raspberry-piのIP:1880に接続すると以下画面が起動   f:id:yFujita:20180821234642p:plain

Node-RED Alexa Home Skill Bridgeと連携するためのプラグインをインストールする。
* 右上のメニューを開き、「パレットの管理」→「ノードの追加」を選択する。
* 「node-red-contrib-alexa-home-skill」で検索し、「ノードを追加」ボタンをクリックする
f:id:yFujita:20180821235226p:plain * 左下のパレットに「Alexa」が追加されたことを確認

以上で、raspberry-piへのNode-Redインストールは完了。


4. Node-Redでフローを作成する

パレット上で「Alexa Home」をドロップ
f:id:yFujita:20180821235909p:plain

「Alexa Home」をダブルクリックすると編集メニューが出てくるので、Accountの鉛筆ボタンをクリック

f:id:yFujita:20180822000022p:plain

ログイン画面が出てくるので、1で作ったアカウントでログイン f:id:yFujita:20180822000059p:plain

ログイン完了するとDevice欄に「Light」が表示される f:id:yFujita:20180822000249p:plain

パレットからアイテムをドラッグ&ドロップしてフローを作成する。
完成図は以下の通り
f:id:yFujita:20180826223159p:plain

各ノードの設定は以下
まずはswitchノード
f:id:yFujita:20180826223305p:plain

プロパティのmsg.commandにAlexaからON/OFFした場合の値を設定
詳細は公式Docを参照のこと

次はONノード
f:id:yFujita:20180826223834p:plain

ONノードの場合はmsg.payloadにonを設定している。
この値が次のノードであるexecノードで実行されるshell scriptの引数になる。
(OFFノードは設定値がoffにしてあるだけなので、画面割愛)

最後のexecノードでは実行するshell scriptを指定する
f:id:yFujita:20180826224047p:plain

ここのノードで実行されるscriptは以下

# pyenv実行
. ~/py36/bin/activate

case $1 in
  on)
    python ~/py_project/nature_remo/light/light_on.py;;
  off)
    python ~/py_project/nature_remo/light/light_off.py;;
esac

pyenvでpython実行環境を設定した後、引数に合わせたpython scriptを実行するのみ。
python scriptについては前回記事 で作成したものを呼んでいる。

これにてフロー作成は完了。
Node-Red画面右上の「デプロイ」ボタンをクリックして設定の反映を行う。

これにて全ての設定が完了。