赤外線リモコン
node-red
Alexa
Raspberrypi3
ADRSIR

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

コントロールしたいコマンドが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連携

Alexa+Node-RED

pythonコードのバグ

  • IR-remocon02-commandline.py
202:-           write_command(memo_no,block2)
202:+           trans_command(block2)

私の環境

  • 定形アクション
    • 1つのアクションには1つの言葉しか設定できないようなので、同じアクションを複数の言葉で登録していることもあって20個以上ある…アプリだけじゃなくWebでも編集できればいいのに…
    • Screenshot_20180121-173041.png
  • https://alexa-node-red.bm.hardill.me.uk で設定したデバイス
    • キャプチャ3.PNG
  • Node-REDのフロー
    • キャプチャ2.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

その他

ケース

  • 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種
をダウンロードしておく