Améliorer la gestion des configurations et des captures dans les scripts de timelapse
This commit is contained in:
97
Automate.py
97
Automate.py
@@ -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}")
|
||||
|
||||
Reference in New Issue
Block a user