SwitchBotのデバイスIDを取得する

SwitchBotの温度計をモニタリングするツールを作るためにデバイスIDが必要なため、デバイスIDを取得するコードをPython(3.11)で書きました。
調べてみるとデバイスIDはAPI経由で取得が必要と書いてあるサイトもありましたが、デバイスIDはアプリ画面から見れるデバイス情報のBLE MACと同じでした。ですので、わざわざコードを書く必要もなかったです。
使っている温度計はこれです。

デバイス一覧を取得するだけであればtokenだけで大丈夫です。secret_keyは必要ありませんでした。APIはv1.1が出ているみたいです。デバイスIDの取得だけなので、ここではv1.1を使いました。

import pprint

import requests


def get_device_id(token):
    """Get device id from SwitchBot Cloud API."""
    url = "https://api.switch-bot.com/v1.0/devices"
    headers = {"Authorization": token, "Content-Type": "application/json"}
    res = requests.get(url, headers=headers)
    if res.status_code != 200:
        raise Exception("Failed to get device id from SwitchBot Cloud API.")
    return res.json()


token = input("Enter your token: ")
pprint.pprint(get_device_id(token))

以下のようなjsonでデータが返ってきます。yyyyyyyが欲しかったデバイスIDです。


{
    "body": {
        "deviceList": [
            {
                "deviceId": "xxxxxx",
                "deviceName": "Hub Mini 52",
                "deviceType": "Hub Mini",
                "enableCloudService": False,
                "hubDeviceId": "000000000000",
            },
            {
                "deviceId": "yyyyyyy",
                "deviceName": "温湿度計 07",
                "deviceType": "Meter",
                "enableCloudService": True,
                "hubDeviceId": "xxxxxx",
            },
        ],
        "infraredRemoteList": [
            {
                "deviceId": "zzzzzzz",
                "deviceName": "エアコン",
                "hubDeviceId": "xxxxxx",
                "remoteType": "Air Conditioner",
            },
        ],
    },
    "message": "success",
    "statusCode": 100,
}

ここで得た情報を使って、以下のようにprometheusで見れるようにしていきます。

つづく(かも)。

この記事が気に入ったらサポートをしてみませんか?