OGIMOノート

7歳の娘と、5歳の息子(脳性麻痺)を持った父親エンジニアの備忘録。自作の電子工作おもちゃ/リハビリ器具/ロボット関係の製作記録、勉強記録を残していきます

【簡単IoT】Node-REDを使ってAmazon echo で家電をON/OFFしてみた

動機

今年始めに購入したAmazon echo。残念ながら、天気予報と(ごくたまに)音楽再生する以外に使い道がなく、気がつけば電源すら抜かれてた始末(笑)
こりゃいかん!と思い、家電コントロールスキルを自作しようと企んでたのだが、ROSの勉強を優先させてしまい、放置状態。。

そんな中、昨日にNode-RED入門講座に遭遇して、「あれ、思ってた以上に簡単に作れそうかも!?」な感触を得たので、モチベーションの高いうちに早速取り組んでみた。

やりたいこと

amazon echoからリビングの「蛍光灯」「エアコン」「テレビ」「レコーダ」「扇風機」のON/OFFを音声操作する

・使い方想定1: 就寝直前にリビングの家電を消す場合。眠いのでリモコンを探すのが面倒。
・使い方想定2: 帰宅後にとっさに電気、エアコン等を付けたい場合。帰宅時はたいてい両手がふさがっているので、声で家電をONできると助かる。

実現するためのソフトウェア環境としては、Node-REDを使用する。Node-REDは、Webブラウザ上のGUIで簡単にWebサービスやハードウェアを接続するフローを書けるツール。
ラピッドプロト用ツールとして注目されている様なので、この使い方チュートリアルも踏まえてみた。

同様の事はIFTTTを使ってもできる様なのだが、その場合「Alexa、○○○をトリガー」という表現になるらしく、それが個人的には気に入らない。Node-REDスキルの場合、「でんきをつけて」「でんきをけして」という表現になりこちらの方がしっくりくるという理由もある。

ハードウェア

f:id:motokiinfinity8:20180416003411j:plain

ラズベリーパイ

 Node-REDが動いて、極力安価な環境なものを使う。
今回は家に余っていたRaspberry Pi2を使った(環境セットアップ済)
最終的には、コスト&省電力を考えてRaspberry Pi Zeroに移植する想定。

・赤外線送信機
 各家電に送信するための赤外線送信回路。時間短縮のため
既存モジュールを購入する方針。

 候補1: irMagician (大宮技研)
irMagician – 高機能/低価格赤外線リモコン | 大宮技研 合同会社
 よく使われている赤外線送信モジュール。USB(CDC-ACM)でホストに接続、リモコンコードの学習が可能。¥4000程度

候補2: ADSIRE学習リモコン基盤(Bit Trade One)
bit-trade-one.co.jp
 ラズパイ用シールドを想定した赤外線送信モジュール。10個の学習コードをGPIOトリガで送信可能。送信光を9個搭載して広視野角に対応。¥5000程度

 今回は、赤外線送信可能範囲と使いやすさ(GPIO制御のみで送信可)に注目して、【候補2:ADSIRE】を選んだ。

環境構築

Node-RED環境を構築する。こちらのサイトを参考。
ここを見ればほとんどやりたい事ができる。

「アレクサ、LEDつけて」でRaspberry PiからLEDを点灯する – oh-maker

ここにある
1. Alexa Home Skill Bridgeのアカウント作成 (web)
2. 制御対象となるデバイスを登録 (Web)
3. Node-REDのAlexaスキルの有効化 (スマホのAlexaアプリ)
4.Node-REDにAlexa Home Skill Bridgeノードを追加 (ラズパイ)
を実施していく。

はまったのは4の部分。Node-REDのGUI画面でどんだけ頑張っても、
f:id:motokiinfinity8:20180415234708p:plain
Alexa Home Skill Bridgeが見えない。。。

調べた結果、どうやらNode-REDのバージョンが古かった模様

update-nodejs-and-nodered 

でNode-REDを入れなおして、再度4を実施すれば無事に環境構築完了!

ちなみに、「○○をつけて」の○○はスマホのAlexaアプリから変更できます。
例えば、私は上記2のデバイス登録で「ライト」と名前をつけましたが、Alexaアプリでは「でんき」と変更しました。
これで、「Alexa、でんきをつけて」「Alexa、でんきをけして」という命令に反応してくれます。

ソフトウェア実装

実装したノードの全体イメージは以下
f:id:motokiinfinity8:20180416005716j:plain


一例として、光灯をつけるノードの拡大。
f:id:motokiinfinity8:20180416005744j:plain

1: Alexa-homeからのdeviceノード(この場合「ライト」)を措定
2: switchノードで msg.payload==true時と msg.payload==false時の分岐を記述
3: triggerノードでパルスを作成。本ボードでは赤外線送信は Lトリガのため、 0パルスで設定
4: rpi-gpio outノードで該当するGPIOピンにつなげる

こんな感じで比較的直感的に書ける!

学習基板の10個のリモコンコードはあらかじめ個別に学習させておく。
学習基板の取説通りの手順で、
SW1:電気ONコード
SW2:電気OFFコード
SW3:エアコンONコード ※季節に応じて「暖房」「冷房」を学習し直す必要あり
SW4:エアコンOFFコード
SW5 : テレビ電源ボタンコード
SW6 : レコーダ再生ボタンコード
SW7 : 扇風機電源ボタンコード

を配置してそれに対応したGPIOを4で制御する。
テレビ/扇風機などはON/OFFが同じ電源ボタンのため、ONとOFFの区別がつかない(つまり、テレビの電源が付いている状態で「テレビをつけて」というとテレビは消えてしまう)がそこは今回は妥協する。

実装結果

ここまでで約2時間で完成!

無事に、リビング電灯、エアコン、テレビ、レコーダをAmazon echoで操作できた!

早速、外出先からの帰宅時に使ってみたが、息子を抱っこしながら「Alexa、電気を付けて!」と言ったら即座に電気がつくとなんだか嬉しかった!
おもわずAlexaに「ありがとう!」と言うと、「よかったー♪」と嬉しそうに答えてくれて、ちょっと距離が近づいた気持ちになりました。

これからも使っていこう!