2024-12-16

SwitchBot Plug API を V1.0 から V1.1 に

 

 

本日現在、SwitchBot API V1.0 も使用できますが、いずれ V1.1 対応が必要になる可能性がありますので、V1.1 に移行してみました。

 

API の詳細は下記サイトにあります。

 

 https://github.com/OpenWonderLabs/SwitchBotAPI

 

V1.0 では「デバイスID + トークン」だけで利用できましたが、V1.1 はセキュリティ強化され、追加で「クライアントシークレット t値 nonce sign(SHA-256 を BASE64 でエンコードしたもの)」が必要になります。

 

 

V1.0 の「デバイスID + トークン」だけでもかなり強いパスワード相当ですから、V1.1 で追加が本当に必要かは疑問ですが。。。

 

 

 

まず移行に際して必要なパッケージをインストールします。

 

 

Termux で次の2つのパッケージをインストールします。

 

   ・pkg install uuid-utils  # nonce を得るため

   ・pkg install openssl-tool  # sign 値を BASE64 にエンコードするため


 

シェルを作成します。

 

内容は "ー〜ー ここから ー〜ー"、"ー〜ー ここまで ー〜ー" に記載、"turnOff" は SwitchBot Plug の電源供給オフです。

電源供給オンの場合は "turnOn"とします。


<デバイスID> ですが、SwitchBot アプリで、ホームからデバイスをタップ ⇨ 右上の[設定マーク]をタップ ⇨[デバイス情報]の中の[BLE MAC]アドレス "AA:BB:CC:DD:EE:FF" から ":" を除いたもの "AABBCCDDEEFF" が "デバイスID" です。

 

コピーして以下のシェルに貼り付けます。

 

 
<トークン> <クライアントシークレット> ですが、SwitchBot アプリで、ホームから[プロフィール]⇨[設定]⇨[基本データ]⇨[アプリバージョン]を10回連続タップして現れる[開発者向けオプション]をタップすると表示されます。

 

ともにコピーして以下のシェルに貼り付けます。




ーーーーーーーーーー ここから ーーーーーーーーーー

deviceid="<デバイスID>"
token="
<トークン>"
secret="
<クライアントシークレット>"
t=$(date +%s%3N)
nonce=$(uuidgen -r)
sign=$(echo -n ${token}${t}${nonce} | openssl dgst -sha256 -hmac ${secret} -binary | base64)
curl -X POST "https://api.switch-bot.com/v1.1/devices/${deviceid}/commands" \
-H "sign: ${sign}" \
-H "t: ${t}" \
-H "nonce: ${nonce}" \
-H "Content-Type: application/json" \
-H "Authorization:  ${token}" \
-d '{"command": "
turnOff", "parameter": "default", "commandType": "command"}'

ーーーーーーーーーー ここまで ーーーーーーーーーー


そしてこのシェルに chmod で実行権を与えます。

 

Tasker または Macrodroid のアクションで Termux: Tasker プラグインにシェルを設定すれば、例えば 80% まで充電したら電源供給オフにする自動化ができます。

 

 

 

 

 

 

 

0 件のコメント: