initial commit

This commit is contained in:
root
2026-06-28 14:27:20 -04:00
commit ae0f1f559e
115 changed files with 30411 additions and 0 deletions
+87
View File
@@ -0,0 +1,87 @@
#!/bin/bash
# Start / stop the Litter Box Camera Analyzer service.
# This script manages the Python analyzer as a background process.
#
# Usage:
# ./litter_box_analyzer.sh start
# ./litter_box_analyzer.sh stop
# ./litter_box_analyzer.sh status
#
# Configuration (edit or set env vars):
# MQTT_BROKER - MQTT broker hostname/IP (default: localhost)
# MQTT_PORT - MQTT port (default: 1883)
# MQTT_USERNAME - MQTT username (default: none)
# MQTT_PASSWORD - MQTT password (default: none)
# DEBUG_DIR - Save annotated debug images (default: none)
set -e
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
ANALYZER="${SCRIPT_DIR}/litter_box_analyzer.py"
PIDFILE="${SCRIPT_DIR}/.litter_box_analyzer.pid"
LOGFILE="${SCRIPT_DIR}/litter_box_analyzer.log"
MQTT_BROKER="${MQTT_BROKER:-localhost}"
MQTT_PORT="${MQTT_PORT:-1883}"
MOTION_THRESHOLD="${MOTION_THRESHOLD:-15}"
BOX_STATE_THRESHOLD="${BOX_STATE_THRESHOLD:-30}"
STUCK_FRAMES="${STUCK_FRAMES:-10}"
CALIBRATION_FRAMES="${CALIBRATION_FRAMES:-10}"
start() {
if [ -f "$PIDFILE" ] && kill -0 "$(cat "$PIDFILE")" 2>/dev/null; then
echo "Analyzer is already running (PID $(cat "$PIDFILE"))"
return 1
fi
local extra_args=()
[ -n "${DEBUG_DIR:-}" ] && extra_args+=(--debug-dir "$DEBUG_DIR")
echo "Starting Litter Box Analyzer..."
python3 "$ANALYZER" \
--broker "$MQTT_BROKER" \
--port "$MQTT_PORT" \
--motion-threshold "$MOTION_THRESHOLD" \
--box-state-threshold "$BOX_STATE_THRESHOLD" \
--stuck-frames "$STUCK_FRAMES" \
--calibration-frames "$CALIBRATION_FRAMES" \
"${extra_args[@]}" \
>> "$LOGFILE" 2>&1 &
echo $! > "$PIDFILE"
echo "Started (PID $!). Log: $LOGFILE"
}
stop() {
if [ ! -f "$PIDFILE" ]; then
echo "No PID file found. Analyzer may not be running."
return 1
fi
PID=$(cat "$PIDFILE")
if kill "$PID" 2>/dev/null; then
echo "Stopped analyzer (PID $PID)"
rm -f "$PIDFILE"
else
echo "Process $PID not found. Removing stale PID file."
rm -f "$PIDFILE"
fi
}
status() {
if [ -f "$PIDFILE" ] && kill -0 "$(cat "$PIDFILE")" 2>/dev/null; then
echo "Analyzer is running (PID $(cat "$PIDFILE"))"
else
echo "Analyzer is NOT running"
[ -f "$PIDFILE" ] && echo "(stale PID file exists)" && rm -f "$PIDFILE"
fi
}
case "${1:-}" in
start) start ;;
stop) stop ;;
restart) stop; sleep 1; start ;;
status) status ;;
*)
echo "Usage: $0 {start|stop|restart|status}"
exit 1
;;
esac