1. SwitchBotAPIとは
SwitchBot皆様使われていますでしょうか。
私は、温度計センサーを複数と、カーテンやCO2センサーなどで使用しています。
ただこれらの情報を見るためにはスマホからアプリを開いたり、スマホのウィジェットに乗せたりとスマホを開かなくてはいけません。
スマホではない画面に常時情報を表示させておきたいんだ。
ということで、GrafanaにSwitchBotから取得した情報を載せていくための記事です。
2. SwitchBotAPIの使用準備
以下がAPIの公式ドキュメントになります。
こちらのREADME.mdによると、スマホからアプリを開いて、以下を実施すれば、
APIを使用するためのトークンとクライアントシークレットを取得できます。
1. App StoreまたはGoogle Play StoreでSwitchBotアプリをダウンロードしてください
2.SwitchBotアカウントを登録し、アカウントにログインします
3. アプリ内でオープントークンを生成します。アプリバージョン≥V9.0の場合、a) プロフィール > 設定 > バージョン情報に移動します。b) アプリバージョンを10回タップします。開発者向けオプションが表示されます。c) 開発者向けオプションをタップします。d) トークンを取得をタップします。
4. アプリバージョン 設定に移動します。b) アプリバージョンを10回タップします。開発者向けオプションが表示されます。c) 開発者向けオプションをタップします。d) トークンを取得をタップします。
3. SwitchBotAPIを使ってみる。(v1.0編)
v1.0は2025/2/6現在も使用可能ですが、セキュリティ上の観点により後述のv1.1がSwitchBot社の推奨です。
さて、実際にAPIを使ってみたいと思います。
その前にAPIを実行する環境を適当に用意します。
詳細は記載しませんが、私は以下の環境で実行しています。
項目 | 内容 |
---|---|
OS | CentOS Stream 9 |
使用コマンド | curl, jq |
3.1 デバイスリストの取得
では、さっそく以下のコマンドを実行してみましょう。
{トークン}には、事前に取得した長いトークンの値を入れてみましょう。
curl -H "Authorization:{トークン}" -X GET "https://api.switch-bot.com/v1.0/devices"
うまくいっていれば、以下のような結果が返ってきたはずです。
(結果の内容は一部省略しています。)
{"statusCode":100,"body":{"deviceList":[{"deviceId":"XXXXXX","deviceName":"XXXXXX","deviceType":"Bot","enableCloudService":true,"hubDeviceId":"XXXXXX"}, .....(省略)...]},"message":"success"}
わかりずらぁ・・・。
ということで、今度は最初に実行したコマンドへ一工夫入れます。
- curl -H "Authorization:{トークン}" -X GET "https://api.switch-bot.com/v1.0/devices"
+ curl -H "Authorization:{トークン}" -X GET "https://api.switch-bot.com/v1.0/devices" | jq
パイプでjqを入れてやることで、JSON形式で結果を返してくれるようになります。
{
"statusCode": 100,
"body": {
"deviceList": [
{
"deviceId": "XXXXXX",
"deviceName": "XXXXXX",
"deviceType": "Plug Mini (JP)",
"enableCloudService": true,
"hubDeviceId": "000000000000"
},
{
"deviceId": "XXXXXX",
"deviceName": "XXXXXX",
"deviceType": "Meter",
"enableCloudService": true,
"hubDeviceId": "000000000000"
},
・・・(省略)・・・
]
},
"message": "success"
}
3.2 デバイスの状態を取得
先ほどの実行結果で、deviceIdという値が取得できましたが、
こちらが、SwtichBotのデバイスに個別に割り当てられているIDになります。
これを取得すれば、あとは簡単にデバイスの状態を取得できるようになります。
次は以下を実行ください。{deviceid}には先ほど取得したdeviceIdの値を入れてください。
curl -H "Authorization:{トークン}" -X GET "https://api.switch-bot.com/v1.0/devices/{deviceid}/status" | jq
以下のような結果が返ってきたかと思います。
こちらは私の手元にある温度計センサーの状態を取得したものになります。
(temperatureが温度、humidityが湿度になります。室外に置いている温度計なので・・・。)
{
"statusCode": 100,
"body": {
"version": "V0.5",
"temperature": 4.6,
"battery": 60,
"humidity": 41,
"deviceId": "XXXXXX",
"deviceType": "WoIOSensor",
"hubDeviceId": "000000000000"
},
"message": "success"
}
4. 最後に
以上、お疲れさまでした。
次はv1.1を使ったデータの取得編です。
最終的にこちらで取得した値をすべてZabbixで取得し、数分間隔でグラフにしていき、それをGrafanaのダッシュボードに乗せていくイメージです。
先は長いですが順番にやっていきます。