自宅のエアコンを遠隔制御できるようにした話

# 概要
我が家ではエアコンをリモート制御することができるようになっています
所謂 IoT の波に乗り遅れないようにまずは身近なところからハックということでエアコンを IoT 化してみました

一ヶ月ほど実運用してみたのでレポートを書いてみました

# コスト
まずは気になるコストですが、以下の通りです

* 開発費用 約 3,020 円
  * マイコン ( 2,200 円 )
  * USB ケーブル ( 200 円 )
  * 赤外線 LED ( 100 円 )
  * タクトスイッチ x 2 ( 20 円 )
  * 各種電子部品 ( 100 円 )
  * ブレッドボード ( 400 円 )
* ランニングコスト 0 円

です

自宅のネットワークは WiMAX2 を使っておりそれは昔から使っていたので今回のコストには含めていません (今回の IoT 化作業でかかったコストではないため)
ということで約 3,000 円で実現した IoT です

# 仕組み
まずはシステム全体の概要図です
![be_iot_myhome_abst.png](https://lh3.googleusercontent.com/-umC8f8wioJc/V5CE3x09y7I/AAAAAAAAJIQ/Ii0w6bzusg0rDuSPmmAx9-Mff5Ey_Ar4gCKgB/s800/be_iot_myhome_abst.png "be_iot_myhome_abst.png")

実際に自宅に配置しているデバイスは以下です
![try_ir_with_espr_circuit1.jpg](https://lh3.googleusercontent.com/kxS5jxE6us11f3nwl0jk8c_J4dN4CJNb5IgUUAuJFinKSR00m7Lcb74vedH1RV1IBxuzabo=s0 "try_ir_with_espr_circuit1.jpg")

## デバイス
コアとなるデバイスは <a  href="http://www.amazon.co.jp/gp/product/B017U73IFE/ref=as_li_qf_sp_asin_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=B017U73IFE&linkCode=as2&tag=kakakikikeke-22">ESP-WROOM-02</a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=kakakikikeke-22&l=as2&o=9&a=B017U73IFE" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /> を採用しました

個人的にこれ以上自宅レベルの IoT 化に適したデバイスが見つからないような気がしています
ネットワークは自宅の WiMAX2 を使っています

赤外線の送信は 5 個で 100 円の赤外線 LEDを使いました
http://akizukidenshi.com/catalog/g/gI-03261/

あとはジャンパケーブルやら抵抗、トランジスタやら最低限の電子部品を揃えています
トランジスタを使ったのは赤外線 LED の電波送信の強度を上げるために使っています

また[このあたり](http://hawksnowlog.tumblr.com/post/147326322675/arduino-%E3%81%A7%E8%B5%A4%E5%A4%96%E7%B7%9A%E4%BF%A1%E5%8F%B7%E3%82%92%E5%AD%A6%E7%BF%92%E3%81%97%E3%81%A6%E3%82%A8%E3%82%A2%E3%82%B3%E3%83%B3%E3%82%92%E5%88%B6%E5%BE%A1%E3%81%97%E3%81%A6%E3%81%BF%E3%81%9F)の記事を参考に事前にリモコンの学習を済ませておいてください

## 回路図
そこまで複雑な回路ではないのでいらないかもしれないですが作成してみました
使用しているピンは上記の写真と同じになります
![ele_circuit.png](https://qiita-image-store.s3.amazonaws.com/0/35879/e1c534e2-79f0-5583-584d-ff79580cccab.png)

## ユーザインタフェース (リモート用)
自分は何かと Slack をよく使うので Slack から制御できるようにしました
Slack ならスマホからも制御できるし、PC からも制御できます

しかし、我が家の家族は Slack を使えません (使いません)
「じゃあどうしよう？」ということで最近？話題にもなっている [LINE Messaging API](https://business.line.me/ja/services/bot) からも制御できるようにしてみました
LINE だったら家族も使っているしメッセージのやり取りに自然言語も使えるのでいつも LINE を使っている間隔でエアコンを制御できるようになります

ということでユーザインタフェースは 

* 自分 -> Slack
* 家族 -> LINE

ということにしました

## ユーザインタフェース (家用)
家にいるときに Slack や LINE で制御しても何ら問題はないのですが、個人的に物理的なユーザインタフェース (スイッチ等) は結構大事だと思っているので、物理スイッチも実装しました

今回はブレッドボード上の狭さの関係もありタクトスイッチで「冷房のオン」「冷房のオフ」の 2 つを実装しました

このスイッチを直接押すことでもエアコンを制御することができます
( テレビやエアコンのゴムスイッチよりタクトスイッチの「カチッ」という感触が好きだという理由もあります )

## インフラ
「インフラにコストをかけない」というのも個人的なポリシーとして持っています
便利にはなるので、その分コストを払うというのは仕方ないと思うのですが、どうせならランニングコストがかからないような仕組みにしたほうが嬉しいです
例えば今回の IoT 化をしたせいで「月額 900 円です」ってなるとたぶん速攻取り外しちゃうと思うので、、、

でインフラですが今回は

* LINE Bot ･･･ [Github](https://github.com/kakakikikeke/LINE-mqttbot) + Heroku
* Hubot ･･･ [Github](https://github.com/kakakikikeke/iotbot) + Heroku
* MQTT ･･･ 時雨堂さんの「Sango」

にしました
個人でやる分には上記で十分だと思います

冒頭の概要図にあるようにバックエンドのデータのやり取りはすべて MQTT になります
ESP + HTTP でやり取りしても全く問題ないですが、個人的に MQTT のほうが実装が楽だったので MQTT にしました

# デモ動画
実際に制御している動画も撮ってみました (音無し)
動画は自宅内で撮影していますが、実際はこれをいつも家の外からやっています
[![LINE と Slack からエアコンを制御する ](http://img.youtube.com/vi/xJStVtBtqk0/0.jpg)](http://www.youtube.com/watch?v=xJStVtBtqk0)

# 見えてきた課題
以下の通り

* 本当にエアコンが付いているのか確認したい
* 本当にエアコンを消せているのか確認したい (こっちのほうが問題、消せていないと電気代がとんでもないことなる、、、)
* 暖房未対応 (冬にエンハンス予定)
* 操作履歴を管理したい
* Heroku 上のアプリがスリープしてしまう

一番問題に感じているのは上から 2 つです
物理的な遠隔操作をするとやはり「もの」を直視して確認することができないので不安になります
「ボットは答えてくれたけど、本当についたのかな？」「ボットが付け直したりしてないかな」とか

解決策として、例えば Web カメラをおいてリアルタイムに監視できるようにするということもできなくはないです
が、逆にそこまでやるかという話もあります
カメラを設置するのであればまた、それなりのお金もかかります

最悪、電車や車で帰れる距離であれば何か問題があったときに直接操作することができますが、海外などにいるときは当然ですが無理です
このあたりの物理的課題を解決できる手段が増えてくると IoT ももっと便利になるんじゃないかと感じています

あとの 2 つはソフトウェア的な解決策があるので簡単に解決できます
暖房対応はリモコンの暖房の信号を学習すればそれで終わりです
操作履歴に関しては可視化用のトピックに別途 publish すれば OK だと思っています
たぶん「ある形式のペイロードであるトピックに publish すると可視化してくれる」みたいな便利なサービスが世の中にはきっとあると信じています

最後の Heroku 問題はお金払うなりすれば速攻解決します
今のところスリープしてもエアコンの制御に問題はないのですが、できればスリープしないアプリの方がいろいろと良いです ( 速度とかステートフルにしたいときとか )

# 今後
とりあえず現状、安定運用できているので特段何かをしようとは思っていません
やるとしたら手元に温度センサがあるので、つけたいなと思っています
エアコンがついているか消えているかの判断材料の 1 つとして部屋の温度を監視することで実現できないかなぁと思っています
( もちろんカメラのほうが確実ではありますが )

あとは別の thing も制御、監視したいなとは思っています
が、現状他に困っていることがないので、できない感じです
さすがにマッチポンプしてまで自宅を IoT 化する気はありません

# 最後に
これが IoT なのか、、、と言われれば自分でも疑問ですが個人レベルでの IoT 化はこんなもんなのかなと思います

やってみたら意外と便利だということにも気づいたので今後も使い続けていきたいと思っています
ただ「無くても生きていける」ので正直そのレベルのものをお金をかけてまで、こういうのを知らない人が積極的に導入するかと言われるとたぶんやらないんだろうなと思います

って考えると簡単になったとは言え IoT はまだまだギークのおもちゃなのかもしれません

# 番外編
今回の制御は自作の IoT アプリ「[IoT Gateway for BLE](http://apple.co/1Ytn48L )」でもできます
Non Device モードで MQTT チャネルを使えばそれだけでエアコンを制御できます
詳しくは説明しませんが、たぶん分かる人にはわかるはず

# 番外編2
ブレッドボード上の配線だとたまに部品が取れたり、部品を使いまわせないというデメリットがあったのでユニバーサル基板化しました
47x36mm のユニバーサル基板に実装し、ESP-WROOM-02 は取り外しできるようにピンソケットで実装しました
![universal_circuit1.jpg](https://qiita-image-store.s3.amazonaws.com/0/35879/d8fae7da-3f68-3ea6-440f-63796f6265dc.jpeg)

![universal_circuit2.jpg](https://qiita-image-store.s3.amazonaws.com/0/35879/2c60ebd6-fa88-5277-32a6-8a6f122edae9.jpeg)

![universal_circuit3.jpg](https://qiita-image-store.s3.amazonaws.com/0/35879/8aca2df2-a7ba-671c-298d-1cee0ae0cac0.jpeg)

また、ケースも作成しました
壁に取り付けたり引っ掛けて使えることができます
![case1.jpg](https://qiita-image-store.s3.amazonaws.com/0/35879/3c0ceacf-c12c-e237-ae6c-1dd8e4263b16.jpeg)


![case2.jpg](https://qiita-image-store.s3.amazonaws.com/0/35879/1bbccaac-6941-b0ee-38c0-06de0ee1bb98.jpeg)

ケースの 3D プリントデータは以下で公開しています
https://tinkercad.com/things/4PUE7wFpdrZ