nonyblog.

日常

SwitchBot で Press mode でも ON / OFF を明示的に行う、あるいは IFTTT の有料版が便利という話

SwitchBot はスイッチを物理的に押すことができる IoT ガジェットで、これによって赤外線に対応していない物理スイッチを IoT に対応させることができる。

SwitchBot の動作には Press Mode と Switch Mode の2種類がある。前者は ON / OFF のステートを持たず、押し込む動作をすると所定の位置にバーが戻る。後者はステートがあって、ONの場合は押し込んだまま、OFFの場合は離したままになるようにバーが固定される。

この 2 つは押したいスイッチの種類によって使い分けることになる。

新しめのスイッチでよくある パナソニックのワイド21 だと押したら戻ってくるタイプなので Press Mode を、 パナソニックのフルカラー のようなスイッチだと押したらそのままのタイプなので Switch Mode を使う。

Press mode でも ON / OFF したい!

ここで、Google Assistant 等から Press Mode なスイッチに接続されている換気扇を SwitchBot で消すことを考える。Switch Mode であれば "OFF" と命じれば OFF になるので解決なのだけど、 Press Mode では "切り替え" しか行えないため、換気扇が元々オフになっていたら、換気が始まってしまい部屋が極寒になってしまう危険性がある。

明示的な OFF を行いたいが、SwitchBot 自体はステートを持っていないので簡単には実現できない。どうするか?

IFTTT pro を使おう

IFTTT pro を使うと Google Spreadsheet に ON / OFF のステートを置いた Applet をサクッと作ることができる。これを使って実現していく。

f:id:nonylene:20210420225722p:plain
Query, Filter, More actions!

IFTTT pro の最大の魅力はアプレット数制限の撤廃である(自分もそれ目的で加入した)が、それ以外にもクエリ、フィルタ、複数アクションといった魅力的な機能がある。

f:id:nonylene:20210420225910p:plain

まずはクエリ。クエリでは、様々なサービスから情報を取得してフィルタに渡す(Trigger とは独立して動く)。今回は、Google Spreadsheet の特定のセルを取得する。これによって、現在のスイッチのステート(ON -> 1 / OFF -> 0)を取得できる。

f:id:nonylene:20210420230108p:plain

次にフィルタ。フィルタではクエリで取得した情報から後続のアクションを実行するかどうかを決定する(JavaScript で!!)。これを使って、先程取得したセルの値に応じて後続のアクションをスキップするかどうかを決定する。こうして、既に換気扇がオフになっている(0)場合は Switchbot は動かないようにできる。

f:id:nonylene:20210420230613p:plain

そして、Switchbot のアクションを設定し、その後ステートを更新するためにセルを OFF (0) に更新するアクションも追加する。

f:id:nonylene:20210420230806p:plain

こうして、Google Spreadsheet をステートとした IFTTT の Applet が完成し、換気扇の状態に関わらず OFF にできるようになった。

もっと細かいことをしたいのであれば、WebHook と組み合わせることもできる。WebHook でリクエストを送り、指定したフォーマットで値を返せば query として用いることができるらしい(未確認)。

みんなも IFTTT pro、使おう!

FAQ

  • 手でスイッチ押したらどうなるの?

    ステートがずれます!!絶対禁止です!!やってしまった場合は Spreadsheet のステートを更新してください!!