RaspberryPiでスマートホーム 〜赤外線リモコン操作〜

時間を有効活用するため早起きしよう!と決めたのはいいんですけどやっぱり起きれません。

目覚ましが鳴ったときに電気をつければそこそこ目も覚めるのですが、意思が弱くてそこで電気をつけるのにかなり苦戦します。なので”自動的に電気がつけば起きられるんではないか”と思いました。

部屋の照明は赤外線リモコンで操作できるタイプなのでラズパイから赤外線送って自動で電気をつければ起きれるにちがいない、と思いやってみることにしました。ちなみに部屋の照明はこれです。

ついでなので照明だけでなくエアコンも赤外線リモコンだしこっちも操作できるようにしてみます。

USB赤外線リモコンアドバンス

ラズパイから簡単に赤外線リモコンを操作できるものとしてAmazonで

を購入しました。ラズパイとはUSBケーブルで接続します。この機器は赤外線を受信して記録するタイプなので基本的にはどの赤外線リモコンでも対応するはずです。

コマンドをコンパイル

Windows用には記録と送信のツールやプログラム用のライブラリが提供されているのですが、Linux向けには有志の方が作られたコマンドラインツールがあるのでそれを利用します。

ソースでの提供なので展開したソースをコンパイルして作成しないといけませんが、その前に必要なパッケージをインストールしておきます。

$ sudo apt-get install libusb-1.0.0

コマンドラインツールは以下のページからダウンロードします。

”USB赤外線リモコンアドバンス・UNIX系環境用コマンドライン操作ツール&GUI操作ツール Ver1.0.1”のタイトルをクリックしてダウンロードします。

”bto_advanced_USBIR_cmd.zip”というファイルがダウンロードされるので展開します。そして

$ make
$ sudo make install

”bto_advanced_USBID_cmd”というコマンドが作成され/usr/local/binにコピーされます。

これでコマンドが使えるようになりました。コマンドの主な使い方は次の通りです。

(受信開始)
$ bto_advanced_USBIR_cmd -r
 
(受信終了)
$ bto_advanced_USBIR_cmd -s
 
(受信したデータをdata.txtに書き出す)
$ bto_advanced_USBIR_cmd -g | tee data.txt
 
(data.txtのコマンドを送信する)
$ bto_advanced_USBIR_cmd -d `cat data.txt`

リモコンを学習する

実際にエアコンの電源のオンを記録してみます。まずは記録を開始します。
$ bto_advanced_USBIR_cmd -r

USB赤外線リモコンアドバンスに向けて電源のオンボタンを押します。エアコンの電源が入るはずです。

記録を終了します。

$ bto_advanced_USBIR_cmd -s

記録したデータをファイルに書き出します。
$ bto_advanced_USBIR_cmd -g | tee data.txt

これでdata.txtというファイルにエアコンの電源をオンにするコマンドが書き出されました。

書き出したデータのファイル名をリネームします。

ファイル名はリソース_コマンド_パラメータ.txtという形式にしました。例えばエアコンの電源オンなら”aircon_power_on.txt”、温度を25度なら”aircon_temp_25.txt”、照明のオフは”light_power_off.txt”といった具合です。

mv data.txt light_power_off.txt

この作業を必要な機能の分だけ繰り返します。

注意点としては1つのボタンに複数の機能が割り当てられている場合はそれぞれ別のコマンドとして記録する必要があります。

例えば私の部屋のエアコンのボタンはオン・オフが一つのボタンに割り当てられていて一回押すとオン、もう一回押すとオフになります。ボタンは一つですがオンのコマンドとオフのコマンドは別なのでオンにするときに記録、オフにするときにも記録、と別々に記録する必要があります。

他にも温度設定は一度上げる、一度下げるというボタンになっていますが実際のコマンドは”25度にする”、”26度にする”というコマンドが送られているのでそれぞれの温度ごとに記録しないといけません。

全ての機能はいらないのでエアコンは電源のオン・オフ、モード(冷房、暖房)、風量(しずか、1、2)、温度(25、26、27)の機能を記録しました。照明はとりあえず全灯・消灯のみ対応します。

テストしてみる

では実際にラズパイからリモコンで操作してみます。照明を全灯します。

$ bto_advanced_USBIR_cmd -d `cat light_power_on.txt`

おお、つきました。オフにします。

$ bto_advanced_USBIR_cmd -d `cat light_power_off.txt`

消えました!成功です。

次にもう少し簡単に操作できるようにシェルスクリプトを作成します。

cronからでも実行できるようにスクリプトの絶対パスを取得してそこにcdしてから実行しています。ir.shと記録したコマンドが書かれたファイルは同じディレクトリにある必要があります。

chmod a+x ir.sh
で実行属性をつければ

./ir.sh light_power_on
とすれば電気がつきます。

操作はできるようになったけど…

これでラズパイでコマンドを叩けばリモコン操作ができるようになりました。これだけでもcronで指定した時間に電気をオンにする、といったことならできるようになりました。

例えば”crontab -e”で
0 5 * * * /<コマンドへのフルパス>/ir.sh light_power_on
と書いて置けば毎朝5時に電気がつきます。

電気はうまいこと自動的につくようになりました。大成功です。で、結局早起きできるようになったかというと…