Raspberry Pi + GPS でNTPサーバー 難航中

我が家のLANは、観測PCや家内サーバーなどのプライベート系と一般のインターネットに接続されている公衆系の2系統になっている。観測PCには、ウィルス対策ソフトなどはインストールしていない。主要なPCは、家内・公衆両系にアクセスできるようにしてあり、セキュリティを確保している。

観測PCの時計を校正するには、シリアルポートに接続した電波時計を使って行っている。NICTなどの外部NTPサーバーを使うことができれば良いのだが、公衆系に接続されていないので、それができない。また、電波時計は1台しかないので、複数のPCの時刻管理をするのに切替器を使ってやるのが、けっこうめんどうだったりする。

今はやりのボードPC Raspberry Pi と1秒パルス出力のあるGPSユニットを使って、NTPサーバーを構築した例がネットにたくさんあり、総額1万円以下でいけそうなので、Raspberry Pi を購入して、手持ちのGPSとあわせて、家内NETで使用するNTP サーバーを製作してみた。

ハードはこんなふうで、Raspberry Pi 、GPSユニットはFuruno GT-77というちょっと古いが、時刻専用であるので秒パルスの精度が高い。GPSユニットからの信号は、TTLレベルで、Raspberry Pi は3.3Vロジックなので、レベル変換を行っている。このほかに、GPSユニットから出力されるNMEAをRS-232に変換して、他のPCでモニタできるようにしてある。イメージ 1

ソフトは、比較的ていねいに説明されているところを参照した。
英語のページではここ、http://www.satsignal.eu/ntp/Raspberry-Pi-NTP.html
日本語ではこのページ、http://lowfreq.info/archives/18314
詳細はそれぞれのページの開設にゆだねるが、GPSユニットから出力される、NMEAのデータにより時刻信号を取り込み、さらに秒パルスであわせるというもの。うまくいけば、UTCに対してナノSECオーダーの時刻保持ができるというも。そこまではできなくても、msecくらいでもOKだ。

上記のページを参照しながら、ソフトをインストールしたり、再コンパイルしたりして動かしたのだけれども、うまく動かない。
イメージ 2

データを見ると、NTPのステイタスは、GPSの時刻を参照して、PPS(秒パルス)で校正してます、と表示されるのだが、安定しない。同期がはずれたり、同期したりを繰返す。そもそも、参照クロックと、PCクロックの時刻差がありすぎる。外部時計と比較してみるとほぼ合っているようだが、どうも信用できない。いろいろとNTPのコンフィグファイルをいじってみなのだけれども、期待とおりに動作しない。

そこで、時刻情報はNICT(情報通信研究機構)を参照して、PPSで校正するようにすると、しっかりと同期してくれる。
イメージ 3

NTPサーバー自体の動作は、問題ないということになる。さらに、運転を続けると、オフセットも小さくなってきて、精度が上がってくる。

いろいろと調査の結果、どうもGPSユニットからNMEAで出力される時刻情報をうまく取り込めていないようだということがわかった。

このFurunonoのGPSユニット GT-77 は、Baud Rateが4800で出力される。一方、ソフト側は、9600を前提にしている。一応それらしいところで、4800に設定しているのだが、どこか違っているようだ。通信のレートが違うと全く受信できないはずなのに、ある程度データが取り込めているというのは、4800の設定で動作しているところもあるということだろうか。けっこう見てみたのだけれども、どこを直せば良いのかわからない。今は、GPSユニットも安価に出回り、ネットのNTPサーバーに使われているGPSユニットが2000円くらいで入手できるので、おとなしく、それを使えはよいのだろうが、なんだかくやしい。