ルーター(Aterm WG1200HS4)の自動再起動

公開日: 2021年12月07日最終更新日: 2022年01月28日

家で使っているルーター(WG1200HS4)ですが、しばらく起動していると速度が低下している気がします。
起動直後は600Mbpsくらい出るのですが、2~3日経つと速度が100Mbpsくらいまで落ちています。
ルーターが原因なのかプロバイダなどその他の問題なのかは分かりませんが、ルーターを再起動すると速度が戻ります。

対症療法ではありますがひとまず毎日ルーターを再起動してみることにしました。
当初はSwitchbotで電源切っていたのですがルーターに悪いような気がしますし、エラーを起こしていることもありました。

そこでルーターの管理画面にログインし、再起動メニューへ遷移、再起動実行をするスクリプトを作りました。 (pythonからseleniumを使っています)
そしてこのスクリプトをラズパイからcronで定期的に実行しています。

from selenium import webdriver
from selenium.webdriver import Chrome
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome import service as fs
import time
from selenium.webdriver.common.by import By
import urllib
import re
import yaml
import os.path

BASE_DIR = os.path.realpath(os.path.dirname(__file__))
with open(BASE_DIR + "/secrets.yaml") as file:
	yaml_dict = yaml.safe_load(file)
	username, password, url = yaml_dict["username"], yaml_dict["password"], yaml_dict["url"]

CHROME_DRIVER = "/usr/bin/chromedriver"

options = Options()
options.add_argument("--headless")

chrome_service = fs.Service(executable_path=CHROME_DRIVER)
driver = webdriver.Chrome(service=chrome_service, options=options)
driver.get(url)

driver.implicitly_wait(5)

username_form = driver.find_element(By.NAME, "user")
password_form = driver.find_element(By.NAME, "pass")

username_form.send_keys(username)
password_form.send_keys(password)

driver.implicitly_wait(5)
driver.find_element(By.LINK_TEXT, "ログイン").click()

driver.implicitly_wait(5)
driver.find_element(By.LINK_TEXT, "再起動").click()

driver.implicitly_wait(5)
driver.find_element(By.LINK_TEXT, "再起動").click()

driver.implicitly_wait(5)
driver.find_element(By.LINK_TEXT, "OK").click()

time.sleep(3)

driver.quit()

スクリプト一式は、https://github.com/Gan0803/aterm-resetterにあります。

引っかかったところ

ラズパイOSだと32bitしかないためかwebdriver_managerが使えませんでした。 RaspberryPi OSにchromium-chromedriverパッケージがあったので、インストールして使うことで解決できました。

sudo apt install chromium chromium-chromedriver

pipでpythonのライブラリをインストールする際に必要な環境・ライブラリとしてrust、libssl, sqlite3をインストールする必要がありました(他にもあったかもしれません)。

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
rustc --version
sudo apt install -y libssl-dev libreadline-dev libsqlite3-dev

pyenv-virtualenvを使っており、cronからこの環境で実行するためにシェルスクリプトを作成し、当該環境のpythonを指定する必要がありました。

#!/bin/sh

cd /home/pi/aterm-resetter
/home/pi/.pyenv/versions/aterm-resetter/bin/python ./aterm-resetter.py

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

12 3 * * * $HOME/aterm-resetter/aterm-resetter.sh >> /tmp/cron.log 2>&1

ラズパイでは初期設定でcronのログが出ないため、必要に応じてcronのログ設定もします。

pyenvの設定を.bash_profileに追加したのですが、.bash_profileを追加するとなぜか.bashrcが読み込まれなくなりました。とりあえず全部.bashrcに書いてしまうことにしました。 (.bashrc, .bash_profile, .profileなどを変更したときはsourceで読み込みなおしましょう。)