Amazon Echoから赤外線リモコン機器(テレビ、照明など)をコントロールする(ラズベリー・パイ専用 学習リモコン基板 ADRSIRを使って)

# ラズベリー・パイ専用 学習リモコン基板 ADRSIRとは

* http://bit-trade-one.co.jp/product/module/adrsir/
* この学習リモコン基板を導入して、Alexaからリモコンを自由に制御できるようになって、シーリングライトの制御や、テレビ、アンプの制御など、リモコンを探すことなく、ハンズフリーでコントロールできるようになって非常に便利になりました！！

# 事前準備

http://bit-trade-one.co.jp/support/download/ から「■USB接続 ラズベリー・パイ専用学習リモコン基板」または「ADRSIR」で検索して、
1. リモコンコードリスト(CSV)
2. ソフトウェア3種
をダウンロードしておく

# Raspberry Piの設定

1. http://hatobus.hatenablog.jp/entry/2017/08/02/215135 を参考に、i2c-toolsとsmbusをインストール
2. Raspberry Pi 3 Model B+RaspbianのPython 2.7だとIR-remocon02-commandline.pyはシンタックスエラーが出るので、エラー行をとりあえずコメントアウト(まずは動かすのを優先^^;)

# コマンドの意味

* w : 基板にリモコンデータを書き込み
* r : 基板からリモコンデータを読み込み
* t : リモコンデータの送信(~~IR-remocon02-commandline.pyではうまく動かなかった~~→tコマンドでtrans_commandではなく、write_commandを呼び出しているため)

# Node-RED連携

以下はコントロールしたいコマンドが10個でいい場合(⇒事前に10個のボタンにコードを"w"しておいて、ボタン指定でコード送信)

* ソフトウェア3種のZIPに入っている、nod-red-program20171213.json を、Node-REDのフローエディタのメニュー-読み込み-クリップボードに貼り付け
* そうすると、サブフロー(パレットの一番上)にリモコン1から10が追加される
* リモコン1から10は、基板上のボタン1から10に対応し、またpythonで実行する際のmemo_no(メモリ番号？)の0から9に対応する
* injectノードなどでリモコン1を実行すると、基板上のボタン1を押下したのと同じように、memo_no=0に登録したリモコンコードが送出される
![キャプチャ.PNG](https://qiita-image-store.s3.amazonaws.com/0/78540/eca6c726-d603-5b44-ecfd-edc964fc11d9.png)

コントロールしたいコマンドが10個以上ある場合(⇒"t"コマンドで動的にリモコンコードを送信する)

* IR-remocon02-commandline.pyでリモコンコードが記載されたファイルを引数にして、送信できるように修正する
 * IR-remocon01-commandbase.py から、ファイル名を受け取って送信できるtrans_commandをIR-remocon02-commandline.pyにコピペして、trans_command2のように関数名を変更する
 * コマンドtでwrite_command(上でtrans_commandに修正した場合はtrans_command)をtrans_command2(block2)に変更する
 * ~~`IR-remocon01-commandbase.py t ファイル名`~~ `IR-remocon02-commandline.py t ファイル名`で指定したファイルのリモコンコードが送信される
* functionノードで、msg.payloadにファイル名を指定する
* execノードで、~~"IR-remocon01-commandbase.py t "~~ "IR-remocon02-commandline.py t "でコマンドを実行する

# Alexa連携

* [Node-RED Alexa Home Skill Bridge](https://alexa-node-red.bm.hardill.me.uk) にアカウントを登録する
* [Node-RED Alexa Home Skill Bridge](https://alexa-node-red.bm.hardill.me.uk) でデバイスを追加する
 * 2018/01/21現在、日本語版AlexaはOn/Offと%指定ぐらいしか設定できないようなので、OnとOffのデバイスを必要な数だけ作っておく
* AlexaアプリでNode-REDスキルを有効にして、[Node-RED Alexa Home Skill Bridge](https://alexa-node-red.bm.hardill.me.uk)
とアカウント連携しておく
* Alexaアプリのスマートホームからデバイスの追加で、 [Node-RED Alexa Home Skill Bridge](https://alexa-node-red.bm.hardill.me.uk) で追加したデバイスを追加する
* Aleaxアプリから定形アクションで、アクションにデバイスのOn/Offアクションを追加する

* [Node-RED Alexa Home Skill Bridge](https://alexa-node-red.bm.hardill.me.uk/)は個人でサーバを立てていらっしゃるようです。感謝の意をこめて、 https://alexa-node-red.bm.hardill.me.uk/about のリンクからビールをおごりましょう！！


# Alexa+Node-RED

* Node-REDでパレットの管理からノードの追加でnode-red-contrib-alexa-home-skillを追加する
* alexa homeノードをフローに追加して、アカウントに https://alexa-node-red.bm.hardill.me.ukのアカウント、デバイスを設定する
* https://alexa-node-red.bm.hardill.me.uk からは、msg.deviceにデバイス名、msg.commandに`TurnOnRequest`/`TurnOffRequest`が渡ってくるので、SwitchノードやFunctionノードで、振り分けてリモコンxノードやexecノードでIR-remocon02-commandline.pyを指定して、リモコンコードを送信する

# pythonコードのバグ

* IR-remocon02-commandline.py

```
202:-           write_command(memo_no,block2)
202:+           trans_command(block2)
```

# 私の環境

* 定形アクション
 * １つのアクションには1つの言葉しか設定できないようなので、同じアクションを複数の言葉で登録していることもあって20個以上ある…アプリだけじゃなくWebでも編集できればいいのに…
 * ![Screenshot_20180121-173041.png](https://qiita-image-store.s3.amazonaws.com/0/78540/52b4e18a-fd6f-7bae-d4ac-1e9a9446ce02.png)
* https://alexa-node-red.bm.hardill.me.uk で設定したデバイス
 * ![キャプチャ3.PNG](https://qiita-image-store.s3.amazonaws.com/0/78540/72a564f2-5d8a-05b6-a737-5e047718b60c.png)
* Node-REDのフロー
 * ![キャプチャ2.PNG](https://qiita-image-store.s3.amazonaws.com/0/78540/e8bd73a5-65a5-d2bd-6a78-a6092cecb18b.png)
* コード

```
var arrFile = []
arrFile['LivingLight-TurnOnRequest']='~/I2C0x52-IR/living/ch0.data'
arrFile['LivingLight-TurnOffRequest']='~/I2C0x52-IR/living/ch1.data'
arrFile['LivingLight2-TurnOnRequest']='~/I2C0x52-IR/living/ch2.data'
arrFile['LivingLight2-TurnOffRequest']='~/I2C0x52-IR/living/ch3.data'
arrFile['LivingLight3-TurnOnRequest']='~/I2C0x52-IR/living/ch4.data'
arrFile['LivingLight3-TurnOffRequest']='~/I2C0x52-IR/living/ch5.data'
arrFile['LivingLight4-TurnOnRequest']='~/I2C0x52-IR/living/ch6.data'
arrFile['LivingLight4-TurnOffRequest']='~/I2C0x52-IR/living/ch7.data'
arrFile['Amp-TurnOnRequest']='~/I2C0x52-IR/amp/ch0.data'
arrFile['Amp-TurnOffRequest']='~/I2C0x52-IR/amp/ch1.data'
arrFile['Amp2-TurnOnRequest']='~/I2C0x52-IR/amp/ch2.data'
arrFile['Amp2-TurnOffRequest']='~/I2C0x52-IR/amp/ch3.data'
arrFile['Amp3-TurnOnRequest']='~/I2C0x52-IR/amp/ch4.data'
arrFile['Amp3-TurnOffRequest']='~/I2C0x52-IR/amp/ch5.data'
arrFile['Amp4-TurnOnRequest']='~/I2C0x52-IR/amp/ch6.data'
arrFile['Amp4-TurnOffRequest']='~/I2C0x52-IR/amp/ch7.data'
arrFile['Recorder-TurnOnRequest']='~/I2C0x52-IR/recorder/ch0.data'
arrFile['Recorder-TurnOffRequest']='~/I2C0x52-IR/recorder/ch1.data'
arrFile['Recorder2-TurnOnRequest']='~/I2C0x52-IR/recorder/ch2.data'
arrFile['Recorder2-TurnOffRequest']='~/I2C0x52-IR/recorder/ch3.data'
arrFile['Recorder3-TurnOnRequest']='~/I2C0x52-IR/recorder/ch4.data'
arrFile['Recorder3-TurnOffRequest']='~/I2C0x52-IR/recorder/ch5.data'
arrFile['Recorder4-TurnOnRequest']='~/I2C0x52-IR/recorder/ch6.data'
arrFile['TV-TurnOnRequest']='~/I2C0x52-IR/tv/ch0.data'
arrFile['TV-TurnOffRequest']='~/I2C0x52-IR/tv/ch1.data'
arrFile['TV2-TurnOnRequest']='~/I2C0x52-IR/tv/ch2.data'
arrFile['TV2-TurnOffRequest']='~/I2C0x52-IR/tv/ch3.data'
arrFile['TV3-TurnOnRequest']='~/I2C0x52-IR/tv/ch4.data'
arrFile['TV3-TurnOffRequest']='~/I2C0x52-IR/tv/ch5.data'
arrFile['TV4-TurnOnRequest']='~/I2C0x52-IR/tv/ch6.data'
arrFile['TV4-TurnOffRequest']='~/I2C0x52-IR/tv/ch7.data'
arrFile['TV5-TurnOnRequest']='~/I2C0x52-IR/tv/ch8.data'
arrFile['TV5-TurnOffRequest']='~/I2C0x52-IR/tv/ch9.data'
arrFile['TV6-TurnOnRequest']='~/I2C0x52-IR/tv2/ch0.data'
arrFile['TV6-TurnOffRequest']='~/I2C0x52-IR/tv2/ch1.data'
arrFile['TV7-TurnOnRequest']='~/I2C0x52-IR/tv2/ch2.data'
arrFile['TV7-TurnOffRequest']='~/I2C0x52-IR/tv2/ch3.data'

msg.payload = arrFile[msg.name + "-" + msg.command]?arrFile[msg.name + "-" + msg.command]:null

```

* 管理用Excel
![キャプチャ4.PNG](https://qiita-image-store.s3.amazonaws.com/0/78540/add6bb58-2caa-2850-19b8-97149b8cba73.png)



# その他

## ケース

* RSコンポーネンツ製ケース http://ssci.to/2648 には残念ながら入らない
* オフィシャルケースには入る

## リモコンコードを学習させる

* 基板上のスライドスイッチをlearnにすると、LEDが青色に点灯
* 学習させるボタンを押下
* 基板にリモコンを向けて学習させたいボタンを押す
* IR-remocon01-commandbase.pyまたはIR-remocon02-commandline.pyでr/rdして、ファイルに落とす
 * IR-remocon01-commandbase.pyでディレクトリを作成、切り替えながら10個ずつファイルに落とすと楽かも。

## ソースコード

http://bit-trade-one.co.jp/support/download/ から「■USB接続 ラズベリー・パイ専用学習リモコン基板」または「ADRSIR」を検索して、
1. リモコンコードリスト(CSV)
2. ソフトウェア3種
をダウンロードしておく