
SwitchBotのPlug(プラグ)をAPIで動かしたいのだけどどうやったら良いんだろう?
プログラミングとかわからないからコードを教えてほしい!
このように思っていませんか?
SwitchBotのPlug(スマートプラグ)をAPIを使って動かすことができればSwitchBotデバイス以外の他社製デバイスをトリガーにしてプラグのON/OFFを切り替えることができます。
今回はSwitchBotのPlug(スマートプラグ)をAPIを使って動かす方法をどこよりも分かりやすく解説します。また、コードも公開します。
- SwitchBot PlugのAPIを使った動かし方がわかります
- 動かすためのPythonコードがわかります
SwitchBot PlugをAPIで動かすための手順
SwitchBot PlugをAPIで動かす手順は以下の通りです。なお、Pythonはインストールされている前提で進めます。
- プラグをSwitchBotアプリに登録
- APIトークンの取得 ※既に取得済みであればスキップ
- Device IDの確認
- Pythonコードの作成
- テスト
プラグをSwitchBotアプリに登録
まずはプラグをSwitchBotアプリに登録します。これは難しい事はなく、通常通りSwitchBotアプリからプラグを使えるようにすることです。
通常通りの登録手順なのでアプリの指示に従ってプラグを登録してください。アプリからプラグのオンオフができれば問題ありません。
登録の仕方がわからなければ公式サイトのこちらのページを参考にしてみてください。
APIトークンの取得 ※既に取得済みであればスキップ
APIを使うためにはトークンを取得する必要があります。既に取得済みであればスキップして問題ありません。
トークンの取得方法は詳細を以下の記事で書いていますので次の記事を参照ください。

Device IDの確認
APIでプラグを動かすためにはプラグのDevice IDを知っておく必要があります。Device IDはコマンドプロンプトで以下のコマンドを打つことでわかります。(あなたのトークン)という部分は先ほど取得したAPIトークンを入力してください。
curl --location --request GET "https://api.switch-bot.com/v1.0/devices" --header "Authorization: (あなたのトークン)"
すると下記のように様々なデバイスの情報が取得できます。結果はJSON形式なのでjqコマンドなどJSON形式を整形するツールを使うと読みやすいと思います。

この中から今回APIで動かしたいプラグの名前を見つけます。その前にあるdeviceIdがプラグのDevice IDになりますのでメモ帳などにコピーしておいてください。このDevice IDは次のPythonコードの作成の項目で使用します。
Pythonコードの作成
実際に動かすためのPythonコードを書いていきます。難しいことはなく次のコードをコピーすれば問題ありません。
ファイル名を「sb_plug_control.py」にして任意のフォルダに保存します。
#!/usr/bin/python3
# -*- coding: utf-8 -*-
#
# sb_plug_control.py
import requests
import json
import sys
import time
import hashlib
import hmac
import base64
OPEN_TOKEN = '(あなたのトークン)'
SECRET = '(あなたのシークレット)'
DEVICE_ID = '(あなたのデバイスID)'
API_HOST = 'https://api.switch-bot.com'
#APIの認証(ある種おまじないみないたもの)
nonce = ''
t = int(round(time.time() * 1000))
string_to_sign = '{}{}{}'.format(OPEN_TOKEN, t, nonce)
string_to_sign = bytes(string_to_sign, 'utf-8')
secret = bytes(SECRET, 'utf-8')
sign = base64.b64encode(hmac.new(secret, msg=string_to_sign, digestmod=hashlib.sha256).digest())
HEADERS = {
'Authorization': OPEN_TOKEN,
'sign': format(str(sign, 'utf-8')),
't': format(t),
'nonce': format(nonce)
}
#----------------------
#コマンドを実際に送信します
def post_request(url, params):
res = requests.post(url, data=json.dumps(params), headers=HEADERS)
data = res.json()
if data['message'] == 'success':
return res.json()
return {}
#ON/OFFするためのコマンドを生成
def send_plug_command(deviceId, command):
url = f"{API_HOST}/v1.1/devices/{deviceId}/commands" #コマンドを送信する場所のURL
#コマンドの生成
params = {
"command": command, #turnOnかturnOff。Pythonコード実行の時の引数で指定する
"parameter": "default", #プラグの場合はdefault固定
"commandType": "command" #プラグの場合はcommand固定
}
res = post_request(url, params) #コマンドを送信
if res['message'] == 'success':
return res
return
#MAINコード(コードを実行するとここから実行されます)
status = send_plug_command(DEVICE_ID, sys.argv[1])
print(status)
このコードの中の「(あなたのトークン)」「(あなたのシークレット)」「(あなたのデバイスID)」という項目は全て自分のトークンやシークレット、デバイスIDに書き換えてください。
トークンとシークレットはAPIのトークン取得の項目で取得したものです。デバイスIDはDevice IDの確認の項目で取得したIDです。
かっこ()の入力も不要です。””の中に直接入力してください。
なお、各モジュールがインストールされていない場合はpip installコマンドでインストールしてください。
テストしてみる!
最後に正しく動くかテストをします。テストするにはコマンドプロンプトでPythonコードを実行します。
Pythonコードを保存したフォルダのアドレスバーに”cmd”と打ってコマンドプロンプトを起動します。

コマンドプロンプトで以下のコードを実行します。
python sb_plug_control.py turnOn
引数はturnOnにするとスマートプラグがオンになり、turnOffにするとスマートプラグをオフにします。
まとめ
いかがだったでしょうか?
今回はSwitchBotのPlug(スマートプラグ)をAPIで動かす方法を紹介しました。
プラグはこちらを使っています。
また、コードはPythonを使っています。もしPythonに不安を感じている人は以下の本で勉強すると良いですよ!初心者向きでわかりやすく学ぶことができます。
↓超入門書
↓初級本
コメント