Interfaccia Web per Rotex RPS/2 e RPS/3

Sistemi elettronici di controllo e monitoraggio, Arduino, Rasberry ecc.

Moderatori: gasala50, FabioR

FabioR
Messaggi: 125
Iscritto il: ven set 30, 2011 8:11 am

Re: Interfaccia Web per Rotex RPS/2 e RPS/3

Messaggioda FabioR » mer ott 05, 2011 2:09 pm

In attesa che mi arrivi arduino, ecco il php che dovrebbe salvare i dati

Codice: Seleziona tutto

<?php
//Connect to database
$con = mysql_connect("localhost", $_GET['user'], $_GET['password']);
if(!$con)
    {
    die('Could not connect: ' .mysql_error());
    }

//Select database
mysql_select_db("rotex", $con);

//Parse the data string
$data = str_replace(",",".",$_GET['data']);
$data = explode(";", $data);

//Temperature correction factors
$a = -0.0002;
$b = -0.0472;
$c = +1.0434;

//Assign data
$HA = $data[0];
$BK = $data[1];
$P1 = $data[2];
$P2 = $data[3];
$TK = $data[4];
  $y = ($a*($data[5])^2)+($b*($data[5]))+$c; //Apply polynomial data correction
$TR = ($data[5]+$y);
  $y = ($a*($data[6])^2)+($b*($data[6]))+$c; //Apply polynomial data correction
$TS = ($data[6]+$y);
$TV = $data[7];
$P = $data[8];

//Execute the insert query
$result = mysql_query("INSERT INTO Produzione
 (HA,BK,Pompa1,Pompa2,TCollettore,TRitorno,TBollitore,TMandata,Portata) VALUES
 ($HA,$BK,$P1,$P2,$TK,$TR,$TS,$TV,$P)");

if (!$result) {
    die('Invalid query: ' . mysql_error());
}

mysql_close($con);

print "OK";
?>


Lo script viene chiamato in questo modo

Codice: Seleziona tutto

http://servername/rotex.php?user=dbusername&password=dbpassword&data=0;1;100;1;20;12;8;12;7,7


Applica una correzione polinomiale di secondo grado ai dati di temperatura, calcolata in base ai dati di sergio&teresa, e salva il tutto sul db. Se la mia rotex dovesse mandare fuori anche i campi di potenza ed energia aggiungerei i due campi.

Arduino dovrebbe passare i dati al server nel modo seguente

Codice: Seleziona tutto

client.println("GET /rotex.php?user=dbusername&password=dbpassword&data=0;1;100;1;20;12;8;12;7,7 HTTP/1.0");


http://arduino.cc/en/Tutorial/WebClient

STAFF
Site Admin
Messaggi: 1850
Iscritto il: mar nov 27, 2007 7:44 pm
Contatta:

Re: Interfaccia Web per Rotex RPS/2 e RPS/3

Messaggioda STAFF » mer ott 05, 2011 3:31 pm

FabioR ha scritto:In attesa che mi arrivi arduino, ecco il php che dovrebbe salvare i dati

[code]
//Parse the data string
$data = str_replace(",",".",$_GET['data']);
$data = explode(";", $data);



Vedo che consideri la variabile $data contenente tutta la stringa che arriva dalla RPS/3.. ma come la setti ?

Mi spieghi come funziona il caricamento di quella variabile e come viene aggiornata ?
( es. ogni carattere di carrige return ).

Io non ho mai saputo come fare ad interfacciare il PHP con la seriale... pensavo di utilizzare uno script in Pyton per questo lavoro e Gasala sta lavorando x quello.

Se hai una soluzione piu' semplice si potrebbe realizzare un progetto Open su di un hardware standard..

Per quanto riguarda i dati da inserire nel DB io farei un aggiornamento ogni minuto contenente tutte le variabili inviate dalla RSP/3 + un dato di energia che rappresenta quanto prodotto, in kwh, in quel dato minuto ( come di espressione di kwh / 60 ).

In pratica se in quel minuto la TV equivale a 35 gradi e la TR 25 con una portata di 5 Lt/min l'energia al minuto e' cosi calcolata :

( TV - TR ) * 5 * 0,00116
10 * 5 * 0,00116 = 0,058 kwh
Nel db quindi mettere 0,058 come valore di energia prodotta in quel minuto.

Questo semplifica notevolmente i calcoli e i grafici e inoltre permette di risalire alla potenza con un semplice calcolo.




Ciao,
F.

Avatar utente
gasala50
Messaggi: 107
Iscritto il: mar dic 02, 2008 2:53 pm
Località: Grosio (SO)

Re: Interfaccia Web per Rotex RPS/2 e RPS/3

Messaggioda gasala50 » mer ott 05, 2011 7:20 pm

FabioR ha scritto:In attesa che mi arrivi arduino, ecco il php che dovrebbe salvare i dati


Complimenti x la risposta rapida e molto interessante ... quando arriverà "Arduino " e invierai altri risultati.... proseguirò le mie domande .... unitamente credo a quelle di Fcattaneo ... vedi :mrgreen: che hai svegliato curiosità nello sviluppo del tuo progetto.
Cordiali Saluti
Giulio

FabioR
Messaggi: 125
Iscritto il: ven set 30, 2011 8:11 am

Re: Interfaccia Web per Rotex RPS/2 e RPS/3

Messaggioda FabioR » gio ott 06, 2011 8:59 am

fcattaneo ha scritto:
FabioR ha scritto:In attesa che mi arrivi arduino, ecco il php che dovrebbe salvare i dati

[code]
//Parse the data string
$data = str_replace(",",".",$_GET['data']);
$data = explode(";", $data);



Vedo che consideri la variabile $data contenente tutta la stringa che arriva dalla RPS/3.. ma come la setti ?

Mi spieghi come funziona il caricamento di quella variabile e come viene aggiornata ?
( es. ogni carattere di carrige return ).

Io non ho mai saputo come fare ad interfacciare il PHP con la seriale... pensavo di utilizzare uno script in Pyton per questo lavoro e Gasala sta lavorando x quello.

Se hai una soluzione piu' semplice si potrebbe realizzare un progetto Open su di un hardware standard..

Per quanto riguarda i dati da inserire nel DB io farei un aggiornamento ogni minuto contenente tutte le variabili inviate dalla RSP/3 + un dato di energia che rappresenta quanto prodotto, in kwh, in quel dato minuto ( come di espressione di kwh / 60 ).

In pratica se in quel minuto la TV equivale a 35 gradi e la TR 25 con una portata di 5 Lt/min l'energia al minuto e' cosi calcolata :

( TV - TR ) * 5 * 0,00116
10 * 5 * 0,00116 = 0,058 kwh
Nel db quindi mettere 0,058 come valore di energia prodotta in quel minuto.

Questo semplifica notevolmente i calcoli e i grafici e inoltre permette di risalire alla potenza con un semplice calcolo.




Ciao,
F.


Devo ancora rivedere la correzione con la polinomiale perchè penso di aver fatto un errore, ma aspetto un parere del mio consulente tecnico (mio moglie).
Leggendo con arduino da seriale ottengo una stringa di questo tipo 0;1;100;1;20;12;10;12;7,7
Per ora la scrivevo semplicemente su un display lcd, ma devo ancora analizzarla meglio. Ora non ho sotto mano il codice di arduino che legge da seriale (lo ha fatto un mio collega, prendendo spunto da esempi in rete).

In pratica mi ritrovo la stringa con i dati in una variabile e la invio al server come parametro contenuto nell'url
Dopo di che la elaboro in php. Avrei anche potuto fare un cgi in perl che conosco meglio.
Lo script php si prende la stringa come variabile, sostituisce le virgole con i punti altrimenti avrei problemi a trattare i decimali (e a scrivere la query).
Dopo di che attraverso l'explode scompongo la stringa in una matrice usando il ; come separatore.
Poi posso fare le correzioni ai diversi valori ed eseguo la query di insert.
Il database ha un campo timestamp che salva la data del server (sincronizzata con NTP) ad ogni record inserito.
Altrimenti avrei dovuto aggiungere un real time clock ad arduino.

Il php gira sul mio server, dove sono presenti lighttpd e mysql. Basta qualsiasi server lamp per farlo e ci metto 5 minuti a tirarlo su (è il mio lavoro).
Il lavoro successivo sarà fare l'interfaccia web per consultare i dati e creare i grafici con rddtool, anche se per iniziare mi basta interrogare direttamente il db in sql

Forse stasera arriva il mio arduino e nel weekend posso fare qualche prova. Continuerò ad aggiornarvi.

FabioR
Messaggi: 125
Iscritto il: ven set 30, 2011 8:11 am

Re: Interfaccia Web per Rotex RPS/2 e RPS/3

Messaggioda FabioR » gio ott 06, 2011 9:17 am

@fcattaneo
per "non ho mai saputo come fare ad interfacciare il PHP con la seriale" intendi far girare tutto su un micro pc collegato direttamente alla RSP?
In tal caso io userei direttamente il perl con i moduli per mysql e per la com, magari demonizzando lo script. Sarebbe un po' più complesso ma starebbe tutto in un unico dispositivo. Naturalmente sto parlando di linux, e scarto il python semplicemente perchè non l'ho mai usato.

Usando arduino si ha il vantaggio che costa molto poco, legge direttamente in ttl e si collega facilmente in rete, anche wifi con lo shield apposito.
Tramite lo slot SD è possibile salvare anche i dati su una scheda di memoria, o trametterli via bluetooth.

FabioR
Messaggi: 125
Iscritto il: ven set 30, 2011 8:11 am

Re: Interfaccia Web per Rotex RPS/2 e RPS/3

Messaggioda FabioR » gio ott 06, 2011 9:45 am

questo è il codice di test su arduino che manda su lcd

Codice: Seleziona tutto

char buffer[100];
 
void setup() {
  Serial.begin(9600);
}
 
void loop()
{
  int count = 0;
   if (Serial.available())
  {
    delay(100); 
    while (Serial.available() > 0)
    {
      lcd.print(Serial.read(), BYTE);
      }
  }
}

STAFF
Site Admin
Messaggi: 1850
Iscritto il: mar nov 27, 2007 7:44 pm
Contatta:

Re: Interfaccia Web per Rotex RPS/2 e RPS/3

Messaggioda STAFF » gio ott 06, 2011 3:08 pm

FabioR ha scritto:@fcattaneo
per "non ho mai saputo come fare ad interfacciare il PHP con la seriale" intendi far girare tutto su un micro pc collegato direttamente alla RSP?



Esatto,

io Arduino non lo conosco e pensavo fosse un accrocchio linux con residente mysql e Apache...apprendo adesso da quello che hai scritto che con Arduino intenderesti fare quello che noi facciamo con il PIC e la scheda dedicata.

FabioR ha scritto:In tal caso io userei direttamente il perl con i moduli per mysql e per la com, magari demonizzando lo script. Sarebbe un po' più complesso ma starebbe tutto in un unico dispositivo. Naturalmente sto parlando di linux, e scarto il python semplicemente perchè non l'ho mai usato.


Potrebbe essere una idea.. io non conosco nemmeno Perl ( e nemmeno Pyton se per quello , infatti sta lavorandoci Gasala.. )

Io conosco solo il PHP , Mysql e per quanto riguarda il PIC, l'assembler.. per questo mi mancano gli "strumenti" per far fare tutto ad una scheda Linux senza bisogno del supporto software di un server ( adesso usiamo tutti quello di Portalsole via ADSL.. ).

Ciao,
F.

FabioR
Messaggi: 125
Iscritto il: ven set 30, 2011 8:11 am

Re: Interfaccia Web per Rotex RPS/2 e RPS/3

Messaggioda FabioR » ven ott 07, 2011 7:45 am

Io il server già ce l'ho, quindi trovo più comodo procedere con l'arduino che costa poco ed è programmabile anche da chi non ha mai lavorato con i pic.
Il perl ha una sintassi non molto diversa da php e si trovano molte informazioni in rete.
Esistono molte librerie per esempio Device::SerialPins per utilizzare una seriale a basso livello oppure Device::SerialPort per comunicazioni rs232
DBD::mysql permette di usare il db
Inoltre ci sono librerie per trasformare in demone uno script perl, in modo che resti residente e in ascolto sulla seriale.

Per trattare la stringa si può usare un eventuale CR/LF alla fine della stringa o, se non ci fosse, contare il numero di caratteri inviati.

nanopc linux se ne trovano, ad esempio koala per restare in Italia

Non ci vorrebbe molto a farlo.
Non mi mi metto perchè: non ho il cavo rotex rs232, sono purtroppo un po' arruginito con il perl, ho un sacco di altre cose a cui pensare, e fondamentalmente non mi serve :mrgreen:
Penso che anche in python non ci voglia molto, a patto siano disponibili le librerie per la seriale.

FabioR
Messaggi: 125
Iscritto il: ven set 30, 2011 8:11 am

Re: Interfaccia Web per Rotex RPS/2 e RPS/3

Messaggioda FabioR » ven ott 07, 2011 7:51 am

Proseguo con il lavoro
Questo è lo script php corretto, che calcola anche potenza ed energia. Adesso è impostato per un tempo di campionamento di 60 secondi, ma si può variare cambiando la variabile $T
In realtà l'energia la calcolerò con la query di interrogazione dei dati (verrà più avanti).

Codice: Seleziona tutto

<?php
//Connect to database
$con = mysql_connect("localhost", $_GET['user'], $_GET['password']);
if(!$con)
    {
    die('Could not connect: ' .mysql_error());
    }

//Select database
mysql_select_db("rotex", $con);

//Parse the data string
$data = str_replace(",",".",$_GET['data']);
$data = explode(";", $data);

//Temperature correction factors
$a = 0.0001;
$b = 0.0501;
$c = -1.0613;
$T = 60; //Intervallo di campionamento

//Assign data
$HA = $data[0];
$BK = $data[1];
$P1 = $data[2];
$P2 = $data[3];
$TK = $data[4];
  $y = ($a*($data[5])^2)+($b*($data[5]))+$c; //Apply polynomial data correction
$TR = ($data[5]-$y);
  $y = ($a*($data[6])^2)+($b*($data[6]))+$c; //Apply polynomial data correction
$TS = ($data[6]-$y);
$TV = $data[7];
$P = $data[8]; //litri al minuto
$W = $P*($TV-$TR)*0.0697; //Potenza istantanea in KW
$E = $W*($T/3600); //considerato un campionamento ogni T secondi


//Execute the insert query
$result = mysql_query("INSERT INTO Produzione
 (HA,BK,Pompa1,Pompa2,TCollettore,TRitorno,TBollitore,TMandata,Portata,Potenza,Energia, VALUES
 ($HA,$BK,$P1,$P2,$TK,$TR,$TS,$TV,$P,$W,$E)");

if (!$result) {
    die('Invalid query: ' . mysql_error());
}

mysql_close($con);

print "OK";
?>



Per quanto riguarda arduino, ieri sera ci ho un po' giocato e sono riuscito a interrogare un server ntp per ottenere l'ora e ad inserire i dati sul database attraverso il web client, anche se non ho capito perchè non funziona sempre.
Non ho ancora fatto prove con la seriale e sto aspettanto il real time clock che poi ho deciso di prendere (per 7€). L'idea è quella di loggare anche sulla schedina sd i dati, oltre a inviarli via rete, creando quindi un file csv.

Appena ho un codice con un po' di senso lo posto

Avatar utente
sergio&teresa
Messaggi: 2005
Iscritto il: mer giu 24, 2009 10:29 pm

Re: Interfaccia Web per Rotex RPS/2 e RPS/3

Messaggioda sergio&teresa » ven ott 07, 2011 11:05 am

No Giulio, la TV non è da correggere. C'era il dubbio se farlo o meno per il tuo impianto, ma per ora abbiamo soprasseduto.

La TR va invece assolutamente corretta perchè entra nel calcolo di potenza ed energia prodotta.

La TS è comunque meglio correggerla (anche se non entra nel calcolo di cui sopra), perchè altrimenti si considerano T di accumulo errate quando si fanno le verifiche che i conti diano risultati coerenti con l'evoluzione delle temperature nell'accumulo.

Ciao :wink:
Sergio
Segui il mio impianto su Portalsole:
Liveplant3

Avatar utente
sergio&teresa
Messaggi: 2005
Iscritto il: mer giu 24, 2009 10:29 pm

Re: Interfaccia Web per Rotex RPS/2 e RPS/3

Messaggioda sergio&teresa » ven ott 07, 2011 1:23 pm

Fabio, vedo che stai applicando una correzione polinomiale (quadratica) alla TR e alla TS. Come mai una quadratica e non invece una retta (come stiamo facendo su portalsole)?

Ciao
Sergio
Segui il mio impianto su Portalsole:
Liveplant3

FabioR
Messaggi: 125
Iscritto il: ven set 30, 2011 8:11 am

Re: Interfaccia Web per Rotex RPS/2 e RPS/3

Messaggioda FabioR » dom ott 09, 2011 5:01 pm

sergio&teresa ha scritto:Fabio, vedo che stai applicando una correzione polinomiale (quadratica) alla TR e alla TS. Come mai una quadratica e non invece una retta (come stiamo facendo su portalsole)?

Ciao
Sergio

Ho fatto vedere i tuoi dati a mia moglie, che tratta tutti i giorni dati per lavoro, e lei mi ha restituito la polinomiale. Non sono stato a discuterne. :wink:
Ultima modifica di FabioR il dom ott 09, 2011 5:12 pm, modificato 1 volta in totale.

FabioR
Messaggi: 125
Iscritto il: ven set 30, 2011 8:11 am

Re: Interfaccia Web per Rotex RPS/2 e RPS/3

Messaggioda FabioR » dom ott 09, 2011 5:03 pm

gasala50 ha scritto:
Quello che non so come fare è trasferire il contenuto della stringa "s" nelle variabili HA,BK,P1,P2, ecc. ..... qui mi sono bloccato; e sto studiando una soluzione.... :roll:

io l'ho fatto fare semplicemente a php con explode()
a php ho passato la stringa come la ottengo dalla seriale.

FabioR
Messaggi: 125
Iscritto il: ven set 30, 2011 8:11 am

Re: Interfaccia Web per Rotex RPS/2 e RPS/3

Messaggioda FabioR » mar ott 11, 2011 7:37 am

La gestione delle stringhe è più rognosa di quanto mi aspettassi :roll:
riuscirò a lavorarci nuovamente il prossimo we

inshar
Messaggi: 9
Iscritto il: mar ago 10, 2010 1:04 pm

Re: Interfaccia Web per Rotex RPS/2 e RPS/3

Messaggioda inshar » mar mar 27, 2012 7:51 pm

Ciao,

sei andato avanti con lo sviluppo dell'arduino?
Io ho preso di recente un arduino ethernet per mettere in rete i dati del solare e integrare l'impianto domotico di casa.
L'arduino ha il vantaggio di avere la seriale in TTL quindi direttamente interfacciabile all RSP3.
Poi ho un nas Synology che integra sia Web Server che server SQL, quindi vorrei creare un DB e buttare tutto su NAS direttamente.
Ho trovato i tuoi riferimenti interessanti soprattutto per PHP (visto che di linguaggi x net ne capisco ben poco (anni orsono programmavo in ASP ma poi non ho fatto più quel lavoro)). Mentre per il microcontrollore Arduino è un pò una puzza (è un 8bit con risorse limitatissime) ma il bello è programmarlo ad alto livello e con librerie in c già pronte (cosa non da poco), io ho sviluppato per piattaforma MSP430 della Texas Instrument anni fa ed allora il texas era avanzato anni luce rispetto ad Arduino (ARTMEL 8bit...).
Ciao


Torna a “Domotica, monitoraggio e controllo.”



Chi c’è in linea

Visitano il forum: Nessuno e 8 ospiti