LoginSignup
9
11

More than 3 years have passed since last update.

curl で SwitchBotAPI を叩いて SwitchBotを動かす

Last updated at Posted at 2021-01-09

はじめに

この記事は、CUI を使って、インターネット経由で SwitchBot を動かす方法のメモです。
PC の terminal から、SwitchBot Bot(ボタン)を制御するような事が簡単に行えます。

具体的には、curl で SwitchBotAPI を叩き、SwitchBot を動かします。

SwitchBot を制御する手段には、Bluetooth 通信を使ったアクセス方法もあります。
この Bluetooth 通信を使ったアクセスでは、通信範囲が限られますので、通信距離を気にせず、手っ取り早く叩いてみたければ、この記事で扱っている SwitchBotAPI を利用する方法がおすすめです。

必要なもの

  • Switchbot デバイス
  • Switchbot Hub Mini または plus (クラウドサービスを利用するため Hub が必須)
  • Switchbot アカウントでログイン済みの Switchbot アプリ(Android or iOS)
  • curl を実行する環境(PC)

手順

最初に SwitchBotAPI を叩くために必要な token を取得し、次に、取得した token を使って curl で SwitchBotAPI を叩きます。

token の取得

  1. Android または iOS 上で、Switchbot アプリを起動。
  2. 未ログインであれば、 Switchbot アカウントでログイン。
  3. 「プロフィール」タブの、「設定」メニューを選択し、最下部の「アプリバージョン」を 10 回タップ。
  4. 「開発者向けオプション」が表示されるのでタップ。
  5. 「トークンを取得」ボタンをタップ。
  6. 赤字で表示された英数字列が取得できたトークンです。
  • このトークンがあれば、誰でも あなたの Switchbot を制御可能です。トークンを他人に共有したり、Github上で公開することの無いよう注意して下さい。
  • __2020/1/9 現在、作成したトークンは削除できず、リセットのみが行えるようです。
  • トークン発行済みの状態で、さらにトークンを取得しても、最初に取得したトークンは有効のままです。適宜トークンのリセットを行い、意図しないトークンが残らないようにするのがおすすめです

curl で SwitchBotAPI を叩く (デバイス一覧の取得)

最初にデバイス一覧の取得を行ってみましょう。
デバイス一覧の取得は、指定すべきパラメータがなく、簡単です。
トークンの問題や、デバイスの設定に問題がないかは、このAPIを試すと良いです。

以降は、curl を実行する環境(PC)上で作業を行います。

token="<取得したトークン>"
auth="Authorization:${token}"
url_list="https://api.switch-bot.com/v1.0/devices"

curl -H "${auth}" "${url_list}"

トークンが有効で、アカウントに紐づく switchbot デバイスがあれば、次のようなレスポンスが返ってきます。
(※ IdやdeviceNameは伏せています。内容の一部は省略しています。)

{"statusCode":100,"body":{"deviceList":[{"deviceId":"FFFFFFFF","deviceName":"XXXXXXXX","deviceType":"Bot","enableCloudService":true,"hubDeviceId":"FFFFFFFF"}, ... ]},"message":"success"}

エラーになる場合

Authorization header requires ...

{"message":"Authorization header requires 'Credential' parameter. Authorization header requires 'Signature' parameter. Authorization header requires 'SignedHeaders' parameter. Authorization header requires existence of either a 'X-Amz-Date' or a 'Date' header. Authorization=XXXXXXXXXXXXXXXXXXXXXXXXXXX

上記のエラーになる場合、ヘッダーの Authorization 指定を見直して下さい。
指定されていないか、指定が誤っている可能性があります。

Unauthorized

{"message":"Unauthorized"}

上記のエラーになる場合、トークン 指定を見直して下さい。
無効なトークンが指定されているか、文字列が誤っている可能性があります。

Switchbot Bot (ボタン)を押す

対象の Switchbot Bot (ボタン) は、「クラウドサービス」を有効にしておく必要があります。

以降は、curl を実行する環境(PC)上で作業を行います。

device ID の取得

前述の 「 curl で SwitchBotAPI を叩く (デバイス一覧の取得)」 で得られたレスポンスから、 device ID を取得します。
"deviceId":"FFFFFFFF"
となっている部分が、 device ID です。

APIの実行

token="<取得したトークン>"
deviceid="<device ID>"
auth="Authorization:${token}"
type="Content-Type: application/json"
command='{"command": "turnOn"}'
url_commands="https://api.switch-bot.com/v1.0/devices/${deviceid}/commands"

curl -H "${auth}" -H "${type}" -X POST -d "${command}" "${url_commands}"

正常であれば、次のようなレスポンスが返ってきます。

{"statusCode":100,"body":{},"message":"success"}

うまく行かない場合は、次の点を確認して下さい。

  • device ID に誤りがないか。
  • そのデバイスのクラウドサービスが有効になっているか。

SwitchbotAPI

その他の SwitchbotAPI の仕様については、下記を参照下さい。
https://github.com/OpenWonderLabs/SwitchBotAPI

9
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
11