😤

SwitchBot API を利用して加湿器を自動化する

2023/01/11に公開

この記事は何か

湿度を監視して加湿調整をする系を作りました。
スマートホーム文脈で結構ありがちな開発だと思うので参考になれば。
なんならシステムトレードもScheduler+Functionsで書けて、とても便利です、そして安い。
目的の湿度を目指して自動的に加湿する加湿器もありますが、加湿器内部の湿度計は加湿器に近すぎるため、部屋全体の湿度として扱うには苦しい場合が多いように思います。

全体像

加湿器はSwhichBotPlug経由で接続して使用します。

流れ

swichBotのAPIを叩く

API仕様に関してはここを見れば良いです。
今回やりたいことは下記の3つ

  • 湿度計の値を取得
  • 加湿器の電源をON/OFFする
  • 加湿器のSwhichBotPlugをON/OFFする
  • 加湿器のON/OFF状態を確認する
    • これはSwhichBotPlugの消費電力を確認することで確認できます。

APIKEYの取得

swichBotアプリの設定画面にて、バージョンを10回タップすると「開発者向けオプション」というメニューが出現し、APIKEYが取得できます。

使用例(python3)

https://github.com/TTRSQ/switchbo-pg
ex. res = request_bot_api("/v1.1/devices", Method.GET)

加湿器を制御する関数を書く

Functionsで関数を作成します。この関数の中では下記を行います。

  • そもそも制御する必要があるのか(制御が有効か)確認
    • SwhichBotPlugがONの時は制御が有効
  • 制御が必要な場合、下記を実行。
    • 湿度計の値を取得する
    • 十分な湿度であれば加湿器をOFFに、不十分であれば加湿器をONにする
      • 湿度計が現在ONかOFFかはSwhichBotPlugの消費電力で確認する

こちらに書きました。

https://github.com/TTRSQ/humidifier-func

これをdeployし、定期的(10分おきなど)に実行することで、加湿器を制御します。

制御関数を定期実行する

Schedulerを使って、上で作った関数を定期的に実行します。

  • 今回は10分おきに実行します。

上記のdeploy関数でdeployした関数にはpublickアクセスがないので、functionを叩くための認証の設定する必要があります。

定期実行の開始と終了をEcho経由で行う

Echo+SwichBotのシーンを利用して、制御が必要か/必要ないか、設定できる様にします(ステータス管理)。
今回は

  • SwhichBotPlugがONの時は制御が有効
  • SwhichBotPlugがOFFの時は制御が無効

としているので、EchoでSwhichBotPlugをON/OFFできれば良いです。
alexaアプリとswichbotアプリを連携して、alexaアプリでplugをオンにする定型アクションを設定します。

以上

以上です、さよなら喉のイガイガ。

利用サービスまわり

SwichBot

簡易的にIoTを実現するための製品やアプリケーションを提供している、APIも利用可能、web経由でカーテンとか開けれるようになる。
https://www.switchbot.jp/

Amazon Echo

スマートスピーカー、音声コントローラとして使ってる、今回は Echo => IFTTT => Functions の流れで利用
https://developer.amazon.com/ja/echo

Functions

GCPの関数ホスティングサービス、ちょっとしたコード(関数)をネットにおいておける。諸々のイベントをトリガーにして実行できる(httpリクエストなど)。
https://cloud.google.com/functions

Scheduler

GCPのJOBを定期実行するサービス、Functionsで作った関数を1時間に1回実行したりできる。
https://cloud.google.com/scheduler

Discussion