ADRSIRのコマンドラインツール IR-remocon02-commandline.pyを使ってみる

ADRSIR
今回は学習リモコン基板「ADRSIR」のコマンドラインツールを動かしてみます。

ADRSIRは学習できない事が多いエアコンの赤外線コードも多くの機種に対応しているようです。物理的なボタンが10個あり、簡単学習リモコンとして単体でも動かせるようです。Raspberry Piへつなげば学習したコードをファイルへ保存したり、ファイルのコードを送信したりできるようになり、プログラムやネットワークを使って家電製品を遠隔操作できるようになります。


(株)ビット・トレード・ワンの学習リモコン基板「ADRSIR」を買いました。
関連記事:Raspberry Pi用赤外線学習リモコン基板「ADRSIR」を動かしてみる

前回は公開されているコマンドベースツール IR-remocon01-commandbase.pyを動かすところまで行いました。今回はコマンドラインツール IR-remocon02-commandline.pyを試してみます。

ですが素直には動いてくれずコードを修正しなくてはなりません。
今回は前回の記事の続きです。使ったRaspbianのバージョンやツールを展開して保存しておく場所などは前回の記事を参照してください。

ターミナルのPythonとThonnyとでPythonのバージョンが異なりエラーも異なったりしてややこしいです。ターミナルでPythonのバージョンを表示させると2.7.13でした。開発環境のThonnyでは3.5.3です。どちらかに統一しようかとも思いましたが、できるだけ素のRaspbianの状態で動くようにします。

コマンドラインツール IR-remocon02-commandline.pyを使ってみる

スクリプトの修正

公開されているツールのスクリプトはどのバージョンのPython仕様になっているかよく判りません。
記述を見るにIR-remocon01-commandbase.pyともバージョンが違うようです。前回問題のあった割り算がint関数で囲われ整数になっています。似たサンプルプログラムなのに同時期に作った感じがしません。
とにかくラズパイのPythonで動くように修正します。

バージョン2.7でIR-remocon02-commandline.pyを実行すると177行目でエラーが出ます。print文で改行を行わないようにする方法が変わったためです。バージョン3系と2系の両方で動かす可能性がある場合はスクリプトの先頭で互換性を保つモジュールをインポートしておけば良いようです。
30行目あたりの空行に次の文を入れておきます。
from __future__ import print_function

その他の修正は次の通りです。
161行目
dir_name = '/home/pi/Downloads/ADRSIR/'

tコマンドでは肝心な関数が呼び出されていないようでした。
202行目
           trans_command(block2) #write_command(memo_no,block2)

動かしてエラーが出たところ、動かなかったところだけを修正しました。全体を見ていませんので他に問題のある場所があるかもしれません。

動かしてみる

前回のコマンドベースツールと基本的に同じです。Pythonにこのスクリプトを読ませコマンドとして動かします。
書き込みや送信の赤外線コードはファイルではなく直接コマンドの引数として渡します。

Raspberry Piでターミナルを開きます。ツールを展開したディレクトリへ移動します。
$ cd ~/Downloads/ADRSIR/

テレビの電源の赤外線コードなどを送ってみましょう。お持ちのテレビの赤外線コードを赤外線データ20171212.csvファイルから探します。

"t"コマンドで赤外線コードの送信ができます。
$ python IR-remocon02-commandline.py t "5701A900180015・・・・"

ボタン1に赤外線コードを書き込む場合は
$ python IR-remocon02-commandline.py w 0 "5701A900180015・・・・"
とします。

ボタン1に学習された赤外線コードを読み出す場合は
$ python IR-remocon02-commandline.py r 0 
とします。
赤外線コードは標準出力へ出力されるだけです。ファイルへリダイレクトするなどして赤外線コードの保存をします。

引数に赤外線コードを直接書くのは面倒です。ファイルに保存されたデータを送信する場合は
python IR-remocon02-commandline.py t `cat test.dat`
とするとできます。"w"コマンドの時も同様ですね。

これでシェルスクリプトから赤外線リモコンを自由にいじれるようになりました。

まとめ

公開されているサンプルスクリプトがちょっといいかげんすぎやしないかと・・・
ですが赤外線コードを自由に送信する環境はできたようです。

いよいよ、Google Homeと連携させる手順に進めそうです。赤外線コードの送信さえできれば、他のサイト様がいろいろな方法を公開してくれています。

Raspberry PiでNode.jsをお手軽に使うNode-REDのサンプルもあるので勉強してみようと思います。お手軽Webサーバーを立ててIFTTTと通信してみたいです。できるのかな?
関連記事:Google HomeとRaspberry PiのNode-REDで赤外線リモコンのコントロールをする

ツールの差分を下に置いておきます。


IR-remocon02-commandline.py 差分

diff --git a/org_IR-remocon02-commandline.py b/IR-remocon02-commandline.py
index acf4440..b392c0f 100644
--- a/org_IR-remocon02-commandline.py
+++ b/IR-remocon02-commandline.py
@@ -27,7 +27,7 @@
 # cmd W4_flash_write   0x49 bus-read(ADR,cmd,n)
 # cmd T1_trans_start   0x59 bus-write(ADR,cmd,n)
 #
-
+from __future__ import print_function
 import smbus
 import time
 from time import sleep
@@ -158,7 +158,7 @@ def trans_command(block2):
     bus.write_i2c_block_data(SLAVE_ADDRESS, T1_trans_start,memo_no )   #= 
 
 ###########################   main
-dir_name = '/home/pi/I2C0x52-IR/'
+dir_name = '/home/pi/Downloads/ADRSIR/'
 os.chdir(dir_name)
     
 while True:
@@ -199,7 +199,7 @@ while True:
            #print("trans_start")
            block2 = sys.argv[2]
            #print(block2)
-           write_command(memo_no,block2)
+           trans_command(block2) #write_command(memo_no,block2)
            break   
 
     print("end")

コメント

最近のコメント

Threaded Recent Comments will be here.