#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Mesure de la hauteur de pluie en 5 minutes
# et cumul journalier à minuit

# Importer les bibliothèques utilisées par le script
import time
import os
from datetime import datetime as dt, date
from gpiozero import Button


# Connecte le pluviomètre au GPIO 6
pluviometre = Button(6)
# Hauteur de pluie par impulsion du pluviomètre
impulsion_pluie = 0.2794
# Initialise le compteur d'impulsions
compteur_pluie = 0
# Initialise l'intervalle de mesure 300s = 5 * 60s = 5mn
mesure = 300
# Liste pour l'enregistrement des hauteurs de pluie toutes les 5 minutes
cumul_jour_pluie = []
# Cumul journalier du jour précédent
cumul_veille = 0


# Fonction appelée à chaque impulsion du pluviomètre
# incrémente le compteur à chaque basculement de la cuve
def comptage_pluie():
    global compteur_pluie
    compteur_pluie = compteur_pluie + 1
    
# Fonction qui enregistre la hauteur de pluie dans la liste cumul_jour_pluie
def enregistre_pluie(pluie):
    global cumul_jour_pluie
    cumul_jour_pluie.append(pluie)    

# Fonction utilisée pour la remise à zéro du compteur d'impulsions du pluviomètre  
def reset_compteur_pluie():
    global compteur_pluie
    compteur_pluie = 0
    
# Fonction de calcul de la hauteur de pluie en mm
def hauteur_pluie():
    return (compteur_pluie * impulsion_pluie )    

# Appeler la fonction de comptage à chaque impulsion du pluviomètre
pluviometre.when_pressed = comptage_pluie

# Boucle principale infinie du programme
while True:
    # Remettre compteur de hauteur de pluie à 0 toutes les 5 minutes
    reset_compteur_pluie()
   
    # Enregistrer l'heure de début de l'intervalle de 5mn
    heure_debut = time.time()
    # Début de la temporisation de 5mn => temps pendant lequel on enregistre la pluie
    while time.time() - heure_debut <= mesure:
        # Lire l'heure
        heure = dt.now()
        # Remise à zéro de la liste à Minuit
        # La condition sera vraie durant la première minute de la journée
        # Cette partie du script se déclenchera à minuit
        if heure.hour == 0 and heure.minute == 0 and heure.second > 0:
            # Si la liste n'est pas vide faire le cumul et remettre la liste à zéro
            if len(cumul_jour_pluie) > 2:
                # Calculer le cumul et remettre la liste à zéro
                cumul_veille = sum(cumul_jour_pluie)
                cumul_jour_pluie = []
                # Attendre que la seconde 0 soit terminée pour éviter de multiples exécutions du if
                time.sleep (2)
        # Temporisation pour éviter de surcharger le CPU avec la boucle
        time.sleep(1)
    
    # Ajouter la valeur de hauteur de pluie mesurée pendant les 5 minutes à la liste
    enregistre_pluie(hauteur_pluie())
    
    # Affichage des valeurs pour vérification
    # Cette partie pourra être supprimée ou mise en commentaire par la suite
    print("Heure ", heure.hour, heure.minute, heure.second)
    print("Pluie enregistrée :")
    print("Nombre de valeurs enregistrées dans la liste", len(cumul_jour_pluie))
    print (f'Hauteur de pluie des 5 minutes : {hauteur_pluie():.2f} mm')
    print ("Contenu de la liste", cumul_jour_pluie)
    print ("Cumul de la veille", cumul_veille)
    print("===============================================")    
    

   
     
