Mäta elförbrukning med rrdtool
Så du vill ha stenkoll på din elförbrukning?
Hårdvara som behövs:
- 1st 1wireadapter (DS9490R är att föredra då du får +5v på "köpet")
- 1st räknare för 1wire
- 1st LED-puls eller reflexdetektor.
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.
- 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.
Grundläggande definitioner för att förtydliga tankegången:
- Joule är SI-enheten för energi.
- <math>1W=1 Joule/Sekund</math>
- 1Wh är en Watt per sekund under 3600 sekunder. 1Wh är därmed 3600Joule.
Enligt information på elmätaren blinkar lysdioden 1000ggr per kWh. 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 COUNT=`cat /mnt/1wire/uncached/1D.94EC09000000/counters.A|sed -e s/" "//g` /usr/bin/rrdtool update energi.rrd N:$COUNT
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.
Grafgenerering: (graph.pl)
#!/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;
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.
Observera att du måste ange fullständiga sökvägar till databas och bildfiler om du vill köra skripten från crontab.