続・Workflows を使って床暖房を自動で起動するようにした話

tora470
google-cloud-jp
Published in
Jan 12, 2021

前回の続き、というか前回の記事を書いて年が明けたあとに SwitchBot が API を公開していることに気づきました。ので、今回は Switchbot API を使うように変更したというだけのサクッと終わるお話です。

こんな感じでAPI ドキュメントが公開されています。素晴らしい。これを使えば色々考えられます。例えば、今までSwitchbotの温湿度計のデータをBigQuery に入れようと思ったら自宅のローカルでラズパイなどでBLEで接続する必要がありました。しかし、このAPIを使えばAPIから温湿度を取得できます。欲を言えば指定のエンドポイントにSwitchbotから投げ込んでほしいところではありますが、自宅でラズパイから送らなくて良くなります。これはまた別の記事で書こうかなと思います。

おさらい

前回は Switchbot のボタンを押すためのAPIがないために Workflow から起動するために IFTTT の Webhook を使いました。 IFTTT が余計だったわけです。前回までの設定は以下のとおり。

- getWeather:
call: http.get
args:
url: https://api.openweathermap.org/data/2.5/weather?q=Fujisawa&units=metric&lang=ja&appid=xxxxxx
result: weather
- condition:
switch:
- condition: ${weather.body.clouds.all > 60 and weather.body.main.temp < 12}
next: pressSwitchbot
next: returnOutput
- pressSwitchbot:
call: http.get
args:
url: https://maker.ifttt.com/trigger/xxx/with/key/xxxxxx
result: switchbot
- returnOutput:
return: ${weather.body}

Switchbot API に変更する

pressSwitchbotのセクションを変更します。IFTTTのWebhookはGETで良かったのですが、SwitchbotのコマンドAPIはPOSTです。URL以外にいくつか変更があります。こんな感じ。

- pressSwitchbot:
call: http.post
args:
url: https://api.switch-bot.com/v1.0/devices/{device_id}/commands
headers:
Content-Length: application/json; charset=utf8
Authorization: {token}
body:
command: press

POSTなので http.post に変更、それ以外に必要なHeaderとBodyの情報を記載します。対象のBotのデバイスIDと、予めアプリで取得したトークンを貼り付けたら完了。あとはbodyにcommandの値としてpressを送信するだけ。簡単ですね。

ここに書いてないことも含め(Switchbot側の設定なので詳細はドキュメントを見ましょう)、ざっくりまとめるとこんな感じ。

  1. Switchbot の Android アプリからトークンを取得する
  2. Swichbot API のデバイス一覧から対象のデバイスIDを取得する
  3. 1と2の値を使ってWorkflowsのpressSwitchbotを編集してデプロイ!

あと、イメージはこんな感じになります。

まとめ

今回はWorkflowsのhttp.postを使うように変更しました。BODYやHEADERもYAML形式で記述できるので使いやすいのではないでしょうか。BigQuery入れるの書こうかと思ったけどほとんど内容が変わらないからやっぱ書かないかもしれません。

--

--

tora470
google-cloud-jp

Customer Engineer, Google Cloud. All views and opinions are my own.