Creare un grafico continuamente aggiornato con i dati provenienti da un database

  • Creatore Discussione Creatore Discussione mauit83
  • Data di inizio Data di inizio

mauit83

Nuovo Utente
5 Mar 2014
4
0
0
Buongiorno a tutti ,
volevo dare la possibilità agli utenti di effettuare il monitoraggio del loro impianto domestico per la produzione di energia elettrica ,in una pagina web naturalemnte .
I valori dei dati da monitorare vengono aggiornati ogni 30 secondi dal web server in una pagina html ; la mia intenzione è trasferire questi dati in un database per poi visualizzare i dati continuamente aggiornati in un grafico simile a quello dell'immagine postata imagessw.jpg.

Sulla parte dei database non ci sono problemi , il problema di cui non risceo a trovare la soluzione è il grafico dinamico aggiornato continuamente .
Vi ringrazio in anticipo e spero di essere stato chiaro .
Mauro
 
Ciao, ti sposto nella sezione di php
Il grafico lo hai già creato ? le query anche?
Se ti manca solo la dinamicità puoi utilizzare ajax
 
Voglio essere sincero, parto quasi da zero , ho sempre e solo smanettato con dreamweaver , html e CSS , il PHP lo sto conoscendo da poco ; mi occupo di programmazione di PLC e ora dovrei fare dei grafici con dei dati che il webserver del pc mi manda ogni 5 secondi , li rimando ad un server remoto e poi dal database voglio fare ad esempio il grafico delle temperature e di altri valori durante l'arco della giornata ,per confrontarli con quelli di altri impianti .
Magari se vi posso chiedere dove vado a pescare le informazioni su come fare così comincio a lavorarci , o se mi consigliate un'alternativa migliore rispetto a quella che ho pensato io , grazie .
 
Grafico sorgente

Untitled.png


Questo è la pagina web del web server da dove vorrei mandare i dati ad un server , se è possibile :o . Grazie
 
lavorando con Windows, creo un file ".bat"
che contiene i valori da inviare e che eseguo immediatamente,

esempio,

@echo on

"%SPw_cmdpath%\curl" -d "d=20140311" -d "g=8500" -d "e=0" -d "pp=1681" -d "pt=12:39" -d "cd=Mostly Cloudy" -H "X-Pvoutput-Apikey:xxxxxxxxxxxxx" -H "X-Pvoutput-SystemId:xxxx" http://pvoutput.org/service/r2/addoutput.jsp

@echo off

"%SPw_cmdpath%\sleep.vbs"


ovvero, chiami il servizio che ti serve, nel mio caso "addoutput.jsp"
sul sito trovi il manuale con una esaustiva spiegazione
ciao
Marino
 
grafici aggiornati soluzione locale

se hai già il database dove sono registrati tutti i valori, suddivisi per impianto,
ho realizzato per me una soluzione in Excel, questa è la pagina dove fornire,
il tipo di grafico e la data di analaisi dei dati finale,

http://s1095.photobucket.com/user/m... - Data Analysis/SPw_DataAnalysis_00.png.html

la macro di Excel che ho sviluppato si collega al db, estrae i dati in funzione del tipo di grafico e della data e li presenta sulla pagina del grafico

ovviamente dati aggiornati all'ultimo aggiornamento del db

con dei bottoni "freccia" avanti e indietro ci si muove nei giorni precedenti/successisi, nei mesi, negli anni ....

è una soluzione più spartana e locale del sito che ti ho indicato, ma anche semplice da "incrementare"

soluzione disponibile senza nessun ...interesse, con suppoto per adattare le query al db

il mio db contiene dati dal 4/1/2011 con registrazioni ogni 3 minuti, la soluzione su pc, altrettanto spartano, funziona bene

fammi sapere se interessato

ps. se trovo la libreria dei grafici del sito citato, mi sono ripromesso di fare la versione php

ciao
Marino
 
Ultima modifica:
ho trovato il tool per creare i grafici, nel file allegato c'è l'immagine catturata del primo risultato.

in questo grafico sono rappresentate la potenza e l'energia generata nella giornata
(fino all'ultima acquisizione dei dati)

lo script php è abbastanza semplice e intendo svilupparlo con altre possibilità,
(ora non ha un form per inserire dati e scelte, ho preferito concentrarmi sui grafici)

ho poi preso un esempio di grafico e l'ho reso il "template" per il mio risultato
in questo modo l' html e javascript in esso contenuto rimangono "standard" e non me ne devo più ... curare

altri esempi potranno essere resi "template" quando necessario

proprio perchè template ho fatto in modo da passare a javascript tutti i valori necessari che vengono
generati e gestiti con php

mi sembra un buon punto di partenza, se ancora interessato, potremmo collaborare per lo sviluppo
ciao
Marino

posto il codice php e "l'interfaccia" con javascript

PHP:
<?php

# http://localhost/test_site/php/SolarPower/graph.php

require('_Config_DB.php');

$db=new solarpowerDB();
$inverterID = '0001';

$sql    = "select nameID from inverter_ident where inverterID='".$inverterID."'";
$data   = $db->Query_select($sql);
$nameID = $data[0][0];

$sql     = "select convert(varchar, max(sampleID), 103) as sampleIDc from inverter_dat_view";
$data    = $db->Query_select($sql);
$LastUpd = $data[0][0];
$year    = substr($LastUpd, 6, 4);
$month   = substr($LastUpd, 3, 2);
$day     = substr($LastUpd, 0, 2);

$db->Mylog("LastUpd       : ".$LastUpd);
$db->Mylog("data estratta : ".$year."-".$month."-".$day);

IntradayGeneration();

function IntradayGeneration() {
  global $db,$swN,$inverterID,$nameID,$year,$month,$day;

  $cond = " from inverter_dat_view";
  $cond.= " where inverterID='".$inverterID."'";
  $cond.= " and iv_year=".$year;
  $cond.= " and iv_month=".$month;
  $cond.= " and iv_day=".$day;

  $sql.= "select min(TOTenergy)".$cond;
  $data = $db->Query_select($sql);
  $minTOTenergy = $data[0][0];

  $sql = "select";
  $sql.= " convert(char(5), sampleID, 108) [time]";
  $sql.= ",GRpower";
  $sql.= ",TOTenergy-".$minTOTenergy;
  $sql.= $cond;
  $sql.= " order by convert(char(5), sampleID, 108)";

  $data = $db->Query_select($sql);
  $data_counter = count($data);
  $db->Mylog("record letti : ".$data_counter);

  $SPW_Title    = 'Intraday Generation '. $nameID;
  $SPW_SubTitle = $year.' / '.$month.' / '.$day;

  $SPW_y1title  = 'Energy Generated';
  $SPW_y1ttip   = ' kWh';

  $SPW_y2title  = 'Power Generated';
  $SPW_y2ttip   = ' W';

  $SPW_y3title  = 'Average Power';
  $SPW_y3ttip   = ' W';

  $GRpower      = 0;
  for($i=0; $i<$data_counter; $i++) {

    $GRpower += $data[$i][1];
    $x = $GRpower / ( $i + 1 );

    $SPW_xAxisCat[] = (string)$data[$i][0];
    $SPW_y2data[]   = (float)$data[$i][1];
    $SPW_y1data[]   = (float)number_format($data[$i][2], 1);
    $SPW_y3data[]   = (float)number_format($x, 1);

//  $db->Mylog($i." -- ".$SPW_xAxisCat[$i]." -- ".$SPW_y2data[$i]." -- ".$SPW_y1data[$i]." -- ".$SPW_y3data[$i]);
  }
  require('graph_a_intraday.php');
}
?>

Codice:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http: //www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http: //www.w3.org/1999/xhtml" xml: lang="en" lang="en">
  <head>
    <title>SolarPower Data Analysis</title>
    <meta http-equiv="Content-Type"
 content="text/html; charset=ISO-8859-1">


    <script type="text/javascript" src="_jquery.min.js"></script>
    <script type="text/javascript">
$(function () {
  var SPW_Title    = '<?php echo $SPW_Title; ?>'
  var SPW_SubTitle = '<?php echo $SPW_SubTitle; ?>'
  var SPW_xAxisCat = <?php echo json_encode($SPW_xAxisCat); ?>;

  var SPW_y1title  = '<?php echo $SPW_y1title; ?>'
  var SPW_y1ttip   = ' <?php echo $SPW_y1ttip; ?>'
  var SPW_y1data   = <?php echo json_encode($SPW_y1data); ?>;
  var SPW_y1color  = '#89A54E'

  var SPW_y2title  = '<?php echo $SPW_y2title; ?>'
  var SPW_y2ttip   = ' <?php echo $SPW_y2ttip; ?>'
  var SPW_y2data   = <?php echo json_encode($SPW_y2data); ?>;
  var SPW_y2color  = '#4572A7'

  var SPW_y3title  = '<?php echo $SPW_y3title; ?>'
  var SPW_y3ttip   = ' <?php echo $SPW_y3ttip; ?>'
  var SPW_y3data   = <?php echo json_encode($SPW_y3data); ?>;
  var SPW_y3color  = '#AA4643'
 

Allegati

  • Cattura.PNG
    Cattura.PNG
    50,3 KB · Visite: 2.079
Buongiorno a tutti ,
volevo dare la possibilità agli utenti di effettuare il monitoraggio del loro impianto domestico per la produzione di energia elettrica ,in una pagina web naturalemnte .
I valori dei dati da monitorare vengono aggiornati ogni 30 secondi dal web server in una pagina html ; la mia intenzione è trasferire questi dati in un database per poi visualizzare i dati continuamente aggiornati in un grafico simile a quello dell'immagine postataVedi l'allegato 2131.

Sulla parte dei database non ci sono problemi , il problema di cui non risceo a trovare la soluzione è il grafico dinamico aggiornato continuamente .
Vi ringrazio in anticipo e spero di essere stato chiaro .
Mauro

Sembra che si sta lavorando su un progetto molto eccitante .. Sei riuscito a risolvere il problema? Spero che vi risponderà al più presto.
 
Ciao Marino 51,
Sono diversi giorni che cerco di capire il funzionamento di PVOutput, legendo e comprendendo in parte il manuale che si trova nel sito, ma aime non sto tirando fuori un ragno da un buco!!!

Di seguito cerco di far capire quale è il problema:

1 - Ho un impianto fotovoltaico con n. 23 inverter della Samil Power collegati ad una rete LAN
2 - Ho un PC con Win7 sempre acceso collegato anche esso alla LAN
3 - Sul PC ho installato il programma Samil Power Browser che non fa altro che trovare tutti gli inverter sulla rete, e leggere dati ogni 3 secondi, e creare ogni giorno una cartella, con dentro 23 file .csv (uno per ogni inverter) con una riga ogni 5 minuti.
4 - ho creato l'account sul portale, ho creato 2 impianti per provare, ho ottenuto l'APE KEY, e i 2 System ID perchè ho creato 2 impianti (che si trovano sulla stessa rete)
5 - Ho scaricato 2 programmi per mandare in automatico i dati a pvoutput ma non succede nulla;
6 - ho creato un .bat come da te cnsigliato aggiungendo la mia Ape Key e il System ID ma non funziona.

qui le cose sono 2, o non ho capito i fondamenti o sto invecchiando!!!!

Ti chiedo la pazienza di farmi chiarezza e trovare quindi una soluzione. Grazie!
 
scusa, leggo solo oggi il tuo post, ma vedo di risponderti, definendo cosa e come registrare sul sito PVoutput

per il mio sistema ho utilizzato l'interfaccia di PVoutput preparando i dati con un vbs secondo le,
"API Specification"
This section details the API specification for those who wish to implement their own client software.

poi, per ogni inverter,

si può registrare il dato di produzione giornaliero ( 1 registrazione x 23 = 23 registrazioni/giorno ), utilizzando
"Add Output Service"
The Add Output service uploads end of day output information. It allows all of the information provided on the Add Output page to be uploaded.

oppure

si possono registrare le rilevazioni della produzione con il dettaglio di 5 minuti ( ~ 160 registrazioni/giorno x ciscun inverter ), utilizzando
"Add Status Service"
The Add Status service accepts live output data at the status interval (5 to 15 minutes) configured for the system.

le due soluzioni sono molto simili, si tratta di preparare un file batch, derivato dai csv,
che contenga i dati da inviare a PVoutput, per esempio,
Codice:
curl -d "d=20150725" -d "g=11400" -d "e=0" -d "pp=1802" -d "pt=11:29" -d "cd=Fine" -H "X-Pvoutput-Apikey:*****" -H "X-Pvoutput-SystemId:*****" http://pvoutput.org/service/r2/addoutput.jsp
curl dialoga con il servizio addoutput.jsp
d = giorno di produzione,
g = energia generata in kWh
e = energia esportata (non misurata)
pp = potenza massima del giorno in W
pt = ora in cui si è verificata pp
cd = condizione atmosferica secondo una tabella di PVoutput

attenzione ai limiti imposti da PVoutput sul numero delle rilevazioni registrabili in un' ora

qui trovi la documentazione
http://www.pvoutput.org/help.html
se ti serve altro, fatti vivo
ciao
Marino
 
Ultima modifica:

Discussioni simili