RaspberryPi Zero WとNode-REDとirMagicianで家の照明をリモコン制御しているメモ

この記事はIoTLT Advent Calendar 2017 - Qiitaの7日目の記事です。ポキオ @pokiiio さんからダァ シエリイェスなライブラリをつかって、みんなでダァしたい。というダァ度の高いステキな記事からバトンタッチさせていただきます。ワンフットシーバス 田中です。

この記事ではRaspberryPi Zero WとNode-REDとirMagicianで家の照明をリモコン制御している現状のメモを書かせていただきます。

現状

image_01.jpg

こちらが家の照明なんですがこのような赤外線リモコンです。これ、結構、家の中で見失ったりして困ります。

リモコンが複数あったらなあーとも思うのですが、ちょっと違う。どちらかと言うと、スマホで制御できたりすると、ちょっとKindleで本読んだあとにブラウザを開いて照明制御なんて出来ると、リモコンを向けたりする必要なく操作でき、より家の中の家電操作へ利便性が高まるだろうと思いました。

image_02.jpg

実際に出来上がったものはこちら。説明していきます。

まず、赤外線送信部分はirMagicianに決めた

image_03.jpg

今回の操作の起点となる赤外線リモコンはこちらにしました。

irMagician – 高機能/低価格赤外線リモコン | 大宮技研 合同会社
http://www.omiya-giken.com/?page_id=837

ちまたには、Alexaと連携できるリモコンシステムなどもあったのですが、まだ自分が確定した使い方になっていないのもありますし、もし今後用途を広げようと思ったときに市販のものの制限がでると難しくなりそうだなということで今回は除外。

とはいえ、何と言っても、 @tamaki さんの記事を見て、いつかしっかり使ってみたかったというのが本音です。やりたかったんだー!

Nodeモジュール「irmagician」を作りました。 - Qiita
https://qiita.com/tamaki/items/f4127249ec211f7d70cd

以前もGroveの赤外線センサーで信号を出したりしているものの案外難しい記憶があり、かなり送信間隔やデータ量など気を使う必要がありました。

ですので、しっかりした運用をしつつマジな赤外線信号を扱って見たいという気持ちがありました。それがirMagician。

RaspberryPi Zero WとNode-REDの準備

RaspberryPi Zero WとNode-REDの準備。このあたりは、私のブログですが、

RaspberryPi Zero WでのNode-REDをアップグレードするメモ – 1ft-seabass.jp.MEMO
https://www.1ft-seabass.jp/memo/2017/12/01/raspberrypi-w-zero-node-red-install-tips/

で詳しく書かせていただいていまして、Node-RED ver.0.17.5 をインストールできました。

image_04.jpg

このようにirMagicianとつなぎます。

node-red-contrib-irmagician をインストール

つづいて、Node-REDに node-red-contrib-irmagician をインストールします。

これまた、 @tamaki さんが制作されてますね。感謝です。

node-red-contrib-irmagician
https://www.npmjs.com/package/node-red-contrib-irmagician

インストールしてみましょう。

image_05.png

パレットの管理には検索で出てこないため、ここからはインストール出来ないので、従来のNodeの追加にあるように「npmパッケージングされたNodeのインストール方法」でインストールします。

cd ~/.node-red

npm i node-red-contrib-irmagician

しばらく待っているとインストールされます。途中、WARNなどでますが、無事入りました。こちらで準備完了です。

image_06.png

フローをつくる

つづいて、Node-REDのフローを作ります。

image_07.png

リモコンの普段ボタン・全灯ボタン・常夜灯ボタンの挙動を作っています。

image_01.jpg

以下は常夜灯ボタンの設定を代表して紹介しています。

irMagician 設定(write)

image_09.png

irMagicianは赤外線リモコンを動作させるためにirMagician writeノードを使って設定します。

image_10.png

ファイル指定をするのは、後述する赤外線データを記録した dump データを指定します。

image_11.png

その後、irMagician playにつないで赤外線信号を発生させるわけですが、書き込みに1秒間をおいているのがミソです。ちょっと連打を防ぐ実装は導入できてないので、いずれ頑張ります。いまは、そーっと触る手運用でやってます。

ダッシュボードボタン

image_12.png

リモコン用のボタンはNode-REDのダッシュボードで作っています。

image_13.png

中身の設定は、見た目のボタン設定だけです。

image_14.png

さきほどのフローによって各ボタンを作成し、結果表示もつけてこんな画面になっています。

フローJSONデータ

今回のフローJSONデータも置いておきます。

[{"id":"17918127.d3b17f","type":"irMagician write","z":"af267324.d3a44","name":"普段点灯","file":"/home/pi/Desktop/irMagician/main_light.json","x":483,"y":483,"wires":[["b0b80bdd.03c8c8"]]},{"id":"e705c07a.ae3d","type":"inject","z":"af267324.d3a44","name":"普段点灯","topic":"","payload":"普段点灯","payloadType":"str","repeat":"","crontab":"","once":false,"x":160,"y":480,"wires":[["17918127.d3b17f"]]},{"id":"3936bb8b.82adf4","type":"inject","z":"af267324.d3a44","name":"全点灯","topic":"","payload":"全点灯","payloadType":"str","repeat":"","crontab":"","once":false,"x":150,"y":560,"wires":[["c1842df3.2ae77"]]},{"id":"c1842df3.2ae77","type":"irMagician write","z":"af267324.d3a44","name":"全点灯","file":"/home/pi/Desktop/irMagician/all_light.json","x":480,"y":556,"wires":[["b0b80bdd.03c8c8"]]},{"id":"42781417.0ce04c","type":"inject","z":"af267324.d3a44","name":"常夜灯","topic":"","payload":"常夜灯","payloadType":"str","repeat":"","crontab":"","once":false,"x":150,"y":640,"wires":[["2db15fd8.2ce35"]]},{"id":"2db15fd8.2ce35","type":"irMagician write","z":"af267324.d3a44","name":"常夜灯","file":"/home/pi/Desktop/irMagician/night_light.json","x":475,"y":639,"wires":[["b0b80bdd.03c8c8"]]},{"id":"9b6550f1.bbc88","type":"irMagician play","z":"af267324.d3a44","name":"","x":922,"y":554,"wires":[]},{"id":"b0b80bdd.03c8c8","type":"delay","z":"af267324.d3a44","name":"","pauseType":"delay","timeout":"1","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":704,"y":550,"wires":[["9b6550f1.bbc88","cb3b2066.c0fff","dd1fd18.2cea03"]]},{"id":"dd1fd18.2cea03","type":"debug","z":"af267324.d3a44","name":"","active":true,"console":"false","complete":"false","x":918,"y":613,"wires":[]},{"id":"e3b2bb79.e2f158","type":"ui_button","z":"af267324.d3a44","name":"普段点灯","group":"12917a89.9534c5","order":0,"width":0,"height":0,"passthru":false,"label":"普段点灯","color":"","bgcolor":"","icon":"","payload":"普段点灯","payloadType":"str","topic":"","x":316,"y":449,"wires":[["17918127.d3b17f"]]},{"id":"b673f197.81b48","type":"ui_button","z":"af267324.d3a44","name":"全点灯","group":"12917a89.9534c5","order":0,"width":0,"height":0,"passthru":false,"label":"全点灯","color":"","bgcolor":"","icon":"","payload":"全点灯","payloadType":"str","topic":"","x":314,"y":523,"wires":[["c1842df3.2ae77"]]},{"id":"e8c638a.35cdcc8","type":"ui_button","z":"af267324.d3a44","name":"常夜灯","group":"12917a89.9534c5","order":0,"width":0,"height":0,"passthru":false,"label":"常夜灯","color":"","bgcolor":"","icon":"","payload":"常夜灯","payloadType":"str","topic":"","x":313,"y":597,"wires":[["2db15fd8.2ce35"]]},{"id":"cb3b2066.c0fff","type":"ui_text","z":"af267324.d3a44","group":"12917a89.9534c5","order":0,"width":0,"height":0,"name":"","label":"ACTION","format":"{{msg.payload}}","layout":"row-spread","x":907,"y":430,"wires":[]},{"id":"d01bb514.a05cc8","type":"comment","z":"af267324.d3a44","name":"ダッシュボード用ボタン","info":"","x":264,"y":397,"wires":[]},{"id":"bcb8227f.9a808","type":"comment","z":"af267324.d3a44","name":"irMagician 設定(write)","info":"","x":529,"y":432,"wires":[]},{"id":"5ea152b.6f035ac","type":"comment","z":"af267324.d3a44","name":"ダッシュボード用結果","info":"","x":943,"y":383,"wires":[]},{"id":"2a41e7ae.6fdda8","type":"comment","z":"af267324.d3a44","name":"irMagician 赤外線発生(play)","info":"","x":970,"y":505,"wires":[]},{"id":"12917a89.9534c5","type":"ui_group","z":"","name":"Default","tab":"8bc10606.0f8f78","disp":true,"width":"6"},{"id":"8bc10606.0f8f78","type":"ui_tab","z":"","name":"Home","icon":"dashboard"}]

これでRaspberryPi Zero WとNode-REDの準備は完了です!

リモコン情報をキャプチャ

image_15.png

あとは、各機能のキャプチャをします。

Node-REDの node-red-contrib-irmagician を入れてもキャプチャは出来ないので

Nodeモジュール「irmagician」を作りました。 - Qiita
https://qiita.com/tamaki/items/f4127249ec211f7d70cd

を見ながら、

irmagician
https://www.npmjs.com/package/irmagician

をインストールしましょう。

sudo npm -g install irmagician

image_16.png

しばらく待っているとインストールされます。

キャプチャしてみる

私の場合は

sudo irMagician capture

を実行してうまくいきまして、

image_17.png

dumpで確認してもうまく行った様子。

image_18.png

ひとつひとつキャプチャして保存して、普段ボタン・全灯ボタン・常夜灯ボタンぶん準備しました。

余談:sudoなしだとエラーでうまく入らないので注意

npm -g install irmagician だとエラーでうまく入らないので注意です。

npm ERR! Linux 4.9.41+
npm ERR! argv "/usr/bin/node" "/usr/bin/npm" "-g" "install" "irmagician"
npm ERR! node v6.12.1
npm ERR! npm  v3.10.10
npm ERR! path /usr/lib/node_modules
npm ERR! code EACCES
npm ERR! errno -13
npm ERR! syscall access

npm ERR! Error: EACCES: permission denied, access '/usr/lib/node_modules'
npm ERR!     at Error (native)
npm ERR!  { Error: EACCES: permission denied, access '/usr/lib/node_modules'
npm ERR!     at Error (native)
npm ERR!   errno: -13,
npm ERR!   code: 'EACCES',
npm ERR!   syscall: 'access',
npm ERR!   path: '/usr/lib/node_modules' }
npm ERR! 
npm ERR! Please try running this command again as root/Administrator.

npm ERR! Please include the following file with any support request:
npm ERR!     /home/pi/npm-debug.log

いざやってみる

image_19.jpg

まず全灯で待ちます。

image_20.jpg

常夜灯!動作!!

image_21.jpg

動作させて気づいたのですが、ちゃんとリモコンを照明に向けてやらないと動作しにくことが分かり、かなり近くに設置させてみました。

スマホから動かしてみる

それではNode-REDダッシュボードを表示して操作してみます!

image_22.gif

動きました!

まとめ

ということで、RaspberryPi Zero WとNode-REDとirMagicianで家の照明をリモコン制御しているメモをお伝えしました。

これを作ってみて、赤外線リモコンの性質や、IoT制御することへの便利さ、対応するためのそれなりの工数、つくる楽しさなど色々と学ぶことが出来ました。しかし、なにより、はじめて動いたときの喜びは格別でした。

ちゃんとした市販の学習リモコンシステムなども検討しつつ、こちらの仕組みもブラッシュアップしながら、楽しくハックしていこうと思います。

明日は

@ki_230 さんです!楽しみですー。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.