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

この記事は[IoTLT Advent Calendar 2017 \- Qiita](https://qiita.com/advent-calendar/2017/iotlt)の7日目の記事です。ポキオ @pokiiio さんから[ﾀﾞｧ ｼｴﾘｲｪｽなライブラリをつかって、みんなでﾀﾞｧしたい。](https://qiita.com/pokiiio/items/2b1ac1de32efe7a444a3)というﾀﾞｧ度の高いステキな記事からバトンタッチさせていただきます。[ワンフットシーバス](https://www.1ft-seabass.jp/) 田中です。

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

## 現状

![image_01.jpg](https://qiita-image-store.s3.amazonaws.com/0/56170/fcacc45a-d4ab-4a21-9d3b-61b67c17ac1d.jpeg)

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

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

![image_02.jpg](https://qiita-image-store.s3.amazonaws.com/0/56170/9b9acfeb-ec42-d822-737e-0d3296ec9b20.jpeg)

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

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

![image_03.jpg](https://qiita-image-store.s3.amazonaws.com/0/56170/de0fea8d-f029-fb62-59b6-eda567c7963f.jpeg)

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

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](https://qiita-image-store.s3.amazonaws.com/0/56170/c9859eec-311d-4007-d933-2a71c3c1268b.jpeg)

このように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](https://qiita-image-store.s3.amazonaws.com/0/56170/30eb297a-5a4a-caab-74ee-f76df366be00.png)

パレットの管理には検索で出てこないため、ここからはインストール出来ないので、従来の<a href="https://nodered.jp/docs/getting-started/adding-nodes" target="_blank">Nodeの追加</a>にあるように「npmパッケージングされたNodeのインストール方法」でインストールします。

```bash
cd ~/.node-red

npm i node-red-contrib-irmagician
```

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

![image_06.png](https://qiita-image-store.s3.amazonaws.com/0/56170/ca056051-eef4-4a57-aee7-5f9d161c22dc.png)

## フローをつくる

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

![image_07.png](https://qiita-image-store.s3.amazonaws.com/0/56170/2f265cbf-b8fb-6b4b-dc19-5aa4a1d9f73d.png)

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

![image_01.jpg](https://qiita-image-store.s3.amazonaws.com/0/56170/40a13f80-1636-a258-ae20-2ce9b91aafae.jpeg)

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

### irMagician 設定（write）

![image_09.png](https://qiita-image-store.s3.amazonaws.com/0/56170/f3723f02-c3c8-f627-4aaf-4614e4837e26.png)

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

![image_10.png](https://qiita-image-store.s3.amazonaws.com/0/56170/8017225f-d0d4-aa6c-7e0f-c71295203267.png)

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

![image_11.png](https://qiita-image-store.s3.amazonaws.com/0/56170/ab498a64-d78a-30e2-db2a-297ce0d6ab52.png)

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

### ダッシュボードボタン

![image_12.png](https://qiita-image-store.s3.amazonaws.com/0/56170/2b71fa5c-9175-df55-74b7-fc51d6ca28d5.png)

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

![image_13.png](https://qiita-image-store.s3.amazonaws.com/0/56170/eb1f4bff-da03-67f4-3446-902edd06207e.png)

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

![image_14.png](https://qiita-image-store.s3.amazonaws.com/0/56170/32dc4d0a-cc90-8066-998f-1f98477e5124.png)

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

### フローJSONデータ

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

```js
[{"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](https://qiita-image-store.s3.amazonaws.com/0/56170/96f94039-c9d0-9ee0-18d0-9644117b8924.png)

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

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

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

を見ながら、

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

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

```bash
sudo npm -g install irmagician
```

![image_16.png](https://qiita-image-store.s3.amazonaws.com/0/56170/9db3c319-3826-e83a-a336-1c50fe17ff54.png)

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

### キャプチャしてみる

私の場合は

```bash
sudo irMagician capture
```

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

![image_17.png](https://qiita-image-store.s3.amazonaws.com/0/56170/d06d999c-8c83-88e0-52bc-424cfb44d973.png)

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

![image_18.png](https://qiita-image-store.s3.amazonaws.com/0/56170/680e6229-ac2a-0ff2-8200-20a844bdf63c.png)

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

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

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

```bash
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](https://qiita-image-store.s3.amazonaws.com/0/56170/50b8ca04-02dd-901f-cebb-2c516bdf7c0d.jpeg)

まず全灯で待ちます。

![image_20.jpg](https://qiita-image-store.s3.amazonaws.com/0/56170/246e6eb6-db66-b624-2611-e727e48c0555.jpeg)

常夜灯！動作！！

![image_21.jpg](https://qiita-image-store.s3.amazonaws.com/0/56170/23055b01-c648-6c03-1df9-1fbd7985b293.jpeg)

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

## スマホから動かしてみる

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

![image_22.gif](https://qiita-image-store.s3.amazonaws.com/0/56170/705f99b9-b068-7887-b0c5-235799b0a878.gif)

動きました！

## まとめ

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

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

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

## 明日は

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