Files
timelapse-raspi/script.sh

151 lines
4.2 KiB
Bash
Executable File

#!/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