ラズベリーパイとビット・トレード・ワンから販売されている赤外線学習リモコンとを使って、部屋の照明をコントロールしてみます。
簡単なスクリプトで、部屋の照明を自動オン、自動オフ、フェードイン、フェードアウトできます。
事前準備
この記事に書いた内容をお試しになる前に、以下の記事にしたがって、USB赤外線リモコンADVANCEを使用するためのツールをインストールしておいてください。
USB赤外線リモコンADVANCEで照明のリモコンデータを学習する
今回、評価に使った照明器具は以下のものです。
- 照明器具: Panasonic HH-LC556AE
- リモコン: Panasonic HK9487
リモコンは照明器具に付属のもので、以下のキーがついています。
- 点灯
- 消灯
- 白い色 <---> 暖かい色
- 明るい <---> 暗い
- 全灯
- 常夜灯
- おやすみ30
これらのキーを押した時のリモコンコードを、USB赤外線リモコンADVANCE で学習してみます。
リモコンコードの学習の手順は以下の通りです。
- ラズベリーパイにUSB赤外線リモコンADVANCEを接続
- LX Terminalを開く
- コマンドラインで「bto_advanced_USBIR_cmd -r」を実行
- 照明器具のリモコンをUSB赤外線リモコンADVANCEに向けて、キーを押す
- コマンドラインで「bto_advanced_USBIR_cmd -s」を実行
- コマンドラインで「bto_advanced_USBIR_cmd -g > XXX.dat」を実行(XXXは後述)
ここまでで、照明器具のリモコンの一つのキーをUSB赤外線リモコンADVANCEで学習できます。
あとはこの操作の3から6を、照明のリモコンのキーの数だけ繰り返します。
上記の手順を補足します。
3. の操作ですが、これはUSB赤外線リモコンADVANCEを受信状態にするコマンドです。
1 2 | $ bto_advanced_USBIR_cmd -r 受信を開始しました。 |
と表示されると思います。
次に4. の操作ですが、USB赤外線リモコンADVANCEには赤外線受光用の部品(RCVと印刷されている部品)が実装されているので、照明器具のリモコンをそこに向けてキーを押します。
次の5.の操作は、USB赤外線リモコンADVANCEの受信状態を解除するコマンドです。
1 2 | $ bto_advanced_USBIR_cmd -s 受信を停止しました。 |
と表示されますね。
ここまでで、USB赤外線リモコンADVANCEは、学習するリモコンキー1個分のリモコンデータを保持しています。次にこれをファイルに書き込む操作が6.です。
XXX.datというファイル名を書いていますが、わかりやすいように照明器具のリモコンのボタンに関係する名前にするとよいでしょう。
ここでは、「点灯」ボタンを学習するときはON.dat, 「消灯」ボタンを学習するときはOFF.datという名前にすることにします。
今回、学習するボタンの数は、白い色<--->暖かい色のキーなどを2個と数えると、全部で9個です。数が少ないので、今回は手動でこれらのキーを学習していくことにします。(学習するキーがたくさんある場合は別にスクリプトを作ります。)
キー | ファイル名 |
点灯 | ON.dat |
消灯 | OFF.dat |
白い色 | WHITE.dat |
暖かい色 | WARM.dat |
明るい | BRIGHT.dat |
暗い | DARK.dat |
全灯 | ALL.dat |
常夜灯 | NIGHT.dat |
おやすみ30 | SLEEP.dat |
先ほど書いた、リモコンコードの学習の手順にしたがって、上記の9つのリモコンコードファイルを作ってください。
照明器具の型番やリモコンのキーの数が異なっている場合は、お手持ちの照明器具にしたがって作ってください。
リモコンコードの試験送出
さて、いよいよリモコンコードの試験送出です。
送出方法は簡単です。ここでは、bto_advanced_USBIR_cmdのマニュアルに記載の通り、catコマンドを介して発行してみます。
部屋の照明をつけた状態で、USB赤外線リモコンADVANCEを照明器具に向けておき、
1 | $ bto_advanced_USBIR_cmd -d `cat OFF.txt` |
をLX Terminalで実行してみてください。照明が消えるはずです。
次に、
1 | $ bto_advanced_USBIR_cmd -d `cat ON.txt` |
を実行してみてください。今度は照明が点灯しますね。
他のキーの学習データを収めたファイルに入れかえて、いろいろ試してみましょう。
リモコンコードを送出するスクリプト
リモコンコードの試験送出が終わったら、スクリプトを使って自動操作をしてみましょう。
サンプルをいくつかご紹介します。この記事ではシェルスクリプトで書きます。
照明を任意の時間後に消灯
このリモコンには「30分後に消灯」する機能がついていますが、もっと自由に、任意の時間後に消灯するスクリプトを作ってみましょう。
1 2 3 4 5 6 7 8 9 10 11 | #!/bin/sh ARG1=$1 SLEEP_TIME=${ARG1:-30m} echo "I will turn off the light after sleeping $SLEEP_TIME." sleep $SLEEP_TIME bto_advanced_USBIR_cmd -d `cat OFF.dat` exit 0 |
このsample_off.shというスクリプトは、引数を一つとります。
7行目の$SLEEP_TIMEにその引数が渡ります。
つまり、
1 | $ ./sample_off.sh 1m |
を実行すれば、1分後に消灯しますし、1mを1hに変更すれば1時間後に消灯します。
4行目の記述は、変数の初期値を設定する記述です。詳細をは省略しますが、
1 | $ ./sample_off.sh |
のように引数を省略すると、30mという値を使って実行します。つまり、30分後に消灯です。
照明をオンにするスクリプトも、上記のスクリプトを少し変更すれば簡単にできますね。
照明を任意の時間後からフェードアウト
せっかくですので、フェードアウトするスクリプトも考えてみます。
フェードアウトは、「暗い」キーを連打する操作によって行うこととします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #!/bin/sh INTERVAL=1 FADEOUT_STEP=100 ARG1=$1 SLEEP_TIME=${ARG1:-30m} echo "I will turn off the light after sleeping $SLEEP_TIME." sleep $SLEEP_TIME while [ $FADEOUT_STEP -gt 0 ];do bto_advanced_USBIR_cmd -d `cat DARK.dat` sleep $INTERVAL FADEOUT_STEP=`expr $FADEOUT_STEP - 1` done bto_advanced_USBIR_cmd -d `cat OFF.dat` exit 0 |
INTERVAL, FADEOUT_STEPという2つの変数を追加しました。
INTERVALは、DARKキーを押す時間間隔です。ここでは1secにしました。
FADEOUT_STEPは、DARKキーを押す回数です。ここでは100回としましたが、どこまで暗くするかによって調節します。
12行目からのループが、DARKキーを押すループです。
このループを抜けたら、OFF.datを使って消灯します。
このスクリプトの引数はsample_off.shと同じです。ぜひ試してみてください。