サーバーの時間を正確にしたいのだけど、閉じたネットワークなのでインターネット上の
NTPサーバーを使えないので、GPSデータから時刻を取得するローカルなNTPサーバーを
作った。
(raspberry piでは、いろんな方が作っているのだけど普通のPCでなかなか見つけれなかったので
覚書として、、)
結果は、RS232C(TTLレベル)で出力されるので秋月のこれをつかって
PCとはUSB接続。
必要なパッケージ(gpsd,gpsd-clients,ntp)をインストール。
●GPSモジュールの確認
gpsd-clientsをいれるとgpsmonで確認できます
また、pythonでも確認可能。
import serial
s=serial.Serial("/dev/ttyUSB0") #環境によってデバイスの名称変わります。通信速度は
モジュールが9600で、pythonもデフォルトが9600なのでこれだけで大丈夫
while True:
s.readline()
これでつらつらっと流れてくればGPSモジュールの接続確認OK。
窓際に置かないと測位はできないけど、時間だけなら部屋の中でも受信できました。
・gpsdの設定
/etc/default/gpsdが設定ファイルです
START_DAEMON="true"
GPSD_OPTION=""
DEVICES="/dev/ttyUSB0"
USBAUTO="true"
GPSD_SOCKET="/var/run/gpsd.sock"
・ntpdの設定
/etc/ntp.confが設定ファイルです
下記をコメントアウト(先頭に#)
server 0.ubuntu.pool.ntp.org
server 1.ubuntu.pool.ntp.org
server 2.ubuntu.pool.ntp.org
server 3.ubuntu.pool.ntp.org
その下あたりに下記を追加
server 127.127.1.0 minpoll 4 maxpoll 4
fudge 127.127.1.0 refid GPS time1 0.0 stratum 10
restrict 192.168.11.0 mask 255.255.255.0
いろいろ調べると127.127.28.0にして共有メモリを介してgpsd→ntpdがやり取りを
するとあったのですが、どうもうまくいかなかったので、127.127.1.0にして自分を参照する
ようにしたらうまくできた
とりあえずばっちりあっているけど、ずれてこないか心配です。
初めてNTPサーバー立てたので自信がない。。