Initial testing

This commit is contained in:
Skylar Grant 2024-06-24 17:40:34 -04:00
parent d04c38a6ed
commit 0ba691f82a
4 changed files with 234 additions and 0 deletions

41
timelapse/install.sh Normal file
View File

@ -0,0 +1,41 @@
#!/bin/bash
# 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
# Configuration variables
# Install directory
INSTALL_DIR="/usr/local/bin"
FILE_LIST=("tl-capture" "tl-clean" "tl-control")
# Copy the executable files
for file in ${FILE_LIST[@]}; do
echo "Copying $file to $INSTALL_DIR..."
cp "./$file" $INSTALL_DIR
if [[ $? -eq 0 ]]; then
echo "Done."
else
echo "Unable to copy the file. Exiting"
exit 1
fi
echo "Setting executable status on $file..."
chmod +x "$INSTALL_DIR/$file"
if [[ $? -eq 0 ]]; then
echo "Done."
else
echo "Unable to set the executable bit. Exiting"
exit 1
fi
done
# Set up the cron job
# Wrap up
echo "Install complete, press any key to exit..."
read -n 1 -s

55
timelapse/tl-capture Normal file
View File

@ -0,0 +1,55 @@
#!/bin/bash
# Customizable variables
# Device
$DEVICE="/dev/video0"
# Temporary output directory
$TO_SYNC_DIR="/tmp/TL/tosync"
$SYNCED_DIR="/tmp/TL/synced"
# NAS Info
$NAS_MOUNT_DIR="/mnt/media"
$NAS_SYNC_DIR="/TL/synced"
# Pre-script configurations
# Generate the date for the filename
DATE=$(date +"%Y-%m-%d_%H-%M")
# Form the filename
FILENAME="TL-$DATE.jpg"
# Functions
setup_dirs() {
# Check if To-Sync Directory exists and create it if not
if [[ ! -d $TO_SYNC_DIR ]]; then
echo "To-Sync directory doesn't exist, creating it now..."
mkdir -p $TO_SYNC_DIR
if [[ $? -eq 0 ]]; then
echo "Success!"
else
echo "Unable to create directory, exiting!"
exit 1
fi
fi
# Check of Synced Directory exists and create it if not
if [[ ! -d $SYNCED_DIR ]]; then
echo "Synced directory doesn't exist, creating it now..."
mkdir -p $SYNCED_DIR
if [[ $? -eq 0 ]]; then
echo "Success!"
else
echo "Unable to create directory, exiting!"
exit 1
fi
fi
}
capture() {
# Capture an image for the timelapse and save it to /tmp/TL-YYYY-MM-DD_HH-MM.jpg
fswebcam -r 1920x1080 -d /dev/video0 /tmp/TL/to-sync/TL-${date}.jpg -F 1 -S 5
}
sync() {
local src="$TO_SYNC_DIR/"
# Sync TL images from Pi to NAS
rsync -avz
}

3
timelapse/tl-clean Normal file
View File

@ -0,0 +1,3 @@
#!/bin/bash
SYNCED_DIR="/tmp/TL/synced"
rm "$SYNCED_DIR/".*

135
timelapse/tl-control Normal file
View File

@ -0,0 +1,135 @@
#!/bin/bash
# Interactive front end for timelapse on Pi via webcam
# Configuration Variables
# Cron
CRON_DIR="/etc/cron.d"
CRON_FILE="$CRON_DIR/timelapse"
CRON_FREQUENCY="*/15 * * * *" # Every 15 minutes
CRON_LOG_PATH="/var/log/${FILE_LIST[0]}.log"
CRON_JOB="$CRON_FREQUENCY root $INSTALL_DIR/${FILE_LIST[0]} >> $CRON_LOG_PATH 2>&1"
# Paths
SYNC_SRC_PATH="/tmp/TL/to-sync"
SYNC_DES_PATH="/media/mnt/TL/to-process"
# 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() {
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_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 $SYNC_SRC_PATH to $SYNC_DES_PATH..."
rsync -av --progress --remove-source-files "$SYNC_SRC_PATH" "$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