From 243aa1ac1a3c1b88756e8fc6aab6457c088d1ec8 Mon Sep 17 00:00:00 2001 From: Holger Wirtz Date: Mon, 12 Aug 2019 14:30:17 +0200 Subject: [PATCH] Initial files. --- bin/timelapse_daily.sh | 40 ++++++++++++++++++++++++++++ bin/timelapse_gatherer.sh | 41 ++++++++++++++++++++++++++++ bin/timelapse_monthly.sh | 49 ++++++++++++++++++++++++++++++++++ bin/timelapse_video.sh | 47 ++++++++++++++++++++++++++++++++ bin/timelapse_weekly.sh | 56 +++++++++++++++++++++++++++++++++++++++ bin/timelapse_yearly.sh | 46 ++++++++++++++++++++++++++++++++ client/timelapse.sh | 43 ++++++++++++++++++++++++++++++ 7 files changed, 322 insertions(+) create mode 100755 bin/timelapse_daily.sh create mode 100755 bin/timelapse_gatherer.sh create mode 100755 bin/timelapse_monthly.sh create mode 100755 bin/timelapse_video.sh create mode 100755 bin/timelapse_weekly.sh create mode 100755 bin/timelapse_yearly.sh create mode 100755 client/timelapse.sh diff --git a/bin/timelapse_daily.sh b/bin/timelapse_daily.sh new file mode 100755 index 0000000..cd3d65d --- /dev/null +++ b/bin/timelapse_daily.sh @@ -0,0 +1,40 @@ +#!/bin/bash + +DATA_DEVICE_UUID="C6CE6C2BCE6C1649" +MOUNT_PATH="/mnt/extern" +DATA="${MOUNT_PATH}/timelapse" +CLIENT="timelapse@192.168.111.2" +CLIENT_FOLDER="/timelapse" + +if [[ "${1}" =~ [0-9]{8} ]] +then + DATE=${1} +else + DATE=`date --date="1 day ago" +%Y%m%d` +fi + +mountpoint -q ${MOUNT_PATH} +if [ ${?} != 0 ] +then + sudo mount --uuid ${DATA_DEVICE_UUID} -o uid=1000,gid=1000,umask=0022 ${MOUNT_PATH} || echo "Cannot mount data device with UUID ${DATA_DEVICE_UUID}!"; exit 1 +fi + +if [ ! -e "${DATA}" ] +then + mkdir -p ${DATA} +fi + +if [ ! -e "${DATA}/video" ] +then + mkdir -p "${DATA}/video" +fi + +# sort files +mkdir -p "${DATA}/daily" +for i in `find ${DATA}/data/ -name "${DATE}*.jpg"` +do + if [ ! -e "${DATA}/daily/`basename ${i}`" ] + then + ln ${i} "${DATA}/daily" + fi +done diff --git a/bin/timelapse_gatherer.sh b/bin/timelapse_gatherer.sh new file mode 100755 index 0000000..c3034c6 --- /dev/null +++ b/bin/timelapse_gatherer.sh @@ -0,0 +1,41 @@ +#!/bin/bash + +DATA_DEVICE_UUID="C6CE6C2BCE6C1649" +MOUNT_PATH="/mnt/extern" +DATA="${MOUNT_PATH}/timelapse" +CLIENT="timelapse@192.168.111.2" +CLIENT_FOLDER="/timelapse" + +mountpoint -q ${MOUNT_PATH} +if [ ${?} != 0 ] +then + sudo mount --uuid ${DATA_DEVICE_UUID} -o uid=1000,gid=1000,umask=0022 ${MOUNT_PATH} || echo "Cannot mount data device with UUID ${DATA_DEVICE_UUID}!"; exit 1 +fi + +if [ ! -e "${DATA}" ] +then + mkdir -p ${DATA} +fi + +if [ ! -e "${DATA}/in" ] +then + mkdir -p "${DATA}/in" +fi + +rsync -q -a --remove-source-files "${CLIENT}:${CLIENT_FOLDER}/*.jpg" "${DATA}/in" + +if [ ! -e "${DATA}/data" ] +then + mkdir -p "${DATA}/data" +fi + +for i in `find "${DATA}/in/" -name "*.jpg" -type f` +do + if [ `stat -c%s ${i} ` -gt 0 ] + then + #convert -quiet ${i} -resize 1080 "${DATA}/data/`basename ${i}`" + daystring=`basename ${i} | cut -d"_" -f1 | sed 's/\([0-9]\{4\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)-\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)/\3\.\2\.\1 \4:\5/'` + convert -quiet ${i} -resize 1080 -gravity SouthEast -pointsize 22 -fill white -annotate +30+30 "${daystring}" "${DATA}/data/`basename ${i}`" + fi + rm "${i}" +done diff --git a/bin/timelapse_monthly.sh b/bin/timelapse_monthly.sh new file mode 100755 index 0000000..363e30b --- /dev/null +++ b/bin/timelapse_monthly.sh @@ -0,0 +1,49 @@ +#!/bin/bash + +DATA_DEVICE_UUID="C6CE6C2BCE6C1649" +MOUNT_PATH="/mnt/extern" +DATA="${MOUNT_PATH}/timelapse" +CLIENT="timelapse@192.168.111.2" +CLIENT_FOLDER="/timelapse" + +set -x + +if [[ "${1}" =~ [01]*[0-9] ]] +then + MONTH=${1} +else + MONTH=`date --date="1 month ago" +%m` +fi +YEAR=`date --date="1 month ago" +%Y` + +mountpoint -q ${MOUNT_PATH} +if [ ${?} != 0 ] +then + sudo mount --uuid ${DATA_DEVICE_UUID} -o uid=1000,gid=1000,umask=0022 ${MOUNT_PATH} || echo "Cannot mount data device with UUID ${DATA_DEVICE_UUID}!"; exit 1 +fi + +if [ ! -e "${DATA}" ] +then + mkdir -p ${DATA} +fi + +if [ ! -e "${DATA}/video" ] +then + mkdir -p "${DATA}/video" +fi + +# sort files +mkdir -p "${DATA}/monthly" +monthly_counter=0 +for i in `find ${DATA}/data/ -name "${YEAR}${MONTH}*.jpg"` +do + monthly_counter=$((monthly_counter + 1)) + if [ ${monthly_counter} -ge 30 ] + then + if [ ! -e "${DATA}/monthly/`basename ${i}`" ] + then + ln ${i} "${DATA}/monthly" + fi + monthly_counter=0 + fi +done diff --git a/bin/timelapse_video.sh b/bin/timelapse_video.sh new file mode 100755 index 0000000..5cd34c7 --- /dev/null +++ b/bin/timelapse_video.sh @@ -0,0 +1,47 @@ +#!/bin/bash + +MOUNT_PATH="/mnt/extern" +DATA="${MOUNT_PATH}/timelapse" +CLIENT_FOLDER="/timelapse" + +DATA_FOLDER="" + +case ${1} in +daily) + DATA_FOLDER="${1}" + DATE=`date --date="1 day ago" +%Y%m%d` + ;; +weekly) + DATA_FOLDER="${1}" + DATE=`date --date="1 week ago" +%Y%m%d` + ;; +monthly) + DATA_FOLDER="${1}" + DATE=`date --date="1 month ago" +%Y%m%d` + ;; +*) + DATA_FOLDER="yearly" + DATE=`date +%Y%m%d` + ;; +esac + +mountpoint -q ${MOUNT_PATH} +if [ ${?} != 0 ] +then + sudo mount --uuid ${DATA_DEVICE_UUID} -o uid=1000,gid=1000,umask=0022 ${MOUNT_PATH} || echo "Cannot mount data device with UUID ${DATA_DEVICE_UUID}!"; exit 1 +fi + +if [ ! -e "${DATA}" ] +then + echo "No directory: ${DATA}" + exit 401 +fi + +if [ ! -e "${DATA}/video" ] +then + echo "No directory: ${DATA}/video" + exit 402 +fi + +# sort files +ffmpeg -y -loglevel quiet -framerate 30 -pattern_type glob -i "${DATA}/${DATA_FOLDER}/*.jpg" -vcodec libx265 -crf 20 -vf scale=1920:1080 "${DATA}/video/${DATA_FOLDER}_${DATE}.mp4" diff --git a/bin/timelapse_weekly.sh b/bin/timelapse_weekly.sh new file mode 100755 index 0000000..ed8a028 --- /dev/null +++ b/bin/timelapse_weekly.sh @@ -0,0 +1,56 @@ +#!/bin/bash + +DATA_DEVICE_UUID="C6CE6C2BCE6C1649" +MOUNT_PATH="/mnt/extern" +DATA="${MOUNT_PATH}/timelapse" +CLIENT="timelapse@192.168.111.2" +CLIENT_FOLDER="/timelapse" + +if [[ "${1}" =~ [0-9]{2} ]] +then + WEEK=${1} +else + WEEK=`date --date="last monday" +%V` +fi +current_week=`date +'%V'` +current_week_diff=$((${current_week}-${WEEK})) +DATE_WEEK=`date --date="${current_week_diff} weeks ago" +%Y%m%d` +DATE_START=`date --date="${DATE_WEEK}" +%s` +DATE_STOP=$(($DATE_START+7*86400)) + +mountpoint -q ${MOUNT_PATH} +if [ ${?} != 0 ] +then + sudo mount --uuid ${DATA_DEVICE_UUID} -o uid=1000,gid=1000,umask=0022 ${MOUNT_PATH} || echo "Cannot mount data device with UUID ${DATA_DEVICE_UUID}!"; exit 1 +fi + +if [ ! -e "${DATA}" ] +then + mkdir -p ${DATA} +fi + +if [ ! -e "${DATA}/video" ] +then + mkdir -p "${DATA}/video" +fi + +# sort files +rm -rf "${DATA}/weekly" +mkdir -p "${DATA}/weekly" +weekly_counter=0 +for i in `find ${DATA}/data/ -name "${DATE}*.jpg"` +do + seconds_unixtime=`echo "${i}" | sed 's/^.\+_\([0-9]\+\).*/\1/'` + if [ "${seconds_unixtime}" -ge "${DATE_START}" ] || [ "${seconds_unixtime}" -lt "${DATE_STOP}" ] + then + weekly_counter=$((weekly_counter + 1)) + if [ ${weekly_counter} -ge 7 ] + then + if [ ! -e "${DATA}/weekly/`basename ${i}`" ] + then + ln ${i} "${DATA}/weekly" + fi + weekly_counter=0 + fi + fi +done diff --git a/bin/timelapse_yearly.sh b/bin/timelapse_yearly.sh new file mode 100755 index 0000000..3b9d261 --- /dev/null +++ b/bin/timelapse_yearly.sh @@ -0,0 +1,46 @@ +#!/bin/bash + +DATA_DEVICE_UUID="C6CE6C2BCE6C1649" +MOUNT_PATH="/mnt/extern" +DATA="${MOUNT_PATH}/timelapse" +CLIENT="timelapse@192.168.111.2" +CLIENT_FOLDER="/timelapse" + +if [[ "${1}" =~ [0-9]{4} ]] +then + YEAR=${1} +else + YEAR=`date --date="1 year ago" +%Y` +fi + +mountpoint -q ${MOUNT_PATH} +if [ ${?} != 0 ] +then + sudo mount --uuid ${DATA_DEVICE_UUID} -o uid=1000,gid=1000,umask=0022 ${MOUNT_PATH} || echo "Cannot mount data device with UUID ${DATA_DEVICE_UUID}!"; exit 1 +fi + +if [ ! -e "${DATA}" ] +then + mkdir -p ${DATA} +fi + +if [ ! -e "${DATA}/video" ] +then + mkdir -p "${DATA}/video" +fi + +# sort files +mkdir -p "${DATA}/yearly" +yearly_counter=0 +for i in `find ${DATA}/data/ -name "${YEAR}*.jpg"` +do + yearly_counter=$((yearly_counter + 1)) + if [ ${yearly_counter} -ge 360 ] + then + if [ ! -e "${DATA}/yearly/`basename ${i}`" ] + then + ln ${i} "${DATA}/yearly" + fi + yearly_counter=0 + fi +done diff --git a/client/timelapse.sh b/client/timelapse.sh new file mode 100755 index 0000000..28a88a4 --- /dev/null +++ b/client/timelapse.sh @@ -0,0 +1,43 @@ +#!/bin/bash +# +# Exposure mode options : --exposure +# off,auto,night,nightpreview,backlight,spotlight,sports,snow,beach,verylong,fixedfps,antishake,fireworks +# +# Flicker avoid mode options : --flicker +# off,auto,50hz,60hz +# +# AWB mode options : --awb +# off,auto,sun,cloud,shade,tungsten,fluorescent,incandescent,flash,horizon +# +# Image Effect mode options : --imxfx +# none,negative,solarise,sketch,denoise,emboss,oilpaint,hatch,gpen,pastel,watercolour,film,blur,saturation,colourswap,washedout,posterise,colourpoint,colourbalance,cartoon +# +# Metering Mode options : --metering +# average,spot,backlit,matrix +# +# Dynamic Range Compression (DRC) options : --drc +# off,low,med,high + +QUALITY=70 +MODE=2 +AWB="auto" +EXPOSURE="auto" +TIMEOUT=4000 +RASPISTILL_OPTIONS="--mode ${MODE} --quality ${QUALITY} --encoding jpg --thumb none --nopreview --awb ${AWB} --exposure ${EXPOSURE} --timeout ${TIMEOUT}" +OUTPUT_DIR="/timelapse" +SNAPSHOT_DELAY=10 + +while [ 1 ] +do + DATE=`date +%Y%m%d-%H%M%S` + SEC=`date +%s` + TIME_VALUES=`/usr/bin/time -v raspistill -v ${RASPISTILL_OPTIONS} -o "${OUTPUT_DIR}/${DATE}_${SEC}.jpg" 2>&1` + TIME_USED=`echo "${TIME_VALUES}" | grep "wall clock" | sed 's/^.\+\([0-9]\+\):\([0-9]\+\.[0-9]\+\)\s*$/\1:\2/'` + min=`echo ${TIME_USED} | cut -d":" -f1` + sec=`echo ${TIME_USED} | cut -d":" -f2` + sleep=`bc << EOF +${SNAPSHOT_DELAY}-(${min}*60+${sec})-0.1 +EOF` + sleep ${sleep} +done +echo "Exiting $0 at `date`"