Re: Lettura S0 - script python
Inviato: 28/04/2020, 13:41
Ho trovato, avevo messo il PIN_GPIO = 10, ma il suo BCM è 15, ora lo script mi restituisce i dati.
Il Forum NON UFFICIALE per raccogliere le novità riguardo ai software 123Solar e MeterN per il monitoraggio energetico e non solo ....
https://www.flanesi.it:443/forum/
Codice: Seleziona tutto
#!/usr/bin/python
# pin gpio utilizzato per leggere gli impulsi
pin_gpio = 15
# n. di meter utilizzato in MeterN
metern_id = 18
# fattore di conversione del contatore (unita di misura)
conv = 1
#unita di misura
um = 'l'
#file metern
filemetern = '/dev/shm/metern'+str(metern_id)+'.txt'
#percorso cartella csv di metern
cartellacsv='/var/www/metern/data/csv'
#nome della colonna del csv da recuperare
nomecolonna='Acqua(l)'
#numero di secodi per ignorare le letture
secondi = 3
counter = 0
#cerco il file metern per recuperare l ultimo valore
try:
#trovato il file metern
f = open(filemetern)
print('File '+filemetern+' trovato')
fold = open(filemetern,'r')
dato = fold.read()
c1 = dato.find('(') + 1
c2 = dato.find('*')
counter = int(dato[c1:c2])
print('Ultimo valore del file '+filemetern+': '+str(counter))
f.close()
except IOError:
#non trovato il file di metern, cerco l'ultimo valore nel csv
print('File '+filemetern+' non trovato')
import glob
import os
list_of_files = glob.glob(cartellacsv+'/*.csv')
latest_file = max(list_of_files, key=os.path.getctime)
import csv
with open(latest_file, mode='r') as csv_file:
csv_reader = csv.DictReader(csv_file)
for riga in csv_reader:
counter = int(riga[nomecolonna])
print('Trovato file '+latest_file+' con ultimo valore della colonna '+nomecolonna+ ' = '+str(counter))
documento = open(filemetern, "w")
print('Creato il file '+filemetern)
documento.write(str(metern_id)+'('+str(counter)+'*'+um+')')
print('Inserisco il valore: '+str(metern_id)+'('+str(counter)+'*'+um+') nel file '+filemetern)
documento.close()
#finally:
print('')
import time
import RPi.GPIO as GPIO
import datetime
from datetime import timedelta
now = datetime.datetime.now()
GPIO.setmode(GPIO.BCM)
GPIO.setup(pin_gpio, GPIO.IN, pull_up_down = GPIO.PUD_DOWN)
"""
counter = 0
fold = open('/run/shm/metern18.txt','r')
dato = fold.read()
c1 = dato.find('(') + 1
c2 = dato.find('*')
counter = int(dato[c1:c2])
"""
precedente = datetime.datetime.now() #test
print 'Inizio: ' + str(precedente) #test
print str(now) + ' - Avvio script s0 - conteggio iniziale: ' + str(counter)
while True:
GPIO.wait_for_edge(pin_gpio, GPIO.RISING)
attuale = datetime.datetime.now() #test
# print 'precedente: ' + str(precedente) #test
# print 'attuale: ' + str(attuale) #test
# print attuale - timedelta(seconds=2)
if (attuale - timedelta(seconds=secondi)) > precedente :
counter += 1
now = datetime.datetime.now()
if (attuale - timedelta(seconds=secondi)) > precedente :
print str(now) + ' - ' + str(metern_id) + '(' + str(counter*conv) + '*' + str(um) +')'
else:
print str(now)
precedente = attuale
volume = str(metern_id) + '(' + str(counter*conv) + '*' + um + ')\n'
fp = open(filemetern,'w')
fp.write(volume)
fp.close()
GPIO.wait_for_edge(pin_gpio, GPIO.FALLING)
GPIO.cleanup()
Codice: Seleziona tutto
script_da_avviare > /dev/null 2>/dev/null &
Codice: Seleziona tutto
> /dev/null 2>/dev/null &