事務所到達前にエアコンを遠隔起動できるようにした話

どうも、はじめまして。
Qiitaの初投稿がプログラミングはあんまり関係ない環境整備の話となっておりますが、
これから定期的に雑多なお題目で記事を書いていくことになります。

# 遠隔起動したい理由
猛暑/酷暑とやたら暑そうな言葉が一般的なワードとなって久しい昨今、事務所に出社すると

**エアコンが効くまで死にそうなくらい暑い!!!**
**むしろいつか事務所にいながら冷えるまでの間に熱中症で倒れるかもしれない!!!**

そんなわけで、以下の案が出ました。
・**スラックに特定のワードでコメントして、事務所の外からエアコンをONにしたい**
・**タイマー設定でもいいけど、確実に同じ時間にいる前提でもない**

というわけで、従来型の事務所でどういった手段がとれるのか？ということを検討しながら
とりあえず最小限の範囲(サーバなど使わずありもののサービスを組み合わせるのみ)でやってみる。
ということで、なんとなくそれっぽいものができたので、記事にしました。
先達の方々の記事に同様の情報がある場合は、そちらを参考にしてください。
（とりあえず直近で使えるようにする事が目的なので、正確性やセキュリティ面からの検討はそこそこです)
# 用意したもの
- SwitchBot * 2 (エアコンの電源スイッチを物理的に押すデバイス * エアコンが２台あるので)
    - https://www.amazon.co.jp/dp/B07B7NXV4R/ref=cm_sw_r_tw_dp_U_x_TA8uDb5VBKVZJ 
- SwitchBot Hub Plus (管理用のデバイス)
    - https://www.amazon.co.jp/dp/B07DL6M8PZ/ref=cm_sw_r_tw_dp_U_x_JD8uDbW2G26TD
- Slack
    - 遠隔操作用のチャンネル(※このチャンネルで特定のワードをつぶやく)
    - 反応させたいワード(熱量退散!!!など好きなワード)
- IFTTT(Slack対応IFTTTにしておく。→ SlackのAppからIFTTTを追加しておく)
- SwitchBotのアカウント (SwitchBotやHubPlusの設定、IFTTTでの設定に使用)

# やったこと
1. SwitchBot Hub Plus をネットワーク外からアクセスできるようにする
2. SwitchBot と Hub Plus を接続
3. IFTTTで特定のURLにアクセスが来たらSwitchBotのボタンを押すAplletを作成
4. スラックで特定ワードがコメントされたら、指定のURLにアクセスするOutgoingWebhookを設定
5. 更にIFTTTで特定のURLにアクセスが来たらスラックにコメントを残すAppletを作成

# やったことの詳細
### 1.SwitchBot Hub Plusをネットワーク外からアクセスできるようにする
※SwitchBot Hub Plusのマニュアル参照(アップデートで変わったりするのでマニュアル読んでください)
### 2. SwitchBot と Hub Plus を接続
※SwitchBotのマニュアル参照
※SwitchBotの設定より IFTTTをONにしておく。(これをやらないと後の選択項目に出てきません)
### 3. IFTTTで特定のURLにアクセスが来たらSwitchBotのボタンを押すAplletを作成
3-1. メニューよりCreateを選択 
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474689/cb8dac87-7a89-5c3d-ad0b-3efebc8508d9.png" width=60%>
(画面右上アイコンをタップで表示できる)
3-2. トリガーとするサービスとしてWebhooksを選択
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474689/8fc02f38-c8ae-ede5-99ad-18b0e1c05a9f.png" width=60%>
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474689/20a7b391-9aaf-e9c7-ba7b-28056baf0f91.png" width=60%>

3-3. "Receive a web request" を選択
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474689/e0ec9ea4-2af6-fcf6-d284-2e01621b2884.png" width=60%>

3-4. 任意のイベントワード(airconditionar_onなど)を入れて"Create Trigger"を選択
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474689/c71b9cc1-5a53-5d86-057d-dad56c073f13.png" width=60%>

3-5. トリガーで行う動作として"SwitchBot"を選択
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474689/7432a294-71b9-7226-945a-a428f30a67c8.png" width=60%>
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474689/e642bd2b-e134-1367-5253-5b1dfbf32b80.png" width=60%>

※初回の場合はここでSwithBotのログイン情報が必要になります。

3-6. SwitchBotが提供している操作項目から"Bot press"を選択
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474689/e28b00e3-6256-334d-d7b5-64f034ad5ec9.png" width=50%>

3-7. IFTTTを許可されているSwitchが選択項目に出てくるので対象のデバイスを選択する
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474689/8b0157c8-67ed-2fa1-11fa-a21ed60bdb50.png" width=60%>

3-8. create actionを選択

### 4. スラックで特定ワードがコメントされたら、指定のURLにアクセスするOutgoingWebhookを設定
4-1. SlackのAppからOutgoingWebhookを追加する
4-2. OutgoingWebhookでトリガーとするワードと、アクセスするURLを入力する
※ Slack上ではそのうち使えなくするとの警告が出ているので、変更する必要がでてくるかもしれない。
※ 3 で作ったURL WebhooksのDocumentationから URLフォーマットを確認して入力する
[WebHooksのURL確認方法]
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474689/305a3cf1-d338-4f7e-fa2a-78bca8f6f0a9.png" width=50%>
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474689/186524ac-fdc5-70a9-251b-7d1c9920ea93.png" width=50%>

### 5. 更にIFTTTで特定のURLにアクセスが来たらスラックにコメントを残すAppletを作成
3とほぼ手順は同じで、thatの方をSlackにコメントする設定にする。
5-1. メニューよりCreateを選択 (画面右上アイコンをタップで表示できる)
5-2. トリガーとするサービスとしてWebhooksを選択
5-3. "Receive a web request" を選択
5-4. 任意のイベントワード(airconditionar_onなど)を入れて"Create Trigger"を選択
5-5. Thenとして"Slack"を選択
5-6. Post a commentを選択し、投稿先のチャンネルとワードを入力
5-7. create actionを選択

#感想
基本的には自分でサーバを立てたりAWS Lambda使うなりすれば色々できると思います。
なるべくそういったものを使わずに簡単にやろうと思うと、こんな感じになるのかなーと思います。

実際に使えるようにして一週間経っていませんが、最初に出社する方には使っていただいた感じ
特にこれといった問題も起きていないようです。
(結局物理的にボタンを押すだけなので、まとめてエアコン切る用途にも使っている)

前提知識が大してなくても提供されているサービスなどをポチポチやるだけで、
こんな感じの機能を作れるのはだいぶありがたいですね。
(IFTTT対応しているデバイスなら、SlackのOutgoingWebhook経由で色々できる）