Programma MONITOR per la lettura contatori EASTRON [GUIDA]

Discussioni relative al software di monitoraggio energetico METERN
Garluk
Messaggi: 80
Iscritto il: 01/10/2017, 22:00

Programma MONITOR per la lettura contatori EASTRON [GUIDA]

Messaggioda Garluk » 08/12/2017, 16:20

Metto a disposizione di tutti un programma da me sviluppato per raspberry.
Il programma legge i dispositivi modbus e crea un output compatibile con 123solar (beta) e meterN.

Si consiglia di utilizzare il programma monitor su un bus separato da quello dell'inverter perchè non è garantito il funzionamento del programma monitor insieme al programma aurora sulla stessa seriale.

Il programma in pratica è un sostituto di sdm120c di gianfrdp che la maggior parte di voi usa per la lettura dei contatori eastron.

Monitor, rispetto al programma sdm120c, permette di leggere anche i contatori SDM630 trifase, gestisce più dispositivi modbus contemporaneamente e ha una gestione più snella e efficiente.

Oltre alla lettura di uno o più contatori e di altri dispositivi modbus, il programma permette di effettuare altre operazioni sulle misurazioni (utili per esempio per conversioni o quando si cambia un contatore).

Nei file allegati a questo post oltre al programma troverete anche alcuni script di supporto che in seguito vi spiego come usare.

I file tar vanno copiati nella directory /var/www/comapps.
I file vanno scompattati utilizzando il comando tar. Per esempio per scompattare il file monitor.tar va usato il comando

Codice: Seleziona tutto

tar xvf monitor.tar


Il contenuto del file monitor.tar è il seguente:

Codice: Seleziona tutto

monitor
monitor.conf.sample


Il contenuto del file comapps.tar è il seguente:

Codice: Seleziona tutto

com_daemon_loop.php
com_daemon.php
pooler.php
reqsubmet.php


monitor è il programma vero e proprio;
monitor.conf.sample è un esempio, adeguatamente documentato, del relativo file di configurazione;
com_daemon_loop.php e com_daemon.php sono i programmi di JM modificati nella parte di esecuzione di monitor;
pooler.php è il sostituto di poolerconsumi ed è il plugin che permette a meterN di leggere i dati dal contatore;
reqsubmet.php è lo script che permette di leggere dentro meterN i dati meterN (principalmente per la configurazione degli indicatori).

Una volta scompattati i file tar, come prima cosa, bisogna dare i seguenti comandi:

Codice: Seleziona tutto

sudo -s

cp monitor /usr/bin/monitor
cp monitor.conf.sample monitor.conf
chmod 4711 /usr/bin/monitor
chmod +x /var/www/comapps/*
chown www-data.www-data /var/www/comapps/*
ln -s /var/www/comapps/pooler.php /usr/bin/pooler
ln -s /var/www/comapps/reqsubmet.php /usr/bin/reqsubmet


Configurazione sensori
A questo punto va editato il file monitor.conf e adattato alla propria configurazione: probabilmente basta intervenire su pochi parametri. Sicuramente va controllato/modificato il parametro relativo all'indirizzo del contatore (Address), il parametro OutFile ed, eventualmente, il parametro Port1Dev.
Se si dispone di più contatori da leggere basta duplicare la sezione [Sensor1] per ogni contatore che si possiede rinominando la sezione in [Sensor2], [Sensor3], ecc. ovviamente modificando l'indirizzo (parametro Address) e l'output (parametro OutFile).
La cosa importante quando si creano più sezioni relative ai sensori è che le sezioni devono essere numerate in sequenza. Non è possibile avere duplicazioni o buchi nella numerazione (per esempio [Sensor1], [Sensor2], [Sensor2], [Sensor4]). L'ordine con cui sono scritti nel file di configurazione, invece, non è importante.

Configurazione MQTT
Particolare attenzione va dedicata alle impostazioni di configurazione dei parametri relativi al broker MQTT. I vari parametri sono descritti nel file di configurazione. Qui faccio solo alcune precisazioni.
Il parametro useMQTT indica se il programma deve pubblicare i dati su un topic del broker MQTT. I valori ammessi sono yes e no. Se useMQTT viene impostato a no tutti gli altri parametri vengono ignorati.
Se il parametro MQTTusername viene lasciato bianco allora il sistema non userà l'autenticazione e il successivo parametro MQTTpassword viene ignorato.
La versione attuale del programma non gestisce la comunicazione crittografata (la implementerò dopo che sono certo che tutto funziona per il meglio).

Se non presenti nel sistema vanno installate le librerie libmodbus e libmosquitto.
La libreria libmodbus si installa con il comando

Codice: Seleziona tutto

sudo apt-get install libmodbus-dev

La libreria libmosquitto si installa con il comando

Codice: Seleziona tutto

sudo apt-get install libmosquitto1 libmosquitto-dev


Test di funzionamento
A questo punto si può provare se tutto funziona con il comando:

Codice: Seleziona tutto

./monitor

Se tutto è configurato bene il programma dovrebbe generare dentro /dev/shm un file con i dati letti dal contatore ovvero dai contatori.
Nel caso in cui il parametro ID è stato posto a 2 e il parametro OufFile è impostato a /dev/shm/metern2.txt, con il comando cat /dev/shm/metern2.txt visioniamo il file che, in caso di SMD120/220/230 ha una struttura simile a questa:

Codice: Seleziona tutto

2_V(235.44*V)
2_C(0.37*A)
2_P(57.76*W)
2_AP(87.14*VA)
2_RP(-65.25*VAR)
2_PF(0.66*F)
2_PA(-48.49*°)
2_F(50.01*Hz)
2_IE(366672*Wh)
2_EE(0*Wh)
2_TE(366672*Wh)
2_IRE(464*VARh)
2_ERE(167592*VARh)
2_TRE(168056*VARh)

mentre per un SDM630 la struttura è simile a questa:

Codice: Seleziona tutto

2_VR(231.95*V)
2_VS(0.00*V)
2_VT(0.00*V)
2_PR(505.59*W)
2_PS(0.00*W)
2_PT(0.00*W)
2_APR(672.62*VA)
2_APS(0.00*VA)
2_APT(0.00*VA)
2_RPR(-418.29*VAR)
2_RPS(0.00*VAR)
2_RPT(0.00*VAR)
2_PFR(0.78*)
2_PFS(0.00*)
2_PFT(0.00*)
2_PAR(-38.46*Dg)
2_PAS(0.00*Dg)
2_PAT(0.00*Dg)
2_AVN(0.00*V)
2_ALC(0.00*A)
2_SLC(0.00*A)
2_TP(0.00*W)
2_TAP(0.00*Hz)
2_TRP(0.00*Hz)
2_TPF(0.00*)
2_TPA(0.00*Dg)
2_F(50.02*Hz)
2_IE(1142*Wh)
2_EE(0*Wh)
2_RIE(0*Wh)
2_REE(1006*Wh)
2_VRS(0.00*V)
2_VST(0.00*V)
2_VTR(0.00*V)
2_AVLL(0.00*V)
2_NC(0.00*V)
2_TE(1142256*Wh)
2_TRE(1006515*VARh)


La spiegazione dei vari simboli si trova nel file monitor.conf dove ho indicato il dettaglio di tutti i parametri letti e trattati dal programma per ogni dispositivo che il programma stesso è in grado di leggere.
Tale dettaglio è utile per la configurazione di meterN e per l'interfacciamento di altri software tramite il broker MQTT.

Topic MQTT
Al tal riguardo faccio presente che l'effettivo topic su cui viene pubblicato il dato è quello che si ottiene dall'unione di quanto specificato in MQTTtopic e della desinenza del relativo sottoparametro.
Mi spiego meglio.
Supponiamo che abbiamo configurato nella sezione [Sensor1] un contatore SDM220 e abbiamo impostato

Codice: Seleziona tutto

MQTTtopic = casa/energia/consumi

Il valore della tensione letta dal contatore viene pubblicato sul topic casa/energia/consumi/V mentre la corrente viene pubblicata sul topic casa/energia/consumi/C. E così via.

Configurazione MeterN
Se la precedente prova è andata a buon fine si può procedere con la configurazione di meterN.
Per prima cosa mettete in stop meterN e andate nella pagina di configurazione dei misuratori.

Questo è un esempio di come va configurato il meter Consumi supponendo che sia il meter 2 e che sia rilevato da un SDM120/220/230.

Misuratore consumi

Codice: Seleziona tutto

Name: Consumi
Type: Elec - House consumption
MeterID: solitamente 2_IE altrimenti adatta qui e dopo.
Command: pooler 2 IE energy
MeterID live pooling: 2_P
Mode: value
Live command: pooler 2 P power



Per la configurazione degli indicatori si userà invece lo script reqsubmet.

Indicatore tensione

Codice: Seleziona tutto

Name: Tensione
ID: 2_V
Mode: value
Command: reqsubmet 2 V
Unit: V

Se volessimo la corrente..
Indicatore Corrente

Codice: Seleziona tutto

Name: Corrente
ID: 2_C
Mode: value
Command: reqsubmet 2 C
Unit: A

E così via...

Struttura del file di configurazione monitor.conf
Per completezza guardiamo un pò più in dettaglio la struttura del file di configurazione e il significato delle varie voci.

Il file di configurazione è strutturato in sezioni:
- una sezione di carattere generale denominata [General]
- e tante sezioni relative ai sensori (una per ogni sensore) denominata [SensorXX] (con XX numero intero progressivo.
Le sezioni relative ai sensori devono essere denominate [Sensor1], [Sensor2], [Sensor3], ecc.. Cioè la parola Sensor seguito da un numero progressivo.
Il programma conterà le sezioni per "capire" quanti sensori deve interrogare. Non è possibile creare buchi nella numerazione ([Sensor1] e [Sensor4]) ma la numerazione delle sezioni deve essere consecutiva e non sono ammessi duplicazioni di sezioni.

Il programma gestisce 4 tipi di sensori (in realtà 5 ma il quinto è un termometro che ho realizzato io per me e quindi non pubblico):
- i contatori monofase e trifase eastron più diffusi (SDM 120, 220, 230, 630 modbus)
- un sensore generico modbus (utile se si deve collegare a meterN un contatore con l'uscita modbus o dei dispositivi di input).

Per quanto riguarda i contatori Eastron i parametri da inserire nella sezione [SensorXX] sono:

Codice: Seleziona tutto

Name --> Semplice descrizione;
Type --> ;    1 per SDM120, 2 per SDM220/SDM230 e 3 per SDM630;
Port --> Indica il numero della porta di comunicazione (per come definita nella sezione generale) cui è connesso il sensore: valori ammessi 1 o 2;
Address --> Indirizzo modbus del sensore;
Delay --> Intervallo di tempo fra due richieste sul bus modbus in caso di errore;
ID --> Indica l'ID del sensore (per esempio meterID in meterN);
OutputType --> Indica come il programma deve produrre i dati: 1 per il formato 123solar, 2 per il formato MeterN e 3 per un formato descrittivo esteso;
OutFile --> è il path completo del file (per esempio in meterN /dev/shm/metern2.txt);
MQTTtopic --> è il topic base dove vengono eventualmente pubblicati i parametri letti dal dispositivo;
NumOp --> Indica il numero di operazioni da fare sui dati letti dal sensore prima della scrittura nel file: se si indica 0 vuol dire che non vanno fatte operazioni;

Nel caso in cui il campo NumOp è maggiore di 1 vanno inserite tante triplette ParY, CY e OpY per descrivere l'operazione da effettuare.

Codice: Seleziona tutto

ParY --> Indica l'ordinale  del valore da modificare (per esempio posto pari a 9 per un sensore SDM220 permette di modificare il valore dell'energia prelevata);
CY --> è il valore che viene usato per l'operazione di correzione;
OpY --> è il simbolo dell'operazione da compiere (+, -, *, /);


Pertanto se cambiamo il contatore e vogliamo mantenere dentro meterN una continuità dei valori nell'archivio è necessario sommare al valore letto l'ultimo valore indicato dal vecchio contatore. Se il vecchio contatore indicava 12456 allora dobbiamo settare i parametri così:

Codice: Seleziona tutto

NumOp = 1
Par1 = 9
C1 = 12345
Op1 = +


Il sensore generico (Tupe = 20) ha 3 ulteriori parametri:

Codice: Seleziona tutto

Register --> Numero del primo registro da leggere
NumReg --> Numero di registri da leggere
RegType --> Tipo di registro da leggere (I = Input Register o H = Holding Register)


Monitor con 123Solar
Allegato a questo post trovate anche i file per 123solar (monitor_protocol) in modo da poter usare monitor anche con 123solar.
I file vanno messi in /var/www/123solar/scripts/protocols con proprietario www-data e permessi 644
Dalla sezione admin di 123solar scegliete come protocol "monitor" e come indirizzo il numero del meterID di meterN.
Con questo potete eliminare tranquillamente pool123s in meterN.

Ciao
G.

monitor.tar
Programma
(180 KiB) Scaricato 108 volte

comapps.tar
Script per meterN
(10 KiB) Scaricato 85 volte
Ultima modifica di Garluk il 11/03/2019, 0:48, modificato 12 volte in totale.


Avatar utente
TonyP62
Messaggi: 144
Iscritto il: 25/05/2016, 13:18

Re: Programma per la lettura contatori EASTRON [GUIDA]

Messaggioda TonyP62 » 08/12/2017, 17:54

Sei un grande.
Il tuo programma è semplicemente strepitoso.
Ci ho messo pochi secondi a configurarlo e metterlo in funzione. Semplice da capire e da utilizzare.
Ma soprattutto ti ringraziano le nostre Raspy, perché il carico di lavoro sulla CPU è estremamente basso da quello che vedo in questi primi minuti. Ti aggiorno quando possibile a tal proposito. L'accoppiata pooler + VirtMeter, funziona alla grande.
Grazie mille di tutto da parte di tutti noi.
:D :D :D
Sito personale: tonyp62.altervista.org
Raspy personale: tonyp62.ddns.net

miki8989
Messaggi: 298
Iscritto il: 22/01/2016, 6:39

Re: Programma per la lettura contatori EASTRON [GUIDA]

Messaggioda miki8989 » 08/12/2017, 21:28

ciao

scusa ma mi sfugge qualcosa...

il mio sistema è composto da 4 sdm230/220 e 1 sdm120 ed è giaà configurato con poolerconsumi

nel monitor.conf il campo ID và variato nei vari sensor in funzione dell'Address (se non faccio così al comando ./monitor mi dà errore)
credo che debba essere fermato pooler485.sh (se lancio ./monitor con metern in funzione non riesce a create i txt se lo fermo funziona)

scusa se ho detto qualche castroneria

grazie

Avatar utente
TonyP62
Messaggi: 144
Iscritto il: 25/05/2016, 13:18

Re: RE: Re: Programma per la lettura contatori EASTRON [GUIDA]

Messaggioda TonyP62 » 08/12/2017, 21:32

miki8989 ha scritto:ciao

scusa ma mi sfugge qualcosa...

il mio sistema è composto da 4 sdm230/220 e 1 sdm120 ed è giaà configurato con poolerconsumi

nel monitor.conf il campo ID và variato nei vari sensor in funzione dell'Address (se non faccio così al comando ./monitor mi dà errore)
credo che debba essere fermato pooler485.sh (se lancio ./monitor con metern in funzione non riesce a create i txt se lo fermo funziona)

scusa se ho detto qualche castroneria

grazie
Certo che devi fermare altri driver. Per forza. Altrimenti non funziona. Ti consiglio di disabilitare il lancio automatico di metern e riavviare la raspy. Al riavvio disabilita il pool485 e prova i nuovi driver . Sono fantastici.

Inviato dal mio SM-G935F utilizzando Tapatalk
Sito personale: tonyp62.altervista.org
Raspy personale: tonyp62.ddns.net

miki8989
Messaggi: 298
Iscritto il: 22/01/2016, 6:39

Re: Programma per la lettura contatori EASTRON [GUIDA]

Messaggioda miki8989 » 08/12/2017, 21:54

in pratica

modifico il config_daemon.php così

<?php
if(!defined('checkaccess')){die('Direct access not permitted');}
// Manage com. apps daemon as 'http' user if needed

// if (is_null($PID)) { // Stop Daemon
// exec("pkill -f pooler485 > /dev/null 2>&1 &");
// } else { //Start
// exec("pooler485 2,10,11,12,13 9600 /dev/ttyUSB1 > /dev/null 2>/dev/null &");
// }

?>

allego il monitor.conf

grazie
Allegati
monitor.zip
(1.48 KiB) Scaricato 120 volte

Garluk
Messaggi: 80
Iscritto il: 01/10/2017, 22:00

Re: Programma per la lettura contatori EASTRON [GUIDA]

Messaggioda Garluk » 08/12/2017, 22:06

Ho aggiornato il primo post con una descrizione delle varie voci del file di configurazione.

Avatar utente
Flane
Messaggi: 2127
Iscritto il: 16/01/2016, 15:02

Re: Programma per la lettura contatori EASTRON [GUIDA]

Messaggioda Flane » 08/12/2017, 22:07

Garluk, scusa ma credo sia bene evidenziare nel primo post che questo programma non è utilizzabile se si usa un solo bus per la lettura diretta dell'inverter con Aurora e per la lettura dei contatori eastron.

Il programma monitor è utilizzabile se si usa un bus ESCLUSIVAMENTE per la lettura dei soli contatori

Garluk
Messaggi: 80
Iscritto il: 01/10/2017, 22:00

Re: Programma per la lettura contatori EASTRON [GUIDA]

Messaggioda Garluk » 08/12/2017, 22:13

miki devi mettere in stop meterN, sostituire i file con quelli del primo post.
Il programma gestisce la separazione fra gli ID in meterN e l'indirizzo del contatore.
Da te sono uguali e va bene

Il file monitor.conf allegato al tuo ultimo post sembra corretto.

miki8989
Messaggi: 298
Iscritto il: 22/01/2016, 6:39

Re: Programma per la lettura contatori EASTRON [GUIDA]

Messaggioda miki8989 » 08/12/2017, 22:19

grazie

se hai notato ho messo gli ID come l'Address
è corretto o metto tutto a 2???

quindi non serve bloccare pool485.php
basta solo non farlo interrogare da metern??

grazie

Garluk
Messaggi: 80
Iscritto il: 01/10/2017, 22:00

Re: Programma per la lettura contatori EASTRON [GUIDA]

Messaggioda Garluk » 08/12/2017, 22:20

Flane ha scritto:Garluk, scusa ma credo sia bene evidenziare nel primo post che questo programma non è utilizzabile se si usa un solo bus per la lettura diretta dell'inverter con Aurora e per la lettura dei contatori eastron.

Il programma monitor è utilizzabile se si usa un bus ESCLUSIVAMENTE per la lettura dei soli contatori


Non è proprio vero. E' il programma aurora che fa delle cose strane sulla seriale.
Io ho messo dei controlli ma non avendo un inverter non ho potuto provare e mi sono limitato a fare delle prove con contatori diversi e istanze diverse del programma monitor.

Seguendo il tuo consiglio ho messo un avvertenza nel primo post.


Torna a “MeterN”

Chi c’è in linea

Visitano il forum: Nessuno e 4 ospiti