Init v1.0
This commit is contained in:
Executable
+117
@@ -0,0 +1,117 @@
|
||||
#!/usr/bin/python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Pour lire le .ini
|
||||
import configparser
|
||||
import json
|
||||
import subprocess
|
||||
# Pour faire des sleep
|
||||
import time
|
||||
# Pour la date
|
||||
from datetime import datetime
|
||||
# Pour le debug
|
||||
import pprint
|
||||
import csv
|
||||
import os.path
|
||||
import random
|
||||
|
||||
# ~ import RPi.GPIO as GPIO
|
||||
# ~ GPIO.setmode(GPIO.BCM)
|
||||
# ~ gpio_number = 25
|
||||
# ~ GPIO.setup(gpio_number, GPIO.OUT)
|
||||
# ~ print("GPIO no " + str(gpio_number) + ": " + str(GPIO.input(gpio_number)))
|
||||
|
||||
# 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
|
||||
|
||||
csvfile=config.get('general', 'csv_dir').strip('"') + '/' + time.strftime ('%Y-%m-%d_%H-%M') + '.csv'
|
||||
if (os.path.exists(csvfile)) :
|
||||
csvfile=config.get('general', 'csv_dir').strip('"') + '/' + time.strftime ('%Y-%m-%d_%H-%M') + str(random.randint(1, 100)) + '.csv'
|
||||
|
||||
print('#############################################################################')
|
||||
print('######## Banc AFPMA ECS / Aquisition des mesures')
|
||||
print('#############################################################################')
|
||||
print()
|
||||
print('La configuration (config.ini) détermine : ')
|
||||
print(' * que le fichier csv de relevé est : ',csvfile)
|
||||
print(' * que l\'interval entre 2 mesures sera de ', int(config.get('general', 'delai')), 'secondes')
|
||||
print()
|
||||
|
||||
# Init colonne CSV
|
||||
with open(csvfile, 'w', newline='') as fichier:
|
||||
# on déclare un objet writer
|
||||
ecrivain = csv.writer(fichier)
|
||||
# écrire une ligne dans le fichier:
|
||||
ecrivain.writerow(['T', 'DATE', 'ENERGY_WH', 'VOLUME_FLOW', 'POWER_W', 'FLOW_TEMPERATURE', 'RETURN_TEMPERATURE'])
|
||||
|
||||
fin = False
|
||||
now = datetime.now()
|
||||
chronoDepart=datetime.timestamp(now)
|
||||
prochainReleve=chronoDepart
|
||||
|
||||
while fin == False:
|
||||
now = datetime.now()
|
||||
nowTimestamp=datetime.timestamp(now)
|
||||
if (nowTimestamp >= prochainReleve):
|
||||
print("Relevé " + str(now))
|
||||
prochainReleve=nowTimestamp+float(config.get('general', 'delai'))
|
||||
|
||||
dt_string = now.strftime("%d/%m/%Y %H:%M:%S")
|
||||
temps_sec=round(datetime.timestamp(now)-chronoDepart, 0)
|
||||
data = [temps_sec, dt_string]
|
||||
print('T='+str(temps_sec), end=" ")
|
||||
print('DATE='+str(dt_string), end=" ")
|
||||
## Récupérer les données :
|
||||
result = subprocess.Popen(["/usr/bin/python3", "/opt/banc/mbus-serial-request-data.py", "/dev/ttyAMA0"], stdout=subprocess.PIPE)
|
||||
result_request_data = result.communicate()[0]
|
||||
return_code = result.returncode
|
||||
|
||||
try:
|
||||
#convert string to object
|
||||
request_data_object = json.loads(result_request_data)
|
||||
except ValueError:
|
||||
return_code = 255
|
||||
|
||||
if (return_code == 0):
|
||||
## Parse des données
|
||||
for records in request_data_object['body']['records']:
|
||||
if (records['type'] == 'VIFUnit.ENERGY_WH'):
|
||||
try:
|
||||
if (records['device'] != None):
|
||||
# On ne récupère pas si le device est rensigné
|
||||
pass
|
||||
except KeyError as ke:
|
||||
print('ENERGY_WH='+str(round(records['value'], 2)), end=" ")
|
||||
data.append(round(records['value'], 2))
|
||||
elif (records['type'] == 'VIFUnit.VOLUME_FLOW'):
|
||||
print('VOLUME_FLOW='+str(round(records['value'], 2)), end=" ")
|
||||
data.append(round(records['value'], 2))
|
||||
elif (records['type'] == 'VIFUnit.POWER_W'):
|
||||
print('POWER_W='+str(round(records['value'], 2)), end=" ")
|
||||
data.append(round(records['value'], 2))
|
||||
elif (records['type'] == 'VIFUnit.FLOW_TEMPERATURE'):
|
||||
print('FLOW_TEMPERATURE='+str(round(records['value'], 2)), end=" ")
|
||||
data.append(round(records['value'], 2))
|
||||
elif (records['type'] == 'VIFUnit.RETURN_TEMPERATURE'):
|
||||
print('RETURN_TEMPERATURE='+str(round(records['value'], 2)), end=" ")
|
||||
data.append(round(records['value'], 2))
|
||||
print("");
|
||||
else:
|
||||
print('Erreur : aucune communicatoin avec le compteur d\'énergie')
|
||||
data.append('Erreur')
|
||||
data.append('Erreur')
|
||||
data.append('Erreur')
|
||||
data.append('Erreur')
|
||||
data.append('Erreur')
|
||||
# ouverture en écriture (w, première lettre de write) d'un fichier
|
||||
with open(csvfile, 'a', newline='') as fichier:
|
||||
# on déclare un objet writer
|
||||
ecrivain = csv.writer(fichier)
|
||||
# écrire une ligne dans le fichier:
|
||||
ecrivain.writerow(data)
|
||||
print('... Fin de la mesure, on patiente', int(config.get('general', 'delai')), 's')
|
||||
print('... Pour quiter, appuyer sur CTRL + C')
|
||||
print("");
|
||||
time.sleep(float(config.get('general', 'sleep')))
|
||||
|
||||
Reference in New Issue
Block a user