□Raspberry PiにUSB-GPSモジュールを繋いでgpsdとchronydでGPSでの自動時刻補正(簡易版)
□Raspberry PiにUSB-GPSモジュールを繋いでgpsdとchronydでGPSでの自動時刻補正(簡易版)
Linuxにはgpsdというのがあって、簡単にGPSデータを扱えることははるか昔に書いたけど、Raspberry PiがバックアップされたRTCを持っていないので起動するたびに時刻がリセットされてヽ(`Д´#)ノ ムキー!!となっていて、ふとそのことを思い出した。
で、最近はGPSって安いのかなーと思ってアリババでぐぐって見ると
おー、安い安い、というわけでさっそくポチってみた。
Windows7ではドライバを入れないとダメみたいだったけど、受信できた。
> $GPGLL,,,,,,V,N*64
> $GPTXT,01,01,02,u-blox ag – www.u-blox.com*50
> $GPTXT,01,01,02,HW UBX-G60xx 00040007 FFF9FFFFp*5D
> $GPTXT,01,01,02,ROM CORE 7.03 (45969) Mar 17 2011 16:18:34*59
> $GPTXT,01,01,02,ANTSUPERV=AC SD PDoS SR*20
> $GPTXT,01,01,02,ANTSTATUS=OK*3B
> $GPRMC,,V,,,,,,,,,,N*53
> $GPVTG,,,,,,,,,N*30
> $GPGGA,,,,,,0,00,99.99,,,,,,*48
> $GPGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*30
> $GPGSV,1,1,00*79
> $GPGLL,,,,,,V,N*64
> $GPRMC,,V,,,,,,,,,,N*53
> $GPVTG,,,,,,,,,N*30
> $GPGGA,,,,,,0,00,99.99,,,,,,*48
> $GPGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*30
ので、Linuxの場合にはとりあえずUSBにさすと…
> Sep 8 13:33:44 mydns-adapter kernel: [ 8944.566880] usb 1-1.4: new full-speed USB device number 5 using dwc_otg
> Sep 8 13:33:44 mydns-adapter kernel: [ 8944.669691] usb 1-1.4: New USB device found, idVendor=1546, idProduct=01a6
> Sep 8 13:33:44 mydns-adapter kernel: [ 8944.669731] usb 1-1.4: New USB device strings: Mfr=1, Product=2, SerialNumber=0
> Sep 8 13:33:44 mydns-adapter kernel: [ 8944.669750] usb 1-1.4: Product: u-blox 6 – GPS Receiver
> Sep 8 13:33:44 mydns-adapter kernel: [ 8944.669768] usb 1-1.4: Manufacturer: u-blox AG – www.u-blox.com
> Sep 8 13:33:44 mydns-adapter kernel: [ 8944.739771] cdc_acm 1-1.4:1.0: ttyACM0: USB ACM device
> Sep 8 13:33:44 mydns-adapter kernel: [ 8944.743849] usbcore: registered new interface driver cdc_acm
> Sep 8 13:33:44 mydns-adapter kernel: [ 8944.743878] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters
いけてるっぽいね。
では早速必要なソフトをインストール
yum -y install gpsd gpsd-clients
でもって挿し直すと…
> Sep 8 13:55:05 mydns-adapter systemd: Starting system-gpsdctl.slice.
> Sep 8 13:55:05 mydns-adapter systemd: Created slice system-gpsdctl.slice.
> Sep 8 13:55:05 mydns-adapter systemd: Starting GPS (Global Positioning System) Daemon Sockets.
> Sep 8 13:55:05 mydns-adapter systemd: Listening on GPS (Global Positioning System) Daemon Sockets.
> Sep 8 13:55:05 mydns-adapter systemd: Starting Manage ttyACM0 for GPS daemon…
> Sep 8 13:55:05 mydns-adapter gpsdctl: gpsd_control(action=add, arg=/dev/ttyACM0)
> Sep 8 13:55:05 mydns-adapter gpsdctl: reached a running gpsd
> Sep 8 13:55:05 mydns-adapter systemd: Starting GPS (Global Positioning System) Daemon…
> Sep 8 13:55:06 mydns-adapter systemd: Started GPS (Global Positioning System) Daemon.
> Sep 8 13:55:06 mydns-adapter systemd: Started Manage ttyACM0 for GPS daemon.
あれ?もう動くの?
cgps -s
とか
gpsmon
で動作確認が出来る…よ、というかできたら、あとは時刻合わせをしましょう。
Raspberry Pi用にちゃちゃっと作って配布している汎用IPアドレス通知装置用のブートイメージ(Pidora2014)では、それまでのntpdではなくてchronydという、新しいNTPソフトが入っているので、これで設定してみる…とはまった。
・chronyd
http://nyanchew.com/jp/gps%E3%81%AEpps%E4%BF%A1%E5%8F%B7%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%9F-stratum-1-ntp%E3%82%B5%E3%83%BC%E3%83%90%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9
http://www.catb.org/gpsd/gpsd-time-service-howto.html#_feeding_chrony_from_gpsd
emacs /etc/chrony.conf
----------
refclock SHM 0
###refclock SHM 0 offset 0.9999 delay 0.2 refid GPS
----------
emacs /etc/sysconfig/gpsd
----------
OPTIONS=”-N -n”
----------
※↑これがポイント、もともとgpsdはUSB接続デバイスについては-N(フォアグラウンド)モードで
動いてしまうため、最初からUSB-GPSを接続しておくなら、さらにオプションとして-Nをつけて
フォアグラウンドをOFF(本来のデーモンモード)として動作させ、さらに-nでデバイス確認を
無視するようにして動かすようにしておくといい。
を追記して、
systemctl enable chronyd.service
systemctl start chronyd.service
systemctl status chronyd.service
> chronyd.service – NTP client/server
> Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled)
> Active: active (running) since Thu 1970-01-01 09:00:11 JST; 44 years 8 months ago
> Process: 222 ExecStartPost=/usr/libexec/chrony-helper add-dhclient-servers (code=exited, status=0/SUCCESS)
> Process: 193 ExecStart=/usr/sbin/chronyd $OPTIONS (code=exited, status=0/SUCCESS)
> Main PID: 205 (chronyd)
> CGroup: /system.slice/chronyd.service
> mq205 /usr/sbin/chronyd
>
> Jan 01 09:00:10 mydns-adapter.local chronyd[205]: chronyd version 1.30 starting
> Jan 01 09:00:10 mydns-adapter.local chronyd[205]: Frequency 7.555 +/- 111.073 ppm read from /var/lib/chrony/drift
> Jan 01 09:00:57 mydns-adapter.local chronyd[205]: Selected source GPS
> Jan 01 09:00:57 mydns-adapter.local chronyd[205]: System clock wrong by 1410164146.402824 seconds, adjustment started
> Sep 08 17:16:43 mydns-adapter.local chronyd[205]: System clock was stepped by 1410164146.402824 seconds
となって、だいたい起動一分くらいで時刻補正してくれているのがわかる。
で、念のため確認すると
chronyc sources
> 210 Number of sources = 1
> MS Name/IP address Stratum Poll Reach LastRx Last sample
> ===============================================================================
> #* GPS 0 4 34 42 +73us[-16321d] +/- 100ms
となって、date で時間があってればOK。
> Mon Sep 8 17:34:17 JST 2014
これで富士山にスタンドアロンで持っていっても、時刻はちゃんと合わせられるはず(モバイルバッテリがもつかな?)
Pingback: Raspberry Pi 3 Model B + USB接続GPSレシーバ + ChronyでStratum 1なNTPサーバを作る – Lunatilia