155 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			155 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
| #!/bin/bash
 | |
| # Interactive front end for timelapse on Pi via webcam
 | |
| 
 | |
| # Configuration Variables
 | |
| INSTALL_DIR="/usr/local/bin"
 | |
| FILE_LIST=("tl-capture" "tl-clean" "tl-control")
 | |
| IMG_DIR="/tmp/TL"
 | |
| SYNC_DES_PATH="/mnt/media/TL/to-process"
 | |
| # Cron
 | |
| CRON_DIR="/etc/cron.d"
 | |
| CRON_FILE="$CRON_DIR/timelapse"
 | |
| CRON_FREQUENCY="" # Set by prompt
 | |
| CRON_LOG_PATH="/var/log/${FILE_LIST[0]}.log"
 | |
| CRON_JOB="root $INSTALL_DIR/${FILE_LIST[0]} >> $CRON_LOG_PATH 2>&1"
 | |
| 
 | |
| # Check for root/sudo
 | |
| if [ "$EUID" -ne 0 ]; then
 | |
|     echo "This script must be run as root or with sudo."
 | |
|     exit 1
 | |
| else
 | |
|     echo "Running as root or with sudo."
 | |
| fi
 | |
| 
 | |
| # Functions
 | |
| 
 | |
| # Start Time Lapse
 | |
| start_tl() {
 | |
|     # Check if image directory exists and create if not
 | |
|     if [[ ! -d $IMG_DIR ]]; then
 | |
|         echo "Image directory doesn't exist, creating it now..."
 | |
|         mkdir -p $IMG_DIR
 | |
|         if [[ $? -eq 0 ]]; then
 | |
|             echo "Success!"
 | |
|         else
 | |
|             echo "Unable to create directory, exiting!"
 | |
|             exit 1
 | |
|         fi
 | |
|     fi
 | |
|     read -p "Image interval in minutes (1-59): " interval
 | |
|     # Make sure the interval is valid 1-59
 | |
|     if [[ "$interval" =~ ^[1-9]$|^[1-5][0-9]$ ]]; then
 | |
|         CRON_FREQUENCY="*/$interval * * * *"
 | |
|     else
 | |
|         echo "Invalid interval!"
 | |
|         return 1
 | |
|     fi
 | |
|     echo "Creating cron file: $CRON_FILE"
 | |
|     touch "$CRON_FILE"
 | |
|     if [[ $? -eq 0 ]]; then
 | |
|         echo "Success"
 | |
|     else
 | |
|         echo "Unable to create the file. Exiting"
 | |
|         exit 1
 | |
|     fi
 | |
|     echo -e "Writing job to file: $CRON_FILE\n$CRON_JOB"
 | |
|     cat <<EOF > $CRON_FILE
 | |
| # Take an image every 15 minutes and save it for a time lapse
 | |
| $CRON_FREQUENCY $CRON_JOB
 | |
| EOF
 | |
|     if [[ $? -eq 0 ]]; then
 | |
|         echo "Success"
 | |
|     else
 | |
|         echo "Unable to write to the file. Exiting"
 | |
|         exit 1
 | |
|     fi
 | |
| }
 | |
| 
 | |
| # Stop Time Lapse
 | |
| stop_tl() {
 | |
|     echo "Removing cron file: $CRON_FILE"
 | |
|     rm $CRON_FILE
 | |
|     if [[ $? -eq 0 ]]; then
 | |
|         echo "Success"
 | |
|     else
 | |
|         echo "Unable to remove to the file. Exiting"
 | |
|         exit 1
 | |
|     fi
 | |
| }
 | |
| 
 | |
| # NAS Sync
 | |
| sync_nas() {
 | |
|     echo "Syncing $IMG_DIR to $SYNC_DES_PATH..."
 | |
|     rsync -av --progress --remove-source-files "$IMG_DIR" "$SYNC_DES_PATH" $1
 | |
|     if [[ $? -eq 0 ]]; then
 | |
|         echo "Success"
 | |
|     else
 | |
|         echo "Unable to complete sync. Exiting"
 | |
|         exit 1
 | |
|     fi
 | |
| }
 | |
| 
 | |
| # Delete synced images
 | |
| clean_pi() {
 | |
|     echo "Are you sure??"
 | |
|     read -n 1 -S
 | |
|     echo "Sike!"
 | |
| }
 | |
| 
 | |
| # Menu Prompt
 | |
| while true; do
 | |
|     # Empty the screen
 | |
|     # clear
 | |
|     # Print the prompt
 | |
|     echo "[ Time Lapse Control Panel ]"
 | |
|     echo ""
 | |
|     echo "[1] Start Time Lapse"
 | |
|     echo "[2] Stop Time Lapse"
 | |
|     echo "[3] Dry Run Sync to NAS"
 | |
|     echo "[4] Sync to NAS"
 | |
|     echo "[5] !! Delete ALL synced images !!"
 | |
|     echo ""
 | |
|     echo "[0] Exit"
 | |
| 
 | |
|     # Wait for input
 | |
|     read -p "Option: " opt
 | |
| 
 | |
|     # Execute the correct commands based on input.
 | |
|     case "$opt" in
 | |
|         1)
 | |
|             # Start Time Lapse
 | |
|             clear
 | |
|             start_tl
 | |
|             ;;
 | |
|         2)
 | |
|             # Stop Time Lapse
 | |
|             clear
 | |
|             stop_tl
 | |
|             ;;
 | |
|         3)
 | |
|             # Dry Run NAS Sync
 | |
|             clear
 | |
|             sync_nas --dry-run
 | |
|             # echo "Untested and not working yet!"
 | |
|             ;;
 | |
|         4)
 | |
|             # NAS Sync
 | |
|             clear
 | |
|             sync_nas
 | |
|             ;;
 | |
|         5)
 | |
|             # !! Delete ALL synced images on Pi !!
 | |
|             clear
 | |
|             clean_pi
 | |
|             ;;
 | |
|         0)
 | |
|             # Exit
 | |
|             clear
 | |
|             exit
 | |
|             ;;
 | |
|         *)
 | |
|             # clear
 | |
|             echo "!! Invalid Option !!"
 | |
|             ;;
 | |
|     esac
 | |
| done |