Plateforme Agir Low-Tech

Commit a558f48c authored by davidmercereau's avatar davidmercereau
Browse files

C'est ok pour l'enregistrement CSV + lecture DS18B20

parent 42d92d93
releves/*
......@@ -31,7 +31,19 @@ pip3 install ds18b20 ConfigParser
FIXME
### Lier les sondes
### Lier les sondes
#### ds18b20
Commencer par déterminer les ID des sondes et notez les avec un scotch ou autre sur le câble de la sonde.
Brancher vos sondes une par une et lancer le script ds18b20-list.sh puis récupérer l'ID de la sonde et notez celui-ci sur le
Ouvrir le fichier config.ini
FIXME
### Lancement
......
#!/usr/bin/python
# -*- coding: utf-8 -*-
# Pour lire le .ini
import configparser
# Pour lire les sondes ds18b20
# https://github.com/rgbkrk/ds18b20
from ds18b20 import DS18B20
# Pour faire des sleep
import time
# Pour la date
from datetime import datetime
# Pour le debug
import pprint
# On charge le config.ini
config = configparser.RawConfigParser() # On créé un nouvel objet "config"
config.read('config.ini') # On lit le fichier de paramètres
pprint.pprint(config.get('t1', 'type'))
csvfile=config.get('general', 'csv_dir').strip('"') + '/' + time.strftime ('%Y-%m-%d_%H-%M')
print('#############################################################################')
print('######## Banc de test / Aquisition des mesures')
print('#############################################################################')
print()
print('La configuration (config.ini) détermine : ')
print(' * que le fichier csv de relevé est : ',csvfile)
print(' * qu\'il y aura ', config.get('general', 'nb_mesure'), ' messures')
print(' * que l\'interval entre 2 mesures sera de ', int(config.get('general', 'delai')), 'minutes')
print('Le script d\'aquisition est donc partie pour tourner ', int(config.get('general', 'delai'))*int(config.get('general', 'nb_mesure'))/60, 'heures')
print()
# Préparation : Reset CSV
fullCsv='"temps_min"\n'
fullCsv+='"temps_sec"\n'
fin=False
ti=0
while fin == False:
# Formatage du nom de section
section='t' + str(ti)
# Test si la section est présente
if (config.has_section(section) == True):
# Si un jolie nom est défini, on le récupère
if (config.has_option(section, 'nice_name')) :
section_nice_name=config.get(section, 'nice_name').strip('"')
else:
section_nice_name=section
fullCsv+='"'+section_nice_name+'"\n'
# Sinon on arrête là
else:
fin=True
# on incrémente pour la boucle
ti=ti+1
# Ecriture du CSV
with open(csvfile, 'w') as f:
f.write(fullCsv)
# Départ du chrono
now = datetime.now()
chronoDepart=datetime.timestamp(now)
# On boucle sur le nombre de mesure
for mesure_nb in range(int(config.get('general', 'nb_mesure'))):
print("Messure N°", mesure_nb)
fin=False
ti=0
listReleves = []
now = datetime.now()
temps_sec=datetime.timestamp(now)-chronoDepart
while fin == False:
# Formatage du nom de section
section='t' + str(ti)
# Reset
temperature = False
# Test si la section est présente
if (config.has_section(section) == True):
# Si un jolie nom est défini, on le récupère
if (config.has_option(section, 'nice_name')) :
section_nice_name=config.get(section, 'nice_name')
else:
section_nice_name=section
# Récupération de la température selon le type de sonde
if (config.get(section, 'type') == 'ds18b20') :
try:
sensor = DS18B20(config.get(section, 'id'))
temperature = sensor.get_temperature()
except NameError:
print('Erreur [',section,'] : L\'identifiant de la sonde ne semble pas être retrouvé dans le système')
else:
print('Erreur : type inconnu de sonde inconnu')
print(section_nice_name,'=',temperature)
listReleves.append(temperature)
# Sinon on arrête là
else:
fin=True
# on incrémente pour la boucle
ti=ti+1
# Ecriture du CSV
FullCsv=''
i=0
ligne_nb=0
with open(csvfile, "r") as f:
for line in f.readlines():
# Traiter la ligne et on ajoute ce qu'il faut
# temps_min
if (ligne_nb == 0):
FullCsv+=line.strip()+","+str(round(temps_sec*60))+"\n"
# temps_sec
elif (ligne_nb == 1):
FullCsv+=line.strip()+","+str(round(temps_sec))+"\n"
# Valeur Tx
elif (ligne_nb > 1):
FullCsv+=line.strip()+","+str(listReleves[i])+"\n"
i=i+1
ligne_nb=ligne_nb+1
with open(csvfile, 'w') as f:
f.write(FullCsv)
print('Fin de la mesure, on patiente', int(config.get('general', 'delai'))*60, 's')
print('-')
time.sleep(int(config.get('general', 'delai'))*60)
pprint.pprint(config.get('general', 'delai'))
pprint.pprint(config.has_section('t4'))
sensor = DS18B20("011921191050")
......
# Correspondance des points de températures avec les sondes
[general]
csv_dir="releves"
# Temps entre 2 mesures (en minute)
delai=1
# Nombre de messure
nb_mesure=30
# Note : la durée du test est donc = delai * nb_mesure
##################################################################
##### Correspondance des points de températures avec les sondes
##################################################################
#~ Exemple pour une sonde ds18b20 :
#~
#~ [t1]
#~ type=ds18b20
#~ id=011921191050
[t0]
type=ds18b20
id=011921191050
nice_name="tparoi"
[t1]
type=ds18b20
id=011921191050
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment