initial commit
This commit is contained in:
Executable
+87
@@ -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
|
||||
Reference in New Issue
Block a user