TECH

【SwitchBotAPI 使い方】PythonでSwitchBotやリモコン家電を操作する方法

どうも、IT企業に勤めるCHASUKEです。

スマートホームの定番アイテムと言えば、「SwitchBotシリーズ」ですよね。物理ボタンを指の代わりに押すロボットデバイスをはじめ、プラグや加湿器、カーテンとさまざまな製品が揃っています。(→関連デバイスをAmazonでチェックする

以前に「Bluetooth通信を使うローカルAPI」を使って、一部のSwitchBotデバイスの操作方法を紹介しました。今回は、ネット経由で「SwitchBotサーバーにアクセスするクラウドAPI」を使う方法です。

CHASUKE
いつの間にか公開されてました。

 

今回のクラウドAPIを使えば、SwitchBotシリーズの全デバイス、さらになんと、ハブに登録された赤外線リモコンの操作まで可能になります。

前置きが長くなりましたが、本記事では、クラウドAPIをPythonスクリプトで操作する方法を初心者向けに解説します。

Macやラズパイのターミナルを使える環境があれば、簡単に試せるので、ぜひお試しください。

CHASUKE
コマンドを「バシッ!」と叩いて、デバイスを操作できると気持ちいいですよ!

SwitchBotAPIの使い方

SwitchBotAPIを使えば、所有する全SwitchBotデバイス、ハブに登録している赤外線リモコンの操作が可能です。

今回は試しに、下記の2つを動かしてみます

  1. SwitchBotの操作
  2. エアコンの操作(赤外線リモコン)
CHASUKE
上記以外のデバイスも似た感じなので、ちょこっと変えれば、だいたいイケると思います。

 

準備やざっくり手順

必要なモノ

  1. SwitchBotデバイス(SwitchBotなど)
  2. SwitchBotハブ(Hub Miniなど)
  3. Pythonやcurl の実行環境(Macやラズパイなど)

今回は、Macのターミナルから操作してます。

全く同じにする必要はないですが、参考にcURLおよびPythonのバージョンはこちらです。

$ /usr/bin/curl -V                              
curl 7.64.1 (x86_64-apple-darwin20.0) libcurl/7.64.1 (SecureTransport) 
(以下、省略)
$ python3 -V      
Python 3.8.2
CHASUKE
Windowsでも、curlとPythonが使えればOKです。

 

また、SwitchBotAPIでは、クラウドサービスを使います。アプリからSwitchBotデバイスのクラウド設定を有効にしておきます。

CHASUKE
リストにある「書斎エアコン」と「白スイッチ」を動かします。

 

ざっくり手順はこちら

  1. 開発者トークンの取得
  2. デバイスIDの取得(curlコマンド)
  3. デバイス操作実行(Pythonスクリプト)

では、1つずつやっていきますね。

 

開発者トークンの取得

開発者トークンは、SwitchBotサーバにアクセスするための鍵です。ユーザーごとに異なります。

▼SwitchBotアプリのプロフィールタブの設定ボタンから取得できます。

アプリバージョンの項目を10回連続でタップすると、トークン取得画面が表示されます。トークンは人にバレないように管理しましょう。

CHASUKE
隠しコマンドですね。

 

デバイスIDの取得(curlコマンド)

さて続いて、SwitchBotアカウントに紐づくデバイス一覧を取得します。設定内容は、API仕様「Get device list」に書かれてます。

▼curlコマンドをMacのターミナルで実行します。

/usr/bin/curl -X GET "https://api.switch-bot.com/v1.0/devices"  -H "Authorization:<開発者トークン>" | python -c 'import sys,json;print json.dumps(json.loads(sys.stdin.read()),indent=4,ensure_ascii=False)'

メモ

上記コマンドの「<開発者トークン>」を全て置き換えてください。また、後半の「| python -c 'import sys,json;print json.dumps(json.loads(sys.stdin.read()),indent=4,ensure_ascii=False)'」は結果を綺麗に出力するために付けてます。

 

▼うまくいくと、こんなJson形式が出力されます。

"deviceList": [
    {
        "deviceName": "Hub Mini(自宅)", 
        "hubDeviceId": "000000000000", 
        "deviceType": "Hub Mini", 
        "deviceId": "HHHHHHHHHHHH"
    }, 
    {
        "deviceName": "温湿度計", 
        "hubDeviceId": "HHHHHHHHHHHH", 
        "deviceType": "Meter", 
        "deviceId": "MMMMMMMMMMMM"
        "enableCloudService": true
    },

    (中略)
    
    {
        "deviceName": "白スイッチ", 
        "hubDeviceId": "HHHHHHHHHHHH", 
        "deviceType": "Bot", 
        "deviceId": "BBBBBBBBBBBB", 
        "enableCloudService": true
    }
], 
"infraredRemoteList": [
    {
        "remoteType": "Air Conditioner", 
        "deviceName": "書斎エアコン", 
        "hubDeviceId": "HHHHHHHHHHHH", 
        "deviceId": "FF-FFFFFF-FFFFFF"
    }
]

メモ

アプリに登録済みのSwitchBotデバイス(deviceList)と赤外線リモコン(infraredRemoteList)の一覧が全て表示されてます。ちなみに「deviceId」「hubDeviceId」「infraredRemoteList」の内容はマスクしてます。

CHASUKE
これで欲しかったデバイスID(deviceId)が取得できました!

 

SwitchBotデバイスのAPI操作(curl, Pythonスクリプト)

さて続いて、SwitchBot(白スイッチ)をAPI実行します。設定内容は、API仕様「Send device control commands」に書かれてます。

▼コマンドを叩いて、こんな風になれば成功です。

 

▼下記は、SwitchBotを操作するためのcurlコマンドです。ターミナルで実行すればOKです。

/usr/bin/curl -X POST "https://api.switch-bot.com/v1.0/devices/<デバイスID>/commands" \
-H "Content-Type: application/json; charset: utf8" \
-H "Authorization:<開発者トークン>" \
-d {'
    "command":"turnOn",
    "parameter":"default",
    "commandType":"command"
}'

メモ

<開発者トークン>」「<デバイスID>」をこれまでに取得したものに書き換えてください。デバイスごとに設定するパラメータ(commandType, Command,  command)が異なります。(API仕様に載ってます

CHASUKE
「ウィーン」とSwitchBotが動けば、成功です!

 

続いては、これをPythonスクリプトで実行します。

▼作成したスクリプト(switchbot_device_ope.py)がこちら

import requests, json

# パラメーター(要書き換え)
DEVICEID="<SwitchBotデバイスID>"
ACCESS_TOKEN="<開発者トークン>"
API_BASE_URL="https://api.switch-bot.com"

# Send device control commandsコマンド(POST)
def device_control():
    headers = {
        # ヘッダー
        'Content-Type': 'application/json; charset: utf8',
        'Authorization': ACCESS_TOKEN
    }
    url = API_BASE_URL + "/v1.0/devices/" + DEVICEID + "/commands"
    body = {
        # 操作内容
        "command":"turnOn",
        "parameter":"default",
        "commandType":"command"
    }
    ddd = json.dumps(body)
    print(ddd) # 入力
    res = requests.post(url, data=ddd, headers=headers)
    print(res) # 結果

if __name__ == '__main__':
    # 処理呼び出し
    device_control()

メモ

内容は先ほどのcurlコマンドと全く同じです。「<開発者トークン>」「<デバイスID>」をこれまで取得したものに書き換えてください。

 

▼実行する前に、ライブラリが必要です。

pip3 install --upgrade pip --user
pip3 install requests 

 

あとは、作成したPythonスクリプトファイルの場所に移動して、実行すれば、動くはずです。

python3 switchbot_device_ope.py
CHASUKE
スクリプトは、いろいろ改造してお試しくださいねー。

 

赤外線リモコンのAPI操作(Pythonスクリプト)

さて続いては、Hub Miniに登録しているリモコン家電の操作です。

▼下記のPythonスクリプトでは、エアコンを「23度・暖房・風量オート」に設定しています。

import requests, json

# パラメーター(要書き換え)
DEVICEID="<SwitchBotデバイスID>"
ACCESS_TOKEN="<開発者トークン>"
API_BASE_URL="https://api.switch-bot.com"

# Send device control commandsコマンド(POST)
def device_control():
    headers = {
        # ヘッダー
        'Content-Type': 'application/json; charset: utf8',
        'Authorization': ACCESS_TOKEN
    }
    url = API_BASE_URL + "/v1.0/devices/" + DEVICEID + "/commands"
    body = {
        # 操作内容
        "command":"setAll",
        "parameter":"23,5,1,on",
        "commandType":"command"
    }
    ddd = json.dumps(body)
    print(ddd) # 入力
    res = requests.post(url, data=ddd, headers=headers)
    print(res) # 結果

if __name__ == '__main__':
    # 処理呼び出し
    device_control()

メモ

これまで同様、「<開発者トークン>」「<デバイスID>」を書き換えてお試しください。「23,5,1,on」でエアコンの細かい設定(API仕様参照)を指定してます。

 

「ピッ」とエアコンが動き出し、アプリ側のエアコン設定が変更されてれば成功ですね。

実行前

実行後

CHASUKE
キタキター!

最後に

以上、簡単ではありますが、SwitchBotのクラウドAPI「SwitchBotAPI」を試してみました。

SwitchBotデバイスとコマンドが実行できる環境があれば、プログラミング初心者の方でもすぐに試せるように書いてみました。

SwitchBotにはさまざな製品があるので、参考にして楽しんでもらえれば幸いです。内容に間違いや質問、リクエストなどあれば、コメントやメールで連絡いただければと。

CHASUKE
Twitter(@chasuke__)にDMでも!
created by Rinker
スイッチボット(SwitchBot)
¥3,980 (2021/05/11 21:33:30時点 Amazon調べ-詳細)
created by Rinker
スイッチボット(SwitchBot)
¥3,980 (2021/05/11 22:56:07時点 Amazon調べ-詳細)

Amazonでお得に買い物

Amazon.co.jpで買い物するならギフト券を現金チャージするのがお得です。チャージごとに最大2.5%分のAmazonポイントがもらえます。また、5000円チャージで1000円分ポイント還元キャンペーンも実施中!!

詳しくはコチラ

  • この記事を書いた人

CHASUKE

某IT企業でエンジニアをしているCHASUKEです。 当ブログでは生活を便利にするガジェットやサービスなどライフスタイルに関わる様々な情報をお届けします。レビュー依頼も受け付けています。「お問い合わせ」より気軽にご相談ください。

© 2021 CHASUKE.com