Nodeモジュール「irmagician」を作りました。 


# そもそもirMagicianとは？
大宮技研製の学習型赤外線リモコンです。
http://www.omiya-giken.com/?page_id=837

非常にシンプルで小さく、Raspberry PiのようなIoT端末で使う事を想定されているようです。

# irMagicianをscreenコマンドで動かしてみよう。
irMagicianを操作するためにはUSB接続からシリアル通信でコマンドを叩く必要があります。

`screen`コマンドを使ってコマンドを送る方法から始めてみましょう。
本記事ではMacへの接続を前提として話を進めます。
※ Macは標準で入ってて、Raspberry Piだと`sudo apt-get install screen`する必要があると思います。Win? 自分で調べてください。

## 1. irMagicianをUSBポートに接続する。
irMagicianをUSBケーブルを使って端末のUSBポートに挿し込みます。
そして、irMagicianが端末に認識されているかを確認しましょう。
irMagicianはCDC-ACMを採用し、Mac/Linux/WinなどのほとんどのOSで特にドライバのインストールなしに
挿せば動くという使いやすさも特徴です。

irMagicianには2つのLEDが付いています、USBポートに挿し込んだら、
右側のLED(黄)が「チカチカッ、チカチカッ」と繰り返し表示される事を確認してください。
もし前述した状態にならない場合は **挿し直してください** 十中八九うまくいきません。
また、接続して数秒後くらいにLEDがチカチカし始める事もあるのでちょっと待ってダメなら **挿し直してください**

次にMacでirMagicianをUSBポートに接続されてる事を確認します。
認識されている場合`/dev/cu.usbmodemXXXXX`のXXXXXは数字です。
irMagicianのバージョンなどによって異っていると思います。`例:cu.usbmodem01231`

以下のように確認できます。

```
ls /dev/ | grep cu.usbmodem
```

これで`cu.usbmodem01231`のような値が表示されていて、irMagicianのLEDがチカチカ光ってる事の2つを確認する事が出来たので準備万端です。

## 2. バージョン表示

screenコマンドでirMagicianとの接続します。

```
screen /dev/cu.usbmodem01231 9600
```

以下のような表示が出たらOKです。

```
… Ready
```

次に`v`と入力してEnterキーを押します。
`v`を入力しても画面には出ません。screenコマンド慣れてない人は「？」ってなる事があるので一応伝えておきます。

画面に以下のように表示がされるかと思います。

```
irMagician x.x.x
```

次は実際にirMagicianを学習型赤外線リモコンとして使っていきましょう。
しかしその前にscreenの終わらせ方についてもここで伝えておきます。
`ctrl+a, k`で終了します。
`screen`コマンド慣れていない人は`ctrl+c`で抜けられると勘違いしやすいので気をつけましょう。

## 3. キャプチャとプレイ 
学習させたいリモコンを用意します。エアコンのリモコンやテレビのリモコンなどを用意してください。

`c`を入力

```
... XX

```
キャプチャができるとXXのように数値が表示されます。そのままにしていると`Timeout`が表示されます。


`p`を入力で以下の出力が得られると思います。

```
... Done!
```


うまく狙った信号のキャプチャと発信(プレイ)が出来たでしょうか？

## 4. その他のコマンド
全コマンドと詳細については公式のサポートページをご参照ください。
http://www.omiya-giken.com/?page_id=889

# irmagician モジュール
やっと本題に入ります。

ここまで`screen`コマンドでirMagicianを操作しましたが、
これをプログラムで扱いやすくするため、irMagicianには複数のプログラミング言語で
スクリプトが要されています。python/js/Objective-c/ruby/go/phpなどがあるようです。

今回私はNode.jsでirMagicianを操作するためのモジュールを作成しました。
それが`irmagician`です。https://www.npmjs.com/package/irmagician
`irmagician`はCLIツールとしてもNodeのモジュールとしても使えるので
使い方について説明します。

## 1. CLIとして使う
CLIとして使う場合は`-g`オプションをつけてインストールしてください。

```
npm -g install irmagician
```

`irMagician`コマンドが使えるようになるはずなので叩いてみてください。
以下のヘルプメッセージが表示されます。

```
 CLI Tool for irMagician

  Usage: irMagician <command> [file] 

  Command
      capture    Capture a IR data
      play       Send a IR data
      dump       Dump written data
      write      Write a IR data from json
      info       Show irMagician Infomation
      showPorts  Show device ports

  Options
      -p, --port    Device port

  Examples
      irMagician capture
      irMagician dump data.json
      irMagician write data.json

```

以下のコマンドを用意してあります

|コマンド|説明|
|:--|:--|
|capture|赤外線信号をキャプチャして記憶します|
|play|学習した赤外線信号を発信します|
|dump|現在記憶している赤外線信号の値を標準出力に出力します。また`irMagician dump data.json`のようにdumpの後にファイル名を入れると出力内容のファイルをjson形式のファイルとして出力します。|
|write|`irMagician write data.json`のようにファイル名を指定して、irMagicianにデータを書き込みます。|
|info|irMagicianのInfoコマンドの情報をまとめて表示します|
|showPorts|端末(PC)の有効なデバイスポートの一覧を表示します。`ls /dev/ | grep cu.usbmodem`相当です|

`showPorts`でデバイスポーとの表示したり、オプションの`-p`でデバイスポートを明示的に指定できるようになっていますが、指定なしだと内部で有効なデバイスを判断して使用するようになっているので、実際は利用することはないかも。 **とりあえず何も考えず挿したら動く** はず。

## 2. Nodeモジュールとして使う
今度はNodeモジュールとしてNodeのアプリ内で利用する形で使ってみましょう。

次に`irmagician`をインストール`--save`つけるかは任せます。

```
npm install irmagician
```

`index.js`を作成し以下のようなコードを書いて使用します。

```
var irMagician = require("irmagician")
irMagician.info()
```

実行して確認してみましょう。

```
node index.js
```


# 最後に
コマンド実行時にうまく反応しない場合は **挿し直してください** 
特にMacだとセッションがうまく確立されない現象が発生する事があるようです。
私は主にMacで作業してたのである程度安定するまでは毎回抜き差ししてました ^^;