#!/bin/bash # Configuration CONFIG_DIR="/home/timelapse/Documents/Time_Lapse/CONFIG" LOG_FILE="/home/timelapse/Documents/Time_Lapse/timelapse.log" BASE_DIR="/home/timelapse/Documents/Time_Lapse" MAX_RETRIES=5 RETRY_DELAY=10 LOCK_FILE="/var/lock/timelapse.lock" # Fonction de journalisation log() { echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" | tee -a "$LOG_FILE" } # Vérifier si une autre instance est en cours d'exécution if [ -f "$LOCK_FILE" ]; then PID=$(cat "$LOCK_FILE") if ps -p $PID > /dev/null; then log "Une autre instance est déjà en cours d'exécution (PID: $PID). Arrêt." exit 1 else log "Fichier de verrouillage obsolète trouvé. Suppression." rm -f "$LOCK_FILE" fi fi # Créer le fichier de verrouillage echo $$ > "$LOCK_FILE" # Fonction de nettoyage à la sortie cleanup() { log "Nettoyage avant sortie" rm -f "$LOCK_FILE" exit $1 } # Interception des signaux pour le nettoyage trap 'cleanup 1' INT TERM log "===============================================================" log "Démarrage du système timelapse (mode headless)" # Configuration des variables d'environnement pour mode headless export LIBCAMERA_LOG_LEVELS=3 export DISPLAY=:0 # Fonction pour se connecter au WiFi avec plusieurs tentatives connect_wifi() { local ssid="Redmi Note 12 Pro" local password="kingcard" local retries=0 log "Vérification de l'interface WiFi..." if ! ip link show | grep -q wlan0; then log "Interface WiFi non trouvée ou désactivée" # Essayer d'activer l'interface si elle existe if ip link show wlan0 &>/dev/null; then log "Tentative d'activation de wlan0" ip link set wlan0 up sleep 2 fi fi while [ $retries -lt $MAX_RETRIES ]; do log "Tentative de connexion WiFi ($((retries+1))/$MAX_RETRIES)" # Essayer d'abord avec nmcli si disponible if command -v nmcli >/dev/null 2>&1; then nmcli dev wifi connect "$ssid" password "$password" # Sinon essayer avec wpa_supplicant elif command -v wpa_cli >/dev/null 2>&1; then # Créer un fichier de configuration wpa_supplicant wpa_conf="/tmp/wpa_supplicant.conf" echo "network={" > $wpa_conf echo " ssid=\"$ssid\"" >> $wpa_conf echo " psk=\"$password\"" >> $wpa_conf echo "}" >> $wpa_conf # Utiliser wpa_supplicant pour se connecter wpa_supplicant -i wlan0 -c $wpa_conf -B sleep 2 dhclient wlan0 rm -f $wpa_conf fi if check_internet; then log "Connexion WiFi établie" return 0 fi retries=$((retries+1)) sleep $RETRY_DELAY done log "Échec de connexion WiFi après $MAX_RETRIES tentatives" return 1 } # Fonction pour vérifier la connexion internet check_internet() { ping -c 1 8.8.8.8 > /dev/null 2>&1 return $? } # Vérifier si la caméra est accessible check_camera() { if libcamera-still --list-cameras &>/dev/null; then log "Caméra détectée et accessible" return 0 else log "ERREUR: Caméra non détectée ou non accessible" return 1 fi } # S'assurer que le répertoire de configuration existe mkdir -p "$CONFIG_DIR" # Principal flux d'exécution connect_wifi # Vérifier si les chemins Python sont corrects export PYTHONPATH="$BASE_DIR:$PYTHONPATH" # Vérifier que la caméra est accessible check_camera if check_internet; then log "Connecté à internet" # Vérifier si des données locales doivent être envoyées log "Envoi des données stockées localement" python3 "$BASE_DIR/sync_offline_data.py" # Exécuter en mode connecté log "Exécution du script en mode connecté" python3 "$BASE_DIR/timelapse_online.py" else log "Pas connecté à internet" log "Exécution du script en mode hors-ligne" python3 "$BASE_DIR/timelapse_offline.py" fi # Exécuter le script d'automatisation dans tous les cas log "Exécution du script d'automatisation" python3 "$BASE_DIR/Automate.py" log "Script terminé" cleanup 0