本篇是將Local端(WinXP)GPS
tilt資料,以SSH的協定定時將所要的資料傳到遠方Server (Cygwin),而遠端Server定時將近期的資料彙整,並用GMT軟體繪製成圖檔,放在Apache網頁的目錄下!
雖然過程的概念很簡單,但是過程中總有小小的”眉眉角角”問題不時跳出來,所以趁印象深刻,趕快紀錄下來。
-----------------------------------------------------------------------------------------------------------------
Local端(WinXP):
####以下為sendGPSTVO.bat內容########
cls
@echo off
REM get previous date
set dir=C:\"GNSS
Spider"\Data\RINEX\ym05\ #Data目錄
set dir2=C:\ #將Data收集tmp檔放在C:\,主要是當用pscp傳檔時,檔名最好不要有超長檔名或空格(如C:\Documents and Settings\User)
echo wscript.echo
dateadd("d",-1,date) >%tmp%\tmp.vbs
for /f "tokens=1,2,3 delims=/- " %%i in ('cscript /nologo
%tmp%\tmp.vbs') do set y=%%i
for /f "tokens=1,2,3 delims=/- "
%%i in ('cscript /nologo %tmp%\tmp.vbs') do set m=%%j
for /f "tokens=1,2,3 delims=/- " %%i in ('cscript /nologo
%tmp%\tmp.vbs') do set d=%%k
if %m% LSS 9 set m=0%m%
if %d% LSS 9 set d=0%d%
#以上六行是抓Windows下昨年月日,沿用網路高手,但是google完就忘記是那位高手寫的,所以無法Reference,其中第一行的"d",-1表示昨天
set t1file=%dir2%ym05_%y%%m%%d%.dat #昨天資料改成時間檔名並放於暫存位置
set t1=%y%_%m%_%d%
echo wscript.echo
dateadd("d",0,date) >%tmp%\tmp.vbs
for /f "tokens=1,2,3 delims=/- " %%i in ('cscript /nologo
%tmp%\tmp.vbs') do set y=%%i
for /f "tokens=1,2,3 delims=/- " %%i in ('cscript /nologo
%tmp%\tmp.vbs') do set m=%%j
for /f "tokens=1,2,3 delims=/- " %%i in ('cscript /nologo
%tmp%\tmp.vbs') do set d=%%k
if %m% LSS 9 set m=0%m%
if %d% LSS 9 set d=0%d%
#重複抓今天日期,本用%date:~4,4%_%date:~9,2%_%date:~12,2%方式直接擷取,但會有不同版本windows欄位的問題發生
set t0file=%dir2%ym05_%y%%m%%d%.dat
set t0=%y%_%m%_%d%
copy %dir%%t1%\*.12a %t1file% #將檔案複製到暫存區
copy %dir%%t0%\*.12a %t0file%
echo %t1file% %t0file%
REM transfer data to remote server
echo %t0% %time%
C:\"GNSS Spider"\Data\pscp -pw
passwd %t1file% Lin@ymstvo.dyndns.org:/home/Lin/GPS/data #將檔案傳到遠方,使用者Lin,密碼passwd,當然遠方SSH要開
C:\"GNSS Spider"\Data\pscp -pw
passwd %t0file% Lin@ymstvo.dyndns.org:/home/Lin/GPS/data
del %t1file% %t0file%
################################
下一步用Windows的”排定的工作”,將批次檔加入,預設頻率是每天一次,若要更快(Ex: 1小時)可以在排程的進階選項開啟。
而執行的身分最好用工作環境的使用者(本例為nancy),原本用Administrator,但是pscp硬是不執行。
[控制台]->[系統管理工具]-> [本機安全性原則]-> [帳戶:限制使用空白密碼的本機帳戶僅能登入到主控台] 改成已停用即可!
-------------------------------------------------------------------------------------------------------------------
Server端(Cygwin@WinXP):
首先先將Cygwin的SSH選項打開,方法請自行Google!
用Recent7d_plotTimeS_tilt.sh整檔與繪圖,主要是繪製七天內的資料時序圖,當然GMT要在cygwin內先灌好
####以下為Recent7d_plotTimeS_tilt.sh內容########
#!/bin/bash
home=/home/Lin/GPS
gmtdir=/opt/GMT/bin/
#-------------------------------Get Files -----------------------------
rm
$home/*.dat #將七天內的資料複製到近端暫存,因為date中day語法還不會批次,只好呆呆一個個複製
cp $home/data/ym05_`date --date='-8 hour'
+%Y%m%d`.dat $home
cp $home/data/ym05_`date --date='-1 day'
+%Y%m%d`.dat $home
cp $home/data/ym05_`date --date='-2 day'
+%Y%m%d`.dat $home
cp $home/data/ym05_`date --date='-3 day'
+%Y%m%d`.dat $home
cp $home/data/ym05_`date --date='-4 day'
+%Y%m%d`.dat $home
cp $home/data/ym05_`date --date='-5 day'
+%Y%m%d`.dat $home
cp $home/data/ym05_`date --date='-6 day'
+%Y%m%d`.dat $home
dos2unix $home/*.dat
#------------------------------- Filename
-----------------------------
for ifn in $home/*.dat;do
gawk
'NR>13&&$1>0{print
"20"$1"-"$2"-"$3"T"$4":"$5":"$6,$7*100,$8*100,$9}' $ifn >>$home/ifn2.dat #抓成GMT日期format,六七欄因為太小,先乘100
echo
">" >>$home/ifn2.dat #每天資料用”>”斷開,避免頭尾資料連起來與長時間斷資料也硬連起來的不合理圖示
gawk
'NR>13&&$1>0{print $7*100,$8*100,$9}' $ifn >>$home/ifn3.dat #抓資料極值用
done
outfile=$home/tilt.ps
img=$home/tilt.png
#---------------------------- Time
Duriation and Location ----------------------------
x1=`date --date='-6 day'
+%Y-%m-%d`T00:00:00 #七天圖示時間軸起點
x2=`date --date='+1 day'
+%Y-%m-%d`T00:00:00 #圖示時間軸起點終點
x3=`date
+%Y-%m-%d`T00:00:00 #今日圖示時間軸起點
t=`date
+%H:%M` #繪圖時間
#---------------------------- catch window
----------------------------
range=`"$gmtdir"minmax -I.0001 -m
-C $home/ifn3.dat ` #抓資料極值
np1=`echo $range |awk '{print $1}'` #Y軸低值
np2=`echo $range |awk '{print $2}'` #Y軸高值
ndy=`echo $range |awk '{print ($2-$1)*10000
}' |awk '{printf("%.f", $1/100 ) }'|awk '{print $1/1000}' `
#概念是Y軸動態繪製約十個左右的label,因為資料很小,先將資料變化區間乘上10000,然後除以一百取整數,再回歸原始值
ndyy=`echo $ndy|awk '{print $1/2}'`
ep1=`echo $range |awk '{print $3}'`
ep2=`echo $range |awk '{print $4}'`
edy=`echo $range |awk '{print ($4-$3)*10000
}' |awk '{printf("%.f", $1/100 ) }'|awk '{print $1/1000}' `
edyy=`echo $edy|awk '{print $1/2}'`
tp1=`echo $range |awk '{print $5}'`
tp2=`echo $range |awk '{print $6}'`
tdy=`echo $range |awk '{print ($6-$5)*10000
}' |awk '{printf("%.f", $1/100 ) }'|awk '{print $1/1000}' `
tdyy=`echo $tdy|awk '{print $1/2}'`
#----------------------------
Plot----------------------------
#gmtset PLOT_DATE_FORMAT "yyyy-o"
"$gmtdir"gmtset ANOT_FONT_SIZE 10
FRAME_WIDTH 0.08 TICK_LENGTH 0.1c LABEL_FONT_SIZE 10
"$gmtdir"gmtset PLOT_CLOCK_FORMAT
hh:mm ANNOT_FONT_SIZE_SECONDARY 36
"$gmtdir"gmtset PLOT_DATE_FORMAT
"o dd" PLOT_CLOCK_FORMAT hh:mm ANNOT_FONT_SIZE_PRIMARY +10p
echo " 6 22 228 35 5 CM T V O
"|"$gmtdir"pstext -X2.5c -Y1.5c -R0/10/0/10 -G225 -JX16.5c/4c -K
-N > $outfile
gawk '{print $1,$2}'
"$home"/ifn2.dat|"$gmtdir"psxy -R$x1/$x2/$np1/$np2 -G255/0/0 -JX14cT/5c
-Bpa12Hf1h/a"$ndy"f"$ndyy"g"$ndy"::
-Bsa1DS/:"m Degree":WSne -K -O
-m >> $outfile #重點是-m參數繪製斷資料
gawk '{print $1,$3}'
"$home"/ifn2.dat|"$gmtdir"psxy -R$x1/$x2/$ep1/$ep2 -G0/0/255 -JX
-Bpa12Hf1h/a"$edy"f"$edyy"g"$edy"::
-Bsa1DS/:"m Degree":Wsne -K -O
-m -Y5.5c >> $outfile
gawk '{print $1,$4}'
"$home"/ifn2.dat|"$gmtdir"psxy -W1/0/255/0 -R$x1/$x2/$tp1/$tp2 -G0/255/0 -JX
-Bpa12Hf1h/a"$tdy"f"$tdyy"g"$tdy"::
-Bsa1DS/:"Degree":WsNe -K -O
-m -Y5.5c >> $outfile
gawk '{print $1,$2}'
"$home"/ifn2.dat|"$gmtdir"psxy -R$x3/$x2/$np1/$np2 -G255/0/0 -JX9.5cT/5c
-Bpa3Hf1h/a"$ndy"f"$ndyy"g"$ndy"::
-Bsa1DS/:"m Degree":wSnE -K -O
-m -Y9c -X15c -Y-11c>> $outfile
gawk '{print $1,$3}'
"$home"/ifn2.dat|"$gmtdir"psxy -R$x3/$x2/$ep1/$ep2 -G0/0/255 -JX
-Bpa3Hf1h/a"$edy"f"$edyy"g"$edy":: -Bsa1DS/:"m
Degree":wsnE -K -O -m -Y9c -Y5.5c>> $outfile
gawk '{print $1,$4}'
"$home"/ifn2.dat|"$gmtdir"psxy -W1/0/255/0
-R$x3/$x2/$tp1/$tp2 -G0/255/0 -JX
-Bpa3Hf1h/a"$tdy"f"$tdyy"g"$tdy"::
-Bsa1DS/:"Degree":wsNE -K -O -m -Y5.5c >> $outfile
"$gmtdir"pstext -R0/20.2/0/20.2 -JX20.2c -O -N
-X-15c -Y-11c <> $outfile
12.1 17.8
38 0 5 CM YM05
.6
4.5 16 0 5 LM Tilt N
.6 10.0
16 0 5 LM Tilt E
.6 15.5
16 0 5 LM Temperature
25 -1
14 0 5 CM Made $t
END
ps2pdf $outfile $home/tilt.pdf #這兩行將ps轉成pdf,又轉回來,主要是將ps圖旋轉90度,以利gs轉成png檔
pdf2ps $home/tilt.pdf $outfile
gs -dNOPAUSE -sDEVICE=png16 -r200
-sOutputFile="$img" "$outfile" -dBATCH
-q –dNODISPLAY #gs轉成png檔
mv $img /cygdrive/c/AppServ/www #png檔放到Apache Server目錄下
rm
$home/tilt.p* $home/*.dat
########################
最後結果如下