t-hom’s diary

主にVBAネタを扱っているブログ…とも言えなくなってきたこの頃。

Raspberry Pi 4とAmbientで時間帯ごとのインターネット回線スピードをグラフ化する

最近インターネットスピードがすこぶる遅い気がしたので、実際に計測してみることにした。
今回はラズパイを使用したけど、Windowsでも似たようなことができるので追加費用をかけたくない方は調べてみると良いかと思う。

背景

以前から回線スピード計測サイトで何度か試したところ、概ね10Mbps程度しか出ていない。ひどいときは下り 3Mbpsなんてことも。

最大 1Gbps(1024Mbps)と謳われているのにさすがに 10Mbpsはひどい。まぁ快適なときはわざわざ測ろうと思わないので、時間帯によってはもう少しマシなのかもしれない。

私もIT運用に携わる人間なので、1Gbpsでる訳ないのは知ってる。
せいぜい数百Mbpsだろうとは思っていたけど、その100分の1ってのはさすがに酷いのでは。

計測結果

実際に計測した結果がこちら。1分毎に計測したデータを1時間ごとの平均値で集計している。精々100Mbpsがいいところ。
f:id:t-hom:20201215063235p:plain

月曜は少しマシだった。
※形が違って見えるのは上のグラフとは開始時刻が違う為で、混雑時間帯はどたちらも同じ。
f:id:t-hom:20201215063715p:plain

ちなみに集計せずに1分ごとの速度を出したところ、日曜の最大瞬間スピードは約500Mbpsだった。
f:id:t-hom:20201215064723p:plain

最大1Gbpsというのはこの最大瞬間スピードの理論上の上限のことで、実際はマンション内で最大で32分岐されてる。自分以外の31回線が全く使用されていない場合の、NTT網までのスピードである。

[参考]
notoken.hatenadiary.com

この先更にプロバイダーが居て、その先に接続先サイトがあるといった具合なので、1Gbpsはまず無理だ。500Mbpsは上出来だと思う。
それはそれとして最大1Gbpsを大々的に喧伝していることには腹が立つけど。

快適にYouTubeを視聴できる速度

さて、どれくらいの回線スピードが出ていれば快適にYouTubeを視聴できるのかを確認する。
動画の容量もピンキリだけど、以下のサイトを参考に、10分のFull HDを400MBと仮定して計算してみた。
www.appps.jp

MBという単位はメガバイト、Mbpsはメガビット パー セコンドなので、まずはバイトとビットを変換する。
1バイト=8ビットなので、400MBは3,200Mbit。 3,200メガビット/10分以上の速度があれば、快適に視聴できることが分かる。

つまり
3,200Mbit/10分

320Mbit/1分

5.3Mbit/1秒

5.3Mbps

5.3MbpsあればYouTubeのFull HD動画は快適に視聴できる計算になる。

日曜の10分毎の平均速度データで確認すると、大体19時半から23時50分くらいまでが快適スピードを下回っていることが分かる。遅いなぁと感じた時間帯とも感覚的には一致しているので正しく測れているように思える。
f:id:t-hom:20201215083440p:plain

ただこれはYouTubeが高効率の圧縮率を達成しているからだともいえるので他の動画視聴サイトでは場合によってもっと速度が出ないと頻繁に読み込み中になったりするかもしれない。

使用したもの

Raspberry Pi 4B 8GB

Raspberry Pi 3Bではそもそも100Mbps、3B+でも300Mbps程度しか速度が出ないので、正確に計測するには4を選択する必要がある。

以下、ラズパイ3Bの速度について書かれてる。(最新と書かれてるが既に記事が古いだけで4のことではない)
xtech.nikkei.com

メモリは4GBモデルでもOK。

ケース

Raspberry Pi 4からは発熱が大きくなるのでCPUファンが必要になる。
こちらの製品はヒートパイプまでついてて相当に冷えそうな感じなのでこれにした。先日知ったのだが、ヒートパイプはただの銅の棒ではなく、中に液体が入っている。加熱部でこの液体が蒸発して瞬時に放熱フィンに熱が伝わり、フィンで熱を十分に分散させたあとにファンによる風でそれを冷やすという構造。冷却部では蒸発した気体が液体に戻り加熱部に戻っていく。

まぁ、ラズパイにこの熱対策は大分オーバーキルな気がするが。。

とても良いケースなんだけど、1点だけ注意点がある。
土台みたいなパーツが付いてて、まずそれに乗せるのかと思いきやこれはケース無しで使う用なので使わない。
それ用の組み立て説明書を読み始めてしまい、大分混乱した。正しい説明書はカード1枚で裏表にカラー写真があるもの。

ちなみにラズパイ3と4では形状が違うのでケースの使いまわしは不可。

ACアダプター

こちらもコネクタ形状が異なるためラズパイ3のものは使用できない。

モニターケーブル

片側が普通のHDMI、もう片方がHDMIマイクロタイプのものを選択する。
HDMIミニと間違えないように注意。

その他

キーボード、マウス、HDMI対応ディスプレイ、microSDカード(最低8GB)、Cat 6LANケーブル(無線だと電波干渉の影響がぬぐい切れないので)

セットアップ

ラズパイ

ラズパイ自体のセットアップは様々なサイトで解説されてるのでここでは割愛する。

PythonでAmbientとspeedtestを使う為に以下のコマンドでライブラリを導入しておく。

sudo pip3 install git+https://github.com/AmbientDataInc/ambient-python-lib.git
sudo pip3 install speedtest-cli

Ambient

以下のサイトでユーザー登録をする。
ambidata.io

8チャネルまで無料で利用でき、チャネルごとにデータが8種類登録できるので十分である。制限事項の詳細は以下参照。
ambidata.io

Pythonコード

以下を/home/pi/sp.pyとして保存する。

import ambient
import speedtest

servers = []
threads = None

ambi = ambient.Ambient(チャンネルID, "ライトキー")
s = speedtest.Speedtest()
s.get_servers(servers)
s.get_best_server()

d = s.download(threads=threads)
ambi.send({"d1":d/1024/1024})
u = s.upload(threads=threads)
ambi.send({"d2":u/1024/1024})
s.results.share()

results_dict = s.results.dict()

※チャンネルIDとライトキーはAmbientでチャンネル作成した際に確認できる情報を記入する。

実行

sp.pyは1度実行すると通信速度を計測後にAmbientにデータを送信し、ブログラムを終了する。
継続して計測するには、Linuxのcronに登録しておく。

cronの指定は以下のとおり。

*/1 * * * * python3 /home/pi/sp.py

あとはAmbient側のチャンネルにアクセスしてグラフを追加し、元データの設定を行うだけ。

終わりに

最近特にコロナ禍で動画視聴の重要が高まっていて、回線速度低下が起きているらしい。
以下の総務省資料がこのあたり詳しく解説している。
https://www.soumu.go.jp/main_content/000692609.pdf


通信速度改善の手立てとして、NURO光も検討したけど、最近脆弱性が見つかったという記事を見たのと賃貸オーナーへの相談が面倒なのでやめておいた。

とりあえず、もう少し計測データを集めたらIPv6サービスへの申し込みを検討中。IPv6でも速度の上限は変わらないけど回線がまだ空いてるようなのでマシになることを期待。

12/16追記 IPv6サービス利用開始

IPv6サービスの利用を開始したので測定結果を追記。
以下は1分ごとの測定結果を10分単位で平均したグラフ。最も混雑する22時でさえ80~100Mbps出ている。
f:id:t-hom:20201216230840p:plain

ストリーミング動画の視聴もすこぶる快適でIPv6が空いているというのは本当だった。
とりあえずこれでインターネット速度の不満は解消した。

当ブログは、amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、 Amazonアソシエイト・プログラムの参加者です。