メイドを雇おう
こんにちは
この記事は klis Advent Calendar 2015 の9日目の記事になります.
主催者曰く
現在klisな人,かつてklisだった人,これからklisになる人たちで記事を書きましょう.
本文に「klis」が入っていれば内容は問いません.
とのことで,先程ので条件は満たしてしまったので好きに書いていきます.
なぜメイドを雇うのか
最近寒いですね*1.こんな寒い日に家に帰って暖かい部屋が迎えてくれると嬉しいのですが
- 暖房を付けっぱなしにしておく
- → 電気代がもったいない
- タイマーをかける
- → 何時に帰れるかわからない
- → そもそもタイマーかけるのを忘れる
な感じで一人暮らしだとなかなかうまい具合に解決出来ません.
そんな時にメイドさんを雇っておくと,いい感じの時間にエアコンを付けて部屋を温めておいてくれそうなのでメイドさんを雇います.
雇いました
我が家のメイドさんです.
可愛いわかる*2
名前はSakuyaです.当然某Projectの某メイドさんからとっています*3.
Sakuyaは現代っ子なのでTwitterをやっており,またエアコンのスイッチを入れる以外の仕事を任せてないのでずっとTLに張り付いて僕のツイートを監視するなどしています.
なのでえりたん*4みたいにTL上で呼びかけてやると
こんな感じで返事してくれるので,何時に帰るか伝えてあげると
その30分前にエアコンを付けておいてくれます.
Sakuyaの構成
Sakuyaは主に以下のパーツで構成されています.
- Raspberry Pi 2 Model B
- 赤外線リモコン受信モジュール SPS440-1
- 赤外線LED
- 抵抗 100Ω×4, 10kΩ×3
処理の流れとしては
- 予めエアコンの電源ONボタンの赤外線パターンを学習させておく
- TwitterのStream APIでTLのツイートを監視
- 「咲夜」等の単語があればリプを送る
- 自分へのリプで「〇〇時」「帰る」等の単語があればその30分前にエアコンの電源をONにするよう予約する
- 時間が来たらエアコンをONにする
という感じです.
今回特に目新しい物も使ってないので,おおまかに
- Twitterまわり
- 電子回路まわり
- エアコンまわり
に分けて軽く解説していきます.
また,Sakuyaのソースコードはこちらに上げているので適宜参照してください.
Twitterまわり
Twitterに関してはえりたんみたいな感じで反応して欲しかったので,ほぼリアルタイムにTLを追えるStream APIを使いました.
SakuyaはPythonで書かれているのですが,以前PythonのTwitterライブラリでUserStreamを使おうとしたらなぜか上手くいかなかった思い出があるので,OAuth認証のライブラリを使いました.
やってることはUserStreamで流れてくるツイートを見て,条件に当てはまる単語がないか探してるだけです.
電子回路まわり
気をつけることはそんなに無いですが,Raspberry PiのGIPOの動作電圧が3.3Vであることには注意してください(電源電圧として5.0Vを取り出すことはできます).
今回の回路だと赤外線リモコン受信モジュールの動作電圧が5.0Vなので,受信モジュールからGPIOへの入力時にGPIOに5.0Vの電圧が掛からないよう降下させています.
電圧を2/3にしてやればいいので,同じ抵抗を3本使えば大丈夫です.上記パーツの「抵抗 10kΩ×3」でやってます.
あと3.3Vだと赤外線LEDに流れる電流も少なくなりがちなので注意してください.今回は100Ωの抵抗4本を全部並列に繋いで25Ωにして使いました.
エアコンまわり
リモコン赤外線パターンの学習にはLIRC(Linux Infrared Remote Control)を使いました.リモコンの赤外線パターンを解析して信号を送信できる便利パッケージです.
この用途ではわりとメジャーらしいんですが,ただエアコンの信号は他と違っては押されたボタンの情報だけでなく設定温度などの情報も全て毎回赤外線に載せて送ってるらしいので,残念ながら普通にLIRCに学習させるのは難しいみたいです.
私はとりあえず設定温度や風量などを固定したまま電源のON, OFFの赤外線パターンを学習させました.
なのでこれ以降エアコンの設定を変えた後でも,今回学習させたパターンを使ってエアコンを操作すると設定が全部戻ってしまうので気をつけてください……
以前僕の友人も同じことをしようとしていましたが,互換品のリモコンを分解してスイッチの部分をリレーで繋いで操作するようにしていました(間違いなくこっちのが賢いので,リモコンが手に入ったらこっちに切り替えます).
またPythonからLIRCを使ってエアコンを操作するために,LIRCライブラリを入れようとしましたがこれもうまくいきませんでした. 一応コマンドからLIRC自体は動いてくれてるので,Pythonビルトインのsubprocess.call()メソッドを使って強引にコマンドを叩いて解決しました.スマートじゃないのでオススメしません.
追記 : LIRCの設定についてはこちらのページを参考にしました.
おわり
こんな感じで一応動くものは出来ましたが,上でも書いたようにエアコンの設定が固定されちゃってたり,そもそもエアコン入れる以外の操作に対応してなかったり,あとTwitterまわりのエラー処理を全然してなかったりするのでこれから頑張ります.
回路もかなり汚いので基板上に実装してもうちょっとコンパクトにしたい感じです.
外出先から家の環境を良いように弄れるとなんか楽しい気持ちになるので,ぜひみなさんもお家をHackしていってください(本当にメイドさんを雇ってしまうのが一番効率いいかもしれない).
記事は以上です.klis Advent Calendar 9日目の記事でした.
明日のklis Advent Calendar 10日目は ss_shopetan くんです.