Sida 1 av 1

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

Postat: 09 mar 2011, 21:54
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?

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

Postat: 09 mar 2011, 22:52
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.

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

Postat: 09 mar 2011, 23:04
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)

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

Postat: 09 mar 2011, 23:20
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.

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

Postat: 10 mar 2011, 09:27
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:

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

Postat: 10 mar 2011, 12:20
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.

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

Postat: 10 mar 2011, 12:57
av CirruZZ
Visst är det så...

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

Postat: 10 mar 2011, 14:37
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.

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

Postat: 11 maj 2013, 22:42
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 "