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という形式にしました。例えば照明の電源オンなら”light_power_on.txt”、照明のオフは”light_power_off.txt”といった具合です。

mv data.txt light_power_off.txt

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

全灯以外にも”読書”、”食事”、”くつろぎ”、”常夜灯”等があるのでそれらは…

  • light_mode_zento.txt
  • light_mode_dokusyo.txt
  • light_mode_syokuji.txt
  • light_mode_kutsurogi.txt
  • light_mode_jyoyato.txt

って感じですかね…電源ONには普段一番よく使う全灯をセットしておく、と。

明るさや、色も段階でかえられるんだけど、そこまではいいかな。

テストしてみる

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

$ 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時に電気がつきます。

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