går det att fylla .RRD filer med MYSQL information?

RRDTool är en Linuxmjukvara som kan användas för att lagra data i Round-Robin Databaser för att sedan generera grafer utifrån den lagrade datan.
Kategoriregler
Vill du visa bilder i ditt inlägg? Använd funktionen "Ladda upp bilaga" nedanför textrutan!
Futei
Gillar hemautomation
Inlägg: 34
Blev medlem: 22 feb 2011, 16:10
Ort: Piteå

går det att fylla .RRD filer med MYSQL information?

Inlägg av Futei »

sitter och laborerar som tusan här hemma och undrar om det går att flytta informationen från MYSQL till RRD filen och i sådant fall HUR?
daromer
Hemautomation - det är mer än en hobby
Inlägg: 961
Blev medlem: 23 sep 2009, 09:31
Ort: Växjö

Re: går det att fylla .RRD filer med MYSQL information?

Inlägg av daromer »

Hej

Ja det går bra. Det är på det hållet man ska göra det och inte tvärt om då rrd avrundar och fular sig.

Men ivf som helst kan du flytta datan på flera sätt. Enklast är nog att använda sig av rrdupdate

Usage: rrdupdate filename
[--template|-t ds-name:ds-name:...]
time|N:value[:value...]

Sedan får du skapa ett script av dylikt slag som hämtar värdena från din mysql databas och lägger in dem i rrd filen.
Nu är inte mina script så snygga. Men om du inte har häng på hur du skulle gjort det kan jag klistra in lite exempel ur hur det går att göra med PHP-script för att fylla på en rrd databas med värden från mysql.
Futei
Gillar hemautomation
Inlägg: 34
Blev medlem: 22 feb 2011, 16:10
Ort: Piteå

Re: går det att fylla .RRD filer med MYSQL information?

Inlägg av Futei »

daromer skrev:Hej

Ja det går bra. Det är på det hållet man ska göra det och inte tvärt om då rrd avrundar och fular sig.

Men ivf som helst kan du flytta datan på flera sätt. Enklast är nog att använda sig av rrdupdate

Usage: rrdupdate filename
[--template|-t ds-name:ds-name:...]
time|N:value[:value...]

Sedan får du skapa ett script av dylikt slag som hämtar värdena från din mysql databas och lägger in dem i rrd filen.
Nu är inte mina script så snygga. Men om du inte har häng på hur du skulle gjort det kan jag klistra in lite exempel ur hur det går att göra med PHP-script för att fylla på en rrd databas med värden från mysql.
klistra gärna in hur du har gjort. så får jag kolla lite på det och anpassa och skriva om lite (Latmans metoden)
daromer
Hemautomation - det är mer än en hobby
Inlägg: 961
Blev medlem: 23 sep 2009, 09:31
Ort: Växjö

Re: går det att fylla .RRD filer med MYSQL information?

Inlägg av daromer »

jag pastar in 2 typer. Dels en php typ jag använt mig av. Du får en enkel statisk sådan.

Kod: Markera allt

 32 exec("rrdtool last rrd/ljussensor_volt.rrd",$ij);
 33 $starttid=$ij[0];
 34 if ( $starttid < $sens['dt'] ) $starttid = $sens['dt'];
 35 echo "starttid är: ";
 36 echo $starttid . "\n";
 37 $sluttid=time();
 38 
 39  if(connectToDB())
 40       {
 41           $result = mysql_query("select value1,value2,value4,unix_timestamp(dt) from value_long where sensor_serial = '2040    7F0D00000005'  and dt > from_unixtime($starttid) order by dt asc") or die ("Error: ".mysql_error()."<br>".$query);
 42           while($row = mysql_fetch_array($result))
 43           {
 44                 echo $row[3].":".$row[0].":".$row[1].":".$row[2]."\n";
 45                 exec("rrdtool update rrd/ljussensor_volt.rrd $row[3]:$row[0]:$row[1]:$row[2]");
 46                 echo ".";
 47          }
 48 
 49           closeConnectionToDB();
 50       }
 51       else
 52       {
 53           echo "Database failure, contact admin\n";
 54           return "No database connection";
 55         exit;
 56           }

Sedan har jag även använt endel i bash:

Kod: Markera allt

 6 SYNC="
  7 30A84F68120000E6:rokgas:3:
  8 26253EEC00000041:vinden1:1:
  9 26253EEC00000041:hum_vinden:1:
 10 261D35EC0000007D:hum2:1:
 11 1D72DE0C000000DB:celmatare:4:A
 12 1D1EFB0E00000048:Varmvatten:4:A
 13 "
 14 
 15 
 16  for ITEM in $SYNC
 17  do
 18         ROW2=""
 19         SENSOR=`expr $ITEM : '\(.*\):.*:.*:'`
 20         RRD=`expr $ITEM : '.*:\(.*\):.*:'`
 21         TYPE=`expr $ITEM : '.*:\(.*\):'`
 22         EXTRA=`expr $ITEM : '.*:.*:\(.*\)'`
 23         echo "s: $SENSOR t: $RRD n: $TYPE e: $EXTRA"
 24 
 25 
 26         in=`mysql -h 192.168.10.1 -u uuuu  -pxxxxxxx temps -N -e"SELECT sensors.shortname,sensor_ext.ext from sensors joi    n sensor_ext on sensors.sensor_type = sensor_ext.sensor_type where \
 27         sensors.sensor_serial = '$SENSOR' and sensors.sensor_type = $TYPE;" | awk '{print $1"_"$2}'`
 28         echo "test: $in"
 29 
 30         LASTTIME="`rrdtool last  rrd/${in}.rrd`"
 31         echo "last: $LASTTIME"
 32         sqlin=`mysql -h 192.168.10.1 -u uuuu  -pxxxxxxx temps -N -e"SELECT unix_timestamp(dt),cast(value as dec) FROM val    ue WHERE \
 33         sensor_serial = '$SENSOR' and dt > from_unixtime($LASTTIME) and extra= '$EXTRA' ORDER BY dt ASC;" | awk '{print $1"    :"$2}'`
 34 
 35         nr=`mysql -h 192.168.10.1 -u uuuuu  -pxxxxxx temps -N -e"SELECT round(count(*)/500) FROM value WHERE \
 36         sensor_serial = '$SENSOR' and dt > from_unixtime($LASTTIME) and extra= '$EXTRA' ORDER BY dt ASC;" `
 37         echo "nr: $nr"
 38         i=0
 39         for ROW in $sqlin
 40         do
 41                 let i+=1
 42                 ROW2="$ROW2 $ROW"
 43                 if [ $i -gt 500 ]; then
 44                         echo -n "$nr -"
 45                         rrdtool update rrd/${in}.rrd $ROW2
 46                         i=0; ROW2="";
 47                         let nr-=1
 48                  fi     
 49         done     
 50         #If anything is left then add that data aswell:
 51         rrdtool update rrd/${in}.rrd $ROW2

Nu var inte detta rakt av för temps men principen samma. Nu håller jag dock på att koda om och flyttar sakerna till rena dynamiska script men de är inte helt färdiga.
Användarvisningsbild
CirruZZ
Master Moderator
Inlägg: 1621
Blev medlem: 13 feb 2008, 16:46
Ort: Ystad

Re: går det att fylla .RRD filer med MYSQL information?

Inlägg av CirruZZ »

Annars så ska du kunna rita grafer direkt från data i DB via Sql. Jag har inte testat det själv dock... :wink:
daromer
Hemautomation - det är mer än en hobby
Inlägg: 961
Blev medlem: 23 sep 2009, 09:31
Ort: Växjö

Re: går det att fylla .RRD filer med MYSQL information?

Inlägg av daromer »

Nackdelen med att rita direkt från databasen är att det kommer bli sjukt slött om du ska grafa upp ett år t ex. Och du har värden varje minut... Så det är helt klart att föredra att mellanlagra om man ska visa större mängder. Men ska man bara visa senaste timmen eller ev dagen funkar det bra att köra via databasen direkt.
Användarvisningsbild
CirruZZ
Master Moderator
Inlägg: 1621
Blev medlem: 13 feb 2008, 16:46
Ort: Ystad

Re: går det att fylla .RRD filer med MYSQL information?

Inlägg av CirruZZ »

Visst är det så...
Futei
Gillar hemautomation
Inlägg: 34
Blev medlem: 22 feb 2011, 16:10
Ort: Piteå

Re: går det att fylla .RRD filer med MYSQL information?

Inlägg av Futei »

Jag kommer skriva till MYSQL med 3min
Sedan läser jag ut medelvärdet med 10min mellanrum av mätningarna från sista inmatningen till RRD och sista inmatningen till SQL och presenterar det som NU värde (bör bli lite jämnare kurva samt att jag klarar avbrott och annat också utan att få ett hål i grafen), hoppas jag ska hinna klart min bash script ikväll.
bjornsson
Hemautomation - det är mer än en hobby
Inlägg: 403
Blev medlem: 25 aug 2010, 09:06
Ort: Bräcke

Re: går det att fylla .RRD filer med MYSQL information?

Inlägg av bjornsson »

Hur gör man för att få detta att funka om man kör enligt denna guide?
http://wiki.temperatur.nu/index.php/RRDtool_HowTo

Har så jag loggar från owfs till mysql, skulle nu vilja hämta den infon via RRDTools så jag kan göra grafer av värdena =)

Har skapat RRD filen enligt guiden, men vet inte riktig hur jag ska göra skriptet så det hämtar infon från mysql istället för från owfs som wikin bygger på.



http://www.pavolmaria.org/index.php?id= ... emp_on_web
Sista delen på denna sida, kan det vara något att utgå från?
"Process temperatures from SQL-database "
Skriv svar