116 lines
2.6 KiB
Bash
Executable File
116 lines
2.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# run_all_timelapses.sh
|
|
#
|
|
# Run timelapse creation for a fixed set of webcams,
|
|
# collect public URLs, update HTML index, and send one combined ntfy notification.
|
|
#
|
|
# Requirements: make_timelapse.sh in same folder or PATH
|
|
|
|
set -euo pipefail
|
|
|
|
# --- Settings ---
|
|
BASE_DIR="/media/photos/misc/webcams"
|
|
INDEX_FILE="$BASE_DIR/timelapses.html"
|
|
WEBCAMS=(
|
|
"frontyard"
|
|
"basement_table"
|
|
"mailbox"
|
|
"basement_extension"
|
|
"backyard_low"
|
|
"backyard_north"
|
|
"basement_cape"
|
|
"basement_tv"
|
|
"backyard"
|
|
"bulkhead"
|
|
"barn"
|
|
"garage"
|
|
"birds"
|
|
"clouds"
|
|
"garden"
|
|
"diningroom"
|
|
)
|
|
TIMELAPSE_SCRIPT="/usr/local/bin/make_timelapse"
|
|
|
|
NTFY_URL="https://ntfy.unbl.ink/timelapse"
|
|
WEB_PREFIX="https://files.lab.unbl.ink/webcams"
|
|
# ----------------
|
|
|
|
# Yesterday's date
|
|
if date -d "yesterday" +%Y >/dev/null 2>&1; then
|
|
# GNU date (Linux)
|
|
YESTERDAY=$(date -d "yesterday" +"%Y/%m/%d")
|
|
else
|
|
# BSD date (macOS)
|
|
YESTERDAY=$(date -v-1d +"%Y/%m/%d")
|
|
fi
|
|
|
|
LINKS=()
|
|
|
|
for cam in "${WEBCAMS[@]}"; do
|
|
TARGET_DIR="$BASE_DIR/$cam/$YESTERDAY"
|
|
|
|
if [[ -d "$TARGET_DIR" ]]; then
|
|
echo "📷 Processing $cam ($TARGET_DIR)"
|
|
OUTPUT=$("$TIMELAPSE_SCRIPT" "$TARGET_DIR")
|
|
echo "$OUTPUT"
|
|
|
|
LINK="$WEB_PREFIX/$cam/$YESTERDAY/timelapse.mp4"
|
|
if [[ -f "$TARGET_DIR/timelapse.mp4" ]]; then
|
|
LINKS+=("[$cam] $LINK")
|
|
fi
|
|
else
|
|
echo "⚠️ Skipping $cam (no folder for $YESTERDAY)"
|
|
fi
|
|
done
|
|
|
|
# --- Update index.html ---
|
|
INDEX_HTML="$BASE_DIR/timelapses.html"
|
|
|
|
# Ensure file exists with basic structure
|
|
if [[ ! -f "$INDEX_HTML" ]]; then
|
|
cat > "$INDEX_HTML" <<EOF
|
|
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<title>Webcam Timelapses</title>
|
|
</head>
|
|
<body>
|
|
<h1>Webcam Timelapses</h1>
|
|
<div id="days">
|
|
</div>
|
|
</body>
|
|
</html>
|
|
EOF
|
|
fi
|
|
|
|
# Build new day's section
|
|
NEW_SECTION="<h2>$YESTERDAY</h2><ul>"
|
|
for link in "${LINKS[@]}"; do
|
|
cam=$(echo "$link" | cut -d']' -f1 | tr -d '[]')
|
|
url=$(echo "$link" | awk '{print $2}')
|
|
NEW_SECTION+="<li><a href=\"$url\">$cam</a></li>"
|
|
done
|
|
NEW_SECTION+="</ul>"
|
|
|
|
# Insert at the top of <div id="days">
|
|
tmpfile=$(mktemp)
|
|
awk -v section="$NEW_SECTION" '
|
|
/<div id="days">/ { print; print section; next }
|
|
{ print }
|
|
' "$INDEX_HTML" > "$tmpfile"
|
|
mv "$tmpfile" "$INDEX_HTML"
|
|
|
|
echo "📝 Updated index with $YESTERDAY timelapses (newest on top)"
|
|
|
|
# --- Send combined notification ---
|
|
if [[ -n "$NTFY_URL" ]] && [[ ${#LINKS[@]} -gt 0 ]]; then
|
|
MSG="Timelapses for $YESTERDAY:\n$(printf '%s\n' "${LINKS[@]}")"
|
|
curl -s -H "Title: Timelapses complete" \
|
|
-H "Priority: high" \
|
|
-d "$MSG" \
|
|
"$NTFY_URL" >/dev/null || true
|
|
echo "📢 Combined notification sent to ntfy."
|
|
fi
|
|
|