www.smiyasaka.com  は、2021 年 1月から CentOS Stream 8 にバージョンアップしました。

CentOS 7.X, 8.X 用 1分・10秒更新プログラム




crontab の設定は、下記のようにしています。

*/1 6-18 * * * /○○○○/webcam10.sh > /dev/null 2>&1

下記のプログラムの名称は、webcam10.sh にしています。

( ○○○○ : ホームページのパス、△△△ : ユーザー名 )

#!/bin/bash
####------------------------------------------------------------------
####    1分撮影 +10秒毎撮影
####
####    fswebcamによる静止画の取り込み。
####    17:00 から 6:00の間、運用休止して、断り写真にする。
####    12:00に取った写真をwebcamdayにDAYyyyymmdd.jpgで
####    毎日保存する。
####    6:00に取った写真をwebcam0600にDAYyyyymmdd.jpgで
####    毎日保存する。
####    10分毎に取った写真をwebcamminにMINyyyymmdd.jpgで
####    毎日上書き保存する。
####    USBカメラ動作不良の時、故障写真(ngcamera.jpg)にする。
####    変数名には、分かり易くするため {} を付けました。
####
####------------------------------------------------------------------
#
Kymd="DAY$(date +%Y%m%d).jpg"		# date(yyyymmdd)
Kyear=$(date +%Y)			# 年(yyyy)
Kmonth=$(date +%m)			# 月(mm)
Kday=$(date +%d)			# 日(mmdd)
Khour=$(date +%H)			# 時(00-23)
Kmm=$(date +%M)				# 分(00-59)
K1200m=$(date +%H%M)			# 時(00-23)分(00-59)
Kmd=$(date +%m%d)			# 月日(mmdd)
www="/○○○○"   # Dir pass1
home="/home/△△△/www"               # Dir pass2

INFILE60="${www}/webcam/camdata.jpg"    # 1分撮影 
INFILE10="${www}/snapshot.jpg"          # 10秒毎撮影

#
K_flg="on"                                       # 起動フラグ

# 現在時刻 (単位 : 分)
K_Now_time=`expr ${Khour} \* 60 + ${Kmm} \* 1`

# スタート時刻 6:00 (単位 : 分)
K_Start=`expr 6 \* 60`

# 終了時刻  17:30 (単位 : 分)
K_End=`expr 17 \* 60 + 45 \* 1`

#---------------------------------------------------------------------
#		6:00時から17:45時まで撮影( K_flg="on" )する
#-----------------------------   Main Start  -------------------------
#
if [ ${K_Now_time} -ge ${K_Start} \
                  -a ${K_Now_time} -le ${K_End} ];
   then
          K_flg="on"      # 起動フラグ
   else
#---------------------------------------------------------------------
#          時間外の処理
#	17:46からは stop.jpg を ---> camdata.jpg に書込みする。
#        但し、一度書込んだら、二度目からは、パスさせる。
#---------------------------------------------------------------------
          if [ ${K_flg} = "on" ];
             then
	         \cp ${www}/webcam/stop.jpg ${INFILE60}
	         \cp ${www}/webcam/stop.jpg ${INFILE10}
                 K_flg="off"
          fi
fi      # Main End
#
#---------------------------------------------------------------------
#-------- Main1 Start -- K_flg="on" の時に実行させる ------------
#---------------------------------------------------------------------
if [ ${K_flg} = "on" ];
   then
#---------------------------------------------------------------------
#	( ( 分 + 5 ) ÷ 10 ) × 10 の整数計算をする
# 		分を10分単位にする
#---------------------------------------------------------------------
#
KMmm=`expr \( \( ${Kmm} + 5 \) / 10 \) \* 10`
#
Khmm=${Khour}
#echo "Khmm : ${Khmm}"
   if [ ${KMmm} -eq 0 ];                # 0分は、"00"にする
      then
		KMmm="00"
      else
	if [ ${KMmm} -eq 60 ];	   # 60分の時 "時 + 1"にする
	   then
		KMmm="00"		# 分は、"00"にする
		Khmm=`expr ${Khou}r + 1`
		Kcnt=${#Khmm}		# 文字数取得
		if [ ${Kcnt} -eq 1 ];
		   then
		    Khmm="0${Khmm}"  # 一桁の時、"0"を追加する
		fi
	fi
   fi
#---------------------------------------------------------------------
#
KKmm="${Kmd}${Khmm}${KMmm}" # "月日"+"時"+"分"
Khm="${Khmm}${KMmm}"		 # "時"+"分"
#  MINmmdd.jpg
Khhmm="${www}/webcammin/MIN${KKmm}.jpg"
#
Kminute=$(date +%M)			# 分
#
#---------------------------------------------------------------------
# lsusbコマンドでUSBカメラの接続情報を取得する。
# その中に"Logitech"の記述があるかないかでUSBカメラの動作を
# 判断する。
# CentOS 6.X 用, CentOS 7.0 用
	USB=$(/usr/bin/lsusb)
# Logicool USB Camera C270sCW
	USB1=$(echo ${USB} | grep "Logitech")
        if [ ! -z "${USB1}" ];
           then
             echo "Logicool"
        fi
#
# ELECOM USB Camera
   if [ -z "${USB1}" ];
      then
	USB1=$(echo ${USB} | grep "Elecom")
        if [ ! -z "${USB1}" ];
           then
             echo "ELECOM"
        fi
   fi
#---------------------------------------------------------------------
#
# USBカメラが動作している時には、抽出文字列が${USB1に
# セットされる。
#---------------------------------- camera Start -------------------
   if [ -z "${USB1}" ];
      then
		\cp ${www}/webcam/ngcamera.jpg ${INFILE60}
	        \cp ${www}/webcam/ngcamera.jpg ${INFILE10}
		echo "camera NG"
		exit 
      else
#---------------------------------------------------------------------
#  yahoo の温度を表示させる。
#---------------------------------------------------------------------
#  yahoo の温度データは、別プログラムで取得しています。
#
Y_file=$(cat /○○○○/TXT/myyahoo.txt)
#echo Read Data ${Y_file}
#
ary=(`echo ${Y_file}`)   # 配列へ代入
#
#時刻:${ary[0]}  温度:${ary[1]}  雨量:${ary[2]}
#風速:${ary[3]}  日照時間:${ary[4]}
# 数値文字列を数値に変換する。
Kjikan=${ary[0]}
Kame=${ary[2]}
Mame=${ary[2]}
Ksun=${ary[4]}
#echo jikan = ${Kjikan}
#echo ame = ${Kame}
#echo sun = ${Ksun}
# 数字以外を削除する
Kjikan=$(echo ${Kjikan} | sed -e "s/[^0-9]//g")
# 簡易的に数字以外を削除する
Kjikan=`expr ${Kjikan} / 1`
#
# ex 10時のデータが 1024 になるので 100 で割って小数点で
#    分割した。
# 計算結果は、余りなしの整数値になる。
#
Kjikan100=`expr ${Kjikan} / 100`
#echo jikan 2 = ${Kjikan}
#  0 の時には、24 が無いので元のデータをセットする。
if [ ${Kjikan100} -eq 0 ]
   then
      Kjikan=${Kjikan}
   else
      Kjikan=${Kjikan100}
   fi
#---------------------------------------------------------------------
# 不要な文字列を削除する
Kame=$(echo ${Kame} | sed -e "s/[^0-9]//g")
Kjikan=`expr ${Kjikan} / 1`
Kame=`expr ${Kame} / 1`
#
Ksun=$(echo ${Ksun} | sed -e "s/[^0-9]//g")
# ${Ksun}="" の判定
  if [ -z ${Ksun} ];
   then
      Ksun=0
   else
      Ksun=`expr ${Ksun} / 1`
  fi
#echo "Ksun = ${Ksun}"
#---------------------------------------------------------------------
#  天気の種分けを判定する。
#---------------------------------------------------------------------
#
#---------------------------------- Tenki Start ---------------------
  if [ ${Kame} -ne 0 ];
   then
        T_3="雨("${Mame}"mm)"    # "rainy" + (雨量)
   else
#  fine or cloudy
       if [ ${Kjikan} -ge 7 -o ${Kjikan} -le 18 ];
          then
               if [ ${Kame} -eq 0 -a ${Ksun} -gt 50 ];
                  then
                      if [ ${Ksun} -gt 59 ];
                         then
                             T_3="快晴"    # "very fine"
                         else
                             T_3="晴"      # "fine"
                      fi
                  else
                       if [ ${Ksun} -gt 5 ];
                          then
                               T_3="曇/晴"           #"cloudy/fine"
                               if [ ${Ksun} -gt 35 ];
                                  then
                                      T_3="晴/曇"    #"fine/cloudye"
                               fi
                          else
                               T_3="曇"              #"cloudy"
                       fi
               fi
          else
               T_3="_"
       fi
  fi
#---------------------------------- Tenki END -----------------------
fi
#---------------------------------- camera End ---------------------
#    タイトル文字列の合成( スペースは、使えない )
T_00="__"
T_0="_"
T_1="時現在"
T_2="度"
T_4="天気"
Title=${T_00}${Kjikan}${T_1}${T_0}${ary[1]}\
${T_2}${T_0}${T_4}${T_0}${T_3
#---------------------------------------------------------------------
#                              1 分更新処理
#
   /usr/bin/fswebcam -p YUYV --bottom-banner\
        --line-colour '#FF000000'\
	--banner-colour '#FF000000' -S 4 -r 1280x960\
        --title ${Title}\
        --font '/○○○○/Font/VL-Gothic-Regular.ttf:32'\
	--text-colour '#FFFF00'\
        -s Brightness=65%\
        -s Contrast=15%\
	--timestamp '%Y-%m-%d %H:%M' --jpeg 95\
        --save ${INFILE60}
#
#---------------------------------------------------------------------
#		12:11 と 12:12に保存する処理
#---------------------------------------------------------------------
   if [ ${K1200m} -eq 1211 -o ${K1200m} -eq 1212 ];
      then
      \cp ${INFILE60} ${www}/webcamday/${Kymd}
      chown △△△:△△△ ${www}/webcamday/${Kymd}
      # 
   \cp ${INFILE60} \
      ${home}/webcamday/DAY${Kyear}${Kmonth}/${Kymd}
      chown △△△:△△△ \
${home}/webcamday/DAY${Kyear}${Kmonth}/${Kymd}

   fi
#---------------------------------------------------------------------
#		10分毎に保存する処理
#     定刻に、写真が取得できない時があるので、
#     連続2回取るようにする。
#---------------------------------------------------------------------
#echo ${Kminute}
#echo ${Khhmm}
	case  ${Kminute} in
		59|00) cp ${INFILE60} ${Khhmm};;	# 00分
		09|10) cp ${INFILE60} ${Khhmm};;	# 10分
		19|20) cp ${INFILE60} ${Khhmm};;	# 20分
		29|30) cp ${INFILE60} ${Khhmm};;	# 30分
		39|40) cp ${INFILE60} ${Khhmm};;	# 40分
		49|50) cp ${INFILE60} ${Khhmm};;	# 50分
	esac
#---------------------------------------------------------------------
fi                        # 1 分更新処理 End
#---------------------------------------------------------------------
#
for i in `seq 1 6`;do                   # 10 秒毎繰り返し処理
#---------------------------------------------------------------------
#
#
  /usr/bin/fswebcam -p YUYV --bottom-banner\
      --line-colour '#FF000000'\
     --banner-colour '#FF000000' -S 2 -r 960x720\
     --title ${Title}\
     --font '/○○○○/Font/VL-Gothic-Regular.ttf:24'\
     --text-colour '#FFFF00'\
     -s Brightness=65%\
     -s Contrast=15%\
     --timestamp '%Y-%m-%d %H:%M:%S' --jpeg 95\
     --save ${INFILE10}
#
#---------------------------------------------------------------------
#
  if [ ${i} -eq 6 ]; then
     break                # 強制終了
  fi

  sleep 8s;    # 10 秒待って繰り返し処理実行 上記処理時間を考慮

done;
#
#---------------------------------------------------------------------


TOPへ戻る