Lubuntuで自動的にWi-Fiに再接続するPythonプログラム

祖母の家にLubuntuのPCを置いておいて，自動応答機能をつけたSkypeでいつでも通話できるようにしようとしていました．祖母はPCを全く触れないので，管理は全て私がやる必要がありますし，全く触れずともPCが動き続けるようにしなければなりません．

しかし，LubuntuにはWi-Fiが一度切れると自動的に再接続しないという問題があります．従って，一度Wi-Fiが切れてしまうと，手動操作しない限りWi-Fiに再接続されません．そして，祖母の家では何故かよくWi-Fiが切れるので，全然Skypeできませーん😫😫😫

このような事情から，Wi-Fiが切れたら，自動的に再接続するプログラムが必要となりました．ここではそのPythonコードをメモしておきます．

以下のコードのうち，`CHECKER_URL`と`SSID`は定数です．それぞれ，インターネットに繋がっているかを確認する用のWebページのURL，接続すべきWi-FiのSSIDを書いてください．

```python
import urllib.request
import subprocess
import time
from datetime import datetime
from pathlib import Path
from click import echo, style

CHECKER_URL = ""
SSID = ""

def is_connected()->bool:
    request = urllib.request.Request(CHECKER_URL)
    try:
        with urllib.request.urlopen(request) as response:
            return response.code == 200
    except:
        return False
    return False

def connect()->bool:
    try:
        subprocess.run(
            ("nmcli device wifi connect "+SSID).split(), 
            stdout=subprocess.PIPE,
            stderr=subprocess.PIPE
        )
        return True
    except:
        return False
    return False

def get_datetime_string()->str:
    return datetime.now().strftime("%Y.%m.%d %H.%M.%S")

root:Path = Path(__file__).parent
logfile_path = root/"WifiCheckerLog.txt"

def append_to_logfile(text:str)->bool:
    try:
        echo(style(text, fg="green"))
        with open(str(logfile_path), "a") as logfile:
            logfile.write("\n"+text) 
    except:
        return False

append_to_logfile(get_datetime_string()+" connect start")
connect()
append_to_logfile(get_datetime_string()+" connect finished")
while True:
    time.sleep(60.0)
    if not is_connected():
        append_to_logfile(
            get_datetime_string()+" is_connected=False"
        )
        connect()
        append_to_logfile(
            get_datetime_string()+" connect finished"
        )
```
1分に1回，インターネットに繋がっているかを確認します（is_connectedメソッド）．もし繋がっていない場合，Wi-Fiが切れていると判断し，Wi-Fiへ接続するconnectメソッドを実行します．この際，時刻とともにそのログをテキストファイルへ出力します．

## LinuxでWi-Fi接続するコマンド
特定のSSIDへWi-Fiへ接続するコマンドは以下の通りです．
```bash
nmcli device wifi connect SSID
```
nmcilというのは，ネットワーク関連の色々な設定を簡単にできるやつです．Lubuntuに限らず，様々なLinuxに備わっているようです．

## 運用結果
祖母のPCに同プログラムを実行し，5日間様子を見てみました．

すると，Skypeに繋がらなくなることがなくなりました．PCはずっとインターネットに繋がっているのです！！

祖母の家に行った時にPCに記録されたログを見てみました．ログは以下のようになっていました．何度もWi-Fiが切れて，その都度再接続している様子が分かります．また，Wi-Fiが特に頻繁に切れる時間帯がありました（この時に何が起きていたのかはよく分かりませんけど）．
```plaintext
2024.01.23 18.02.27 connect start
2024.01.23 18.02.30 connect finished
2024.01.23 22.41.04 is_connected=False
2024.01.23 22.41.55 connect finished
2024.01.23 22.42.55 is_connected=False
2024.01.23 22.43.44 connect finished
2024.01.23 22.44.44 is_connected=False
2024.01.23 22.46.15 connect finished
2024.01.23 22.47.15 is_connected=False
2024.01.23 22.48.31 connect finished
2024.01.23 22.49.31 is_connected=False
2024.01.23 22.50.46 connect finished
2024.01.23 22.51.46 is_connected=False
2024.01.23 22.53.01 connect finished
2024.01.23 22.54.01 is_connected=False
2024.01.23 22.55.16 connect finished
2024.01.23 22.56.16 is_connected=False
2024.01.23 22.57.31 connect finished
2024.01.23 22.58.31 is_connected=False
2024.01.23 22.59.46 connect finished
2024.01.23 23.00.46 is_connected=False
2024.01.23 23.01.34 connect finished
2024.01.24 08.56.39 is_connected=False
2024.01.24 08.57.31 connect finished
2024.01.24 08.58.31 is_connected=False
2024.01.24 08.58.57 connect finished
2024.01.24 08.59.57 is_connected=False
2024.01.24 09.01.13 connect finished
2024.01.24 09.02.13 is_connected=False
2024.01.24 09.03.28 connect finished
2024.01.24 09.04.28 is_connected=False
2024.01.24 09.04.53 connect finished
2024.01.24 09.05.54 is_connected=False
2024.01.24 09.07.09 connect finished
2024.01.24 09.08.09 is_connected=False
2024.01.24 09.09.40 connect finished
2024.01.24 09.10.40 is_connected=False
2024.01.24 09.11.31 connect finished
2024.01.24 09.12.31 is_connected=False
2024.01.24 09.13.47 connect finished
2024.01.24 09.14.47 is_connected=False
2024.01.24 09.16.02 connect finished
2024.01.24 09.17.02 is_connected=False
2024.01.24 09.17.04 connect finished
2024.01.24 09.22.26 is_connected=False
2024.01.24 09.22.29 connect finished
2024.01.24 18.57.47 is_connected=False
2024.01.24 18.57.50 connect finished
2024.01.25 15.01.36 is_connected=False
2024.01.25 15.01.36 connect finished
2024.01.26 09.41.33 is_connected=False
2024.01.26 09.42.14 connect finished
2024.01.26 09.43.44 is_connected=False
2024.01.26 09.44.59 connect finished
2024.01.26 09.46.29 is_connected=False
2024.01.26 09.48.00 connect finished
2024.01.26 09.49.30 is_connected=False
2024.01.26 09.50.10 connect finished
2024.01.26 09.51.40 is_connected=False
2024.01.26 09.52.56 connect finished
2024.01.26 09.54.26 is_connected=False
2024.01.26 09.55.41 connect finished
2024.01.26 09.57.11 is_connected=False
2024.01.26 09.58.27 connect finished
2024.01.26 09.59.57 is_connected=False
2024.01.26 10.00.01 connect finished
```

## おわりに
安定してSkypeできるようになってよかった！！これで祖母といつでもお話ができる．

そういえば，スマホやWindows，Mac等のPCでは，祖母の家でWi-Fiが切れて困ったことはありませんでした．このようなOSでは裏で上手いことやってくれていたのでしょう．

**元記事（私のNoteです）**
https://note.com/omiyayimo/n/n95e0307fe849