ブログ記事ラズパイとTwitterで外から家のエアコンをONONONONON!!!アドベントカレンダー2017satorikuはじめましてsatorikuです。10月24日、アドベントカレンダー2日目です。何も考えないでいつでもできるよ!!って言ったらこの日になりましたがテスト×2+課題×2と重なって死んでおります。(予定確認しなかった私が悪いんだよ、仕方ないね。)去年のアドベントカレンダーではunityでなんか適当なのを作ってましたが、今unityでちゃんとゲーム作ってます。楽っちゃ楽だけど色々大変ですね...特にgitとかでの進捗管理、コンフリクトしスギィ!今回はタイトル通りラズパイで外からエアコンを操作するものを作ったのでそれについて書いていきます。暑い夏の日、暑い外から帰宅したら涼しい部屋でゲームでもしたいですよね。私の部屋は二階角部屋、1日熱せられたその部屋はクッソ暑くなってます。玄関開けて階段上がってくとだんだん気温が上がってくのが実感できるくらいです。タイマー付ければ良いのですが我が家のエアコンは安物なので6時間後までしか設定できませんし何時に帰ってくるかなんて朝わかりません...外から帰ったら涼しい部屋でくつろぎたい!じゃあ外から帰る前にエアコン付けられるようにしよう!ということで作りました。ラズパイでエアコンを付けるhttps://qiita.com/KAKY/items/55e6c54fa2073cdc0bbeこちらを参考にさせていただきました。lircというソフトを使ってリモコンの赤外線を読み取って保存、それを赤外線LEDで送信できるようにします。やり方はほとんど↑のサイトに書いてある通りでソフトの設定とちょっと電子工作するくらいです。こんな感じでつないであります。左がラズパイ本体、真ん中が赤外線LED、右がLEDの電源でコンセントまでつながってます。LEDの電源はラズパイからとっても良かったのですがLEDの消費電力がそこそこあったのと今後の拡張性を考えてコンセントから取って色々繋げるようにしておきました。LEDはコンセントからの電源にしてラズパイの信号でトランジスタ使ってスイッチングするようにしました。右下に伸びているコードは後述する温度計につながっています。読み取れなかったりソフトが上手く起動しなかったりして苦戦しましたがなんとかなりました。これでコマンドを打てばエアコンを操作できるようになります。エアコンのコマンドはリモコンのボタン通りに1°Cあげる、下げるというのではなくn°Cにする、電源をつける、電源を切る、というものです。この内登録したのは20°Cで電源をつける、電源を切る、とn°Cにするというものです。つけるときは一気に涼しくしたいのでこれで十分です。全部登録するの面倒だったこのうちTwitterから操作できるのはオン・オフだけ。温度調整はどうせ実際のリモコンでやるので...Twitterから操作するここが今回のメインです。Twitterからラズパイを操作してエアコンを付けられるようにします。Twitterなのか家のサーバーを外から操作する方法は色々ありますよね。webを作るとかスマホアプリを作るとか。Twitterなのか、理由は以下の二つです。・設定が簡単webとかスマホアプリでやろうとするとsslの設定したりhtml書いたりcss書いたりjs書いたりphp書いたりアプリ作ったり...結構やることが多いんですよね...しかもこの中で私がやったことあるのはhtmlとcssだけ...強い人なら一瞬でやってしまいそうですが...(私にはそんな技術は)ないです。勉強すれば良いんですがこれを作り始めたのが6月、夏まで時間が無かったのでさっさと作りたかったので今回は却下です。そのうちLAN内から操作できるくらいのwebは作りたいですねここでTwitterの登場です。実は以前TwitterでTLを監視して他人へのリプ以外のツイートにクソリプを送るbotを作ったことがありました。アプリの認証をしてツイート内容を見て何かをする、というものはもう既に出来てたわけです。今回はコレを全部流用したので今回ほとんどコード書いてないです。認証をするコードを分けて書いて汎用化してくれた昔の私に圧倒的感謝!・使いやすい使うときにはwebならブラウザを、アプリを作ればそのアプリを開く必要があります。ここで私のスマホのバッテリーの使用状況を見てみましょう。はい、ほとんどTwitterですね。スマホ使ってるときはだいたいTwitterしてるのでTwitterで操作できればアカウントを切り替えるだけで出来ます。いちいちアプリを閉じたりせずに済むので楽ですね。作ったまずTwitterで新しいアカウントを作ってそれにアプリを設定します。そのアプリをラズパイで常時動かしてTLを監視し、自分のツイートを見てそれによってコマンドを打てるようにすればエアコンを操作できるようになります。アプリのコードは以下です。10retryend主にやってるのはツイートみてコマンド打ってるだけです。あと同じツイートの規制に引っかからないようなちょっとした工夫とたまに例外吐くのでそれの復帰があるくらいです。部屋の温度を計測する外からエアコンをつける時の参考になるようにラズパイに温度計を付けて温度を知れるようにしました。先程の写真で右下に伸びていたコードの先につながっています。http://deviceplus.jp/hobby/raspberrypi_entry_039/こちらのサイトを参考にして、コードもお借りして実装しました。10分ごとに温度、湿度、気圧を計測してcsvに書き込み、それを読み込んで10分ごとにツイートするようになってます。毎時10n分に計測して10n+1分にツイートします。(0≦n≦5)ツイートする部分のコードは以下の通りです。保存してあるcsvを開いて最新データをツイートしてます。#{fg[3]}%\n"+Time.now.to_s)こんな感じで10分毎にツイートされます。これを見てエアコンをつけるかどうか決めます。本垢でフォローしてあるので普通にTwitterをしてれば流れてきますから思い出せます。作ってみて使ってみて上でも書いたとおり今回ほとんどコード書いてないです。時間かかったのはlircの謎のエラーとの格闘です。(ならそこ書けよと思うでしょうが4ヶ月くらい前のことなので忘れましたごめんなさい許してくださいなんでもry)Twitterに関する部分は既存のコードの流用、書き換えで済んだので結構一瞬でした。実際にひと夏使ってみましたがなかなか便利です。帰り道でエアコンをつければ1時間くらいで帰ってめっちゃ涼しい部屋に入れます。いいっすねぇ~(たまに忘れて暑い家に帰宅することもありましたが)終わりにこの記事書く前にちょっと調べてみたら似たようなことやってる人もう既にいるみたいですね。有料ですが似たようなサービスもあります。いじって楽しかったですしTwitterで操作することでかなり便利に使えているので結構満足しています。我が家のエアコンは安物なので冷房しかないんですよ、暖房がないので冬は使えません。ラズパイ買ったのでエアコン以外にも色々やってみたいです。Twitterから家のメインPC起動したりとか。あと最近GoogleHomeが発売されて音声で色々操作できるみたいですが...声かけてエアコン付けられたら楽しいよねとか。あと今回ツイートによって条件分岐してコマンド叩いてましたがツイートをコマンドに直接ぶち込めばSSH的な使い方もできるんじゃないでしょうか。何かやったら来年のadcにでも書くかもしれないです。期待しないでお待ち下さい。いうことで今回の記事は以上です、ありがとうございました。