ntpviz を仕込む

# ntpviz

# 起動用のスクリプト
```bash:/home/pi/bin/make_ntpviz
#!/bin/bash -uex
export PYTHONPATH=/home/pi/opt/lib/python2.7/site-packages
export LANG=C

HTDOCS=/home/pi/htdocs/ntpviz
DATE=/bin/date
RM=/bin/rm
LN=/bin/ln
FIND=/usr/bin/find
TOUCH=/usr/bin/touch

# Usageを表示
function usage() {
  echo $1
  cat <<_EOT_
Usage:
  `basename $0` [-hdwm]

Description:
  cron 用 ntpviz の ラッパー

Options:
  -h 時次集計
  -d 日次集計
  -w 週次集計
  -m 月次集計
  -s <集計開始日時>

  Ex: $0 -d -s "2012-10-10T10:10:00 UTC"
_EOT_
  exit 1
}

OPT_DATE=""
while getopts ":hdwms:H" OPT
do
	case "$OPT" in
		h) TYPE=hour;	continue;;
		d) TYPE=date;	continue;;
		w) TYPE=week;	continue;;
		m) TYPE=month;	continue;;
		s)	OPT_DATE=`$DATE    -d "$OPTARG"   +'%FT%H:00:00 %Z'`
			OPT_DATE=`$DATE -u -d "$OPT_DATE" +'%FT%H:00:00 %Z'`; continue;;
		H) usage  "Help"; continue;;
		:) usage  "[ERROR] Option argument is undefined."; continue;;
		\?) usage "[ERROR] Undefined options."; continue;;
	esac
done

case $TYPE in
	hour) # 0分
			# 一日でローテーション
		if [ -z "$OPT_DATE" ]; then
			STARTTIME=`$DATE -u -d "last hour" +"%FT%H:00:00"`
			HOUR=`     $DATE -u -d "last hour" +"hour-%H"`
		else
			STARTTIME=`$DATE -u -d "$OPT_DATE" +"%FT%H:00:00"`
			HOUR=`     $DATE -u -d "$OPT_DATE" +"hour-%H"`
		fi
		OUTDIR=$HTDOCS/$HOUR
		PERIOD=0.041667
		$RM -f $HTDOCS/last-hour 
		[ -z "$OPT_DATE" ] && $LN  -s $OUTDIR $HTDOCS/last-hour 
		;;
	date) # 今日の零時
		  # 一週間でローテーション
		if [ -z "$OPT_DATE" ]; then
			STARTTIME=`$DATE -u -d 'TZ="Asia/Tokyo" 0' +%FT%T`
			DAY=`      $DATE -u -d 'TZ="Asia/Tokyo" 0' +"day-%d%a"`
		else
			STARTTIME=`$DATE -u -d "$OPT_DATE" +%FT%T`
			DAY=`      $DATE -u -d "$OPT_DATE" +"day-%d%a"`
		fi
		OUTDIR=$HTDOCS/$DAY
		PERIOD=1
		$RM -f $HTDOCS/last-day
		[ -z "$OPT_DATE" ] && $LN -s $OUTDIR $HTDOCS/last-day 
		( cd $HTDOCS ; $FIND . -maxdepth 1 -type d -name 'day-*' -mtime +8 -exec $RM -rf '{}' \+ )
		;;
	week) # 日曜の零時
		  # 2か月保存として 31 *2 + 1
		if [ -z "$OPT_DATE" ]; then
			STARTTIME=`$DATE -u -d 'TZ="Asia/Tokyo" 0 last sun' +%FT%T`
			WEEK=`     $DATE -u -d 'TZ="Asia/Tokyo" 0 last sun' +"week-%Y-%V"`
		else
			STARTTIME=`$DATE -u -d "$OPT_DATE" +%FT%T`
			WEEK=`     $DATE -u -d "$OPT_DATE" +"week-%Y-%V"`
		fi
		OUTDIR=$HTDOCS/$WEEK
		PERIOD=7
		$RM -f $HTDOCS/last-week
		[ -z "$OPT_DATE" ] && $LN -s $OUTDIR $HTDOCS/last-week
		( cd $HTDOCS ; $FIND . -maxdepth 1 -type d -name 'week-*' -mtime +63 -exec $RM -rf '{}' \+ )
		;;
	month) # 今月一日零時
		   # 1年分保存として 366 + 1
		if [ -z "$OPT_DATE" ]; then
			STARTTIME=`$DATE -u -d 'TZ="Asia/Tokyo" 0 last month' +%Y-%m-01T%T`
			MONTH=`    $DATE -u -d 'TZ="Asia/Tokyo" 0 last month' +"month-%Y-%m"`
		else
			STARTTIME=`$DATE -u -d '$OPT_DATE' +%Y-%m-01T%T`
			MONTH=`    $DATE -u -d '$OPT_DATE' +"month-%Y-%m"`
		fi
		OUTDIR=$HTDOCS/$MONTH
		PERIOD=31
		$RM -f $HTDOCS/last-month
		[ -z "$OPT_DATE" ] && $LN -s $OUTDIR $HTDOCS/last-month
		( cd $HTDOCS ; $FIND . -maxdepth 1 -type d -name "month-*" -mtime +367 -exec $RM -rf '{}' \+ )
		;;
esac

time /home/pi/opt/bin/ntpviz -w l -s $STARTTIME -p $PERIOD -o $OUTDIR
$TOUCH -d "$STARTTIME UTC" $OUTDIR
```

# 実行してみる

```tcsh:
> ~/bin/make_ntpviz -h
real    0m41.923s
user    0m39.019s
sys     0m2.427s
> ~/bin/make_ntpviz -d
real    1m51.324s
user    1m39.101s
sys     0m6.357s
> ~/bin/make_ntpviz -w
real    22m59.762s
user    8m10.417s
sys     1m9.370s
> ~/bin/make_ntpviz -m
real    144m55.967s
user    13m53.297s
sys     6m7.749s
```
一か月分のログは 2時間以上かかるらしい...

# contab に設定する
```tcsh:
> crontab -l
0 * * * * /home/pi/bin/make_ntpviz -h
2 0 * * * /home/pi/bin/make_ntpviz -d
5 0 * * 0 /home/pi/bin/make_ntpviz -w
8 1 1 * * /home/pi/bin/make_ntpviz -m
```

うーん、NEMA プロトコルだと反応の早い & 遅いのパターンがあるねぇ。
![peer-offset-SHM(0).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306041/17d7a000-9f44-b875-19f8-b209e95ba922.png)

![peer-offset-SHM(3).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306041/94b0c2ab-7a1d-5861-fb82-771b6849fe43.png)

![peer-offset-SHM(5).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306041/e77adb29-77e9-8fad-bf46-13934724beba.png)

と、gpspipe -r で見たら同じ時間のログが二度出てる。
![AAA.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306041/59f7480e-0284-a0f1-87bd-37c54079ee89.png)
3つとも試してみると GPZDA, GPGGA, GPRMC 何れも同時刻で 2件。

u-center で設定を見直す。

## 要らない
GNVTG 移動方向と速度
GPRMC 時刻、緯度、経度、移動速度、方角

## 居る
GPGGA 測位時刻、緯度、経度、他 GLL より多くの属性
GNGLL 緯度、経度、測位時刻、有効/無効
GPZDA 時刻

## どっちだろう？
GPGSA 捕捉している衛星の一覧 (衛星番号の一覧), FIX/ no-FIX
GPGSV 捕捉している衛星の情報 (衛星番号、方角、信号強度、)
GPGRS 測位された値 GPGGA に対する誤差
GPGST 位置誤差統計
GPGBS 衛星の障害情報
GPDTM 測地系、オフセット (からの何の？)
GPGNS 
GNVLW ？

設定後

```tcsh:
> ntpq -p
     remote                                   refid      st t when poll reach   delay   offset   jitter
=======================================================================================================
-ntp-a3.nict.go.jp                       .NICT.           1 u  210  256   77  10.1515  88.7287 107.2502
+ntp-b2.nict.go.jp                       .NICT.           1 u   66  256   77   8.8671  84.6850 118.1401
+ntp-b3.nict.go.jp                       .NICT.           1 u   76  256   77   9.3784   0.9709  83.9549
-ntp-a2.nict.go.jp                       .NICT.           1 u  190  256   77   9.8309  -6.9728  72.3815
-61-114-187-55.secomtrust.net            .PPS.            1 u   74  256   67  10.5530  90.1378 121.4337
-cwa225.bai.ne.jp                        210.171.0.34     4 u  193  256   77   3.5513  -6.4031  74.9164
-cwa201.bai.ne.jp                        210.171.0.34     4 u  180  256   77   2.4217  69.0223  84.2161
xSHM(0)                                  .NEMA.           0 l    -    1  377   0.0000 -291.333  18.5584
xSHM(2)                                  .PPS.            0 l    -    1  377   0.0000 -213.794   4.7218
xSHM(3)                                  .NEMA.           0 l    -    1  377   0.0000 -336.399  41.1586
*SHM(4)                                  .PPS.            0 l    -    1  377   0.0000 -213.829   4.4616
xSHM(5)                                  .NEMA.           0 l    -    1  377   0.0000 -337.831  40.7493
xSHM(6)                                  .PPS.            0 l    -    1  377   0.0000 286.4201   4.4783
```
しまった、立ち上がり／立下りを逆に設定してしまった模様。(SHM(5), SHM(6) = BN-357)
Configuration View を開いて TP5 (Timepluss5) の Rising Edge on TOS のチェックを外す。
→ 効果なし。
パルス幅を 100ms にして ntpd の pffset を 100ms 入れると良いのかな。