Pagina 1 di 7

Lettura S0 - script python

Inviato: 27/04/2017, 22:38
da fuzero
Ciao Flane,
devo complimentarmi con te per l'ottimo lavoro che hai fatto con guide semplici e chiare che mi hanno fatto installare tutto con facilità.
Avendo a disposizione un contatore Lovato con uscita S0 lo ho installato e connesso con soddisfazione.
Ho apprezzato il software in java per il recupero dei dati ma non mi ha pienamente soddisfatto per cui ho cercato una soluzione alternativa.
Prendendo spunto dal pooler485 ho creato un piccolo script per leggere gli impulsi e scrivere in output dati in formato compatibile.
Lo allego per chi, come me cerca una soluzione alternativa e ti chiedo consigli su possibili miglioramenti.

Grazie e buon lavoro.

Note per l'installazione :
copiare il file countS0.py nella cartella comapps
rendere eseguibile il file

Codice: Seleziona tutto

chmod a+x countS0.py

creare il link simbolico

Codice: Seleziona tutto

ln -s /<percorso di comapps>/countS0.py /usr/bin/countS0.py


inserire in /etc/rc.local la seguente riga:

Codice: Seleziona tutto

/usr/bin/countS0.py &

Re: Lettura S0

Inviato: 28/04/2017, 19:09
da Flane
Scusa ma il tuo script ti restituisce sia il valore in live che main?

Tanto per completezza di info, che comandi usi nella configurazione del meter in meter?

Comunque ormai non usa più nessuno il sistema ad impulsi, in quanto con i contatori modbus della serie SDM della EASTRON si monitorano tutti i parametri energetici della rete elettrica (e non solo W e Wh) e non si sovraccarica il raspi di lavoro come faceva lo script in java.

Re: Lettura S0

Inviato: 29/04/2017, 19:09
da fuzero
Il mio script va a creare il file metern2.txt (sarebbe il sostituto di pooler485 per quelli ad impuso)
metern poi li legge con il poolerconsumi 2 energy e power (ho usato il poolerconsumi della ver.3,2)

In effetti hai ragione ma io quello l'avevo già in casa ed ho voluto testarlo.
Lo scopo era proprio di eliminare il pesante java

Re: Lettura S0

Inviato: 02/05/2017, 9:40
da Flane
Se non erro, perche non conosco molto python, tu ad ogni impulso vai a scrivere potenza ed energia nel file txt.

Ma credo sia più corretto leggere l'energia solo ogni 5 minuti come prevede metern, in quanto contando gli impulsi emessi in 5 min si commettono meno errori che contando il tempo trascorso tra due singoli impulsi.

Re: Lettura S0 - script python

Inviato: 02/05/2017, 20:05
da fuzero
Io conto il tempo tra due impulsi per avere la potenza istantanea che vedo nel dashboard live
per il 5min pooling è meterN che calcola la differenza tra il contatore in quel momento ed il dato del csv di 5 minuti prima,
per me la precisione è la stessa.
Confermami se pooler485 è sempre in esecuzione , io lo penso sennò non avresti il dato live.

Re: Lettura S0 - script python

Inviato: 26/04/2018, 20:01
da rinoronie
posso utilizzare per un contalitri? chiude l'impulso ogni litro di acqua...
nel tuo script, ogni impulso a quanto corrisponde?
serve configurare il gpio come ingresso?
serve creare precedentemente il file /dev/shm/meternX.txt
grazie

Re: Lettura S0 - script python

Inviato: 27/04/2018, 8:44
da Flane
E' possibile utilizzare questo script anche per un contalitri dell'acqua, ma deve essere opportunamente modificato in quanto è predisposto per il calcolo dell'energia con valore istantaneo della potenza e dell'energia sui 5 min.

Per l'acqua si calcola il solo consumo in litri (o meglio in mc) sui 5 min. Quindi si contano solo gli impulsi trascorsi ogni 5 min e si restituisce il corrispondente valore in volume in funzione del fattore di conversione del contatore. Quindi in questo caso ci sarà solo il valore main e non il live.


Non conosco python e non sono un programmatore, ma un possibile script potrebbe essere:

Codice: Seleziona tutto

#!/usr/bin/python

# pin gpio utilizzato per leggere gli impulsi
pin_gpio = 4
# n. di meter utilizzato in MeterN
metern_id = 8
# fattore di conversione del contatore (unita di misura mc)
conv = 1

file = '/dev/shm/metern'+str(metern_id)+'.txt'
import time
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(pin_gpio, GPIO.IN, pull_up_down = GPIO.PUD_DOWN)

counter = 0
while True:
    GPIO.wait_for_edge(pin_gpio, GPIO.RISING)
    counter += 1
    volume = str(metern_id) + '(' + str(counter*conv) + '*mc)\n'
    fp = open(file,'w')
    fp.write(volume)
    fp.close()
    GPIO.wait_for_edge(pin_gpio, GPIO.FALLING)

GPIO.cleanup()


Personalmente non l'ho testato e non ne garantisco il funzionamento. Attenzione che con python l'indentatura è importante.

Re: Lettura S0 - script python

Inviato: 27/04/2018, 9:37
da rinoronie
Provo e vi faccio sapere
Grazie

Re: Lettura S0 - script python

Inviato: 27/04/2018, 9:50
da rinoronie
Ma devo comunque dichiarare il mio pio 26 come ingresso?
#echo "26" > /sys/class/gpio/export
#echo "in" > /sys/class/gpio/gpio26/direction

Re: Lettura S0 - script python

Inviato: 27/04/2018, 10:02
da rinoronie
la à accentata non va bene, ho dovuto sostituirla con la a semplice
# fattore di conversione del contatore (unità di misura mc)