LoginSignup
0
3

More than 3 years have passed since last update.

Alexaで家電を操作するためのあれこれ(Node-RED設定編)

Last updated at Posted at 2018-12-16

こちらの記事は,Alexaで家電を操作するためのあれこれ(Raspi設定編)の続きです.

Node-RED はデバイス,API,オンラインサービスをコードを殆ど書くことなく接続できるプラットフォームのこと.

今回はその Node-RED を使用してAmazon Echo とRaspberyPiの繋ぎ方,RaspberyPiからNature Remo APIの使い方をメモっておく.

スクリーンショット 2018-12-16 午後3.21.26.png

事前準備

Wi-fi接続が完了し,IPアドレスを固定したRaspberryPi

Amazon Alexa アプリのダウンロード
Amazon Echo Dot のセットアップ
わからない場合はこちら

環境

Amazon Echo dot
Raspberry Pi 3 Model B
Nature remo mini

macOs 10.14
Raspbian OS Version October2018


本記事では以下の記事を参考にさせていただきました.
【IoT】4.Node-REDの設定をしてみる
Nature Remo APIとAlexaで部屋中の家電を操作する話

Node-RED Alexa Home Skill Bridgeに登録する

こちらのページ画面左上より[Register]を選択し登録を行う.

デバイスを追加

ログイン後,[Add Device]をクリックしデバイスを追加する.

スクリーンショット 2018-12-16 午後3.58.56.png

その際にAlexaに呼びかけたいデバイス名を付ける.今回はデバイス名を「電気」にする. ライトのように操作が点灯/消灯に限定されているデバイスは,ON, OFFのみにチェックを入れる.

Alexaアプリでデバイスを検出

現状では,Alexaに「アレクサ,電気付けて」と話しかけると,「電気というデバイスを検出できませんでした」と返ってくる,

そこで,Alexaアプリに「Node-RED」のスキルを追加し,ホーム画面から,[デバイス -> + ボタン -> デバイスを追加 -> その他] より,電気というデバイス検出する. 検出後はアレクサに話しかけると, 「電気から応答がありません」と言うようになる.

RaspberryPiに Node.js, npm をインストール

Node-REDを動かす際に必要なNode.js, npmを以下のコマンドでインストールする.
sudo apt-get update
sudo apt-get install -y nodejs npm
sudo npm cache clean
sudo npm install npm n -g
sudo n stable

RaspberryPiに Node-REDをインストール

sudo apt-get install nodered
update-nodejs-and-nodered

また,Node-REDが自動で立ち上がるようにするために,以下のコマンドを実行.これによりRaspberryPiに電源を繋げただけでNode-REDが起動する.
sudo systemctl enable nodered.service

Node-REDの起動

node-red
または,
node-red-start
で起動させる.

サーバは,[http://*******:1880 ]で実行中です

と表示されたら,[http://ラズパイのipアドレス:1880/]をブラウザのアドレスバーに入力する.すると以下のようなNode-REDの画面が表示される.

スクリーンショット 2018-12-16 午後8.31.56.png

Node-REDでAlexaスキルのためのノード追加

右上の三本線のメニューから

[パレットの管理 -> ノード追加 -> node-red-contrib-alexa-home-skillを検索して追加]

ノード一覧の一番下にalexaのノードが出現する.

Alexa-home のノードにデバイスを設定

alexa home のノードをフロー上に移動させ,ダブルクリックする.「Node-RED Alexa Home Skill Bridge」で登録したアカウント名を入力し更新すると,追加したデバイス名が表示される.

スクリーンショット 2018-12-16 午後8.58.05.png

<デバイス名が出てこない時>
私の場合は,なかなか出てこなくて詰んでいたので解決したケースを記述.
- alexa home ノード配置後デプロイを押す
- デバイスを新しく作る
- 有線のsshで入る
- OSを入れ直す

などを行うことによりデバイス名が表示されることがあった.
最終的にOSを入れ直すことにより解決しました.なんでだったんだろ...

ノードを追加

Switchノードを以下のように配置する.

スクリーンショット 2018-12-16 午後9.22.11.png

Switchノードをダブルクリックし,入力が true か false によって分岐するように設定.

スクリーンショット 2018-12-16 午後9.20.17.png

changeノードを接続

スクリーンショット 2018-12-16 午後9.25.12.png

changeノードをダブルクリックし,プロパティにそれぞれ on と off を設定.

スクリーンショット 2018-12-16 午後9.27.56.png

execノードをchangeノードの先に追加する.

スクリーンショット 2018-12-16 午後9.30.11.png

execノードをダブルクリックし,コマンド欄に実行ファイルのパスを通す.「アレクサ,電気付けて」と言った際,引数[on]がexecノードに渡され,シェルスクリプトが実行される.

シェルスクリプトの内容はのちに示すので,一旦完了を押しておく.

スクリーンショット 2018-12-16 午後9.34.30.png

debugノードを追加すると,execノードがどんな引数を受け取っているかを確認できる.

スクリーンショット 2018-12-16 午後9.45.55.png

Nature Remo の API を利用

Nature Remo は APIが提供されているので,登録した赤外線の送信,センサ情報の取得などができる.

新規アクセストークンの発行はこちらからできるので,発行してメモっておく.

APIをいじってみる

API仕様を参考にAPIをいじってみる.例えば,

puts 'curl -X GET "https://api.nature.global/1/appliances" -H "accept: application/json" -H "Authorization: Bearer アクセストークン"'

と入力し,自分のメモったアクセストークンを加えると,デバイス名とそれぞれのIDなどが分かる.ただし読みづらいのでjqコマンドを以下のように加えることで見やすくなる.

電気デバイスのON,OFFのIDがそれぞれ一つずつ表示されるので,両方メモっておく.

puts 'curl -X GET "https://api.nature.global/1/appliances" -H "accept: application/json" -H "Authorization: Bearer アクセストークン" | jq .'


次は電気のON, OFFの操作を試る.
メモった電気デバイス - ON のIDを使ってコマンドを入力すると,電気が点灯する.同様にOFFのIDを使うことで消灯が実現できる.

puts 'curl -X POST "https://api.nature.global/1/signals/電気デバイスONのID/send" -H "Authorization: Bearer アクセストークン"'

ON/OFF 操作するシェルスクリプトを作成

Node-REDで true か false が引数($1)に来るように設定したので,これとAPIをいじった際のコマンドを組み合わせてシェルスクリプトを作成する.

denki.sh
#!/bin/bash

case $1 in
  on)
    curl -X POST "https://api.nature.global/1/signals/電気デバイスONのID/send" -H "Authorization: Bearer アクセストークン"
    ;;
  off)
    curl -X POST "https://api.nature.global/1/signals/電気デバイスOFFのID/send" -H "Authorization: Bearer アクセストークン"
    ;;
  esac

スクリプトは私のGithubにあげておくので見た人は見てください.

このスクリプトファイルを,先程作成した Node-red で execノードのプロパティに指定する.そして,chmod +x denki.shコマンドで実行権限を与えると準備完了!!

「アレクサ,電気付けて!」と言うと電気が点灯し,「アレクサ,電気消して!」と言うと電気が消灯.あら素敵.


今後は,エアコンの操作とそれぞれ操作した時間帯を取得し可視化でもしようかなと.温度もAPIでとってこれるみたいなので,組み合わせると面白いかも?

0
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3