背景

SwitchBot機器のAPIを使うためには「認証用トークン」と「DeviceID」を取得する必要があります。

スマートフォンのSwitchBotアプリからまずは認証用トークンとクライアントシークレットを取得します

アプリを開き「プロフィール>設定>開発者向けオプション」で取得できます。

とはいうものの、そのままだと表示されないので、「アプリバージョン」を10回タップして「開発者向けオプション」を表示します。(ファミコン時代の隠しコマンドっぽい。)

手順

デバイス一

curl --request GET 'https://api.switch-bot.com/v1.0/devices' \
  --header 'Authorization: 認証用トークン'\
  --header 'Content-Type: application/json; charset=utf8'

以下のように出力されます。

  {"statusCode":100,"body":{"deviceList":[{"deviceId":"xxxxxxx","deviceName":"温湿度計プラス AB","deviceType":"MeterPlus","enableCloudService":true,"hubDeviceId":"xxxxxxx"},{"deviceId":"xxxxxxx","deviceName":"ハブミニ 22","deviceType":"Hub Mini","hubDeviceId":"000000000000"}],"infraredRemoteList":[{"deviceId":"xxxxxxx","deviceName":"tv","remoteType":"TV","hubDeviceId":"xxxxxxx"},{"deviceId":"xxxxxxx","deviceName":"ライト","remoteType":"DIY Light","hubDeviceId":"FD087CB12D22"}]},"message":"success"}yamadatt@ubuntu2204:~/git/hugo-luna$ 

以下で対象のデバイスから情報を出力。

  curl -X GET -H "Authorization: 認証用トークン" https://api.switch-bot.com/v1.0/devices/対象のdeviceId/status | jq .

以下のように出力されます。

{
  "statusCode": 100,
  "body": {
    "deviceId": "D66D086FC8AB",
    "deviceType": "MeterPlus",
    "hubDeviceId": "FD087CB12D22",
    "humidity": 59,
    "temperature": 15.5
  },
  "message": "success"
}
}

制約

1日あたり1万回の制約があります。

OpenWonderLabs/SwitchBotAPI: SwitchBot Open API Documents

以下の記述があるので、毎分取得ぐらいなら影響はなさそう。

Request limit The amount of API calls per day is limited to 10000 times. Going over that limit will return “Unauthorized.”

参考

これを使った。

https://github.com/Azuki-bar/switchbot-prometheus-exporter