ネットスピードをRaspberry PiとGASでメトリクスする

どもー、 id:kazuph1986 です。

この記事はAkerun Advent Calendar 2018の5日目の記事です(そんな気がするのです)。

今日は家のネットスピードがヤバすぎ(遅い)なので、実際にどれくらいの通信速度が出るかを収集してみました。

Setup

今回はこれを使います。環境はRaspberry Piを家の回線に有線接続してます。

github.com

CLI上でSpeedTestできる便利なやつです。

インストール

curl -Lo speedtest-cli https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py
chmod +x speedtest-cli

使い方はとっても簡単で特にオプションを付けずに叩けばOKです。

$ speedtest-cli
Retrieving speedtest.net configuration...
Testing from Softbank BB (126.199.26.185)...
Retrieving speedtest.net server list...
Selecting best server based on ping...
Hosted by Love4Taylor (Tokyo) [3.36 km]: 50.447 ms
Testing download speed................................................................................
Download: 6.70 Mbit/s
Testing upload speed................................................................................................
Upload: 4.17 Mbit/s

うん、遅いですね。

以下のようにサーバーを指定して叩くことも可能です。

# 日本のサーバーを選択して…
$ speedtest-cli --list | grep "Japan"

# 番号を直接指定
$ speedtest-cli --server 15047

# 出力をシンプルにすることもできます
$ speedtest-cli --server 15047 --simple
Ping: 55.566 ms
Download: 14.01 Mbit/s
Upload: 4.17 Mbit/s

GasでAPIの作成

スプレッドシートを作成して、スクリプトエディタを開いて以下のように書きました。

function doPost(e){
  if (e.parameter.net_speed_ping) {
    var data = [
      new Date(),
      e.parameter.net_speed_ping, // ms
      e.parameter.net_speed_download, // mbps
      e.parameter.net_speed_upload // mbps
    ];

    addData("home metrics net_speed", data);
  }

  return ContentService.createTextOutput("ok");
}

function addData(sheetName, data){
  var sheet = SpreadsheetApp.openById("<YOUR_SPREADSHEET_ID>").getSheetByName(sheetName);
  sheet.appendRow(data)
}

このスクリプトAPIとしての公開方法はこちらを御覧ください。

qiita.com

APIを叩く

Raspberry Pi上に以下のようなスクリプトを置いて叩いています。shellしか使ってないのでお手軽ですね。

#!/bin/bash

# Ping: 35.752 ms
# Download: 7.37 Mbits/s
# Upload: 0.59 Mbits/s
echo `date` start speed test
speedtest-cli --server 15047 --simple | tee .net_speed.log
net_speed_ping=$(cat .net_speed.log | cut -d' ' -f2 | awk 'NR==1')
net_speed_download=$(cat .net_speed.log | cut -d' ' -f2 | awk 'NR==2')
net_speed_upload=$(cat .net_speed.log | cut -d' ' -f2 | awk 'NR==3')

url=https://script.google.com/macros/s/<YOUR_GAS_API_URL>/exec
curl $url \
    -XPOST \
    -d net_speed_ping=$net_speed_ping \
    -d net_speed_download=$net_speed_download \
    -d net_speed_upload=$net_speed_upload
echo `date` end speed test

あとは以下のようなcronを設置すれば完成です。

*/5 * * * * root /home/pi/post_net_speed.sh >> /var/log/syslog 2>&1

5分毎としました。

結果

以下のようにデータが溜まりはじめました。 f:id:photosynth-inc:20181207093511p:plain

グラフにするとこんな感じ。6日間くらいのデータです。わかりやすく山と谷が出てます。 f:id:photosynth-inc:20181207093703p:plain

ということで結果としては、一番ネットをいじりたい20時〜24時で1〜数Mbps程度に下がり、深夜帯に復活していき朝6時にピークの25Mbpsくらいの速度が出るという感じでした。 これだと朝に早起きして好きなことをした方が良さそうです。

まとめ

Raspberry PiとGASで簡単に家の回線スピードを可視化してみました。

結果的には、「まあみんな使う時間帯は遅くなるよね・・・」という感じで「わかっていた」という気持ちもあるのですが、 妻にこの実態を見せたことで「ネットもっと速くして」という感じで話が進み、現在導入中になってます。

やはり数字で語るのは効果的ですね。

ということで、Nuro契約しました(改善結果はまたどこかで上げます)。

ではでは。


Photosynthでは一緒にはたらく仲間を募集しています!

採用情報 | 株式会社フォトシンス Photosynth Inc.