本日現在、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 件のコメント:
コメントを投稿