2024-11-18

Termux で任意のシェルをワンタッチで自動実行するショートカットの作り方

 

【2024-11-19 一部訂正】記事末に記載の MacroDroid の事例を訂正

 

 

例えば SwitchBot スマートプラグの電源を、curl で叩いてオン・オフするシェルを作ったとします。

 

これをショートカットにしてワンタッチで実行できるようにする、というのが主旨です。

 

 

これを可能にするため、コマンド(群)をシェルにして特定のディレクトリに置いておき、このシェルを Termux のショートカットでワンタッチ実行するのです(MacroDroid で設定すれば自動実行化も可能)。

 

使うアプリは次のものです。

 

   ・Termux / Termux:Widget

   ・Shortcut Maker

   ・Shell Script Editor(または Text Editor)

 

 

特定のディレクトリとは、Termux のホームディレクトリの ~/.shortcuts ディレクトリです。

 

ここにシェルを入れておくとショートカット化した Termux を起動すると自動実行されます。

 

実行時にターミナル画面を表示しない場合はシェルを ~/.shortcuts/tasks サブディレクトリに置きます。

 

 

ショートカット化には Termux:Widget を使います。

 

 

 

Shortcut Maker は Android の「ファイル」を操作できるようにするために使います。

 

「ファイル」のアクティビティをショートカット化することで、~/.shortcuts ディレクトリにアクセスすることができますので、作成したシェルを、例えば内部ストレージの Downloads ディレクトリに保存し、これを ~/.shortcuts ディレクトリにコピーまたは移動できるようになります。

 

「ファイル」アプリは Files by Google のことではありません。

 

Android 機はデフォルトでファイル マネージャーがインストールされていません。

ただし、設定アプリに隠されていますが利用可能なファイル マネージャー「ファイル(Files)」があります。

これのショートカットを 1 回クリックするだけでそのファイル マネージャーを開くことができます。

 

 

 

 

「ファイル(Files)」は Android に基本機能として備わっているものの、ホーム画面上には置くことができず、通常は起動することができません。

 

 

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

 

 

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

 

図で表すと下図のような関係です(Files が「ファイル」)。

 


 

 

 

さて、UMUDIGI S5 Pro へは Google Play Store から最新版 Termux をインストールできません(インストール対象外機種になっています)。

 

また対象機種であっても Termux は Google Play Store からインストールできますが、Termux:Widget はインストールできません。

 

 

なので、どちらも F-Droid からインストールしますが、その前に F-Droid 自体をインストールします。

 

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

 


 

 

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

 

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

 



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

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

 


 

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

 

引き続き「Termux:Widget Launch Termux commands from the homescreen」をインストールします。

 

 

インストールした Termux を起動し、コマンドラインから "pkg upgrade" を実行し、"pkg install curl" で「curl」をインストールします。

 

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

 

 


 

 

さて、ここで curl を叩いて SwitchBot の電源オフ・オンをしてみましょう。

 

デバイスIDトークンはモザイクをかけています


 

最初に "turnOff" で SwitchBot のランプが消えて電源オフが確認できます。

 

次に "turnOn" で SwitchBot のランプが点いて電源オンが確認できます。

 

 

ここまでで Termux での curl の動作が確認できました。

 

 

 

 

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

シェルをワンタッチで自動実行するショートカットを作成していきます

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

 

必要なものは Termux:Widget のほかに次のものです。

 

Google Play Store からダウンロード・インストールします。

 

   ・Shell Script Editor(または Text Editor)

 



 

   ・Shortcut Maker


 

 

 

 

1.Shell Script Editor で次のような Script を作成します

 

 


 

 

 

SW_Off.sh は SwitchBot を電源オフにするスクリプトです。

 

SW_On.sh は SwitchBot を電源オンにするスクリプトです。

 

作成したら適当なディレクトリに保存します。

 

ここでは内部ストレージの Downloads ディレクトリに保存します。

 

 

 

 

2.「ファイル」のショートカットを作成します

 

Shortcut Maker アプリを起動します。

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




 

スクロールダウンしていくと後ろの方に「ファイル(Files)」があります。

 


 

右側にある ∨ をタッチすると「ファイル」のアクティビティが5つ表示されます。

 


 

2番目の「com.android.documentsui.files.FilesActivity」をタッチすると次の画面になります。

 


 

 

[ショートカットを作成]をタッチすると画面が次のようになります。



 

 

[ファイル ショートカット]部分を長押ししてホーム画面にドラッグします。

 


 

「ファイル」のショートカットが作成できました。

 

「ファイル(ショートカット)」を開きます。

 


 

Downloads の中身は次のようになっています。

 


 

SW_On.sh がオンにするシェルです。

SW_Off.sh がオフにするシェルです。

 

これらを「コピー」して Termux の ~/.shortcuts/tasks にペーストするため、左上の をタッチして Termux をタッチします。

 

 

 

次のようになります。

 


 

.shortcuts をタッチします。

 


 

tasks をタッチし、2つのファイル(シェルスクリプト)をペーストします。

 


 

Termux:Widget を右クリックして「ウィジェット」をタッチするとつぎの画面になります。

 


 

赤く囲んだ部分をタッチします。

 


 

tasks をタッチします。



 

SW_Off.sh をタッチします。




赤く囲んだ部分を長押ししてホーム画面にドラッグします。

 

 

事前に緑で囲んだアイコンのようにすでにショートカットを作成しています。

 

ショートカット「SW_Off.sh」をタッチすると SwitchBot の電源が切れます。

 

ショートカット「SW_On.sh」をタッチすると SwitchBot の電源が入ります。

 

 

 

 

このショートカットを MacroDroid の UI 画面操作でクリックして SwitchBot の電源をオフにすることができます。

 


トリガー:充電が => 90% になったら以下のアクションを発動

 

アクション:

   ① 画面をオフにする

       ② でロック画面を確実に表示させるためにいったん画面オフ

   ② 画面をオンにする

       ロック画面を表示

   ③「[1回の繰り返し] を開始」部分は次のアクションです

       ・下から上へスワイプして PIN 入力画面にする

       ・4桁の PIN コードを入力する

   ④ ③ でロックが解けたらホーム画面を表示

   ⑤ UI 画面操作で「『SW_Off』を含む部分(ショートカットアイコンのアイコン名の箇所)
       をクリックする」というアクション

       このアクションで SwitchBot の電源がオフになります

   ⑥「充電が完了しました!」という通知をします 

 

 

このマクロによって 90% まで充電したら SwitchBot プラグの電源をオフにして充電を自動停止するということが実行できます。

 

 

少々マニアックなやり方ですが、Termux - Widget によって SwitchBot の電源オフを行う一つのやり方です。

 

 

 

この事例によらず、シェルをワンクリックで実行するというのはアイデア次第でいろいろできそうです。

 

 

 

 

 

 

 

 

 

2024-11-17

Android 機を、SwitchBot を使って 90% 充電で自動停止させる

 

 

Macrodroid を使います。

 

IFTTT を使わないやり方です。


当初はスクリプトで curl で叩こうとしましたが、最新バージョンの Macrodroid で叩いてもエラーになります。

 

 

termux から curl で叩くと SwitchBot の電源がオフになりますから、スクリプト自体は間違っていません(デバイスIDトークンはモザイクをかけています)。

 

実行結果はステータスコード:100 で「成功」となっている

 


turnOff 部分を turnOn とすると SwitchBot の電源がオンになります。

 

 

スクリプトに curl で叩くやり方は、Android 機種(バージョン?)によりうまくいく機種と、そうでない機種があるそうです。

 

手持ち機種は全滅でしたから、MacroDroid も怪しいかも知れません。

 

 

いずれにせよ curl で叩くやり方は諦め、直接に HTTP POST で対応します。


 

 

事前に SwitchBot のデバイスID とトークンを得ておきますが他人には漏らさないようにしてください。

 

 

 

 ▶ デバイスID の取得 


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

 

  ① ホームから Switch Plug Mini をタッチ

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

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

      AABBCCDDEEFF をメモしておきます

 

 

 

 ▶ トークンの取得 

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

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

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

  ③「開発者向けオプション」をタッチすると、トークン情報が出ます

     右のコピーマークをタッチしてコピーしておきます(トークンのコピー)

 

 

 

 ▶ Macrdroid の設定 

 

完成形は次です。

 

充電が 90%(80% でも 100% でも自由に決められます)に達したら SwitchBot の電源を切断し「充電が完了した」というダイヤログを、通知音を鳴らして表示します。

 

モザイク部分はデバイスID です


 

以下のように設定します。

 

  ① トリガーの設定

      [バッテリー/電源]の中の[バッテリー残量の変化]をタッチします

      [オプション]は[指定残量への増加/減少時]を選択して[OK]します

      [バッテリー残量トリガー]は[〜まで増加]を選択し、スライダーで任意の数値まで
      ずらします

         (例えば 80% とか 90% など)

      [OK]をタッチしてトリガー設定は完了です

 

 

  ② アクションの設定 

      [Web 操作]の中の[HTTPリクエスト]を選びます

 

      (1)[設定]タブの[リクエストメソッド]を[POST]にします

      [URL を入力]欄に[https://api.switch-bot.com/v1.0/devices/<デバイスID>/commands]を入力します

      その他の設定項目は次のようにします

      ・[完了するまで待機]をチェック

      ・[タイムアウト]は 30 を設定(秒)

      ・[HTTPレスポンスを保存しない]をチェック

      これら以外は設定不要です

 

      (2)[クエリーパラメーター]タブに移り[パラメーター名]に[Content-Type: application/json; charset=utf8]を設定

           [値]には 1 を設定し[OK]します

 

      (3)[コンテントボディ]タブに移り[コンテントタイプ(MIMEタイプ)]は[application/json]を選びます

          [コンテントボディ]に[{"command": "turnOff", "parameter": "default", "commandType": "command"}]を入力し[ヘッダーパラメーター]タブに移ります

 

      (4)[パラメータ名]に[Authorization]を入力し、
          [値]に[Bearer <トークン>]を入力・コピーしておいたトークンをペーストします

 

      (5)[右上のマークをタッチして反映させます

 

      (6)[待機1秒]の設定

          [アクション]を ➕️ して

          [マクロ]⇨[次のアクション実行前に待機]をタッチし[1秒]を設定


      (7)[ダイヤログを表示]の設定

           [アクション]を ➕️ して

           [通知]⇨[ダイヤログを表示]をタッチします

           [タイトル]に[充電]を、[ダイヤログのテキストを入力]に
           [が完了した]を設定し[OK]で反映

 


以上です。

 

 

アクションをテストして SwitchBot がオフになり、通知音が鳴り、次のようなダイヤログが表示されるのを確認してください。

 


 

 

SwitchBot がオフにならないときは HTTP POST の内容を間違っていますので、確認ください。  

 

      

Android 向けは UMIDIGI S5 Pro および、TECLAST M40 AIr タブレットで動作させており、90% 充電で自動的に充電オフしています。

 

メインスマホの OPPO Reno11 A は充電 80% で自動停止する機能(いわゆる「いたわり充電」)がありますので、ここで紹介したやり方は不要です。

 

 

 

 

 

 

 

 

 

2024-11-14

iPhone SE3 の充電を、SwitchBot を使って 80% で自動停止する【2024-11-17 修正】

 

 

【2024-11-17 修正】Android の場合について別記事化

 

 

iPhone 15 モデル以降は充電上限を 80%〜100% の範囲で 5%刻みで設定できます。

 

 

iPhone 14 モデル以前の機種は充電上限を設定できません。

 

代わりに[バッテリー充電の最適化]をオンにすることをアップルが推奨していますが、充電サイクル面からは必ずしも「最適」とはなりません。

 

詳細に関してはアップルのサポート情報を参照ください。

 

iPhoneの充電上限とバッテリー充電の最適化について

 

 

 

 

さて、手持ちの iPhone SE3 は iPhone 14 モデル以前なので充電の上限設定ができませんが、SwitchBot というスマート電源プラグを使って充電上限を設定し、上限に達したら自動停止するようにしてみました。

 

 

SwitchBot は SwitchBot アプリやショートカットでスマート電源プラグ自体の電源をオン・オフできます。

 

このスマート電源プラグに充電器をつないで充電開始し、設定した上限値まで充電したらプラグを電源オフし、充電器への電源供給を停止するのです。

 

充電上限は 80% とか 90% とか任意に 5% 刻みで設定できます。

 

 

 

まずは SwitchBot を入手します(Amazon ほかで購入できます)。

 




QR コードは本体側面と、同梱のカードに印刷されており、この SwitchBot Plug Mini を特定するコードになります(写真ではモザイクをかけています)。

 

SwitchBot アプリにプラグを登録して使うのですが、QR コードで本体を識別して登録する仕組みです。

 

 

 

 

充電の上限設定手順は次です。

 


1.SwitchBot アプリを iPhone にインストール、アカウント作成・ログイン

 

2.SwitchBot アプリに「SwitchBot Plug Mini」を新規登録 

 

3.Siri ショートカットで「SwitchBot Plug Mini  オフ」を作成

     場合により「SwitchBot Plug Mini  オン」も作成

 

4.iPhone の「ショートカット:オートメーション」で「SwitchBot Plug Mini」を操作できるように設定

 

 

 

 

 1.SwitchBot アプリ をインストール、アカウント作成・ログイン 

 

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

 

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

 

でないと SwitchBot Plug Mini との接続ができません。

 

 

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

 

 

 

 

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

 


 

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

 


 

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

 

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

 

 

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



 

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

 

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

 


 

 

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

 


 

 

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

 

もう少しです。

 

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

 


 

 

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

 

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

 


 

 

今回、ファームウェア V2.0(2024-08-16 付け) の更新通知がきており、V1.0 系からアップデートしました。


 

 

 

 2.SwitchBot アプリに「SwitchBot Plug Mini」を新規登録 

 

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

 

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

 

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

 

 

 

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

 

 

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

 

 


 


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

  ③[次へ]をタップ

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

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

  ⑤[次へ]をタップ

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

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

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

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

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

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

 

 

 

 

 3.Siri ショートカットで「SwitchBot Plug Mini  オフ」を作成  

(場合により「SwitchBot Plug Mini  オン」も作成) 

 

SwitchBot アプリ「ホーム」画面の「SwitchBot Plug Mini」をタッチすると次の画面になります。

 

 


 

右上の[設定マーク]をタッチし、次の画面の「サードパーティサービス」をタッチします。

 


 

次の画面になります。

 


 

「Siri Shortcuts」をタッチします。

 

「新しいコマンドを設定」をタッチ。

 

「SwitchBot Plug Mini」をタッチし、次の画面に移ります。

 

 

 

「電源オフ」をタッチ。

 


 

「短いフレーズを録音」をタッチして Siri に「充電器オフ」とでも録音します。

 

必要に応じて同様に「電源オン」について「充電器オン」と録音します。

 


 

 

SwitchBot のランプが点いていることを確認し、"Hey Siri、充電器オフ" で SwitchBot のランプが消えて電源断されたことを確認します。

 

続いて "Hey Siri、充電器オン" で SwitchBot のランプが点いて通電されたことを確認します。

 

このショートカットにより、後で記載するアクションで SwitchBot プラグのオフ/オンが選べるようになります。

 

 

 

 

 4.iPhone の「ショートカット:オートメーション」で「SwitchBot Plug Mini」を操作できるように設定 

 

iPhone のショートカットアプリを開きます。

 

「オートメーション」タブを開き、「バッテリー残量」をタッチします。

 

「いつ」のスライダーを動かし 80% で止めます。

 

 

 

「すぐに実行」をチェックして「次へ」進み、「新規の空のオートメーション」をタッチしますます。

 


 

次の画面になりますので、「アクションを検索」に "Switch" を入力します。

 



「SwitchBot」が表示されますので、これをタッチします。

 



 

次のように SwitchBot に関連したアクション項目が出てきますが、「その他」の2つが SwitchBot オフとオンです。

 

本来は、

 

  ・SwitchBot Plug Mini オフ

  ・SwitchBot Plug Mini オン


となるはずなのですが、最新ファームウェアまたは最新アプリバージョンのバグと思われ、それぞれ次のような表示になっています。

 

  ・SwitchBot plug mini B2:オフのこと(?)

  ・SwitchBot Plug Mini     :オンのこと(?)

 

 

 
 

 

ここでは確実にするために「ショートカットを実行」として「充電器オフ」を設定します。

 



最終的にアクションは、次のようになっています。





充電 80% に達したら、

 

  1️⃣ 充電器を挿している SwitchBot の電源をショートカットでオフ

  2️⃣「サウンドを再生」で音を2回鳴らして知らせる

  3️⃣「充電器オフ」通知を表示

  4️⃣ 「充電が完了された。充電ケーブルを外してください」と、音声で知らせる

 

というアクションです。

 

ケーブルは外さなくてもすでに電源供給は停止していますので、これ以上充電されることはありません。

 

充電の上限設定ができない iPhone や iPad を、ここに記載の方法で、設定した上限まで充電したら自動停止させることが可能になります。

 

 

 

Android 機でも SwitchBot を使って同様のことができる方法があります。

 

「android 充電 自動停止 スマートプラグ」でググってみてください。

 

 

IFTTT(Webhooks は有料)を使わないやり方がいいでしょう。