151 lines
4.2 KiB
Bash
Executable File
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 |