NanoPi NEO2 Black を使ったインターネットスピードテスタの製作

公開 | 更新 

Raspberry Piより小さい40×40mmサイズでギガビットイーサ搭載するワンボードコンピュータ、 NanoPi NEO2 Blackと OLED HAT を使い、まるでネットワーク保守に使うケーブルテスタのように、対象のイーサネットポートに挿せばインターネットスピードテストを実行してくれる、そんな スピードテスタ を製作します。

Speedtest.net CLI

普段はPCのブラウザやスマホアプリからお世話になっているSpeedtest.netには、CLIベースの計測機能が用意されています。

各プラットフォームのOSでのインストール手順が示されており、その中のDebian系は次の通りインストールするよう解説されています。

しかしながら今回は一行目のインストールは該当せず、レポジトリキーのインストールと登録、そしてaptによるバイナリインストールのみでした。

 
 
【2021.06追記】
Speedtest CLIのレポジトリがpackagecloudへ変更になり、レポジトリを設定してくれるスクリプトが用意されていました。

【2021.06追記ここまで】
 
 
インストールされたspeedtestコマンドのオプションは次の通り。

使い方はまず、-Lオプションで近くの計測サーバ一覧を取得し、適当なサーバIDを-sオプションで指定して計測する要領です。計測結果をブラウザベースで見るためのURLも、結果の最後に表示されます。

図1.Speedtest.netサイトで結果表示

図1.Speedtest.netサイトで結果表示

また、出力形式にJSONを指定することも出来るので、今回のように出力結果をNode.jsなどのプログラムで利用するのにも適しています。

 

Node.js: byte→Mbps変換

上記のJSON形式で受け取った結果のうち、速度を示すbandwidthはバイト表記になっていました。それが仕様なので、別途Node.js側で読みやすいMbps表記へと変換することとします。様々なライブラリが公開されている中から、こちらのpretty-bytesライブラリを入れてみることにしました。

実際の使い方は以下の要領です。バイト・ビット変換はせず、単純に数字を1024でキリの良いところまで割ってくれるだけの仕様でしたので、予め8倍した上で渡し、末尾に付与される「bit」を「bps」に置換すれば、見慣れた速度表記になります。

 

Node.js: Pingで導通確認

ネットワーク上の適当なホストに対するPingには、Node-Pingライブラリを使います。インストールはこのように。

ライブラリには様々な使い方が提示されているのですが、今回は外向きネットワークへの疎通確認に使いたいので、シンプルに組みます。

 

Node.js: WAN IPを取得

次に、外向きネットワークの疎通が確認されたら、現在のWAN IPを取得したいと思います。この手のライブラリも数多く存在しますが、IPアドレス表示サービスに使うサーバの既知性から、whatismyipライブラリにしてみました。

ライブラリページのサンプルをそのまま試してみて、戻り値を確認してみました。IPアドレスはdata.ipで簡単に取り出せそうです。

これまでにこなした命題と併せ、いよいよ一つのアプリケーションとして組み上げます。

コーディング組み上げ

アプリはpm2により自動起動すると、自身のLANポートのIPアドレスを定期的にチェックします。LANケーブルが繋がっていなかったり、DHCPサーバから有効なIPアドレスがもらえない場合はその旨表示し、エラーで落ちないようにハンドリングしつつ、繰り返し試行します。

LANポートにIPアドレスが付与されているのを確認したら、外向きにPingを打ち、応答があれば疎通有りを表示。自動で動作するのはここまでで、以降はボタン操作をにより開始されます。その割り当ては、

  • 左ボタン:WAN IPチェック
  • 中ボタン:スピードテスト
  • 右ボタン:シャットダウン(前記事で実装済)

としていて、左ボタン押してから中ボタンを押すルーティンを想定しています。数年ぶりにリハビリ兼ねてガッツリ組んでみましたが、まだ慣れていないのでダラダラしたコーディングになってしまっているのは、ご勘弁を。

尚、これまでにインストールしたNode.jsライブラリは次の通りです。

実際に仕事場の適当なLANポートに挿し計測してみました。フォント小さいのですがくっきり表示されるので、老眼でも意外と読めます。

図2.SpeedTest結果

図2.SpeedTest結果

自宅に持ち帰り、家庭向け1G Optical Fiberにぶら下がっているネットワーク機器の各計測点において測定してみました。

  1. ONU光終端器にWAN直結
  2. ルータのGbE LANポート
  3. ルータのGbEにぶら下がるGbEハブ下
図3.Home Network SpeedTest Points

図3.Home Network SpeedTest Points

図4.Home Network SpeedTest Results

図4.Home Network SpeedTest Results

以前より気になっていて、それがこのインターネットスピードテスタ製作の動機にもなっていたのですが、家庭向けとは言え、公称ギガビットの光を引き入れている割に遅い気がするのは、ルータがボトルネックになっているようです。GL-iNet GL-AR750S SlateのWAN-LANスループットはメーカーフォーラムページを見ても700M程度はあるそうなので、別途調べてみる必要がありそうです。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA