SwitchBot API v1.0を使用して温湿度計とハブ2のステータスを取得する方法

電子工作

過去記事にて紹介している通り、私は各部屋や屋外に電子工作した温湿度計を設置してデータをロギングしているのですが、市販品のSwitchBot製品群は公式にAPIが公開されておりそれぞれの機器の状態を読み出したり操作したりすることができます。公開されているAPIとしてVersion1.0と1.1があるのですが、今回は使い方が分かり易いVersion1.0を利用して手持ちの温湿度計とハブ2から温度と湿度を読み取ってみましたのでその手順を展開します。公式のGitHubの記載内容によると現在Version1.0のサポートは終了となっており、認証が強化されたVersion1.1の使用が推奨されていますが、Version1.0も継続して使用することはできますので参照して下さい。
SwitchBotAPI/README-v1.0.md at main · OpenWonderLabs/SwitchBotAPI · GitHub
作業フローとしては、トークンとデバイスIDを取得後にGETメソッドでJSON形式のデータを取得することになります。 

トークンを取得する

まず以下の手順でAPIを使用するためにクラウドサービスをオンにすることと、SwitchBotアプリの「開発者向けオプション」で「トークン」を取得する必要があります。
①スイッチボットアプリをApp StoreやGoogle Play Storeからダウンロードします。
②スイッチボットアカウントに登録しログインします。
③設定から「クラウドサービス」をONにします。
④SwitchBotアプリで以下を順番に操作します。
 ・プロフィールタップする。
 ・設定をタップする。
 ・アプリバージョンを10回タップする。
 ・設定の選択肢に「開発者向けオプション」の項目が追加されるのでタップする。
 ・「トークンを取得」をタップする。
 ・トークンが2行表示されるので上段のトークンをコピーして使用します。
※トークンは他人に絶対に公開してはいけません。

デバイスIDを確認する

私はRaspberry pi を使用していますので以降の内容はLinuxが多少わかることが前提となります。コマンドプロンプトから次のコマンドを入力することによりSwitchBot serverに登録しているデバイスが「デバイスリスト」として出力されます。そのデバイスリストに「デバイスID」が記載されています。
curl -X GET “https://api.switch-bot.com/v1.0/devices” -H “Authorization: {Token}”
{Token}の箇所にswitchBotアプリで取得したトークンを記載します。
コマンドの応答として次のようなデバイスリストが出力されます。

{“statusCode”:100,”body”:{“deviceList”:[{“deviceId”:”************“,”deviceName”:”温湿度計 22 “,”deviceType”:”Meter”,”enableCloudService”:true,”hubDeviceId”:”************”},
{“deviceId”:”************“,”deviceName”:”ハブ2 03“,”enableCloudService”:true,”hubDeviceId”:”000000000000″},
{“deviceId”:”************“,”deviceName”:”防水温湿度計 D8“,”deviceType”:”WoIOSensor”,”enableCloudService”:true,”hubDeviceId”:”************”},
],”infraredRemoteList”:[]},”message”:”success”}

“deviceId”の右側がデバイスIDで、そのIDに対応する機器は”deviceName”の右側に記載があります。上記の場合は、”温湿度計”、”ハブ2″、”防水温湿度計”の3つのデバイスIDを読み取ることができます。

機器のステータスを取得する

トークンとデバイスIDがわかりましたので次のコマンドを入力することで機器の状態を確認することができます。
curl -X GET “https://api.switch-bot.com/v1.0/devices/{deviceId}/status” -H “Authorization:
{Token}

具体的にはこのように入力します。(実際のToken部分はもっと長い文字列です)
curl -X GET “https://api.switch-bot.com/v1.0/devices/0123456789AB/status” -H “Authorization:
0123456789ABCDEF0123

ステータスの見方

例えば温湿度計の場合、コマンドの応答として次のようなステータスが返ってきます。

{“statusCode”:100,”body”:{“deviceId”:”************”,”deviceType”:”Meter”,”hubDeviceId”:”************”,”humidity”:66,”temperature”:21.2},”message”:”success”}

上記を見てわかると思いますが、”humidity”の横の66が現在の湿度66%を示し,”temperature”の横の21.2が現在の温度21.2℃を示しています。上記の通りjson形式で応答が返ってきますので各自のプログラム上での再利用は容易となっています。私はラズパイのcronに次の2つを記載してInfluxDBに蓄積してみました。
①ステータスを取得しファイルに保存する下記のようなコマンドを作成
curl -XGET “https://api.switch-bot.com/v1.0/devices/{deviceId}/status” -H “Authorization:
{Token}” -o /home/pi/任意のデータ保存用フォルダ/meter.txt
②上記で保存したファイルから温度と湿度のデータを抜き出してInfluxDBに保存するスクリプトを作成

API Version1.0の使い方は理解できたので次はVersion1.1の使い方に挑戦しようと思います。

コメント

タイトルとURLをコピーしました