Bonjour à tous,

J'ai écris un code pour récupérer des températures chez moi via un raspberry pi. Le code fonctionne mais il rajoute toujours la même ligne de données entre deux lignes correctes. Elles sont au format : Date Heure Temp1 Temp2 temp3 et entre chaque ligne le code rajoute une ligne avec la bonne date, les bonnes températures mais toujours la même heure. Sauriez-vous pourquoi ?
Je mets en pièce jointe le fichier de sortie.octobre2025.txt
Voila le code :

Merci d'avance pour votre aide !

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
 
import glob
import urllib.request
from lxml import etree
from urllib.error import URLError, HTTPError
import base64
import csv
import os
import time
from datetime import datetime
from pathlib import Path
 
 
 
 
sonde_chambre = '/28-00000c86ab42'
sonde_ecs = '/28-04168632a0ff'
sonde_salon = '/28-00000c376062'
 
base_dir = '/sys/bus/w1/devices'
sonde_chambre = base_dir + '/28-00000c86ab42/w1_slave'
sonde_salon = base_dir + '/28-00000c376062/w1_slave'
sonde_ecs = base_dir + '/28-04168632a0ff/w1_slave'
    #Definition de la date sous la forme "MoisAnnee" en français.
current_datetime = datetime.now()
current_month_year = current_datetime.strftime("%B%Y")
#print(current_date)
Mois=['janvier','février','mars','avril','mai','juin','juillet','aout','septembre','octobre','novembre','décembre']
mois = current_datetime.date().month
    #print(Mois[mois])
Q = Mois[mois-1]
    #print(Q)
current_month = Q + current_datetime.strftime("%Y")
#print(current_date)
 
 
#definition du repertoire de base qui change chaque mois et ou les donnees sont enregistrees
Record_dir = '/home/pi/Domotique/Donnees_Temperature/' + current_month
Record_file = Record_dir + f"/{current_month}.txt"
#print(Record_file)
#print(Record_dir)
def Ouverture_Lecture_Fichiers_Temp(sonde):
    #    while not os.path.exists("sonde"):
    #        time.sleep(10)    
    f_sonde = open(sonde, 'r')
    lines_sonde = f_sonde.readlines()
    return lines_sonde
    f_sonde.close()
 
def extraire_temperature (sonde):
    lines = Ouverture_Lecture_Fichiers_Temp(sonde)
    while lines == []:
        time.sleep(0.5)
        lines = Ouverture_Lecture_Fichiers_Temp(sonde)
    donnees_temperature = lines[1].split(" ")[9]
    Temp = float(donnees_temperature[2:]) / 1000
    return Temp
 
#print(Record_dir)
#print(Record_file)
file_exists = os.path.isfile(Record_file)
 
while True :
    Temp_Salon = extraire_temperature (sonde_salon)
    Temp_Chambre = extraire_temperature (sonde_chambre)
    Temp_ECS = extraire_temperature (sonde_ecs)
 
    print(Temp_Salon)
    print(Temp_Chambre)
    print(Temp_ECS)
    try:
 #       # Obtenir la date et l'heure actuelles
        current_datetime = datetime.now()
        current_date = current_datetime.strftime("%Y-%m-%d")
        current_time = current_datetime.strftime("%H:%M:%S")
        print(current_time)
#        Verification du dossier 
        if not os.path.exists(Record_dir):
             os.makedirs(Record_dir)
 
 
 
 
        root = {"Temp_Salon": Temp_Salon,"Temp_Chambre": Temp_Chambre,"Temp_ECS": Temp_ECS}
        data_to_write = {"Date": current_date, "Heure": current_time}
        print(data_to_write)
        data_to_write.update(root)
 
        # Verifier si le fichier existe pour ecrire l'en-tete ou non
        file_exists = os.path.isfile(Record_file)
        with open(Record_file, "a", newline="", encoding="utf-8") as f:
            writer = csv.DictWriter(f, fieldnames=data_to_write.keys())
 
            # ecrire l'en-tete si le fichier est nouveau
            if not file_exists:
                writer.writeheader()
 
            # ecrire les donnees
            writer.writerow(data_to_write)
 
    except HTTPError as e:
        print(f"Erreur HTTP : {e.code} {e.reason}")
 
    except URLError as e:
        print(f"Erreur d'URL : {e.reason}")
 
    except etree.XMLSyntaxError as e:
        print(f"Erreur de syntaxe XML : {e}")
 
    f.close()
    time.sleep(30)