Files
timelapse-raspi/sync_offline_data.py

74 lines
2.5 KiB
Python

#!/usr/bin/env python3
# coding: utf-8
"""
Script pour la synchronisation des données stockées en mode hors ligne.
Remplace l'ancien Send_data_stocked.py
"""
import os
import sys
import logging
import time
from timelapse.config import config
from timelapse.capture import timelapse_manager
from timelapse.api_client import api_client
def main():
"""
Fonction principale pour la synchronisation des données hors ligne.
"""
logging.info("-------------------------------------------------------------------")
logging.info("Démarrage de la synchronisation des données hors ligne")
try:
# Vérifier la connexion au serveur
camera_status = api_client.get_camera_status()
if camera_status is None:
logging.error("Impossible de se connecter au serveur. Synchronisation reportée.")
sys.exit(1)
# Vérifier si le système est en maintenance
if camera_status.get("maintenance", False):
logging.info("Caméra en mode maintenance, aucune synchronisation effectuée")
sys.exit(0)
# Synchroniser les captures hors ligne
start_time = time.time()
sync_count = timelapse_manager.sync_offline_captures()
duration = time.time() - start_time
if sync_count > 0:
logging.info(f"Synchronisation réussie de {sync_count} captures en {duration:.2f} secondes")
# Vérifier s'il reste des images à synchroniser
remaining_offline = timelapse_manager.count_offline_captures()
if remaining_offline > 0:
logging.info(f"Il reste encore {remaining_offline} captures à synchroniser")
else:
logging.info("Toutes les captures hors ligne ont été synchronisées")
else:
logging.info("Aucune capture à synchroniser")
# Vérifier si un arrêt est demandé
if camera_status.get("stop_flag", False):
logging.info("Demande d'arrêt détectée, confirmation au serveur")
api_client.confirm_stop()
# Réinitialiser l'état actif
config.update_config({
"config_active": False,
"nb_images_restantes": 0,
"stop_current_config": True
})
except Exception as e:
logging.error(f"Erreur lors de la synchronisation des données: {e}")
sys.exit(1)
logging.info("Synchronisation terminée")
if __name__ == "__main__":
main()