RaspberryPiでスマートホーム 〜赤外線リモコン操作〜
2019/09/10 |
|
2017/12/19 |
|
時間を有効活用するため早起きしよう!と決めたのはいいんですけどやっぱり起きれません。
目覚ましが鳴ったときに電気をつければそこそこ目も覚めるのですが、意思が弱くてそこで電気をつけるのにかなり苦戦します。なので”自動的に電気がつけば起きられるんではないか”と思いました。
必要なもの
照明
部屋の照明は赤外線リモコンで操作できるタイプなのでラズパイから赤外線送って自動で電気をつければ起きれるにちがいない、と思いやってみることにしました。ちなみに部屋の照明はこれです。
- アイリスオーヤマ(IRIS OHYAMA)
この照明は明るさや色(白色、暖色)段階で変えることができます。また”読書”、”食事”、”くつろぎ”等のプリセットのモードや全灯、常夜灯の機能を持っています。
USB赤外線リモコンアドバンス
ラズパイから簡単に赤外線リモコンを操作できるものとしてAmazonで
を購入しました。ラズパイとはUSBケーブルで接続します。この機器は赤外線を受信して記録するタイプなので基本的にはどの赤外線リモコンでも対応するはずです。
準備
Windows用には記録と送信のツールやプログラム用のライブラリが提供されているのですが、Linux向けには有志の方が作られたコマンドラインツールがあるのでそれを利用します。
必要なライブラリをインストール
ソースでの提供なので展開したソースをコンパイルして作成しないといけませんが、その前に必要なパッケージをインストールしておきます。
$ sudo apt-get install libusb-1.0.0
コマンドをコンパイル
コマンドラインツールは以下のページからダウンロードします。
”USB赤外線リモコンアドバンス・UNIX系環境用コマンドライン操作ツール&GUI操作ツール Ver1.0.1”のタイトルをクリックしてダウンロードします。Ver1.0.0もありますが、こちらはエアコン等の長いコマンドではうまく使えませんので、1.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_relax.txt
- light_mode_sleep.txt
って感じですかね…電源ONには普段一番よく使う全灯をセットしておく、と。明るさや、色も段階でかえられるんだけど、そこまではいいかな。
テスト
では実際にラズパイからリモコンで操作してみます。照明を全灯します。
$ bto_advanced_USBIR_cmd -d `cat light_power_on.txt`
おお、つきました。オフにします。
$ bto_advanced_USBIR_cmd -d `cat light_power_off.txt`
消えました!成功です。
運用する
次にもう少し簡単に操作できるようにシェルスクリプトを作成します。
1 2 3 4 5 6 7 8 9 |
#!/bin/bash DIR_BASE="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"/ CMD_IR="/usr/local/bin/bto_advanced_USBIR_cmd" CMD_CAT="/bin/cat" FILE_TARGET=$1.txt cd ${DIR_BASE} ${CMD_IR} -d `${CMD_CAT} ${FILE_TARGET}` |
cronからでも実行できるようにスクリプトの絶対パスを取得してそこにcdしてから実行しています。このスクリプトと記録したコマンドが書かれたファイルは、同じディレクトリにある必要があります。
chmod a+x ir.sh
で実行属性をつければ
./ir.sh light_power_on
とすれば電気がつきます。
感想
意外に簡単
私は電子工作がダメなので、Amazonで完成品を購入しました。多少お金はかかりましたが、有志の方が作られたコマンドラインツールもあって、いとも簡単に目標が達成できてしまいました。コマンドラインを操作すると電気がつく、ってのは面白いですね。さらに色々と応用もできそう。
操作はできるようになったけど…
これでラズパイでコマンドを叩けばリモコン操作ができるようになりました。これだけでもcronで指定した時間に電気をオンにする、といったことならできるようになりました。
例えば”crontab -e”で
0 5 * * * /<コマンドへのフルパス>/ir.sh light_power_on > /dev/null 2>&1
と書いて置けば毎朝5時に電気がつきます。
電気はうまいこと自動的につくようになりました。大成功です。で、結局早起きできるようになったかというと…
- アイリスオーヤマ(IRIS OHYAMA)