Lettura S0 - script python
Re: Lettura S0 - script python
Ho trovato, avevo messo il PIN_GPIO = 10, ma il suo BCM è 15, ora lo script mi restituisce i dati.
Re: Lettura S0 - script python
Ho notato che spesso mi fa più letture, non ho messo nessun resistenza, con il contatto chiudo il +5v e in GPIO
avete di suggerimenti?
ho provato anche metterci un relè ma a volte mi fa la lettura anche sullo spegnimento
grazie
avete di suggerimenti?
ho provato anche metterci un relè ma a volte mi fa la lettura anche sullo spegnimento
grazie
Re: Lettura S0 - script python
Ho modificato lo script (il mio è per l'acqua) in modo che:
verifica se esiste il file letto da metern:
se esiste legge l'ultimo valore all'avvio (come nel precedente script)
se non esiste lo crea e lo valorizza con l'ultimo valore del csv
inoltre ignoro le letture per 3 secondi
All'inizio ci sono tutti i parametri e ho cercato di mettere un bel po di commenti e log
verifica se esiste il file letto da metern:
se esiste legge l'ultimo valore all'avvio (come nel precedente script)
se non esiste lo crea e lo valorizza con l'ultimo valore del csv
inoltre ignoro le letture per 3 secondi
All'inizio ci sono tutti i parametri e ho cercato di mettere un bel po di commenti e log
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()
Ultima modifica di rinoronie il 30/04/2020, 22:36, modificato 3 volte in totale.
Re: Lettura S0 - script python
Non capisco il motivo, ma a volte mi ritrovo lo script non più in esecuzione, lo ho avviato con /percorso/nomescript.py &
potrebbe essere perché ho dei print? in quel caso dove finiscono?
grazie
potrebbe essere perché ho dei print? in quel caso dove finiscono?
grazie
Re: Lettura S0 - script python
Prova ad avviarlo al comando:
dove con la parte
blocchi l'uscita di eventuali output diretti altrimenti allo standard output
Codice: Seleziona tutto
script_da_avviare > /dev/null 2>/dev/null &
dove con la parte
Codice: Seleziona tutto
> /dev/null 2>/dev/null &
blocchi l'uscita di eventuali output diretti altrimenti allo standard output
Re: Lettura S0 - script python
Si chiude comunque, ora lo tengo aperto da SHELL su un pc e verifico se si chiude magari con qualche errore...
EDIT:
dopo 9 ore è li ancora che gira... e nessun errore...
EDIT2:
avevo dimenticato un "int" quando recuperavo il valore dal csv, e leggeva la variabile counter come testo, poi al primo incremento andava in errore.
Ho aggiornato lo script al post precedente
EDIT:
dopo 9 ore è li ancora che gira... e nessun errore...
EDIT2:
avevo dimenticato un "int" quando recuperavo il valore dal csv, e leggeva la variabile counter come testo, poi al primo incremento andava in errore.
Ho aggiornato lo script al post precedente
Torna a “Contatori ad impulsi”
Chi c’è in linea
Visitano il forum: Nessuno e 3 ospiti