SwitchBot API(v1.1)にNode.jsで接続してみます!
SwitchBotのAPIが v1.0 → v1.1 になった際に認証方法が変わったようで
以前は トークン
のみあれば接続出来ていたのが トークン
・クライアントシークレット
の2種類が必要 なったようです
認証方法について改善しましたので、お客様のサーバーとSwitchBotのサーバー間で、より安全な通信が可能になります。
【API】新バージョンAPI v1.1を公開しました - SwitchBot Magazine | スマートホームで暮らしをシンプルに より引用
検証した環境
1 | node | 18.15.0 |
必要な情報をアプリから取得
APIに問い合わせるために2つの情報が必要です
- トークン
- クライアントシークレット
どちらの情報もSwitchBotのアプリから取得出来ます
まずアプリで「開発者向けオプション」を表示します
プロフィール > 設定 > アプリバージョンを10回タップ
【API】新バージョンAPI v1.1を公開しました - SwitchBot Magazine | スマートホームで暮らしをシンプルに
するとアプリバージョンの上に表示されます!
この画面を確認すると
- トークン
- クライアントシークレット
が確認出来ます
実行する
SwitchBot APIに接続するためのコードを追加します。
ここでは node で手軽に確認出来るようjsで作成します。
main.js
const crypto = require('crypto')
async function main() {
// SwitchBotアプリからコピーする
const token = 'xxx'
// SwitchBotアプリからコピーする
const secret = 'xxx'
const t = Date.now()
// 適当な値でOK
const nonce = 'id1'
const data = token + t + nonce
const signTerm = crypto.createHmac('sha256', secret).update(Buffer.from(data, 'utf8')).digest()
const sign = signTerm.toString('base64')
const headers = { Authorization: token, sign, nonce, t: `${t}` }
const url = 'https://api.switch-bot.com/v1.1/devices'
const res = await fetch(url, { headers })
const json = await res.json()
console.log(json)
}
main().then()
nodeを使って実行します!
$ node main.js
以下のようなレスポンスが返ってくれば成功です!
{
"statusCode": 100,
"body": {
"deviceList": [
{
"deviceId": "500291B269BE",
"deviceName": "Living Room Humidifier",
"deviceType": "Humidifier",
"enableCloudService": true,
"hubDeviceId": "000000000000"
}
],
"infraredRemoteList": [
{
"deviceId": "02-202008110034-13",
"deviceName": "Living Room TV",
"remoteType": "TV",
"hubDeviceId": "FA7310762361"
}
]
},
"message": "success"
}
公式のGitHubに他の言語も合わせた記述方法や使用出来るエンドポイントの情報が載っています ☺️
OpenWonderLabs/SwitchBotAPI: SwitchBot Open API Documents