1

Téma: GRAFY na webu a vše okolo nich

Používáte někdo na svém webu grafy s časovou osou.
Na svůj web si posílám teploty do souboru teploty.txt a některá data odečítám přímo z xml.xml.
Pomůže někdo s "výrobou" grafu na web?

Umím udělat graf v PHP, ale bohužel ne s časovou osou, která se posunuje dle času.

díky

Kdo nic nezkusí, nic nezíská.

2

Re: GRAFY na webu a vše okolo nich

To nikdo nepoužívá na svých stránkách grafy? Posíláte vše jen na portál?
Mimochodem je nějaká přímá cesta třeba na můj graf na portálu?

Kdo nic nezkusí, nic nezíská.

3

Re: GRAFY na webu a vše okolo nich

Data z PLC ukladam v15min intervalech do DB a grafy vytvarim ve Flash pomoci Open Flash Chart http://teethgrinder.co.uk/open-flash-chart/. Naplneni grafu z TXT by v php nemel byt take problem. Vypada to napr. takto

4

Re: GRAFY na webu a vše okolo nich

Pěkné, to musím pochválit.

Doufám že se podobně povede redesign portálu smile ...

Pochlubte se - popište jak využíváte své zařízení SDS zde ! Můžete si bezplatně přidat svou reklamu !

5

Re: GRAFY na webu a vše okolo nich

badmad napsal:

Data z PLC ukladam v15min intervalech do DB a grafy vytvarim ve Flash pomoci Open Flash Chart

nejaky konkretni priklad by nebyl? neco podobneho se chystam udelat taky, ale nejak se nemuzu dokopat k tomu, abych to cele musel z gruntu vymyslet sad
Stacilo by nejaky kus kodu, kterym si natahnu data z PLC do DB a nasledne z DB natahnu data do tech grafu, pripadne nejake tabulky k tomu jako tresnicku na dortu.
Predem diky nejen za sebe, ale urcite i za mnoho ostatnich smile

Chci znát boží myšlenky. Zbytek jsou jen maličkosti.

6

Re: GRAFY na webu a vše okolo nich

koukni třeba na toto

http://www.highcharts.com/demo/dynamic-update/gray

stáhni si jejich program v něm jsou všechny zdrojové kody ke každému jejich grafu. Dají se lehce upravit.

Jen já s tím bojuji již 14 dní. Neumím DB.

Kdo nic nezkusí, nic nezíská.

7

Re: GRAFY na webu a vše okolo nich

badla napsal:
badmad napsal:

Data z PLC ukladam v15min intervalech do DB a grafy vytvarim ve Flash pomoci Open Flash Chart

nejaky konkretni priklad by nebyl? neco podobneho se chystam udelat taky, ale nejak se nemuzu dokopat k tomu, abych to cele musel z gruntu vymyslet sad
Stacilo by nejaky kus kodu, kterym si natahnu data z PLC do DB a nasledne z DB natahnu data do tech grafu, pripadne nejake tabulky k tomu jako tresnicku na dortu.
Predem diky nejen za sebe, ale urcite i za mnoho ostatnich smile

V db "dum" mam tabulku "plc" ve ktere mam pole "datumcas" typ "timestamp" s auto hodnotou CURRENT_TIMESTAMP. Dalsi pole jsou patrne ze scriptu:
<?
/**
* tento php script je volan kazdych 15 minut v CRON a hodnoty jsou zapsany do databaze
* adresa 192.168.2.12 je adresa SDS Micro
* @author
*/
  $xml = simplexml_load_file('http://192.168.2.12/xml.xml');
  $t_byt = $xml->snmp->temp_1;
  $t_bojler_dole = $xml->snmp->temp_2;
  $t_venku = $xml->snmp->temp_3;
  $t_bojler_stred = $xml->snmp->temp_4;
  $t_kotel_nabeh = $xml->snmp->temp_5;
  $t_kotel_zpatecka = $xml->snmp->temp_6;
  $stav_energie = preg_replace("/[^0-9,.]/", "", $xml->snmp->s0_2->text);       //vypusteni z textu vsecho co neni numericke
  $stav_rele_1 = $xml->snmp->relay_1;
  $stav_rele_2 = $xml->snmp->relay_2;
  if ($stav_rele_2 > 1) $stav_rele_2 = 1;
  $stav_rele_3 = $xml->snmp->opto2;
  $stav_termostat = $xml->snmp->opto2;
  try {
  // pripojeni k databazi
  $db = new PDO("mysql:host=localhost;dbname=dum", "jmeno", "heslo");
  $sql = $db->exec("INSERT INTO `plc`
    (`t_byt`, `t_bojler_dole`, `t_venku`,`t_bojler_stred`, `t_kotel_nabeh`, `t_kotel_zpatecka`, `stav_energie`, `stav_rele_1`, `stav_rele_2`, `stav_rele_3`, `stav_termostat`)
    VALUES
    ($t_byt, $t_bojler_dole, $t_venku, $t_bojler_stred, $t_kotel_nabeh, $t_kotel_zpatecka, '$stav_energie', $stav_rele_1, $stav_rele_2, $stav_rele_3, $stav_termostat)");
  $db = null;
  }
  catch (PDOException $e) {
  // obsluha pripadne chyby pri praci s databazi
  // echo "Pri praci s databazi doslo k chybe: " . $e->getMessage();
  }
?>

Z webovych stranek pak volam primo v php modul Open Flash Chart, ve kterem zpracovavam SQL dotaz:
<?php
/**
* ziskani dat z databaze a zobrazeni spotrebovane el. energie za uplynule 2 roky
*
* @author
*/
try {
  include("databaze.php");
  $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
  // vypocitani stavu spotrebovane energie dva roky zpetne po mesicich
  $sql     = "SELECT DATE_FORMAT(`datumcas`,'%b %Y') as datum,
        (MAX(`stav_energie`)-MIN(`stav_energie`)) as energie
        FROM plc WHERE YEAR(NOW())-YEAR(`datumcas`) <= 1
        GROUP BY MONTH(`datumcas`) ORDER BY  `datumcas` ASC ";
  $result  = $db->query($sql);
  $plcdata = $result->fetchAll(PDO::FETCH_ASSOC);
  $db      = null;

  // ukončit připojení k databázi
}
catch(PDOException$e) {
  echo $e->getMessage();
}
include_once('classes/open-flash-chart.php');
// dosazeni ziskanych hodnot z databaze
foreach ($plcdata as $key) {
  $x_labels[] = $key["datum"];
  $data_1[]   = $key["energie"];
  $avg = round(array_sum($data_1) / count($data_1), 2);
}

//naplneni grafu hodnotami
$g = new graph();
$g->title('Spotřeba elektrické energie na ohřev vody', '{font-size: 20px;}');
$g->set_data($data_1);
$g->bar(50, '#00CCCC', 'Spotřeba kWh; průměrna spotřeba za '.count($data_1).' měsíců je: '.$avg.'kWh/měsíc', 10);
$g->set_x_labels($x_labels);
$g->set_x_label_style(10, '#000000', 2, 1);
$g->set_x_axis_steps(1);
$g->set_y_max(200);
$g->y_label_steps(4);

// vykresleni grafu
echo $g->render();
?>

No a vysledkem tohoto scriptu je porovnani, ze investovat do solarnich ohrevu TUV bez dotace je pi.... smile.
graf1

Prosim znalce programovani pouze o lichotive komentare neb jsem amater a programovanim se nezivim smile

8

Re: GRAFY na webu a vše okolo nich

Já investoval. :-)

Kdo nic nezkusí, nic nezíská.

9

Re: GRAFY na webu a vše okolo nich

badmad napsal:

No a vysledkem tohoto scriptu je porovnani, ze investovat do solarnich ohrevu TUV bez dotace je pi.... smile.
graf1

zupr, myslim, ze zbeznym pohledem to bude presne to, co hledam. Jak se k tomu casove dostanu, tak budu referovat, jak to dopadlo. DIKY!

Chci znát boží myšlenky. Zbytek jsou jen maličkosti.

10

Re: GRAFY na webu a vše okolo nich

Myslím si, že není potřeba vymýšlet již vymyšlené a naprosto postačuje upravit skripty od Multitrikera, příklad zde:
vyjaha.g6.cz. Grafů a statistik, co hrdlo ráčí...
Odesíláno z SD MACRO každých 15 minut do free SQL databáze na Endoře. Pár úprav ve skriptech, ideální pro amatéry mého typu.

11

Re: GRAFY na webu a vše okolo nich

Souhlasím s Tebou já zatím bojuji s tímto.

http://www.highcharts.com/demo/dynamic-update/gray

a

http://www.highcharts.com/stock/demo/dynamic-update

Kdo nic nezkusí, nic nezíská.

12

Re: GRAFY na webu a vše okolo nich

To je taky hezký, až to dáš do kupy, dej vědět.

13

Re: GRAFY na webu a vše okolo nich

karel napsal:

Myslím si, že není potřeba vymýšlet již vymyšlené a naprosto postačuje upravit skripty od Multitrikera, příklad zde:
vyjaha.g6.cz. Grafů a statistik, co hrdlo ráčí...
Odesíláno z SD MACRO každých 15 minut do free SQL databáze na Endoře. Pár úprav ve skriptech, ideální pro amatéry mého typu.

jenze jestli se na to divam spravne, tak tohle je pouze pro mereni velicin teplota ci vlhkost... spotrebu energii to bohuzel asi neumi... nebo se jen spatne divam a da se to nejak priohnout?

Chci znát boží myšlenky. Zbytek jsou jen maličkosti.

14

Re: GRAFY na webu a vše okolo nich

Záleží co si do grafu pošleš za veličinu. Zobrazí Ti co chceš.

Kdo nic nezkusí, nic nezíská.

15

Re: GRAFY na webu a vše okolo nich

Taky jsem se rozhodl jít cestou PHP mysql a knihovny na grafy(zatím highcharts). Na to, že jsem v ani v jedné věci nikdy nic nedělal, tak jsem se dopracoval k funkčnímu grafu :-)
tak teď ještě dalších cca 25 :-)

http://77.240.97.52/test3/okamzita.html

16

Re: GRAFY na webu a vše okolo nich

Stimpoff napsal:

Taky jsem se rozhodl jít cestou PHP mysql a knihovny na grafy(zatím highcharts). Na to, že jsem v ani v jedné věci nikdy nic nedělal, tak jsem se dopracoval k funkčnímu grafu :-)
tak teď ještě dalších cca 25 :-)

http://77.240.97.52/test3/okamzita.html

moc pekný graf

17

Re: GRAFY na webu a vše okolo nich

Zdravim,

je nekdo ochotny poskytnout hotove reseni pro zaznam do db a vykreslovani grafu?

Diky za reakce

18

Re: GRAFY na webu a vše okolo nich

osvald napsal:

Zdravim,

je nekdo ochotny poskytnout hotove reseni pro zaznam do db a vykreslovani grafu?

Diky za reakce

Hotové řešení je pouze http://eportal.merenienergie.cz/

Ve spojení s vlastním webem na grafy s SDS neexistuje hotové řešení které by šlo jenom tak přesunout na jiný web, jiné SDS, ....
Tady se musí sladit výstupní data, ukládání do DB, načítání do grafu ....

SDS micro DIN - firmware 8.7.2014, SDS micro DIN - firmware Beta xx.x.2014
SDS nováček :-) Správce sítě, programátor, kutil .... :-)

19

Re: GRAFY na webu a vše okolo nich

To me je jasne.
Ja jen jestli je nekdo ochotny poskytnout sve reseni, ktere se da pripadne upravit.

20

Re: GRAFY na webu a vše okolo nich

Já osobně používám http://www.highcharts.com/
Chce to proštudovat a testovat .....

SDS micro DIN - firmware 8.7.2014, SDS micro DIN - firmware Beta xx.x.2014
SDS nováček :-) Správce sítě, programátor, kutil .... :-)

21

Re: GRAFY na webu a vše okolo nich

Já používám http://multi.tricker.cz/ verzi 4.2 a díky dotazu jsem zjistil, že je verze 6 :-) . V pochlubte se je pěkná meteostanice http://www.depe.sk/tme/. Já měřím jen teplotu http://www.nasbox.cz/temp/

22

Re: GRAFY na webu a vše okolo nich

JJ, taky jsem zkousel.
Akorat vycita pouze jeden temp. Kdyby mel nekdo upravene pro vic temp....

23

Re: GRAFY na webu a vše okolo nich

No ono taky podle tvého zadání asi těžko někdo poskyne nějaké jiné řešení, než obecné rady typu http://www.highcharts.com/

24

Re: GRAFY na webu a vše okolo nich

Jo, sorry....
jedna se me hlavne o zaznam vsech 16 pozic teplomeru a grafy k tomu

25

Re: GRAFY na webu a vše okolo nich

Osvalde, krom toho, že na grafy používám Cacti a hodnoty získávám přes SNMP, tak paralelně zapisuji hodnoty pomocí PHP scriptu do mySQL, je to první věc co jsem PHP dělal, ale funguje dobře (překvapivě)

<?php
date_default_timezone_set ("Europe/Prague");
$con = mysql_connect("localhost","xxx","xxx");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }
 
mysql_select_db("vetrnik", $con); 

//nastavit promene
$t_venku = "NULL";
$t_garaz = "NULL";
$t_puda = "NULL";
$t_chodba = "NULL";
$t_obyvak = "NULL";
$t_bojler_dole = "NULL";
$t_bojler_nahore = "NULL";
$t_sani = "NULL";
$t_vyfuk = "NULL";
$t_privod = "NULL";
$t_odtah = "NULL";
$el_nt_hlavni = "NULL";
$el_vt_hlavni = "NULL";
$el_nt_topeni = "NULL";
$el_vt_topeni = "NULL";
$el_nt_rekuperace = "NULL";
$el_vt_rekuperace = "NULL";
$el_act_nt_hlavni = "NULL";
$el_act_vt_hlavni = "NULL";
$el_act_nt_topeni = "NULL";
$el_act_vt_topeni = "NULL";
$el_act_nt_rekuperace = "NULL";
$el_act_vt_rekuperace = "NULL";
$vod_hlavni = "NULL";
$vod_TUV = "NULL";
$vod_dest = "NULL";
$vod_act_hlavni = "NULL";
$vod_act_TUV = "NULL";
$vod_act_dest = "NULL";
$vlh_odtah = "NULL";
$vlh_obyvak = "NULL";
$ad_hladinaa = "NULL";
$ad_ot_privod = "NULL";
$ad_ot_odtah = "NULL";


$last = mysql_query("SELECT * FROM 5min_data ORDER BY ID DESC LIMIT 1")
or die(mysql_error());

$info = mysql_fetch_array( $last );

// minule hodnoty spotreby 
$DATUMCAS_old = $info['timestamp'];
$el_nt_hlavni_old = $info['el_nt_hlavni'];
$el_vt_hlavni_old = $info['el_vt_hlavni'];
$el_nt_topeni_old = $info['el_nt_topeni'];
$el_vt_topeni_old = $info['el_vt_topeni'];
$el_nt_rekuperace_old = $info['el_nt_rekuperace'];
$el_vt_rekuperace_old = $info['el_vt_rekuperace'];
$vod_dest_old = $info['vod_dest'];
$vod_hlavni_old = $info['vod_hlavni'];
$vod_TUV_old = $info['vod_TUV'];

//settype($el_nt_hlavni_old, "float");
 
function fileExists($path){
    return (@fopen($path,"r")==true);
}

$sds1 = 'http://192.168.1.250:8080/xml.xml';
$sds2 = 'http://192.168.1.251:8080/xml.xml';

if (fileexists($sds1)) {
    $xml1 = simplexml_load_file($sds1);
   
    $sd1_live = true;
    print_r($xml1);
   
    $t_puda = $xml1->snmp->temp_17;
    $t_obyvak = $xml1->snmp->temp_18;

    $el_nt_hlavni = $xml1->snmp->s0_1->impT1 / 800;
    $el_vt_hlavni = $xml1->snmp->s0_1->impT0 / 800;

    $el_nt_topeni = $xml1->snmp->s0_3->impT1 / 800;
    $el_vt_topeni = $xml1->snmp->s0_3->impT0 / 800;

    $el_nt_rekuperace = $xml1->snmp->s0_2->impT1 / 1000;
    $el_vt_rekuperace = $xml1->snmp->s0_2->impT0 / 1000;

    $vod_dest = $xml1->snmp->s0_4->impT1 + $xml1->snmp->s0_4->impT0;

    $vlh_obyvak = round(substr($xml1->snmp->ad2_si, 0, 6), 1);
    $ad_hladina = substr($xml1->snmp->ad1_si, 0, 5);
} else {
     $sd1_live = false;
     echo "SDS1 dead \n";
}

if (fileexists($sds2)) {
    $xml2 = simplexml_load_file($sds2);
   
    $sd2_live = true;
    print_r($xml2);
   
    $t_venku = $xml2->snmp->temp_2;
    $t_garaz = $xml2->snmp->temp_10;
    $t_chodba = $xml2->snmp->temp_9;
    $t_bojler_dole = $xml2->snmp->temp_5;
    $t_bojler_nahore = $xml2->snmp->temp_8;
    $t_sani = $xml2->snmp->temp_1;
    $t_vyfuk = $xml2->snmp->temp_4;
    $t_privod = $xml2->snmp->temp_7;
    $t_odtah = $xml2->snmp->temp_6;

    $vod_hlavni = $xml2->snmp->s0_2->impT0;
    $vod_TUV = $xml2->snmp->s0_1->impT0;

    $vlh_odtah = round(substr($xml2->snmp->ad1_si, 0, 6), 1);

    $ad_ot_privod = round(substr($xml2->snmp->ad2_si, 0, 6) * 10, 1);
    $ad_ot_odtah = round(substr($xml2->snmp->ad3_si, 0, 6) * 10, 1);
} else {
     $sd2_live = false;
      echo "SDS2 dead \n" ;
}

$DATUMCAS = date ("Y-m-d H:i:s");
$TIMEDELTA = strtotime($DATUMCAS) - strtotime($DATUMCAS_old);

echo "Datum a cas: ".$DATUMCAS."\n";
echo "Datum a cas old: ".$DATUMCAS_old."\n";
echo "Od posledniho update:  ".$TIMEDELTA."s \n";
echo "\n";
echo "Teplota venku: ".$t_venku." C \n";
echo "Teplota garaz: ".$t_garaz." C \n";
echo "Teplota chodba: ".$t_chodba." C \n";
echo "Teplota puda: ".$t_puda." C \n";
echo "Teplota obyvak: ".$t_obyvak." C \n";
echo "Teplota bojler dole: ".$t_bojler_dole." C \n";
echo "Teplota vojler nahore: ".$t_bojler_nahore." C \n";
echo "Teplota sani: ".$t_sani." C \n";
echo "Teplota vyfuk: ".$t_vyfuk." C \n";
echo "Teplota privod: ".$t_privod." C \n";
echo "Teplota odtah: ".$t_odtah." C \n";

echo "Spotreba hlavni NT: ".$el_nt_hlavni." kWh \n";
echo "Spotreba hlavni VT: ".$el_vt_hlavni." kWh \n";
echo "Spotreba topeni NT: ".$el_nt_topeni." kWh \n";
echo "Spotreba topeni VT: ".$el_vt_topeni." kWh \n";
echo "Spotreba rekuperace NT: ".$el_nt_rekuperace." kWh \n";
echo "Spotreba rekuperace VT: ".$el_vt_rekuperace." kWh \n";
echo "Spotreba pitne vody: ".$vod_hlavni." l \n";
echo "Spotreba TUV vody: ".$vod_TUV." l \n";
echo "Spotreba destove vody: ".$vod_dest." l \n";
echo "Vlhkost odtah: ".$vlh_odtah." % \n";
echo "Vlhkost obyvak: ".$vlh_obyvak." % \n";
echo "Otacky privod: ".$ad_ot_privod." % \n";
echo "Otacky odtah: ".$ad_ot_odtah." % \n";
echo "Hladina: ".$ad_hladina." m \n";




//vypocet aktualu
$el_act_nt_hlavni = ($el_nt_hlavni - $el_nt_hlavni_old)/$TIMEDELTA * 3600000;
$el_act_vt_hlavni = ($el_vt_hlavni - $el_vt_hlavni_old)/$TIMEDELTA * 3600000;
$el_act_nt_topeni = ($el_nt_topeni - $el_nt_topeni_old)/$TIMEDELTA * 3600000;
$el_act_vt_topeni = ($el_vt_topeni - $el_vt_topeni_old)/$TIMEDELTA * 3600000;
$el_act_nt_rekuperace = ($el_nt_rekuperace - $el_nt_rekuperace_old)/$TIMEDELTA * 3600000;
$el_act_vt_rekuperace = ($el_vt_rekuperace - $el_vt_rekuperace_old)/$TIMEDELTA * 3600000;

$vod_act_hlavni = $vod_hlavni - $vod_hlavni_old;
$vod_act_TUV = $vod_TUV - $vod_TUV_old;
$vod_act_dest = $vod_dest - $vod_dest_old;

echo "Spotreba hlavni NT new: ".$el_nt_hlavni." W \n";
echo "Spotreba hlavni NT old: ".$el_nt_hlavni_old." W \n";
echo "Spotreba hlavni NT ted: ".$el_act_nt_hlavni." W \n";
echo "Spotreba hlavni VT ted: ".$el_act_vt_hlavni." W \n";
echo "Spotreba topeni NT: ".$el_act_nt_topeni." W \n";
echo "Spotreba topeni VT: ".$el_act_vt_topeni." W \n";
echo "Spotreba rekuperace NT: ".$el_act_nt_rekuperace." W \n";
echo "Spotreba rekuperace VT: ".$el_act_vt_rekuperace." W \n";
echo "Spotreba pitne vody: ".$vod_act_hlavni." l \n";
echo "Spotreba TUV vody: ".$vod_act_TUV." l \n";
echo "Spotreba destove vody: ".$vod_act_dest." l \n";


//zapis hodnot do DB


mysql_query("INSERT INTO 5min_data (
                    timestamp,
                    temp_venku,
                    temp_garaz,
                    temp_puda,
                    temp_chodba,
                    temp_obyvak,
                    temp_bojler_dole,
                    temp_bojler_nahore,
                    temp_sani,
                    temp_vyfuk,
                    temp_privod,
                    temp_odtah,
                    el_nt_hlavni,
                    el_vt_hlavni,
                    el_nt_topeni,
                    el_vt_topeni,
                    el_nt_rekuperace,
                    el_vt_rekuperace,
                    el_act_nt_hlavni,
                    el_act_vt_hlavni,
                    el_act_nt_topeni,
                    el_act_vt_topeni,
                    el_act_nt_rekuperace,
                    el_act_vt_rekuperace,
                    vod_hlavni,
                    vod_TUV,
                    vod_dest,
                    vod_act_hlavni,
                    vod_act_TUV,
                    vod_act_dest,
                    vlh_odtah,
                    vlh_obyvak,
                    ad_hladina,
                    ad_otacky_privod,
                    ad_otacky_odtah                    
                    )
VALUES (
        '$DATUMCAS',
    $t_venku,
    $t_garaz,
    $t_puda,
    $t_chodba,
    $t_obyvak,
    $t_bojler_dole,
    $t_bojler_nahore,
    $t_sani,
    $t_vyfuk,
    $t_privod,
    $t_odtah,
    $el_nt_hlavni,
    $el_vt_hlavni,
    $el_nt_topeni,
    $el_vt_topeni,
    $el_nt_rekuperace,
    $el_vt_rekuperace,
    $el_act_nt_hlavni,
        $el_act_vt_hlavni,
    $el_act_nt_topeni,
    $el_act_vt_topeni,
    $el_act_nt_rekuperace,
    $el_act_vt_rekuperace,
    $vod_hlavni,
    $vod_TUV,
    $vod_dest,
    $vod_act_hlavni,
    $vod_act_TUV,
    $vod_act_dest,
    $vlh_odtah,
    $vlh_obyvak,
    $ad_hladina,
    $ad_ot_privod,
    $ad_ot_odtah   
    )");

echo  mysql_error();

mysql_close($con);
?>