はじめに
この記事は、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 の取得
- Android または iOS 上で、Switchbot アプリを起動。
- 未ログインであれば、 Switchbot アカウントでログイン。
- 「プロフィール」タブの、「設定」メニューを選択し、最下部の「アプリバージョン」を 10 回タップ。
- 「開発者向けオプション」が表示されるのでタップ。
- 「トークンを取得」ボタンをタップ。
- 赤字で表示された英数字列が取得できたトークンです。
- このトークンがあれば、誰でも あなたの 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