1
0

More than 1 year has passed since last update.

お客様の中に24時間監視体制で調子の悪いwimaxを再起動できるエンジニアの方はいらっしゃいませんか!!!

Last updated at Posted at 2022-11-10

更新

11/10にファームウェアが2.1.0 -> 2.3.0に更新されてこの記事は用済みになりました...嬉しいけど悲しい...

結論

このリポジトリをcloneして、.envファイルにWIMAXPASS=あなたのクイック設定webのパスワードを書いてdocker-compose upすればできるよ

はじめに

一ヶ月ほど前からうちのwimax home L12 の調子が悪く、どうも困っていました。
症状としては、LEDランプは正常を示しているがインターネットにはつながらない。しかしスマホやPCからは接続しているという表記になっている。「インターネットなし」との文言が出る、といったものです。
恒常的にこんな感じなのであればすぐサポート連絡なりして強く訴えられるんですが、2日に一回程度、再起動すれば治るといった頻度で対応してもらえるのか、そして今後ファームウェアの更新で直るんじゃないかと思い、とりあえずプログラムを書いてみました。このプログラムは問題の対処と同時に原因究明を目的にしているので、データの解析もできるようにしています。(現在データ収集中)

フォルダ構成

.
├─docker-compose.yaml
├─Dockerfile
├─.env
├─.gitignore
├─requirement.txt
└─app
    ├─network
    │  └─wimax.py
    ├─sqlitemod
    │  ├─base.py
    │  ├─base_engine.py
    │  ├─migrate.py
    │  └─models.py
    ├─store
    │  ├─data.sqlite3
    │  ├─graph.py
    │  └─images
    │     └─img0.png
    └─main.py

環境

Dockerインストール済みを想定しています。Pythonと、Seleniumのスタンドアローンイメージを使ってブラウザの操作からwifiの管理画面にログインし、再起動をかけています。

動作

main.py(抜粋)
if __name__ == '__main__':
    base = os.path.dirname(os.path.abspath(__file__))
    datapath = os.path.normpath(
        os.path.join(base, './store/data.sqlite3'))
    time.sleep(10)

    Migration(datapath).status()

    cli = Statuscls(datapath)
    wifi = wimax()

    while True:
        try:
            wifi.get_status()
            cli.create(wifi.status.status_OK,
                       wifi.status.status_OK_global, wifi.status.message)
            if (not wifi.status.status_OK_global):
                wifi.restart()
        except:
            cli.create(0, 0, "ネットワークオフ")
            wifi = wimax()  # 再代入によりデストラクタが実行、wifi接続リセット
            pass
        finally:
            data = Statusdatacls(datapath)
            if data.is_exist_img():
                pass
            else:
                data.save_img()
                print("image saved")
            time.sleep(50)

メインの処理はこのあたりです。最初にパスを生成して、データの置き場所を決めます。sqlarchemyを利用してsqliteを操作するので、極論sqlite以外のDBでも扱えると思います。
status_OKはLANが機能しているか、status_OK_globalは外部のインターネットに接続できるかを確認しています。

メインの処理としてはstatus_OK_globalが0であり、status_OKが1であれば再起動をかけ、一定時間待つというだけの処理です。ネットワーク自体がオフの場合はstatus_OKが0、というよりget_stats関数がエラーを起こすので、別途処理しています。

再起動はどうやってかけてるのかというと、seleniumでブラウザを操作してやっています。ログイン処理があるサイトはこれが一番楽ですね。

おわり

いざ記事を書いてみると意外と書きたいことがなくて困りました。多分すぐアップデートが来て修正されると思いますが、それまで使ってやってください。以上です。ありがとうございました。

1
0
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
1
0