Skillnad mellan versioner av "Mäta elförbrukning med rrdtool"

Från Temperatur.nu
Hoppa till navigeringHoppa till sök
Rad 5: Rad 5:
 
*[https://www.m.nu/adapter-usb-1wire-ds9490r-p-49.html 1st 1wireadapter (DS9490R är att föredra då du får +5v på "köpet")]
 
*[https://www.m.nu/adapter-usb-1wire-ds9490r-p-49.html 1st 1wireadapter (DS9490R är att föredra då du får +5v på "köpet")]
 
*[https://www.m.nu/raknare-for-anslutning-till-1wirenat-version-2-p-160.html 1st räknare för 1wire]
 
*[https://www.m.nu/raknare-for-anslutning-till-1wirenat-version-2-p-160.html 1st räknare för 1wire]
*[https://www.m.nu/ledpuls-detektor-p-57.html 1st LED-puls eller reflexdetektor.]
+
*[https://www.m.nu/ledpuls-detektor-p-57.html 1st LED-puls detektor]
  
 
Installationen av detektorn kan kräva lite intrimmning;
 
Installationen av detektorn kan kräva lite intrimmning;
Rad 11: Rad 11:
 
*Koppla in allt och se till att detektorn är spänningsmatad. Lyser den röda lysdioden när sensorn får ljus på sig är spänningsmatningen ok.
 
*Koppla in allt och se till att detektorn är spänningsmatad. Lyser den röda lysdioden när sensorn får ljus på sig är spänningsmatningen ok.
 
**LED-detektorn skall placeras framför den blinkande lysdioden.
 
**LED-detektorn skall placeras framför den blinkande lysdioden.
**Reflexdetektorn skall placeras så att den grön/blå lysdioden belyser kanten på den snurrande skivan. Eventuellt kan det vara en bra idé att sätta detektorn på sidan av elmätaren så det inte finns en massa plåt nära skivan som kan reflektera ljuset. Justera detektorn i höjd- och sidled tills lysdioden lyser. Vänta tills den svarta markeringen på skivan passerar, den röda lysdioden skall då slockna. Justera eventuellt läget ytterligare. I bland krävs det att man tejpar en smal springa längs med den roterande skivan för att skärma av övriga reflektioner.
+
Skapa databas för rrdtool:
 +
rrdtool create ~/db/energi.rrd -s 60 DS:energi:COUNTER:1200:0:U RRA:AVERAGE:0.5:1:43200 RRA:AVERAGE:0.5:30:175200
 +
Det lämnas som övning åt läsaren att räkna ut för hur lång tid data sparas.
  
Grundläggande definitioner för att förtydliga tankegången:
 
  
*Joule är SI-enheten för energi.
+
Pulsvärdena skall kompenseras så det är "riktiga" Wh som loggas i databasen för att förenkla grafgenereringen.
*<math>1W = 1 Joule/Sekund</math>
+
Räkna ut vilken omräkningsfaktor för Wh dina pulser har genom att ta 1kWh, dvs 1000Wh, delat på antalet pulser/kWh.
*1Wh är en Watt per sekund under 3600 sekunder. 1Wh är därmed 3600Joule.
+
En elmätare som har 1000blink per kWh får en faktor på 1
 +
En elmätare som har 10000blink per kWh får en faktor på 0.1
 +
En elmätare som har 800blink per kWh får en faktor på 0.8
  
Enligt information på elmätaren blinkar lysdioden 1000ggr per kWh.
+
Scriptet för att läsa in och korrigera pulsvärdet ser ut så här:
Varje blink på min elmätare motsvarar 1000Wh/1000 = 1Wh, vilket motsvarar 1*3600 = 3600Joule.
 
  
Databasens minsta enhet är därmed 1/3600 Joule / Sekund, eller 1/3600Watt
 
 
Så för att få ut W:
 
Multiplicera antalet pulser med 3600
 
 
För att få ut förbrukad effekt Wh:
 
Multiplicera med 1 och summera över tid.
 
 
Lämpligt samplingsintervall kan räknas ut så här:
 
 
Vid en förbrukning på 1kW blir det 1000blinkningar /60 minuter = 16.67 blinkningar per minut. 1000W/16.67 = minsta enhet 58W. Samplar jag över 3 minuter får jag en upplösning på knappt 20W, vilket jag tycker är lagom.
 
 
Följande exempel är skrivna för databas- och grafgenererings-mjukvaran [[RRDTool]].
 
 
Skapa databas för rrdtool:
 
rrdtool create energi.rrd -s 180 DS:energi:COUNTER:1200:0:U RRA:AVERAGE:0.5:1:175200 RRA:AVERAGE:0.5:20:87600
 
 
 
Denna databas har ett minsta intervall på 3 minuter (180 sekunder). Värden för var 3:de minut sparas i 1 år, och medelvärden över 1h sparas i 10år.
 
 
Uppdatera databasen:
 
 
  #!/bin/bash
 
  #!/bin/bash
  COUNT=`cat /mnt/1wire/uncached/1D.94EC09000000/counters.A|sed -e s/" "//g`
+
#Exempel för en elmätare med 10000 blink per kWh. OBS . i stället för ,
  /usr/bin/rrdtool update energi.rrd N:$COUNT
+
OMRAKNINGSFAKTOR=0.1
 
+
  COUNT=`cat /tmp/1wire/uncached/1D.94EC09000000/counters.A|sed -e s/" "//g`
Värdet (ej cachat) från ingång A på räknaren läses in och eventuella mellanslag klipps bord. Databasen uppdateras sedan med det inlästa värdet.
+
  #Lite magi för att räkna med flyttal i BASH
 
+
VALUE=`echo "$OMRAKNINGSFAKTOR $COUNT" |awk '{printf "%.2f", ($1 * $2)}'`
Grafgenerering: (graph.pl)
+
/usr/bin/rrdtool update energi.rrd N:$COUNT'
 
 
    #!/usr/bin/perl
 
    use Getopt::Std;
 
    getopt('st');
 
    use RRDp;
 
    use CGI;
 
    $cgi = new CGI("");                  # Load the CGI routines
 
    RRDp::start "/usr/bin/rrdtool";
 
    $rrd = "energi.rrd";
 
    $starttime = "$opt_s";
 
    $endtime = time;
 
    $width = "800";
 
    $height = "500";
 
    RRDp::cmd "graph energi$opt_s.png --imgformat PNG --start '$starttime' --end '$endtime' --width $width --height $height -E --title '$opt_t' --vertical-label 'Watt' -l 0",
 
            "DEF:energi=$rrd:energi:AVERAGE",
 
            "CDEF:W=energi,3600,*",
 
            "CDEF:W_real=energi,1000,/",
 
            "VDEF:value_sum=W_real,TOTAL",
 
            "AREA:W#9999ee",
 
            "LINE1:W#000000",
 
            "GPRINT:value_sum:\"Förbrukad mängd\\\: %0.2lfkWh\\n\"",
 
            "GPRINT:W:MIN:\"Momentanförbrukning\\\: Min\\\: %0.2lf%sW\"",
 
            "GPRINT:W:AVERAGE:\"Medel\\\: %0.2lf%sW\"",
 
            "GPRINT:W:MAX:\"Max\\\: %0.2lf%sW\"",
 
            "GPRINT:W:LAST:\"Just nu\\\: %0.2lf%sW\\n\"",
 
            "COMMENT:\"Copyright Freiholtz Consulting 2010\"";
 
    $answer=RRDp::read;
 
 
    print $$answer;
 
 
   
 
   
    RRDp::end;
+
För att skapa en graf kan man sedan köra följande script:
 
+
/usr/bin/rrdtool graph /home/energi/public_html/graphs/energi-24h.png -E --imgformat PNG --start -24h --end now --width 600 --height 400 --title Exempelgraf --vertical-label 'Watt' -l 0 DEF:energi=/home/energi/public_html/db/energi.rrd:energi:AVERAGE CDEF:W=energi,3600,*  AREA:W#AAAAee LINE3:W#000000 CDEF:energiK=energi,1000,/ VDEF:value_sum=energiK,TOTAL GPRINT:value_sum:"Förbrukad mängd\: %0.2lfkWh\n" GPRINT:W:MIN:"Momentanförbrukning\: Min\: %0.2lf%sW" GPRINT:W:AVERAGE:"Medel\: %0.2lf%sW" GPRINT:W:MAX:"Max\: %0.2lf%sW" GPRINT:W:LAST:"Just nu\: %0.2lf%sW\n" COMMENT:"Copyright Freiholtz Consulting 2010"
 
 
  
Skriptet kan sedan exekveras med:
 
./graph.pl -s -24h -t 'Elförbrukning Blästadsgatan 12 det senaste dygnet'
 
Varpå en png-fil med namnet energi-24.h skapas i samma katalog som scriptet.
 
  
 
[[Fil:Energi-24h.png‎]]
 
[[Fil:Energi-24h.png‎]]

Versionen från 13 november 2010 kl. 15.22

Så du vill ha stenkoll på din elförbrukning?

Hårdvara som behövs:

Installationen av detektorn kan kräva lite intrimmning;

  • Koppla in allt och se till att detektorn är spänningsmatad. Lyser den röda lysdioden när sensorn får ljus på sig är spänningsmatningen ok.
    • LED-detektorn skall placeras framför den blinkande lysdioden.

Skapa databas för rrdtool:

rrdtool create ~/db/energi.rrd -s 60 DS:energi:COUNTER:1200:0:U RRA:AVERAGE:0.5:1:43200 RRA:AVERAGE:0.5:30:175200

Det lämnas som övning åt läsaren att räkna ut för hur lång tid data sparas.


Pulsvärdena skall kompenseras så det är "riktiga" Wh som loggas i databasen för att förenkla grafgenereringen. Räkna ut vilken omräkningsfaktor för Wh dina pulser har genom att ta 1kWh, dvs 1000Wh, delat på antalet pulser/kWh. En elmätare som har 1000blink per kWh får en faktor på 1 En elmätare som har 10000blink per kWh får en faktor på 0.1 En elmätare som har 800blink per kWh får en faktor på 0.8

Scriptet för att läsa in och korrigera pulsvärdet ser ut så här:

#!/bin/bash
#Exempel för en elmätare med 10000 blink per kWh. OBS . i stället för ,
OMRAKNINGSFAKTOR=0.1
COUNT=`cat /tmp/1wire/uncached/1D.94EC09000000/counters.A|sed -e s/" "//g`
#Lite magi för att räkna med flyttal i BASH
VALUE=`echo "$OMRAKNINGSFAKTOR $COUNT" |awk '{printf "%.2f", ($1 * $2)}'`
/usr/bin/rrdtool update energi.rrd N:$COUNT'

För att skapa en graf kan man sedan köra följande script:

/usr/bin/rrdtool graph /home/energi/public_html/graphs/energi-24h.png -E --imgformat PNG --start -24h --end now --width 600 --height 400 --title Exempelgraf --vertical-label 'Watt' -l 0 DEF:energi=/home/energi/public_html/db/energi.rrd:energi:AVERAGE CDEF:W=energi,3600,*  AREA:W#AAAAee LINE3:W#000000 CDEF:energiK=energi,1000,/ VDEF:value_sum=energiK,TOTAL GPRINT:value_sum:"Förbrukad mängd\: %0.2lfkWh\n" GPRINT:W:MIN:"Momentanförbrukning\: Min\: %0.2lf%sW" GPRINT:W:AVERAGE:"Medel\: %0.2lf%sW" GPRINT:W:MAX:"Max\: %0.2lf%sW" GPRINT:W:LAST:"Just nu\: %0.2lf%sW\n" COMMENT:"Copyright Freiholtz Consulting 2010"


Energi-24h.png

Observera att du måste ange fullständiga sökvägar till databas och bildfiler om du vill köra skripten från crontab.


Övrigt

Info om när räknaren slår över