Aan bovenstaande tekst kunnen geen rechten worden ontleend. Aan de tekst hieronder wel.
Ja. Dan is het resultaat dit:freggy schreef op woensdag 20 augustus 2014 @ 11:36:
--slope-mode al geprobeerd?

Oftewel: maakt geen moer uit.
[ Voor 6% gewijzigd door spaceboy op 20-08-2014 12:01 ]
Aan bovenstaande tekst kunnen geen rechten worden ontleend. Aan de tekst hieronder wel.
Daarmee krijg je zoiets:

[ Voor 19% gewijzigd door 0xDEADBEEF op 20-08-2014 13:14 ]
"Religion is an insult to human dignity. With or without it you would have good people doing good things and evil people doing evil things. But for good people to do evil things, that takes religion." - Steven Weinberg
Het lijkt nu of die 1/24h is.
Een wappie is iemand die gevallen is voor de (jarenlange) Russische desinformatiecampagnes.
Wantrouwen en confirmation bias doen de rest.
Sample rate is 1x per 5 minuten. Maar dan nog, dan zou er sowieso toch een vloeiende lijn moeten kunnen worden getrokken? Dat voorbeeld hierboven trouwens... maakt het nog uit dat daar een sinus wordt getekend (en dus overal "berekend" kan worden)?Juup schreef op woensdag 20 augustus 2014 @ 14:26:
Wat is je samplerate?
Het lijkt nu of die 1/24h is.
Aan bovenstaande tekst kunnen geen rechten worden ontleend. Aan de tekst hieronder wel.
1
2
| rrdtool graph $DIR/power_monthly.png --width 500 --height 125 --no-gridfit --title "AFGELOPEN 4 WEKEN" --start -1m --slope-mode DEF:powerin=$DIR/power.rrd:powerin:AVERAGE AREA:powerin$INPOWER_FILL LINE1:powerin$INPOWER_COLOR:"In$ DEF:powerout=$DIR/power.rrd:powerout:AVERAGE AREA:powerout$OTPOWER_FILL LINE1:powerout$OTPOWER_COLOR:"Uitgaande stroom [W]" |
En nog steeds: geen vloeiende lijn tussen de punten. Kan ik nog iets anders proberen?
Aan bovenstaande tekst kunnen geen rechten worden ontleend. Aan de tekst hieronder wel.
"Chaos kan niet uit de hand lopen"
Hmm... ik snap er nog steeds weinig van. Ik heb behalve bovenstaande voorbeeld namelijk uit dezelfde database ook een grafiek "van het laatste uur":storeman schreef op woensdag 20 augustus 2014 @ 16:36:
Ik zou eens naar de input data kijken, nu rendert ie inderdaad daggemiddeldes.

Dus... mijn idee is dat het aan de data niet kan liggen, toch?
Aan bovenstaande tekst kunnen geen rechten worden ontleend. Aan de tekst hieronder wel.
AVERAGE: remember the average rate of all PDPs in each CDP
Een wappie is iemand die gevallen is voor de (jarenlange) Russische desinformatiecampagnes.
Wantrouwen en confirmation bias doen de rest.
"Een serveradmin, voluit een serveradministrator, is dan weer een slavenbeheerder oftewel een slavendrijver" - Rataplan
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
| #!/bin/bash sleep 3 # 1 keer per 5 minuten, uitlezen via seriele interface van de slimme meter su - ernst -c "python /home/ernst/P1uitlezer.py > /var/www/P1log.txt" 2>&1 ##################################################################################### # Bijwerken stroomverbruik ##################################################################################### powerin=`/bin/grep "afgenomen vermogen" /var/www/P1log.txt | /usr/bin/awk '{print $3}'` powerout="-`/bin/grep "teruggeleverd vermogen" /var/www/P1log.txt | /usr/bin/awk '{print $3}'`" /usr/bin/rrdtool update /var/www/rrdpower/power.rrd N:$powerin:$powerout DIR="/var/www/rrdpower" #INPOWER_COLOR="#B5B690" INPOWER_COLOR="#FF0000" INPOWER_FILL="#F8D4D4" #OTPOWER_COLOR="#3B3131" OTPOWER_COLOR="#0012FF" OTPOWER_FILL="#E6E9FC" rrdtool graph $DIR/power_hourly.png --width 500 --height 125 --no-gridfit --title "AFGELOPEN UUR" --start -1h DEF:powerin=$DIR/power.rrd:powerin:AVERAGE AREA:powerin$INPOWER_FILL LINE1:powerin$INPOWER_COLOR:"Ingaande stroo$ DEF:powerout=$DIR/power.rrd:powerout:AVERAGE AREA:powerout$OTPOWER_FILL LINE1:powerout$OTPOWER_COLOR:"Uitgaande stroom [W]" rrdtool graph $DIR/power_daily.png --width 500 --height 125 --no-gridfit --title "AFGELOPEN 24 UUR" --start -1d DEF:powerin=$DIR/power.rrd:powerin:AVERAGE AREA:powerin$INPOWER_FILL LINE1:powerin$INPOWER_COLOR:"Ingaande stro$ DEF:powerout=$DIR/power.rrd:powerout:AVERAGE AREA:powerout$OTPOWER_FILL LINE1:powerout$OTPOWER_COLOR:"Uitgaande stroom [W]" rrdtool graph $DIR/power_weekly.png --width 500 --height 125 --no-gridfit --title "AFGELOPEN 7 DAGEN" --start -1w DEF:powerin=$DIR/power.rrd:powerin:AVERAGE AREA:powerin$INPOWER_FILL LINE1:powerin$INPOWER_COLOR:"Ingaande st$ DEF:powerout=$DIR/power.rrd:powerout:AVERAGE AREA:powerout$OTPOWER_FILL LINE1:powerout$OTPOWER_COLOR:"Uitgaande stroom [W]" rrdtool graph $DIR/power_monthly.png --width 500 --height 125 --no-gridfit --title "AFGELOPEN 4 WEKEN" --start -1m --slope-mode DEF:powerin=$DIR/power.rrd:powerin:AVERAGE AREA:powerin$INPOWER_FILL LINE1:powerin$INPOWER_COLO$ DEF:powerout=$DIR/power.rrd:powerout:AVERAGE AREA:powerout$OTPOWER_FILL LINE1:powerout$OTPOWER_COLOR:"Uitgaande stroom [W]" rrdtool graph $DIR/power_yearly.png --width 500 --height 125 --no-gridfit --title "AFGELOPEN JAAR" --start -1y DEF:powerin=$DIR/power.rrd:powerin:AVERAGE AREA:powerin$INPOWER_FILL LINE1:powerin$INPOWER_COLOR:"Ingaande stroo$ DEF:powerout=$DIR/power.rrd:powerout:AVERAGE AREA:powerout$OTPOWER_FILL LINE1:powerout$OTPOWER_COLOR:"Uitgaande stroom [W]" |
Deze script gaat uit van een "log-file" (P1log.txt) die elke 5 minuten gemaakt wordt. Op regel 4 van bovenstaande file zie je dat (gebeurt via P1uitlezer.py). Deze log-file ziet er zo uit:
1
2
3
4
5
6
7
8
9
10
11
| Meting van 2014-08-10 11:12 geleverd laag tarief (+T1) 000106.594 kWh geleverd hoog tarief (+T2) 000127.802 kWh teruggeleverd laag tarief (-T1) 000004.547 kWh teruggeleverd hoog tarief (-T2) 000001.006 kWh afgenomen vermogen 0 W teruggeleverd vermogen 1120 W gas 15212 dm3 |
Dit script maakt dus elke keer 5 plaatjes (laatste uur, laatste 24 uur, laatste 7 dagen, laatste 30 dagen en laatste 365 dagen) zoals hierboven twee varianten in de thread staan...
Is hieraan te zien wat er nu fout is?
Aan bovenstaande tekst kunnen geen rechten worden ontleend. Aan de tekst hieronder wel.
Moet je niet '--step 5' toevoegen als parameter?
[ Voor 14% gewijzigd door storeman op 20-08-2014 23:08 . Reden: Arg ]
"Chaos kan niet uit de hand lopen"
Ben zelf ook bezig met uitlezen van slimme meter, maar dan met Arduino. Zie m'n blogpost: ThinkPad's TweakBlog: Slimme meter P1 poort uitlezen met Arduino en waarden opslaan in MySQL database onderaan staat plaatje van de Highcharts grafiek. Supersimpele code zit daar achter
Een supervloeiende lijn krijg je er sowieso niet uit trouwens, dat zie je ook wel in mijn plaatje. Volgens mij gebruikt Highcharts daar ook wel truukjes voor om het er niet zo 'getrapt' uit te laten zien. Soort interpoleren van data die tussen twee meetpunten ligt en adhdv een lijn plot.
[ Voor 17% gewijzigd door ThinkPad op 20-08-2014 23:12 ]
Ik gok dat de resolutie waarmee je datapoints kunnen worden opgeslagen (voordat ze gemiddeld gaan worden) te laag is.
En verder is rrdtool nogal erg basic en no-nonsense in z'n grafieken .. er is weinig aan "op te leuken", grote voordeel is dat de database size fixed is
[ Voor 8% gewijzigd door gekkie op 20-08-2014 23:13 ]
Edit: alhoewel, na een second look is die Highcharts toch wel heel tof. Ga ik 's mee klooien. Thanks!
@gekkie: jawel, die code heb ik:
1
2
3
4
5
6
7
8
9
| #!/bin/bash rrdtool create power.rrd --start N --step 300 \ DS:powerin:GAUGE:600:U:U \ DS:powerout:GAUGE:600:U:U \ RRA:AVERAGE:0.5:1:12 \ RRA:AVERAGE:0.5:1:288 \ RRA:AVERAGE:0.5:12:168 \ RRA:AVERAGE:0.5:12:720 \ RRA:AVERAGE:0.5:288:365 |
Heb me er nog niet echt heel erg in verdiept, had al wel gezien dat die database fixed size is. Dat is best knap, maar ik snap dat je dan inderdaad nogal een concessie doet op precisie. Ook daarom: ik houd niet vast aan rrdtool, ik was alleen benieuwd of ik met mijn huidige rrdtool redelijk simpel vloeiende lijnen kon maken.
[ Voor 4% gewijzigd door spaceboy op 21-08-2014 08:18 ]
Aan bovenstaande tekst kunnen geen rechten worden ontleend. Aan de tekst hieronder wel.
--step|-s step (default: 300 seconds)spaceboy schreef op donderdag 21 augustus 2014 @ 08:03:
@ThinkPad: ah, interessant! Hier ga ik de komende weken mee verder. Was ook al van plan om een andere database in te gaan zetten en jouw opzet gaat daar zeker bij helpen. Voorlopig had ik door tijdgebrek gewoon een zo-snel-mogelijk-als-het-maar-werkt dingetje in elkaar gevrot. Zijn er nog meer alternatieven behalve Highcharts en Flot? Die grafieken zijn al een stuk beter dan die rommel van mij, maar ik vind ze nog niet mind-blowing gaaf.
Edit: alhoewel, na een second look is die Highcharts toch wel heel tof. Ga ik 's mee klooien. Thanks!![]()
@gekkie: jawel, die code heb ik:
code:
1 2 3 4 5 6 7 8 9 #!/bin/bash rrdtool create power.rrd --start N --step 300 \ DS:powerin:GAUGE:600:U:U \ DS:powerout:GAUGE:600:U:U \ RRA:AVERAGE:0.5:1:12 \ RRA:AVERAGE:0.5:1:288 \ RRA:AVERAGE:0.5:12:168 \ RRA:AVERAGE:0.5:12:720 \ RRA:AVERAGE:0.5:288:365
Heb me er nog niet echt heel erg in verdiept, had al wel gezien dat die database fixed size is. Dat is best knap, maar ik snap dat je dan inderdaad nogal een concessie doet op precisie. Ook daarom: ik houd niet vast aan rrdtool, ik was alleen benieuwd of ik met mijn huidige rrdtool redelijk simpel vloeiende lijnen kon maken.
Specifies the base interval in seconds with which data will be fed into the RRD.
Je hebt nu een stepsize van 300 seconden, dus de basis eenheid in de DB (zonder aggregatie) is 1 value per 5 minuten. Dus als jij een grafiekje maakt van zeg het laatste uur .. en dat is zeg 600 pixels breed (10 pixels per minuut dus) dan is elke value al (300/60)*10 = 50 pixels breed.
Aan gezien je data max eens de 10 seconden binnenkomt .. zou je een stepsize moeten hebben van 10 om alle meetpunten op te slaan .. en het meest "vloeiende" resultaat te krijgen (nooit echt vloeiend aangezien rrd van zich zelf niet afrond).
Opzich hoef je niet naar mysql .. uit rrd zou je ook de ruwe data moeten kunnen krijgen en in bijvb highcharts of een andere lib duwen. Die hebben meestal smooth functies waarmee je dan smooth kunt interpoleren. Mishandeling van de werkelijkheid .. maar voor het oog wel mooier
edit:
En voor die 4 weken grafiek zou je ook moeten uitrekenen hoeveel datapunten je nodig hebt als je bijvb 1 pixel == 1 datapunt wilt hebben. En vervolgens je aggregatie functie daar op aanpassen.
[ Voor 4% gewijzigd door gekkie op 21-08-2014 10:31 ]

[ Voor 15% gewijzigd door schermer op 21-08-2014 10:37 ]
Je slaat elke 300s 1 waarde opspaceboy schreef op donderdag 21 augustus 2014 @ 08:03:
#!/bin/bash
rrdtool create power.rrd --start N --step 300 \
Je hebt twee dataseries, in en uit.DS:powerin:GAUGE:600:U:U \
DS:powerout:GAUGE:600:U:U \
Van de 300s meetpunten worden er 12 opgeslagen (1 uur)RRA:AVERAGE:0.5:1:12 \
Daarnaast sla je van diezelfde meetpunten er nog eens 288 op (1 dag)RRA:AVERAGE:0.5:1:288 \
Vervolgens sla je 168 meetpunten van 1 uur op (7 dagen)RRA:AVERAGE:0.5:12:168 \
En nog eens dezelfde 1 uurs meetpunten, maar dan sla je het 30 dagen opRRA:AVERAGE:0.5:12:720 \
En uiteindelijk sla je 288*300=86400= meetpunt van 1 dag op voor een jaar.RRA:AVERAGE:0.5:288:365
Als je nu een grafiek gaat maken die je '4 weken' noemt maar waar je de start op -1maand zet dan vraag je aan de rrd om data van de laatste 31 dagen (zie je eigen grafiek, 4 volledige weken = 28 dagen + 3 extra meetpunten). Er is maar een RRA waar je 31 dagen aan data in hebt zitten, namelijk de laatste met meetpunten van 1 dag. Rrdtool zal dan ook die meetpunten pakken. en dan krijg je een blokkerige grafiek.
De grafiek met het afgelopen uur heeft hetzelfde euvel. Aangezien je elke 300s 1 meetpunt hebt als resolutie krijg je maar 12 waardes in die grafiek.
Je kan dus meerdere dingen doen, maar ik zou gewoon je database aanpassen naar een wat logischer formaat met veel meer data. Ik las ergens dat je elke 10s data binnen krijgt, dan zou ik gewoon elke 30s de data opslaan. En vervolgens kiezen hoeveel datapunten je in de grafieken wil. Aangezien je grafieken van 500 pixels breed maakt dan wil je minimaal 500 punten opslaan. Maar ik zou minimaal 1000 punten opslaan zodat je de grafieken later ook nog groter kan maken.
Vervolgens gaan we bedenken welke grafieken je wil laten zien. Dan zou ik voor de hoogste resolutie gaan (30s) en dan 500 of 1000 waardes. Dan krijg je een grafiek van de laatste 250 of 500 minuten of 4-8 uur. Je kan er ook 1 of 2 uur van maken zonder dat het al te lelijk wordt: RRA:AVERAGE:0.5:1:1000
Dan wil je een grafiek van de afgelopen dag. 86400 seconden, 1000px breed => meetpunt van 86,4 seconden => maken we 60s van en dan iets meer opslaan zodat hij altijd die step pakt: RRA:AVERAGE:0.5:2:1500
Weekgrafiek van 7 dagen, 604800s, 1000 px, 604,8s per meetpunten, afronden => step van 600s/30s =20 nemen, en dan 1100 punten -> 660k seconden: RRA:AVERAGE:0.5:20:1100
Maandgrafiek: 31 dagen, 2678400s, 40m/30s = 80 step, 1200 values: RRA:AVERAGE:0.5:80:1200
Jaargrafiek: 365 dagen, 31536000s, 8u/30s = 960 step, 1100 punten: RRA:AVERAGE:0.5:960:1100
25 jaar grafiek: RRA:AVERAGE:0.5:24000:1100
1
2
3
4
5
6
7
8
9
| rrdtool create power.rrd --start N --step 30 \ DS:powerin:GAUGE:60:U:U \ DS:powerout:GAUGE:60:U:U \ RRA:AVERAGE:0.5:1:1000 \ RRA:AVERAGE:0.5:2:1500 \ RRA:AVERAGE:0.5:20:1100 \ RRA:AVERAGE:0.5:80:1200 \ RRA:AVERAGE:0.5:960:1100 \ RRA:AVERAGE:0.5:24000:1100 \ |
Het lijkt heel veel data, maar dat is het niet. Je slaat maar 60k waardes op. Maar op deze manier kun je wel de bovenstande grafieken maken waarbij 1 pixel 1 step is in plaats van ~50 pixels = 1 step zoals in je andere grafieken.
"Een serveradmin, voluit een serveradministrator, is dan weer een slavenbeheerder oftewel een slavendrijver" - Rataplan
Daarnaast sla je gewoon aan het einde van de week/maand de json data of png op en die knoop je handig in een html pagina.
Json dumpje is 3KB, dus van iedere dag + de weken kom je dan uit op 1,3Mb per jaar.
Wow, bedankt voor de uitleg en het verhaal! Ik snap het ook nog volgens mij!Kees schreef op donderdag 21 augustus 2014 @ 11:44:
... heel verhaal
Ik heb met jouw script-voorbeeld een nieuwe database (...v2) aangemaakt. Met dezelfde input-data (die overigens elke 5 minuten wordt ververst, niet elke 10 seconden, maar dat kan ik best wel aanpassen naar elke 30 sec) vul ik die database v2. Die lijkt alleen niets te doen. Ik het de rrdtool update dus gelijk gelaten. Maakt het uit als je zo'n database aanmaakt die je vertelt dat je hem elke 30 seconden gaat vullen, maar dat slechts 1x per 5 minuten doet? Of heb ik iets anders fout gedaan? Hmmm...
Aan bovenstaande tekst kunnen geen rechten worden ontleend. Aan de tekst hieronder wel.

@schermer: heb jij ergens dat JSON verhaal gevonden met een how-to ofzo? Ik ben geen JSON kenner (zover ik weet is het een soort XML-variant, maar daar houdt mijn kennis op), maar het klinkt wel als een interessante optie om te bekijken als ik weer zin heb om verder te tweaken...
[ Voor 20% gewijzigd door spaceboy op 23-08-2014 11:58 ]
Aan bovenstaande tekst kunnen geen rechten worden ontleend. Aan de tekst hieronder wel.
Maar ik heb een Kaifa 305 meter en als ik die uitlees op een willekeurig tijdstip dan weet je nooit of het direct is, of dat het pakweg 5 a 10 seconden duurt voordat hij de gegevens uitspuugt. Ik had hiervoor dus elke 30 seconden een jobje klaargezet, maar dan liep ik per uur 1 a 3 meetmomten mis omdat (vermoed ik) de vorige meting nog niet klaar was. Weet de details niet, maar vind het geen ramp: elke minuut vind ik prima. Wat is jouw reden om terug te gaan naar de minuut? En wat meet jij allemaal? Heb jij nog todo wensen? En wat is jouw ervaring met de stabiliteit van jouw systeem?
[ Voor 6% gewijzigd door spaceboy op 23-08-2014 14:19 ]
Aan bovenstaande tekst kunnen geen rechten worden ontleend. Aan de tekst hieronder wel.
Maar dat gebeurt nu dus om de 10sec, en op die manier raakt m'n database wel erg snel vol. Tevens is de 10sec alleen interessant voor als ik _NU_ wil weten wat ik gebruik. Achteraf grafiekje bekijken kan ook prima met een resolutie van 1 min.
Ik lees alles wat de meter uitspuugt: laagtarief-meterstand, hoogtarief-meterstand, huidig verbruik, gasmeterstand.
Huidig verbruik plot ik met een grafiek (zie blog), en op een aparte pagina (die ik op een iPad aan de muur toon) doe ik nog wat dingen als huidig verbruik (daar wil ik dus wel die 10s resolutie behouden, moet nog even uitzoeken hoe ik telegram om de minuut uitlees, maar actueel verbruik wel om de 10s). Ook toon ik op die pagina het dagverbruik, maandverbruik ( MAX(meterstand) - MIN(meterstand) ), gemiddelde elektriciteitsverbruik afgelopen uur etc.
(in mijn geval in een tekst bestandje .. wat dan weer geparsed wordt door een zabbix agent .. grafiekjes worden dus ook door zabbix gemaakt. Opzich geen hele wauwie grafiekjes .. maar ach .. staat het bij de rest van de monitoring er tussen)