Ho adattato per questo scopo un file python che ha preparato un mio collega per mettere a punto un parametro per il monitoraggio della PDC all' interno di meterN.
Legge ultimi valori scritti da metern nell' ultima riga del file.csv più recente e li riscrive nei corrispondenti file in /dev/shm/
Al riavvio del raspberry, metern si trova nei file dei vari meter l' ultimo valore che era stato trascritto nel file.csv del giorno, e quindi i grafici hanno continuità con i valori precedenti.
Testato e funzionante con contatore di produzione dedicato (non uso aurora).
Lo posto come lo sto usando sul mio sistema che in totale è arrivato a 38 meter

Va adattato alla propria configurazione di meterN.
Va messo in /usr/local/bin/ e messo in avvio automatico con systemctl creando un nuovo servizio che lo invoca.
Codice: Seleziona tutto
#!/usr/bin/python
#
# Legge dati da ultimo file .CSV presente in /var/www/metern/data/csv/ generato da Metern
# Scrive ultimi valori in 15 file presenti in /dev/shm dei corrispettivi meter, al riavvio raspberry
# Va editato in base ai meter esistenti nella propria configurazione di metern
# Va posto in /usr/local/bin/ e messo in esecuzione automatica con "systemctl"
# creando un nuovo servizio in /etc/systemd/system/
# Questa operazione mantiene continuita con i grafici esistenti prima del riavvio del sistema
# evitando che si debbamo aspettare 24 ore per il riallineamento
# Editato da Giovanni Turchi
# e "adattato" da Fabio Brera
import time, sys, csv, os, glob
from collections import deque
pathcsv = '/var/www/metern/data/csv/'
oCode1 = '1' # numero del meter in metern
oCode2 = '2'
oCode6 = '6'
oCode7 = '7'
oCode8 = '8'
oCode13 = '13'
oCode14 = '14'
oCode15 = '15'
oCode30 = '30'
oCode33 = '33'
oCode34 = '34'
oCode35 = '35'
oCode36 = '36'
oCode37 = '37'
oCode38 = '38'
unit = 'Wh'
unitcop = 'P'
name1 = 'produzione' # nome del meter in metern
name2 = 'consumi'
name6 = 'consumi'
name7 = 'consumi'
name8 = 'consumi'
name13 = 'whcaparisc'
name14 = 'whcapraffr'
name15 = 'whcapacs'
name30 = 'whterm'
name33 = 'whtermrisc'
name34 = 'whtermraffr'
name35 = 'whtermacs'
name36 = 'copglobrisc'
name37 = 'copglobraf'
name38 = 'copglobacs'
path_wr = '/dev/shm/'
fileout1 = path_wr+name1+oCode1+'.txt'
fileout2 = path_wr+name2+oCode2+'.txt'
fileout6 = path_wr+name6+oCode6+'.txt'
fileout7 = path_wr+name7+oCode7+'.txt'
fileout8 = path_wr+name8+oCode8+'.txt'
fileout13 = path_wr+name13+oCode13+'.txt'
fileout14 = path_wr+name14+oCode14+'.txt'
fileout15 = path_wr+name15+oCode15+'.txt'
fileout30 = path_wr+name30+oCode30+'.txt'
fileout33 = path_wr+name33+oCode33+'.txt'
fileout34 = path_wr+name34+oCode34+'.txt'
fileout35 = path_wr+name35+oCode35+'.txt'
fileout36 = path_wr+name36+oCode36+'.txt'
fileout37 = path_wr+name37+oCode37+'.txt'
fileout38 = path_wr+name38+oCode38+'.txt'
# troviamo il file piu' recente
newest = max(glob.iglob(pathcsv+'*.csv'), key=os.path.getctime)
# print newest
with open (newest) as csvfile:
reader = csv.DictReader(csvfile)
for row in reader:
pro_ftv = row['Produzione(Wh)'] # da editare con nome intero presente
con_tot = row['Consumi(Wh)'] # nella corrispettiva colonna nel file .csv
pdc_tot = row['PDC(Wh)']
ind_tot = row['INDUZIONE(Wh)']
ext_tot = row['Extra(Wh)']
pdc_ris = row['PDC riscald(Wh)']
pdc_raf = row['PDC raffr(Wh)']
pdc_acs = row['PDC acs(Wh)']
ene_ter = row['POT term(Wh)']
ter_ris = row['E term Risc(Wh)']
ter_raf = row['E term Raffr(Wh)']
ter_acs = row['E term ACS(Wh)']
cop_dris = row['COP day-risc(P)']
cop_draf = row['COP day-raffr(P)']
cop_dacs = row['COP day-acs(P)']
#print(row['Time'], pro_ftv, con_tot, pdc_tot, ind_tot, ext_tot, pdc_ris, pdc_raf, pdc_acs)
#print(row['Time'], ene_ter, ter_ris, ter_raf, ter_acs, cop_dris, cop_draf, cop_dacs)
formatted1=oCode1+'('+str(pro_ftv)+'*'+unit+')'
formatted2=oCode2+'('+str(con_tot)+'*'+unit+')'
formatted6=oCode6+'('+str(con_tot)+'*'+unit+')'
formatted7=oCode7+'('+str(con_tot)+'*'+unit+')'
formatted8=oCode8+'('+str(con_tot)+'*'+unit+')'
formatted13=oCode13+'('+str(pdc_ris)+'*'+unit+')'
formatted14=oCode14+'('+str(pdc_raf)+'*'+unit+')'
formatted15=oCode15+'('+str(pdc_acs)+'*'+unit+')'
formatted30=oCode30+'('+str(ene_ter)+'*'+unit+')'
formatted33=oCode33+'('+str(ter_ris)+'*'+unit+')'
formatted34=oCode34+'('+str(ter_raf)+'*'+unit+')'
formatted35=oCode35+'('+str(ter_acs)+'*'+unit+')'
formatted36=oCode36+'('+str(cop_dris)+'*'+unitcop+')'
formatted37=oCode37+'('+str(cop_draf)+'*'+unitcop+')'
formatted38=oCode38+'('+str(cop_dacs)+'*'+unitcop+')'
out_file = open(fileout1,"w")
out_file.write(formatted1)
out_file.close()
os.chmod(fileout1,0666) # riporta i permessi a livello che consenta agli script in comapps di
out_file = open(fileout2,"w") # scrivere i file nel caso questo script sia stato eseguito come root
out_file.write(formatted2)
out_file.close()
os.chmod(fileout2,0666)
out_file = open(fileout6,"w")
out_file.write(formatted6)
out_file.close()
os.chmod(fileout6,0666)
out_file = open(fileout7,"w")
out_file.write(formatted7)
out_file.close()
os.chmod(fileout7,0666)
out_file = open(fileout8,"w")
out_file.write(formatted8)
out_file.close()
os.chmod(fileout8,0666)
out_file = open(fileout13,"w")
out_file.write(formatted13)
out_file.close()
out_file = open(fileout14,"w")
out_file.write(formatted14)
out_file.close()
out_file = open(fileout15,"w")
out_file.write(formatted15)
out_file.close()
out_file = open(fileout30,"w")
out_file.write(formatted30)
out_file.close()
out_file = open(fileout33,"w")
out_file.write(formatted33)
out_file.close()
out_file = open(fileout34,"w")
out_file.write(formatted34)
out_file.close()
out_file = open(fileout35,"w")
out_file.write(formatted35)
out_file.close()
out_file = open(fileout36,"w")
out_file.write(formatted36)
out_file.close()
out_file = open(fileout37,"w")
out_file.write(formatted37)
out_file.close()
out_file = open(fileout38,"w")
out_file.write(formatted38)
out_file.close()
#print formatted
# quit()
#sys.exit()
