curl コマンドで得ます。
次のシェルスクリプトを SW_stat.sh とでもして、Termux の ~/.termux/tasker ディレクトリに実行権を与えて格納します。
ーーーーーーーーーー ここから ーーーーーーーーーー
#!/data/data/com.termux/files/usr/bin/bash
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 -sS -X GET "https://api.switchbot.net/v1.1/devices/${deviceid}/status" \
-H "sign: ${sign}" \
-H "t: ${t}" \
-H "nonce: ${nonce}" \
-H "Content-Type: application/json; charset=utf-8" \
-H "Authorization: ${token}"
ーーーーーーーーーー ここまで ーーーーーーーーーー
これを ./SW_stat.sh で実行すると下記の結果が得られます。
~/.termux/tasker $ ./SW_stat.sh
{"statusCode":100,"body":{"version":"V2.0-2.0","power":"on","voltage":101.3,"weight":0.1,"electricityOfDay":169,"electricCurrent":3,"deviceId":"<デバイスID>","deviceType":"Plug Mini (JP)","hubDeviceId":"<デバイスID>"},"message":"success"}
~/.termux/tasker $
それぞれ次の意味です。
"statusCode":100 # ステータスコード:100(正常終了)
"version":"V2.0-2.0" # バージョン:v2.0
"power":"on" # 電源状態:オン
"voltage":101.3 # 電圧:101.3V
"weight":0.1 # 1日の消費電力(0.1 W)
"electricityOfDay":169 # 1日の使用時間(169 分)
"electricCurrent":3 # 現在の電流(3 A)⇨ 大きすぎる
"deviceId":"<デバイスID>" # デバイスID
"deviceType":"Plug Mini (JP)" # デバイスタイプ(Plug Mini (JP))
"hubDeviceId":"<デバイスID>" # Hub デバイスID
"message":"success" # メッセージ:成功
SwitchBot アプリのステータスとはなぜかズレがありますので、ちょっといい加減ですねぇ。
アプリの方が実際値なのでしょうか(?)
中身を次のようにし、シェル名を SW_stat2.sh として実行してみます。
ーーーーーーーーーー ここから ーーーーーーーーーー
#!/data/data/com.termux/files/usr/bin/bash
deviceid="<デバイスID>"
token="<トークン>"
secret="<クライアントシークレット>"
t=$(date +%s%3N)
nonce=$(uuidgen -r)
sign=$(echo -n ${token}${t}${nonce} | openssl dgst -sha256 -hmac ${secret} -binary | base64)
ret=($(curl -sS -X GET "https://api.switchbot.net/v1.1/devices/${deviceid}/status" \
-H "sign: ${sign}" \
-H "t: ${t}" \
-H "nonce: ${nonce}" \
-H "Content-Type: application/json; charset=utf-8" \
-H "Authorization: ${token}" \
| jq ".body.power, .body.voltage, .body.version"))
echo ""
out=`echo ${ret[0]} | sed 's/"//g'`
# get {"off"} or {"on"} & convert to {off} or {on}
echo power: $out
echo ""
ーーーーーーーーーー ここまで ーーーーーーーーーー
~/.termux/tasker $ ./SW_stat2.sh
power: on
~/.termux/tasker $
【解 説】
curl コマンドは -sS オプションで「進捗状況メーター」と呼ばれる出力を非表示(-s)にしてエラーのみ表示(-S)します
curl の実行結果を ret という変数に入れます
jq コマンドでパースして結果の "power" 値を ${ret[0]} として得ます(例では「"on"」)
[0] は jq でパースした 0 番目を指します
例では [1] は voltage (電圧) を示し、[2] が version (バージョン) を示します
sed で整形して「"on"」から「""」を取り除き「on」を抽出し、echo で表示しています(さほど意味はないのですが・・・)
この仕組みを使えば、power 値を MacroDroid や Tasker で判定することが可能になると考え、応用してみました。
一つ新しい次の記事がその応用例です。
Tasker の使い方 〜 Termux のシェルを使ったり、その結果を Tasker で判定したり、また Pushbullet とも連携してスマホ間での通知も処理できる 〜
0 件のコメント:
コメントを投稿