Raspberry Piの赤外線リモコンADRSIRで連続して赤外線コードを送信するシェルスクリプトを作りました
Raspberry Pi用の赤外線リモコンで赤外線コードを連続で送信するスクリプトを作ります。Google Homeとの連携がより便利になるかな?
前回の記事でRaspberry PiのNode-REDを使いGoogle Homeの音声認識から赤外線を発光させることができました。
Google HomeとRaspberry PiのNode-REDで赤外線リモコンのコントロールをする
Rapberry Pi側のシェルスクリプトを改造すれば複数の赤外線コードを発信できると書いたので、早速それに対応できるシェルスクリプトを作ってみました。
前回の環境はそのまま、File2IR.shだけの変更です。
今回はこれを複数行に対応させます。
ついでに改行コードの違いによる不具合にも対応させます。Windowsで送信コードをコピーしRaspbianのテキストエディタへペーストすると改行コードがWindows仕様の\r\nになる事があります。すると送信コードのお尻に改行コードが付いたままIR-remocon02-commandline.pyの引数に渡されエラーになる事があります。対策として引数を少し整形する事にします。
整形のついでに、"#"で始まる行はコメントとして無視します。
空行があると500msのスリープをします。
以下のスクリプトをFile2IR.shとして保存してください。
ファイルの場所は、安全のため"/home/pi/Downloads/ADRSIR/IRCODEs"ディレクトリのファイルしか読めないようにしています。テキストファイルはこのディレクトリに置いてください。異なるディレクトリを使いたい場合は上述のスクリプトを変更願います。
赤外線コードを1行づつ書いてください。#で始まる行は無視します。コメントとして使えます。
改行だけの行があると0.5秒間のsleepを実行します。
例えば
テレビON→照明ON→1秒待機→チャンネルを1に
という一連の動作が行えます。
音量のアップ・ダウンは1回の赤外線コードの送信ではあまり変化が無かったりします。そんな時、ボリュームアップの赤外線コードをいくつか書いておけば連続して送信する事ができます。
赤外線コード以外の文字があっても引数として渡してしまいますので、スペースだけの行とか作らないよう注意してください。
送信コードを送る行を変更すれば、赤外線リモコンはADRSIRに限らず使えるでしょう。
複数の赤外線コードを一度の命令で送れるようになると応用の幅が広がります。家の家電を無駄に赤外線操作したくなります。まだLED化をしていない照明を買い替えたいな。
とはいえGoogle Homeにしゃべりかけるのが面倒だけど。
IFTTTのサービスを見てスマートホームを意識しだすと日本メーカーの時代遅れっぷりに気づいてしまいます。
前回の記事でRaspberry PiのNode-REDを使いGoogle Homeの音声認識から赤外線を発光させることができました。
Google HomeとRaspberry PiのNode-REDで赤外線リモコンのコントロールをする
前回の環境はそのまま、File2IR.shだけの変更です。
複数の赤外線コードを送信するシェルスクリプト
前回のFile2IR.shスクリプトは引数に赤外線コードが書かれたファイルを指定し、ファイルの1行目を赤外線コードと解釈して送信しています。今回はこれを複数行に対応させます。
ついでに改行コードの違いによる不具合にも対応させます。Windowsで送信コードをコピーしRaspbianのテキストエディタへペーストすると改行コードがWindows仕様の\r\nになる事があります。すると送信コードのお尻に改行コードが付いたままIR-remocon02-commandline.pyの引数に渡されエラーになる事があります。対策として引数を少し整形する事にします。
整形のついでに、"#"で始まる行はコメントとして無視します。
空行があると500msのスリープをします。
以下のスクリプトをFile2IR.shとして保存してください。
#! /bin/bash IRPATH=/home/pi/Downloads/ADRSIR cd $IRPATH CODEFILE=`basename $1` CODEFULLPATH=$IRPATH/IRCODEs/$CODEFILE if [ ! -e $CODEFULLPATH ]; then echo $CODEFILE :file not found. >&2 exit 1 fi CODEs=`grep -v '^\s*#' $CODEFULLPATH` #echo $CODEs while read line do code=`echo $line | sed -e "s/[\r\n]\+//g"` if [ -z "$code" ]; then sleep 0.5 else python IR-remocon02-commandline.py t $code sleep 0.05 fi done <<END $CODEs END exit 0
引数に渡すテキストファイルの書式
File2IR.shの引数にはテキストファイル名を指定します。ファイル名だけでフルパスは必要ありません。パスは無視されます。ファイルの場所は、安全のため"/home/pi/Downloads/ADRSIR/IRCODEs"ディレクトリのファイルしか読めないようにしています。テキストファイルはこのディレクトリに置いてください。異なるディレクトリを使いたい場合は上述のスクリプトを変更願います。
赤外線コードを1行づつ書いてください。#で始まる行は無視します。コメントとして使えます。
改行だけの行があると0.5秒間のsleepを実行します。
例えば
#テレビの電源オン 001122334455・・・ #照明オン 1A2B3C4D5E6F・・・ #1chにする 001166778899・・・と書きます。すると、
テレビON→照明ON→1秒待機→チャンネルを1に
という一連の動作が行えます。
音量のアップ・ダウンは1回の赤外線コードの送信ではあまり変化が無かったりします。そんな時、ボリュームアップの赤外線コードをいくつか書いておけば連続して送信する事ができます。
赤外線コード以外の文字があっても引数として渡してしまいますので、スペースだけの行とか作らないよう注意してください。
まとめ
1時間程度でできるな・・・と気楽に始めたらgrepではまりました。grepした後、行のnull判定ができなかったんです。なんで改行がWindows形式で付くんだ?バグか?どうにも納得がいかない。送信コードを送る行を変更すれば、赤外線リモコンはADRSIRに限らず使えるでしょう。
複数の赤外線コードを一度の命令で送れるようになると応用の幅が広がります。家の家電を無駄に赤外線操作したくなります。まだLED化をしていない照明を買い替えたいな。
とはいえGoogle Homeにしゃべりかけるのが面倒だけど。
IFTTTのサービスを見てスマートホームを意識しだすと日本メーカーの時代遅れっぷりに気づいてしまいます。
コメント
コメントを投稿