123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- #!/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"
- "porch"
- "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/index.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
|