ck_fm0211のブログ

書きたいことを書く。

家のネット回線速度を可視化した

はじめに

以前ブログにも書いたけれど、今住んでいるマンションのネット環境がそれほど良くない。

ck-fm0211.hatenablog.com

VDSLなので最大100Mbpsで、これからのネット社会を生き抜いていくには少し不安がある。
なのでマンションの理事会に「光回線ひこうぜ」を提案したいのだが、マンションのデフォルトインターネット回線もあるので、現状をきちんと測定した上で提案に持っていきたい。

というわけで家のインターネット回線速度をモニタリングすることにした。

結果

結論から。 f:id:ck_fm0211:20220223192925p:plain こんな感じになった。まだ測定をはじめて数日なのでなんとも言えないが、意外と安定している。
DL/ULが荒れているところはどうも接続していた測定用サーバの調子が悪かった模様。

仕組み

speedtestのcliがあったのでこれを使うことにした。 www.speedtest.net

測定器としてはiPhoneの母艦(今はもうこういう使い方しないのかな)になっているmac mini late 2014を利用。
ここでcronで5分間隔でスクリプトを動かし、Google Spreadsheetへデータを送り、それをGoogleデータポータルでグラフにしている。

また、mac miniは有線/無線両方使える状態なので、それぞれタイミングを少しずらして測定している。

speedtest -f json -s ${SERVER_ID} -I ${NETWORK_INTERFACE_ID}

Google Spreadsheetへの登録はpythonで実行している。シートの末尾に追記するっていうスクリプトを書くのにちょっと悩んだけど、わりと簡潔に書くことができた。

# -*- coding: utf-8 -*-

import os
import sys
import csv
import gspread
from oauth2client.service_account import ServiceAccountCredentials

scope = [
    'https://spreadsheets.google.com/feeds',
    'https://www.googleapis.com/auth/drive'
]

SERVICE_ACCOUNT_JSON_PATH = os.getenv('SERVICE_ACCOUNT_JSON_PATH') # GCPサービスアカウントのキー
SPREADSHEET_KEY = os.getenv('SPREADSHEET_KEY') # 操作したいスプレッドシートの名前を指定する
WORKSHEET_NAME = os.getenv('WORKSHEET_NAME') # シートを指定する

credentials = ServiceAccountCredentials.from_json_keyfile_name(SERVICE_ACCOUNT_JSON_PATH, scope)
client = gspread.authorize(credentials)

if __name__ == "__main__":

    filename = sys.argv[1]

    spreadsheet = client.open_by_key(SPREADSHEET_KEY)
    worksheet = spreadsheet.worksheet(WORKSHEET_NAME)

    data = []

    with open(f'output/{filename}', encoding='utf-8', newline='') as f:
        for cols in csv.reader(f, delimiter='\t'):
            worksheet.append_row(cols, value_input_option='USER_ENTERED') # dataを最終行に挿入

今後

いまはmac miniで自宅で契約している楽天ひかりの速度を測定している状態。
上述の通りマンションデフォルトのインターネット回線もあるので、それの測定もしたいと思っている。ラズパイ買うか。

データポータルでダッシュボード化したものの、「もっとこういう表現したいんだよなあ」みたいなのがある。
できるのかはわからないけど、ここはもっと改善したい。

Appendix

雑に書いたコード。雑すぎる。 github.com