桐生の一人暮らし寒すぎて凍りそうな話 (前編)
===
:::info
この記事は[群馬大学電子計算機研究会 IGGG Advent Calendar 2017](https://adventar.org/calendars/2300) 23日目の記事です
:::
こんにちは.atponsです.
この記事では,12月上旬にLT大会にて発表したLTについての詳細を解説していきたいと思います.
{%speakerdeck atpons/iot-xiao-yatutemita %}
---
[TOC]
## 桐生寒い
群馬大学理工学部が所在する群馬県桐生市は意外に冬が寒かったりします.なので,家に帰ってくるととにかく寒い.エアコンをつけても暖かくなるまで時間がかかりますから,非常につらい思いをしながら帰ってくるわけです.
## ホームオートメーションとの出会い
ちょうどそんなことを思っていたら,[NanoPi NEO2とhomebridgeとSiriで照明操作](https://mzyy94.com/blog/2017/11/10/nanopineo2-homekit/)という記事を見かけまして,これは自分の家にも導入せざるを得ないと思い,導入を検討し始めました.
## ホームオートメーションを実現するには
ホームオートメーション・スマートホームを家庭で実現する方法として,以下の方法が考えられます.今回は,自宅にある**照明** と **暖房器具(エアコン)** に絞って紹介します.
### Homekit対応アクセサリを購入する
難易度: ★☆☆☆☆ / コスト: ★★★★★
Appleの提唱するHomeKit対応家電を買うことでiOSデバイスに搭載されているホームアプリから家電を操作することができます.例えば,[デロンギのオイルヒーター](http://kakaku.com/item/K0000919646/)がそれに当たります.
これを設置すれば,Siri経由で電源オン/オフを始めとして家電の各種操作が行えます.**が**,非常に高いのです.価格.com最安値8万円弱します.**買えません**
他にも,Philips Hueというスマート照明もこれに対応します.しかし,いわゆるオシャレな照明であるため,設置にハードルがあり,ハブの購入が必要などコストは高めです.
### 赤外線学習リモコンデバイスを購入する
難易度: ★★☆☆☆ / コスト: ★★★☆☆
[IRKit](http://getirkit.com/)・[Nature Remo](http://nature.global/)をはじめとする赤外線学習リモコンデバイスが販売されています.これは,既存家電をコントロールするリモコン信号を学習し,それをHTTP API経由で操作可能にするデバイスです.
[eRemote mini](https://www.amazon.co.jp/dp/B01MA4W1YD)がこれらの類では一番安く,7000円前後で購入可能です.
これらの弱点は自身ではHomeKitに対応できないことです.HomeKitを実現する方法として後述するHomebridgeを利用することができます.
### 赤外線に対応したスマートスピーカーを買う
難易度: ★☆☆☆☆ / コスト: ★★★☆☆
LINEのスマートスピーカーである[Clova WAVE](http://clova-blog.line.me/ja/archives/4841052.html)が対応しています.しかし,対応機器が限られています.しかし,一から学習をやる必要はありませんので,ラクです.
ホームオートメーションなどとは毛色が違いますが,スマートホームを実現する方法としては有力です.
…などの方法を利用することでホームオートメーションを実現させられます.
## 自作スマートホームをする
### irMagicianとの出会い
[NanoPi NEO2とhomebridgeとSiriで照明操作](https://mzyy94.com/blog/2017/11/10/nanopineo2-homekit/)を見て,これ面白そうとは思ったのですが,工具箱に赤外線LEDが転がっている世界線に住んでいないため,一からそろえるのはつらいかも,と思いました.
しかし,Homebridge関連の記事を漁っていたときにirMagicianというデバイスを見つけました.[irMagician](http://www.omiya-giken.com/?page_id=837)は,大宮技研の製品で,赤外線LEDとUSBポートを搭載したボードです.
これを利用することで,PCなどと接続して赤外線で色々できる的なデバイスになっています.良い感じにシリアル叩いてIRkit互換のJSONを吐けるという便利さがあります.最高.
### Homebridgeを知る
上記の記事を見ていたら,HomekitのあれこれはすべてHomebridgeというOSSを経由して実現できることを知りました.つまり,Homekitを用いて任意のコマンドを実行できるワケです.最高.
今回は,[homebridge-cmd](https://github.com/senyoltw/homebridge-cmd) + [irmcli](https://github.com/netbuffalo/irmcli)で実現させました.何もしていない...
1. irmcliで既存家電のリモコンからJSONをいろいろ採る
2. homebridge-cmdの設定でPythonスクリプトを実行させるようにする
3. 神
### 見えるHomekitの弱点
Homekit + irMagician + Homebridge で運用を開始しました.
Homekitは,家庭内LANで利用する分には全く問題ありません.しかし,肝心のホームオートメーションができません.理由はHomekitから自宅のLANにアクセスすることができないからです.
現状,Homekitを用いて外部から家電を操作する場合,自宅にiPadを置いておくか,Apple TVを設置する必要があります.どちらも持っていないため,外部からの操作はできません.(VPNなどに接続しても不可能と思われます.)
つまり,外部から操作する方法がない...それを解決するにはどうすればよかったのでしょうか?
## 自作ホームオートメーションをする
### ひとりSlack
[ひとりSlack](https://qiita.com/saitotak/items/ac0eb7ddc0d8d83cbe91)をご存じでしょうか?一人で使うSlackワークスペースを作ることで,色々遊ぶというものです.ここに家電を操作するBotを組み込めばSlack経由で家の家電が操作できます.
他の事例を見ると自作Webアプリから操作することが多いですが,いくつか面倒くさい事案が発生します.
- エンドポイントやWebアプリを外部に公開したくない!
- 管理が面倒くさい
- VPNにいちいちつなぐのがだるい!
- なんでエアコンつけるのにVPNつながなきゃいけないんだよダルい
- Webアプリ開発だるい!
- 能力がないだけ?(デザインがね...)
- ログ取りがだるい!
- いつつけたとか,消したとか,あれ消したんだっけ?みたいなのを管理するのがダルい(取れば良いだけ)
- Slackなら日時なども管理できるしね!
ということで,Slack Botなら色々丸く収まりそうだと思い,Slack Botにしました.なお,ホームオートメーションにも活きてきます.
### Slack bot開発
自分の好きな言語で書くだけなので,詳細は割愛します.今回は[slack-ruby-bot](https://github.com/slack-ruby/slack-ruby-bot)を利用しました.
これはWebhookではないので起動するとWebSocketで良い感じにやってくれます.最高ですね!
### myThingsで本物のホームオートメーションをする
[myThings](https://mythings.yahoo.co.jp/)は,Yahoo! JAPANが提供するIFTTT/Zapierのようなものです.スマートフォンアプリを入れることで利用できます.
これを使い,位置情報をトリガーとしてSlackにBotが反応するワードを投稿するようにします.myThingsは位置情報を使って地点から出た/入ったをトリガーとすることができるため,たとえば出たときに「消し忘れチェック」とSlackに投稿するようにしてBotに反応してもらい,エアコンと照明のOFFコマンドを送出させます.
また,入ったときにはエアコンをONにするコマンドを送出さるワードをSlackに投稿させます.
```
+----------+ Location Trigger +-----+ Event +---+ +------+
| myThings | -----------------> |Slack| ----> |Bot| -> |irmcli|
+----------+ +-----+ +---+ +------+
```
これのメリットはやはり運用の楽さが一番であることです.
つまり,これで当初の目的が達成されました😎
### Botだからね
この子をmikuと名付けて可愛がってあげます.最高.
## おわりに
この話,実はまだ続きがあります.LTをご覧の方はお気づきかもしれませんが,
12月初旬,インターネットメディアを賑わせた[あのデバイス](https://store.google.com/product/google_home)を覚えていますか?もちろん買いましたよね?
...それとの連携も,簡単なはずでしたし,実際にLTをやったときはこれで満足していました.(後編へ続く)
しかし,見えてきた問題点,それの解決方法としてどうすべきだったのかということを考えていたら,[こっちのアレ](https://www.amazon.co.jp/dp/B071ZF5KCM)の招待メールが来てしまいました.
> お客様は、2017/12/21にこの商品を注文しました。
> 色名: チャコール (ファブリック) | この注文を表示
さて,私,どうなる?ということで,後編へ続く.