Link Search Menu Expand Document

環境部測站逐時照片之下載

Table of contents

背景說明

  • 此處挑了環境部測站其中的8站,逐時(每10分鐘)下載其周邊照片。
  • 測站的選擇、位置、照片的角度方向等等,詳煙流影像來源資料庫的說明。

腳本設計

8站的編號與站名

  • 站別為第1迴圈。
  • 站名為目錄$stn
  • 站號為前3碼($s),用在檔名的標示
  • 先對該站目錄下所有檔案進行ls,因檔名按照時間編排,所以最後一個檔案的名稱會有最後一個時間($LASTHR)的資訊。
  • 在從其中讀取日期與小時

小時迴圈

  • 為增加腳本的彈性,以適用在停機、斷線等等突發情況,此處不以固定時數為設計,而是一個永動的迴圈。
  • bash的date指令只接受日期為基準的加減計算,因此殘餘的小時數(起始值)必須先加回去。而以如果存在即跳開作法來規避重複下載。
  • 先計算年($y)、日期($ymd)以備開啟目錄。
  • 年月日時($ymdh)則為檔名的一部分。
  • 如果時間到了目前時間($crnt=current),則跳開永動迴圈,進入下一測站之測試與下載。

分鐘迴圈

  • 測站不見得有(每10)分鐘的拍攝,但此處仍設計有迴圈。
  • 如果檔案不存在,即以wget -T方式減少無信息的停等(time out)。

crontab

執行頻率

  • 因程式設計如工作站磁碟機上不存在檔案,才會開始下載。因此即使以較高頻率來執行,也不會發生重複下載的情況。
  • 可以日、時、或每10分鐘執行,皆可。

週間與周末差異頻率

  • 週間工作時間:每10分鐘檢查下載
  • 其他日與時間:每小時
# perform downloading the photgraphs from 8 EPA stations
# working day and hour
*/10 7-20      * * 1-5 /nas2/kuang/img_sources/EPA/get_jpgHourly.cs >& /nas2/kuang/img_sources/EPA/get_jpgHourly.out
0    0-6,21-23 * * 1-5 /nas2/kuang/img_sources/EPA/get_jpgHourly.cs >& /nas2/kuang/img_sources/EPA/get_jpgHourly.out
## weekend hourly
0 * * * 6-7 /nas2/kuang/img_sources/EPA/get_jpgHourly.cs >& /nas2/kuang/img_sources/EPA/get_jpgHourly.out

Things TODO

  • 以web形式提供歷史與即時影像的瀏覽
    • 環境部目前提供單一測站影像、因此同一主題的多站顯示應會是個好主意
    • 歷史圖片的選擇、播放
  • 煙流的YOLO解析
  • 解析結果與其他環境資訊的連結
    • 煙流走向與風向、煙流高度與混合層、
    • 煙流長度、顏色與PM2.5濃度、相對溼度、能見度等的關係
    • 蒸氣與flare活動、CEMS等的關聯
  • 煙流活動與其他活動量如船運、卡車交通等等之關聯

程式碼

root=/nas2/kuang/img_sources/EPA
http="https://airtw.moenv.gov.tw/AirSitePic"
crnt=$(date +%Y%m%d%H)
stns=( "029shalu" "041taixi" "051daliao"  "052linyuan"  "054zuoying"  "058xiaogang"  "060chaozhou"  "085dacheng" )
for si in {0..7};do
  stn=${stns[$si]}
  s=$(echo $stn|cut -c-3)
  LASTY=$(ls  $root/$stn |tail -n1)
  fls="$root/$stn/$LASTY/*/*"
  LASTHR=$(ls  $fls |tail -n1|rev|cut -d'/' -f1|rev|cut -d'-' -f2|cut -c-10)
  LAST=$(echo $LASTHR|cut -c-8)
  h=10#$(echo $LASTHR|cut -c9-10)
  while true;do
    y=$(date -d "$LAST +${h}hour" +%Y)
    ymd=$(date -d "$LAST +${h}hour" +%Y%m%d)
    ymdh=$(date -d "$LAST +${h}hour" +%Y%m%d%H)
    for m in {0..5}0;do
      fn=${s}-$ymdh${m}.jpg
      path=$root/$stn/$y/$ymd
      mkdir -p $path;cd $path
      if ! [[ -e $fn  ]];then
        wget -T 10 -q $http/$ymd/$fn;fi;done
    if [[ $ymdh -ge $crnt ]];then
      break;fi
    h=$(( 10#$h + 1 ));done;done
  • note:
    • $h必須是以10為基底的整數,才能進行四則運算。
    • 2024-04-27:停下crontab的作用,因計畫停止運作很久了。