5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AndroidスマホでWi-Fiルータを定期再起動!Termux+Pythonで自動化

Last updated at Posted at 2025-11-25

1. はじめに

Wi-Fiルータは長時間稼働すると通信が不安定になることがあります。再起動で改善するケースは多いですが、毎回手動で電源を抜き差しするのは面倒です。そこで今回は、Androidスマホ+Termux+Pythonを使って、Wi-Fiルータの再起動を定期実行する方法を紹介します。

本記事は以下のWi-Fiルータを対象にしています。

  • BUFFALO WSR-1166DHPL2

2. 手動で再起動する方法

Wi-Fiルータの再起動は、不安定さを解消する最も簡単なトラブルシューティング手段です。手動の場合は以下の方法があります。

  • 電源を抜き差しする
    電源ケーブルを抜いて10秒程度待ち、再度接続します。
    ※急ぎの場合はこの方法が確実ですが、頻繁に行うと物理的な劣化の原因に。

  • 管理画面から再起動する
    ブラウザでルータの管理画面(例:http://192.168.0.1)にアクセスし、ログイン後「再起動」ボタンをクリックします。
    ※機種によってメニュー名は「再起動」「リブート」「電源管理」など異なります。

再起動後はネットワークが復旧するまで数分かかる場合があります。また、再起動中はすべての接続が切れるため、タイミングに注意してください。

3. 自動化の方法

手動再起動は簡単ですが、毎回行うのは面倒です。以下の方法で自動化できます。

  • ルータ側のスケジュール再起動機能
    一部のルータには「毎日○時に再起動」などのスケジュール設定機能があります。管理画面で設定できる場合は、これが最も簡単で安全です。
  • スマートプラグ+スケジューラ
    電源制御が可能なスマートプラグを使い、スマホアプリやクラウドサービスでスケジュールを設定します。物理的に電源を切るため、ルータの管理画面に依存しない方法です。
    ※ただし、電源断はファームウェア更新中などに行うと故障の原因になるので注意。
  • LinuxからSSHで再起動(対応ルータの場合)
    SSHログインが可能なルータなら、以下のようなコマンドで再起動できます。 これをcronで定期実行すれば完全自動化できます。
    ※SSH対応は業務用ルータや一部の高機能モデルに限られます。
ssh admin@192.168.0.1 "reboot"`

我が家で稼働しているBUFFALO製Wi-Fiルータ「WSR-1166DHPL2」には、残念ながら再起動機能もSSHも搭載されていませんでした。本記事では、Pythonを使って管理画面のHTTPリクエストを送信する方法で再起動を自動化します。

4. 手順

4.1 F-Droidのインストール

本記事ではPlayストアからではなく、F-Droid経由でアプリをインストールします。Google Play版のTermuxは長期間更新が止まっていたため、最新のAndroid環境では不具合が発生することがあります。公式Wikiでも、最新機能と安定性を確保するためにF-Droid版を推奨しています。

「Termux」でネット検索すると、F-Droidサイトの以下のページが見つかると思います。こちらのページを開いて画面をスクロールしていくと「F-DROIDをダウンロード」ボタンがありますので、このボタンをタップして.apkファイルをダウンロードしてください。

ダウンロードした.apkを開くと、F-Droidのインストールが始まります。アプリ選択が表示される場合は「パッケージインストーラ」を選択してください。機種によっては警告が表示されますので、適宜対処ください。

4.2 Termuxのインストール

インストールされたF-Droidを開いて「Termux」を検索します。以下2つをインストールしてください。「Termux:Boot」はインストール後に一度起動してください。

  • Termux
  • Termux:Boot

インストールに失敗する場合は、「Playプロテクトによるアプリのスキャン」を一時停止してからインストールしてください。

インストールできたら、アプリ2つの設定を以下のように変更します。以下はXiaomi製スマートフォン「Redmi 12 5G」の場合の設定項目です。

  • 設定 - アプリ - バックグラウンドでの自動起動:許可
  • アプリ情報 - バッテリー - バッテリーセーバー:制限なし

4.3 SSHデーモンの起動

Termuxを起動すると、ターミナル画面が表示されます。スマホの画面でぽちぽち作業を続けるのはしんどいので、SSHデーモンを起動してPCから接続することにします。まずは、Termuxのターミナルから以下のコマンドを実行してください。

Termux Terminal
pkg update
pkg upgrade
pkg install openssh

コマンド実行時には以下のような確認プロンプトが出ますが、すべてデフォルトの動作で問題ないので、とりあえずEnterキー(⏎)をタップしておけば大丈夫ですw

  • Do you want to continue? [Y/n]
  • *** openssl.cnf (Y/I/N/O/D/Z) [default=N] ?

続いて、PCから接続するための準備をします。以下のコマンドを実行してユーザ名を確認します。ユーザ名はu0_axxxの形式になっています。

Termux Terminal
whoami

次に、スマホのIPアドレスを確認します。以下のコマンドを実行してinet 192.168.x.xと出力されている箇所を探してください。192.168.x.xの部分がIPアドレスです。

Termux Terminal
ifconfig

ここで、SSH接続のパスワードを設定しておきます。以下のコマンドを実行すると、新しいパスワードの入力を求められるので、同じパスワードを2回入力してください。入力中のパスワードは表示されないのでご注意ください。

Termux Terminal
passwd

それでは、いよいよPCからの接続です。以下のコマンドをスマホで実行してSSHデーモンを起動します。

Termux Terminal
sshd

PCのターミナルから以下のコマンドを実行し、設定したパスワードを入力すると、SSHでスマホのTermuxに接続できます。

PC Terminal
ssh u0_axxx@192.168.x.x -p 8022

初回接続時は警告と以下のプロンプトが出ますので、yesと入力してください。

  • Are you sure you want to continue connecting (yes/no/[fingerprint])?

4.4 サービスの自動起動設定

ここから先はPCのターミナルからの操作です。ここでは、SSHデーモンとCRONデーモンがスマホ起動時に自動起動するように設定します。SSHはインストール済なので、以下のコマンドでCRONをインストールします。

pkg install cronie

次に、スマホ起動時に実行されるシェルスクリプトを準備します。以下のコマンドで~/.termux/boot配下にスクリプトを作成し編集します。

mkdir -p ~/.termux/boot
nano ~/.termux/boot/start_services.sh

編集画面が開いたら、以下をコピペしてください。

start_services.sh
#!/data/data/com.termux/files/usr/bin/sh
termux-wake-lock
crond
sshd

「Ctrl + O」からの「Enter」で上書き保存します。保存後は「Ctrl + X」でエディタを終了してください。以下のコマンドで、保存したスクリプトに実行権限を付与します。実行権限を付与するオプションって「x」だったよなーとか考えてオプションに-xを記載すると、むしろ権限が削除されますので注意。(1敗)

chmod +x ~/.termux/boot/start_services.sh

ここまでで一旦スマホを再起動します。再起動からの数分で以下の通知が出ればOKです。

>_ Termux
0 session (wake lock held)

4.5 Pythonスクリプトの準備

ここでは、Wi-Fiルータを再起動するPythonスクリプトを準備します。まずはPythonの実行環境を整えます。以下のコマンドで必要なものをインストールしてください。

pkg install python
pip install requests
pip install types-requests
pip install python-dotenv

続いて、Pythonスクリプトをコピペで作成します。

nano reboot_wsr-1166dhpl2.py
reboot_wsr-1166dhpl2.py
from dotenv import load_dotenv
import os
import requests
import re

# .envファイルを読み込む
load_dotenv()

ROUTER_IP = os.getenv("ROUTER_IP")
USERNAME = os.getenv("ROUTER_USER")
PASSWORD = os.getenv("ROUTER_PASS")

ROUTER_URL = f"http://{ROUTER_IP}"
LOGIN_URL = f"{ROUTER_URL}/login.html"
INIT_URL = f"{ROUTER_URL}/init.html"

session = requests.Session()

# 1. ログイン
login_payload = {
    "nosave_Username": USERNAME,
    "nosave_Password": PASSWORD,
    "MobileDevice": "0",
    "nosave_session_num": "",
}
resp = session.post(LOGIN_URL, data=login_payload)
print("Login status:", resp.status_code)

# 2. init.htmlを取得してセッション番号を探す
init_resp = session.get(INIT_URL)
match = re.search(r'name="nosave_session_num" value="(\d+)"', init_resp.text)
if not match:
    print("セッション番号が見つかりません")
    exit()
session_num = match.group(1)
print("取得したセッション番号:", session_num)

# 3. 再起動
reboot_payload = {"nosave_reboot": "1", "nosave_session_num": session_num}

try:
    resp = session.post(INIT_URL, data=reboot_payload, timeout=5)
    print("再起動リクエスト:", resp.status_code)
except requests.exceptions.Timeout:
    print("ルータ再起動中。タイムアウトしましたが正常です。")

上記のスクリプトでは.envファイルを参照するので、こちらも準備します。お使いのルータ設定に合わせて記載してください。

nano .env
.env
ROUTER_IP=192.168.xx.x
ROUTER_USER=xxxxx
ROUTER_PASS=xxxxxxxx

4.6 cronジョブの登録

定期実行のジョブはcrontabに記載するだけで動作します。ただ、crontabの記載はフルパスで書くのが基本です。ここでは、可読性を重視してPythonスクリプト実行用の.shファイルを作成します。

nano reboot_router.sh
reboot_router.sh
#!/data/data/com.termux/files/usr/bin/bash
python "$HOME/reboot_wsr-1166dhpl2.py" >> "$HOME/reboot_router_$(date '+%Y-%m-%d').log" 2>&1
chmod +x reboot_router.sh

続いてcrontabを編集します。以下のコマンドで編集画面を起動して追加してください。こちらは、毎日午前2時に実行する場合の書き方です。

crontab -e
crontab
0 2 * * * /data/data/com.termux/files/home/reboot_router.sh

5. 注意事項

  • 再起動中はネットワークが切れるのでタイミングに注意
    cronで自動再起動を設定する場合、深夜など通信が不要な時間帯を選びましょう。
  • ファームウェア更新時は自動再起動を避ける
    更新中に再起動が走ると失敗する可能性があります。Wi-Fiルータに設定されているファームウェア更新時刻を避けて、実行時刻を設定しましょう。
  • スマホ側の制約
    Androidはバックグラウンドプロセスをkillすることがあるため、Termuxでの完全自動化は不安定です。wakelockやTermux:Bootで軽減していますが、完全回避は難しいです。

6. まとめ

  • 手動と自動のメリット・デメリット
    手動:安全性が高いが、忘れると再起動できない。
    自動:便利だが、タイミングや更新時のリスクに注意。
  • 自分の環境に合った方法を選択
    「安定重視」なら手動。
    「運用効率重視」ならcron+ログ管理。
  • 今後の改善案
    Flutterアプリでネイティブ常駐化すれば、kill問題を回避できる可能性あり。
5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?