2024-12-30

Tasker の使い方 〜 Termux のシェルを使ったり、その結果を Tasker で判定したり、また Pushbullet とも連携してスマホ間での通知も処理できる 〜

 

下記記事で Termux、Termux: Tasker プラグイン、Termux シェルなどを駆使して「やさしい充電」を実現しました。

 

SwitchBot API v1.0 に代えて v1.1 を使う 〜 80%/90% 充電で自動停止する方法 〜

 

今回は、上記記事で使用したシェルの内容を少し変更します。

 

シェルで実行した curl コマンドの実行結果を Tasker で判定します。

 

やりたいことは次図です。

対象となるスマホは UMIDIGI s5 Pro で、サブスマホです。

 


 

充電完了で SwitchBot plug が電源オフ後、1時間以降に再度電源をオンにする Tasker の設定です。

 

再電源オンは、再充電に備えるためですが、なんで1時間経過後かというと、1時間経ってれば充電ケーブルを抜いているだろう、ということからです。

 

現在「やさしい充電」の対象は UMIDIGI s5 Pro と iPhone SE3 ですので、一方が充電完了しても他方は充電する可能性もありますので。。。

 

OPPO Reno11 A は「やさしい充電」機能がこの機種自体に備わっていますので、SwitchBot plug での制御対象ではありません。

 

 

まずは次のタスクをご覧ください。

 


 

 

タスク番号 1〜5 は前準備です。

 

  WiFi の接続状態を得ます

         ウチには WiFi-AP が4個所あり、SwitchBot Plug mini が
         接続されている WiFi-AP を判定するためです

         %ni_active_wifi_ssid に接続中の WiFi の SSID が得られます

 

   %ni_active_wifi_ssid を変数 %R1wifi に入れておきます

 

   SwitchBot Plug mini がオンかオフかを得るためシェルを実行

         シェル(curl GET)を実行し json をパースして電源の状態 ".body.power" を得ます

         シェルの内容は次のようになっています

 

ーーーーー ここから ーーーーー
#!/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"))

out=`echo ${ret[0]} | sed 's/"//g'`

echo $out
ーーーーー ここまで ーーーーー

            ${ret[0]} の内容(["on"] または ["off"] から ' " ' を除いて [on] または [off] を抽出)

            これを $out に入れて echo コマンドで標準出力します 

 

 

curl の実行結果はファイルへ吐き出すこともでき、この場合は複数の情報を Tasker に戻すことができます。

 

次のようなシェルにすると SW_stat.txt ファイルには curl 実行結果が入ります。


ーーーーー ここから ーーーーー
#!/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}" \
 | cat > ./SW_stat.txt

cat ./SW_stat.txt
echo ""
ーーーーー ここまで ーーーーー
 

SW_stat.txt ファイルの内容は次のような結果になります。

 

{"statusCode":100,"body":{"version":"V2.0-2.0","power":"on","voltage":100.1,"weight":0,"electricityOfDay":808,"electricCurrent":0,"deviceId":"<デバイスID>","deviceType":"Plug Mini (JP)","hubDeviceId":"<デバイスID>"},"message":"success"}

 

 

   結果 %stdout(システム変数)を変数 %SWbot に入れておきます

         シェルの最後に echo コマンド で標準出力したもの([on] または [off])
         が $stdout に入っています

 

   変数 %Times は充電完了時に unix time(秒)を得て +3600(秒)
         を足してあります

         これはあとで1時間経過後を判定するときに使います。



 6〜20 が実際の処理です。

 

スマホの WiFi 接続が SwitchBot Plug と同じ WiFi-AP か?

      no  : stop

▶   yes : %SWbot は on か?

              yes : stop

              no  : 充電完了時から1時間以上経過したか?

                      yes : SW_on.sh 実行 ⇨ stop(SwitchBot plug の電源をオン)

                      no  : 10 分待って ▶ へ戻る



プロファイルは「5:00 〜 19:00 の 30 分ごと」としています。

 

すでにリタイヤしていますので夜間充電はしません。

 

また、寝室は別の WiFi-AP で、そこにスマホがある場合も充電はしません。




さらにメインスマホ(OPPO Reno11 A)を持って外出中は SwitchBot plug の電源はオフにし、帰宅したら再び前記の処理に戻します。



そのため、メインスマホから Pushbullet でサブスマホと連携します。



メインスマホのプロファイルは自宅の WiFi-AP に接続しているか切断状態かの2つをトリガーにしています。



外出時のタスクは次のようになっています。




帰宅時のタスクは次のようになっています。




最初に5秒の待機を行っているのは、WiFi-AP 間をハンドオーバーしたときにメッセージが送信されてしまうのを防止するためです。



サブスマホへは Pushbullet から、次のメッセージを送信します。


   ・宛先:UMIDIGI s5Pro

   ・タイトル:通知

   ・内容:not-home(外出時)

               at-home(帰宅時)



 

サブスマホ側ではプロファイルに Pushbullet のメッセージを受け取ったとき、として

 

   ・外出時のメッセージの場合:SW_off.sh を実行

                                             冒頭のプロファイルをオフ

 

   ・帰宅時のメッセージの場合:冒頭のプロファイルをオン


とします。

 

冒頭のプロファイルは「5:00 〜 19:00 の 30 分ごと」のことです。

 

 


Pushbullet をインストールして2台のスマホで同じアカウントで設定すると、両者の間でメッセージを交換できます。

 

 

また Pushbullet インストールによって Tasker のプラグインになっていますので、プラグインアクションで内容を検査できますし、メッセージ受信時にプロファイルにすることもできます。

 

 

 

おわりに ・・・


・Termux: Tasker プラグインを Tasker から操作できる

   これにより、Termux の様々なコマンドやシェルを連携できる

・Termux を使えることで Tasker 処理に柔軟性が生まれる

・Termux のシェルの中で実行結果を得ることができる

・Termux のシェルの実行結果を Tasker に渡して判定することができる

   シェルの実行結果をシステム変数で受け取ることができ、Tasker のアクション
   で使用できる

   また、ファイルに吐き出すことやそのファイルを読み込むことで Tasker のアクシ
   ョンで使用できる

・WiFi の状態を判定できる

・Unix time(1970年1月1日を起点としてそこからの経過秒数(10桁)や
   ミリ秒(13桁)を得て計算することや判定することができる

・Pushbullet 連携を行って複数デバイス間でメッセージ交換ができる

   デバイスはスマホのほか、PC や Mac ともメッセージ交換できる

   sms を送信し、他方で受信するというやり方に比べて大変便利で通信料無料で利用できる


 

 

MacroDroid でも Pushbullet 連携を含めて Tasker と同様のことができます。 



 

 

 

 

 

2024-12-24

SwitchBot API v1.1 で Plug mini の状態を得る

 

 

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 とも連携してスマホ間での通知も処理できる 〜

 


 

 

 

 


2024-12-19

SwitchBot API v1.0 に代えて v1.1 を使う 〜 80%/90% 充電で自動停止する方法 〜

 

【2024-12-22】Termux: Widget の使い方を記事末に追記

 

【2024-12-21】

エディターを Simple Text Editor からコードエディターである Acode editor に変更

変更理由:

Simple Text Editor にはシェルスクリプトやコード編集時にコード整形機能がないが、Acode editor には自動整形機能があるため


 

 

api.switch-bot.com の "403: forbidden" が発生した 12/16 以降、当ブログの関連記事閲覧が急増しています。

 

おそらく API が v1.1 になり、使えなくなったことが影響していると思われます。

 

 

当ブログの記事を時系列で閲覧し、やり方を理解していただくのは大変面倒だと思われますので、ゼロベースでやり方について記事にします。

 

api.switch-bot.com v1.0 のときは「デバイスID」と「トークン」で制御できましたが、v1.1 はこれらに加えて、セキュリティ強化がなされ、署名認証が必要になりました。

 

署名認証は「トークン」「Unix time:ミリ秒」「nonce(UUID)」を連携した「署名」を生成し、唯一無二のデバイスからの制御リクエストであることを認証するためです。

   ※ Unix time は 1970-01-01 から本日現在までの経過ミリ秒です


署名は「クライアントシークレット」を用いて sha256 暗号化を行い base64 エンコードして使います。

 

さらに制御リクエストの有効時間は 5分とされているようで、署名生成から 5分以内にリクエストしないと無効にされるようです。

 

これにより「なりすまし」リクエストが極めて困難となり、強固に防御できます。

 

SwitchBot Plug mini (JP) デバイスはこれほど強固な仕組みは必要ないと思われますが、SwitchBot ロック(ドアロック)デバイスを制御可能にするため v1.1 の署名認証を追加したと思われます。

 

実際、SwitchBot ロックは v1.1 から制御リクエストができるようになりました。

 

ですので、すべてのデバイスが署名認証をしない限り制御リクエストできなくなりました。

 

 

やり方は次の手順(概要)で行います。

手順(概要)に続いて具体的な手順の詳細があります。

 

1.SwitchBot アプリをインストールする

 

・ログインアカウントを作成登録する

・デバイスを新規に登録する

 

アプリからデバイスの電源オン・オフができるとともに

API v1.1 を利用する際に必要となる次のものが得られます

・デバイスID

・トークン

・クライアントシークレット(Secret Key)

 

 

 

2.F-Droid をインストールする

 

F-Droid を使って TermuxTermux: Tasker をインストールします

(Google Play Store のものは古いので使わない)

 

TermuxTermux: Taskerインストールする理由ですが、curl コマンドで SwitchBot plug の API(api.switch-bot.com API v1.1)を叩くシェルを Termux で作成し、そのシェルを Tasker や Macrodroid で使えるようにするためです


Termux は 仮想的な Linux 環境で、root 権限なしに使えます

 

Termux: Tasker は Tasker プラグインで、Termux を使って作成したシェルを Tasker や MacroDroid などの自動化ツールで使えるようにするものです 

 

 

併せてコードエディターの Acode editor もインストールします

 

 

必要に応じて Termux: APITermux: Widget もインストールします

 

これら2つは SwitchBot plug API を使うのに必ずしも必要ではありませんが、Termux を継続して使うなら入れておいた方がいいでしょう。

 

 

 

3.Android 機に隠されたファイラーを使えるようにする

 

Termux のディレクトリやファイルは Termux からしか扱えません

 

また Android 内部ストレージは Termux の termux-setup-storage コマンドにより Termux で扱えるようになりますが、Android 側からは Termux のディレクトリやファイルは扱えません


 

Android 側から Termux のディレクトリやファイルを扱うには特別なファイラーを使います

 

 

Android 機にはドロワーアプリ一覧には現れない特別な、隠れた標準ファイラーがあります

 

通常は使うことができませんが、アクティビティをショートカット化すればホーム画面に配置できて使えるようになります

 

 

ショートカット化されたこのファイラーを使えば、Android の 内部ストレージのディレクトリやファイルと、Termux のディレクトリやファイルの両方を操作(作成・削除・移動・コピーなど)できるようになります

 

 

 

4.コードエディターを使う

 

Termux 上で vim や nano を使えばコマンドラインからテキストやシェルを作成・編集できますが、コードエディターがあればこれを使って画面上で作成・編集でき、シェルスクリプトやコードが自動整形されます

 

コードエディターは必須ではありませんが、入れておくと vim や nano でスクリプトを作成・編集することに比べて、CUI ではなく GUI で操作できますから大変重宝します

 

 

 

5.MacroDoroid や Tasker で自動化する

 

80% 〜 90% 充電したら SwitchBot plug の電源を自動的にオフにして充電を停止させるためです

 

ーーーーーーーーーーーーーーーーーーーー

 

 

 

 

それでは具体的にそれぞれの手順を説明します。

 

 1.SwitchBot アプリをインストールする 

 

Google Play Store で SwitchBot を検索し、インストールします。

 

以下は iPhone での例ですが、Android 機も同じ手順です。

 

まず Bluetooth をオンにし、WiFi 接続を 2.4GHz にしておく必要があります。

 

でないと SwitchBot plug mini (JP) との接続ができません。

 

接続は Bluetooth で本体を探し、次に本体固有のコードを識別して、2.4GHz WiFi で接続する仕組みのようです。

 

まずはアプリを起動しアカウントを作成します。

 


 

メールアドレスを入力して[作成]をタップします。

 


 

プライバシーポリシー利用規約に同意します」にチェックを入れ[認証コードを送信]をタップします。

 

作成時に入力したメールアドレスに「認証コード」が送られてきますので、これを入力します。

 

 

再度「利用規約」と「プライバシーポリシー」への同意を求められます。



 

[同意する]をタップします。

 

パスワードの設定を求められますのでこれを設定し[確認]をタップします。

 


 

 

セキュリティ強化のための 2段階認証方式を採用するかどうかを聞かれます。

 


 

 

設定するには[設定へ]を、設定しない場合は[キャンセル]をタップします。

 

 

ニックネーム入力をして、[保存]をタッチすればログインアカウントの登録は完了です。

 


 

 

作成したら「ホーム」タブをタップしてログインします。

 

赤く囲った部分をタッチしてメールアドレスとパスワードを入力してログインします。

 


 

 

最新版ファームウェアの更新通知がきていればアップデートします。

 

本記事公開時点:2024−12−19 の最新版は V2.0(2024-08-16 付け)です。


 

 

 

 SwitchBot アプリに「SwitchBot plug mini」を新規登録 

 

SwitchBot plug mini (JP) をコンセントに差し込みますが、N極プラグなので N極対応コンセントでないと差し込みできませんので留意してください。

 

N極とはアース接地された側を指し、幅が他方(非接地側)よりも 2mm ほど広い側です。

 

壁面コンセントは N極対応されているはずですが、市販のタップ等は N極対応されていないものもありますから注意します。

 

 

 

「ホーム」タブをタップして以下の処理を行います。

 

 

  ① 真ん中の「 デバイスを追加」をタップ、または右上の をタップします

 

 


 


  ② プラグミニ(JP)をタップ

  ③[次へ]をタップ

  ④ プラグミニの電源ボタンを 2秒長押しする

      (LEDが青く点滅するまで)

  ⑤[次へ]をタップ

  ⑥[スタート]ボタンをタップ

  ⑦ カメラが起動するので QRコードを読み込む

      (QRコードは本体横面または同梱のカードに印刷されている)

  ⑧「コンセント」を[ホームに追加]をタップ

  ⑨ コンセントの接続場所を選択し[続ける]をタップ

  ⑩ アプリのホーム画面に「SwitchBot plug mini」が表示されれば完了

 

 

 

 ▶ デバイスID の取得 


デバイスID は SwitchBot アプリから次の手段で得ます。

 

  ① ホームから SwitchBot plug mini をタップ

  ② 右上の歯車タッチし「デバイス情報」を
タップ

  ③ BLE MAC アドレス(AA:BB:CC:DD:EE:FFという形式)の
      : を全て削除して繋げたもの
"AABBCCDDEEFF" デバイスID です

      "AABBCCDDEEFF" をメモし
、Google Keep になどペーストしておきます

 

 

 

 ▶ トークンとクライアントシークレットの取得 

  ① SwitchBot アプリのホーム画面の「プロフィール」を
タップします

  ② [設定]⇨[基本データ]と進み「アプリバージョン」を 10回ほど連打します

      「開発者向けオプション」が出てきます
 

  ③「開発者向けオプション」をタップすると、トークンクライアントシークレットが出ます

     右のコピーマークをタップしてコピーし、Google Keep などにペーストしておきます

 

 

 

 

 2.F-Droid をインストールする 

 

F-Droid を使って TermuxTermux: Tasker をインストールします。

(Google Play Store のものは古いので使わない)

 

併せてあとで使うコードエディター Acode editor をインストールします。

 

 

必要に応じて Termux: APITermux: Widget もインストールします。

 

スマホのブラウザで F-Droid にアクセスしダウンロードします。

 


 

 

ダウンロードした F-Droid.apk をインストールします。

 

インストールしたら F−Droid アプリを開きます。

 



赤く囲んだ検索レンズマークを
タップします。

検索窓に「termux」と入力します。

 




 

Termux Terminal emulator with packages」をタップしてインストールします。

 

すぐ下の「Termux: Tasker Tasker plug-in to run Termux script from Tasker」と「Termux: Widget Launch Termux commands from the homescreen」を同様にインストールします。

 

 

併せてコードエディターの Acode editor をインストールします。

 


 

 

コードエディターはなんでもいいのですが、F-Droid 版の Acode editor はコード自動整形機能があり、無料・広告なしです(Google Play Store 版は広告あり、または有料)。

 

 

インストールした Termux を起動し、コマンドラインから 

 

 $ pkg update # リポジトリの最新化
 $ pkg upgrade -y #パッケージの最新化

 

を実行し、以下のコマンドを実行します。

 

 $ termux-setup-storage # 内部 Storage を扱えるようにする
 $ pkg install curl  # curl コマンドをインストール

 

pkg コマンドは、必要に応じていろいろなパッケージをインストールするときに使います。

 

例えばコマンドラインエディターである vim や nano も

 

 $ pkg install vim nano


としてインストールできます。



今回は UUID / base64 エンコーダー もインストールします。


 $ pkg install uuid-utils  # nonce を得るため
 $ pkg install openssl-tool  # sign 値を base64 にエンコードするため



ここまできたら、一度 SwitchBot plug mini (JP) の電源オフを次のコマンド群を実行して確認します。

 

なお <デバイスID><トークン><クライアントシークレット> は 1項で得て Google Keep などに保存しておいたものをコピペします。

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

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"}'

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

"turnOff" は SwitchBot Plug mini (JP) の電源オフ、"turnOn" が電源オンです。


次に Termux の home ディレクトリに .termux ディレクトリを作成し実行権限を与えます。

 

 $ mkdir -m 700 .termux # 先頭に . (ピリオド) を忘れない

 

 

Termux の home ディレクトリの配下のディレクトリ構成は次のようになります。

 



.termux の配下に tasker ディレクトリを作成し、これにも実行権限を与えておきます。


 $ mkdir -m 700 tasker

 

この tasker ディレクトリにシェルスクリプトを配置すると Tasker プラグインでそのシェルを扱えるようになります。

 

Tasker プラグインは MacroDroid や Tasker のアクションで扱え、作成したシェルを設定するとそのシェルを実行できるようになります。




 

 3.Android 機に隠されたファイラーを使えるようにする 

 

Android の一般的なファイラー「CX File Explorer」や「Files by Google」などでは Termux のディレクトリやファイルは操作できません(見えません)。

 

Android に基本機能として備わっている「ファイル(Files)」はドロワーアプリ一覧にはなく、ホーム画面上には置くことができず、通常は起動することができません(隠されているファイラー)。

 

この「ファイル(Files)」は、アクティビティをショートカット化して初めて操作できるようになり、Android 機の内部ストレージ以外に、Termux のホームディレクトリも操作できるようになります。

 

 

したがってシェルを内部ストレージから Termux のディレクトリにコピーまたは移動ができるようになるのです。

 

図で表すと下図のような関係です(Files(ショートカット) が「ファイル」)。

 


 

 

Shortcut Maker を Google Play Store からインストールし、起動します。

 


 

次の画面になりますのでアクティビティをタップします。

 

 

 

アプリのアクティビティ覧が表示されます。

検索欄に「ファイル」と入力すると「ファイル」という特別なファイルマネージャーが表示されます。

 

 



 

ファイル」のアクティビティの2番目 "com.android.documentsui.files.FilesActivity" をタップします。

 

次画面になりますので【ショートカットを作成】をタップします。

 


 

 

次画面になりますので【ホーム画面に追加】として、ホーム画面に配置します。

 


 

特別なファイルマネージャーのショートカットがホーム画面に配置されました。

 


 

この「ファイル」ショートカットを開始し、左上の をタップすると次の画面のように[ >_ Termux 空き容量: 0 B]があります。

 



 

ここをタップすると画面に "storage" が現れますのでこれを開きます。

 

 

 

一般的なファイルマネージャーである Files by Google や CX File Explorer などでも操作できる、内部ストレージの "dcim"、"downloads"、"movies" などのフォルダーのほか、"shared" というのがあります。

 


 

 

この "shared" を開くと内部ストレージ "sdcard" のフォルダリストが現れます。

 


 

この「ファイル」ショートカットによって、Termux の各ディレクトリやファイルと、内部ストレージ "sdcard" のフォルダやファイルとの間で、コピーや移動が可能になります。

 

Termux でも操作できますが、CUI よりも GUI で操作のほうが楽です。

 

 

 

 

 4.コードエディターを使う 

 

コード自動整形機能がある Acode editor を使います。

 

アイコン画像
Acode editor



これを使ってシェルスクリプトを作成します。


シェルスクリプトの内容は下記です。

 

<デバイスID><トークン><クライアントシークレット> は 1項で得て Google Keep などに保存しておいたものをコピペします。

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

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"}'

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

"turnOff" は SwitchBot Plug mini (JP) の電源オフ、"turnOn" が電源オンです。


先頭に shebang を記述しておきます。

shebang は次の内容です。

 

  #!/data/data/com.termux/files/usr/bin/bash

 

これはコマンドを格納したディレクトリを示しており、本例では curl コマンドの場所を示しています。

 

したがって上記のスクリプトを実行するために設定しますが、なくてもとくに問題はないようです。

 

 

作成したら SW_Off.sh という名前にでもして tasker ディレクトリに保存します。

 

名前は任意ですが .sh を後ろに付加してください。

 

作成した SW_Off.sh には実行権を与えます。

 

 $ chmod 700 SW_Off.sh

 

確認します。

 

 $ ls -l




-rwx------ の rwx は 読み(r)書き(w)可能、実行(x)可能を示します。


ちゃんと実行できるかを Termux から確認します。

 

 $ cd ~/.termux/tasker
 $ ./SW_Off.sh

 

下記のようにステータスコードが 100 / "message" : "success" となっていれば正しく実行されたということです。

SwitchBot plug mini(JP) の電源がオフになっているはずです。







 5.MacroDoroid や Tasker で自動化する 


もう少しです。

 

MacroDroid(または Tasker)には特別な権限が必要です。

 

[アプリ情報]⇨[権限]⇨[その他の権限]⇨[Run command in Termux environment]をタップして[許可]します。

 

Tasker の場合は加えて[アプリが Tasker にユーザー指定のタスクと自身のタスクを実行させることを許可する]もタップして[許可]します。

 

 

さて、MacroDroid での設定です。


トリガー:「90% になったら発動する」設定をします

アクション:

   [アプリ]⇨[Tasker/Locale プラグイン]⇨[Termux: Tasker]をタップすると
   すぐ下に[Termux イベント]が現れますのでこれをタップ

 

   下図画面になりますので 欄に S を入力します。

 

   すると .termux/tasker ディレクトリ内の S* ファイルリストが現れます

 

   SW_Off.sh をタップし、右上の SD カードマークをタップします。

 


 

 

   次画面になります。

 


 

 

なにもしないで[OK]をタップします。

 

その他のアクションを追加し、最終的に下図のようになります。

 



赤く囲んだ部分が Tasker プラグインで SW_Off.sh を設定した箇所です。


例では 90% まで充電すると Tasker プラグインの仕組みで SW_Off.sh が実行されて SwitchBot plug mini (JP) の電源がオフになります。




Tasker で自動化は次のプロファイル(MacroDroid のトリガーに相当)とタスク(MacroDroid のアクションに相当)で構成しますが、説明は割愛します。

 

MacroDroid での自動化とほぼ同じことをしています。

 



 

タスクの内容は次のとおりですがこれも説明は割愛します。
 


 

 

 

 

 

【2024-12-22】Termux: Widget の使い方 

 

2項で Termux と Termux: Tasker をインストールした際に Termux: Widget もインストールしたと思います。

 

これを使えばウィジェット化したシェルスクリプトをワンタッチで実行できるようになります。

 

 

 

 ウィジェットの作り方 

Termux のホームディレクトリの下に .shortcuts ディレクトリを実行権を与えて作成、その配下に tasks ディレクトリを実行権を与えて作成します。

 

 $ cd ~/  # ディレクトリを home にする
 $ mkdir -m 700 .shortcuts
  # .shortcuts ディレクトリ作成
 $ cd .shortcuts
  # ディレクトリを .shortcuts に移す
 $ mkdir -m 700 tasks  # tasks ディレクトリ作成

 

 

作成した tasks ディレクトリに、4項で作成した SW_Off.sh をコピペします。

 

 

スマホ画面上の「Termux: Widget アプリ」をロングタッチすると次画面になります。

 



画面の「ウェジエット」をタッチすると次画面になります。

 


 

 

>_」部分をロングタッチしてスマホ画面の空いた場所にドラッグすると次画面になります。

 


 

 

「tasks」ディレクトリが表示されますので、タッチすると配下のシェルファイルが表示されます。




「SW_Off.sh」ファイルをタッチすると次画面になります。




再度「>_」部分をロングタッチしてスマホ画面の空いた場所にドラッグします。




 

ウィジェットが画面上に配置されます。


この部分をタッチすると SW_Off.sh が実行され、SwitchBot plug mini が電源オフされます。


 

同様に、SW_On.sh もウィジェットにしておくとワンタッチで SwitchBot plug mini を電源オンできます。