Améliorer la gestion des configurations et des captures dans les scripts de timelapse

This commit is contained in:
2025-04-27 17:06:55 +02:00
parent 610d220c3f
commit 2013c2cf41
6 changed files with 230 additions and 45 deletions

View File

@@ -26,43 +26,90 @@ def main():
# Récupérer le statut de la caméra depuis l'API
camera_status = api_client.get_camera_status()
if camera_status is None:
logging.error("Impossible d'obtenir le statut de la caméra depuis l'API")
return
# Mettre à jour la configuration locale
api_client.update_camera_config(camera_status)
# Vérifier si la configuration actuelle est déjà active et non terminée
is_active_config = config.get("config_active", False)
images_remaining = config.get("nb_images_restantes", 0)
# Vérifier l'état de maintenance
if camera_status is None:
logging.warning("Impossible d'obtenir le statut de la caméra depuis l'API")
if is_active_config and images_remaining > 0:
logging.info("Utilisation de la configuration locale existante")
return
logging.info("Aucune configuration active et impossibilité de récupérer le statut")
return
# Vérifier l'état de maintenance en priorité
if camera_status.get("maintenance", False):
logging.info("Caméra en mode maintenance, aucune action nécessaire")
# Mettre à jour la configuration pour refléter le mode maintenance
config.update_config({"maintenance": True, "config_active": False})
return
# Vérifier si un arrêt de la procédure est demandé
if camera_status.get("stop_flag", False):
logging.info("Arrêt de la procédure en cours...")
# Supprimer le fichier de configuration s'il existe
config.delete_config_file()
# Réinitialiser les configurations actives
config.update_config({
"config_active": False,
"nb_images_restantes": 0,
"stop_current_config": True
})
# Confirmer l'arrêt au serveur
confirmed = api_client.confirm_stop()
if confirmed:
logging.info("Arrêt confirmé au serveur")
else:
logging.warning("Échec de la confirmation d'arrêt au serveur")
# Configuration d'un redémarrage régulier pour vérifier les nouvelles configurations
config.set("restart_interval", 120) # 2 minutes
# Confirmer l'arrêt
api_client.confirm_stop()
return
# Vérifier s'il y a une configuration à appliquer
if not camera_status.get("idle", True):
logging.info("Configuration active détectée")
# Obtenir les paramètres
interval = camera_status.get("interval", 3)
# Envoyer l'intervalle au microcontrôleur
logging.info(f"Envoi de l'intervalle au microcontrôleur: {interval}s")
micro_controller.send_interval(interval)
# Éteindre le système après configuration
logging.info("Configuration terminée, arrêt du système")
subprocess.run(["sudo", "shutdown", "now"])
# Vérifier si le système est en IDLE et si une configuration est déjà active
is_idle = camera_status.get("idle", True)
if is_idle:
logging.info("Système en mode IDLE")
if is_active_config:
# Si le nombre d'images est atteint, désactiver la configuration
if images_remaining <= 0:
logging.info("Configuration terminée: nombre d'images atteint")
config.update_config({"config_active": False})
else:
logging.info(f"Configuration active: il reste {images_remaining} images à capturer")
else:
logging.info("Aucune configuration active, attente en mode IDLE")
# Configuration d'un redémarrage régulier pour vérifier les nouvelles configurations
config.set("restart_interval", 120) # 2 minutes
return
# Si on arrive ici, il y a une nouvelle configuration à appliquer
logging.info("Nouvelle configuration active détectée")
# Mettre à jour la configuration locale
config_update = {
"config_active": True,
"maintenance": False,
"timelapse": camera_status.get("interval", 3),
"conf_nb_images": camera_status.get("nb_images", 1),
"nb_images_restantes": camera_status.get("nb_images", 1),
"stop_current_config": False,
"idle": is_idle
}
config.update_config(config_update)
# Envoyer l'intervalle au microcontrôleur
interval = camera_status.get("interval", 3)
logging.info(f"Envoi de l'intervalle au microcontrôleur: {interval}s")
micro_controller.send_interval(interval)
# Éteindre le système après configuration (mais ne pas arrêter en prod)
# logging.info("Configuration terminée, arrêt du système")
# subprocess.run(["sudo", "shutdown", "now"])
except Exception as e:
logging.error(f"Erreur dans le script d'automatisation: {e}")