ロゴテキスト ロゴ

    SwitchBot API(v1.1)にNode.jsで接続する

    SwitchBot API(v1.1)にNode.jsで接続する

    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つの情報が必要です

    1. トークン
    2. クライアントシークレット

    どちらの情報もSwitchBotのアプリから取得出来ます





    まずアプリで「開発者向けオプション」を表示します


    プロフィール > 設定 > アプリバージョンを10回タップ

    【API】新バージョンAPI v1.1を公開しました - SwitchBot Magazine | スマートホームで暮らしをシンプルに



    するとアプリバージョンの上に表示されます!

    アプリバージョンを10回タップすると開発者向けオプションが表示される




    この画面を確認すると

    • トークン
    • クライアントシークレット

    が確認出来ます

    開発者向けオプション画面でトークン、クライアントシークレットが確認出来る

    実行する

    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




    プロフィールの背景画像 プロフィール画像
    Yuki Takara
    都内でフリーランスのエンジニアをやってます。フロントとアプリ開発メインに幅広くやってます。