Enklast först: partitioner osv, Diskinternals LinuxReader gav en helt annan mappstruktur =) Så nu finns troligen en fullständig kopia på SD-kortetmotoz skrev:Ja då kan jag inte svara på vad som händer. Cron borde köra varannan timme med den confen, men uppenbarligen händer nåt annat... Du kan ju börja med att ta bort skriptet från cron.d och kolla att det faktiskt kommer därifrån.
Om du kör synkningen med rsync enligt vad som fanns i första länken ovan "rsync --quiet --archive --delete --recursive --force" så tar den bort filer i destinationsmappen som inte finns i startmappen (--delete parametern).
Du kan göra en webbapplikation som begär nya grafer vid behov med valbart innehåll, då du kör 'rrdtool graph' så väljer du ju vilka linjer som ska ritas i grafen och vilket tidsspann. Alternativt så kan du generera bara data från rrdtool i json eller xmlformat utan att rita någon bildfil, sedan finns det fina javascriptbibliotek färdiga som ritar grafer utgående från det. Då kan man slå av och på linjer i grafen utan att ladda om nåt från servern.
Jag kör med json data från rrdtool och ritar graferna med flot, det blir snyggare grafer än rrdtools bitmapbilder plus att de blir fint skalbara så de passar alltid skärmstorleken på allt från mobiler till 32tummare.
Angående partitionerna så har du väl installerat via NOOBS, om du installerar rasbian direkt så har du bara en ext4 partition och ingen recovery FAT32 partition.
Kod: Markera allt
0 0-23/2 * * * root /usr/sbin/service persist-ramdisk sync > /dev/null
Kod: Markera allt
0 0,2,4,6,8,10,12,14,16,18,20,22 * * * root /usr/sbin/service persist-ramdisk sync > /dev/null
Kod: Markera allt
# File doesn't exist, create new rrd-file
echo "Creating RRDtool DB for outside temp sensor"
rrdtool create $directory$filename \
--step 150 \
DS:outsidetemp:GAUGE:300:-50:60 \
RRA:AVERAGE:0.5:1:576 \
RRA:AVERAGE:0.5:2:2016 \
RRA:AVERAGE:0.5:4:52560 \
RRA:AVERAGE:0.5:24:175200 \
RRA:MAX:0.5:1:5760 \
RRA:MAX:0.5:2:2016 \
RRA:MAX:0.5:4:52560 \
RRA:MAX:0.5:24:175200 \
RRA:MIN:0.5:1:5760 \
RRA:MIN:0.5:2:2016 \
RRA:MIN:0.5:4:52560 \
RRA:MIN:0.5:24:175200
Kod: Markera allt
0 0-23/2 * * * root /usr/sbin/service persist-ramdisk sync > /dev/null
Sedan sist har jag brottats med grafer, databaser och annat. Jag har lyckats skapa en rrddatabas till. Men hur jag än stångar pannan blodig får jag inte shellscript att fungera att skriva till denna databas. Scriptet ser ut på detta vis och jag har testat massor av varianter, men det blir inget exikverbart script av det. Listar man innehåll i terminalfönstret så blir ju körbara script gröna, mina skitscript är VITA! Ahhh!motoz skrev:Intressant, den crontab syntaxen var obekant för mig. Men vid närmare eftertanke så ska det förstås inte vara en * för minuterna och 0 */2 * * * borde alltså fungera också. En * i början betyder ju faktiskt 'kör varje minut' så då har inte 'varannan timme' någon betydelse längre.
Flot är javascript bibliotek som körs i webbläsaren, det finns i en zipfil på http://www.flotcharts.org/ Du behöver alltså en webbserver och en webbsida med en <script> tag för att ladda över flot till webbläsaren.
JSON är inget program det är ett format att skriva strukturerad data i textform https://en.wikipedia.org/wiki/JSON.
Du kan ge parametern "--imgformat JSON" till rrdtool graph kommandot för att få grafdata i jsonformat (textformat alltså) istället för att få en bildfil. Tyvärr ger inte rrdtool ut jsondata i en form som flotcharts direkt kan använda, utan du måste läsa in utdata från rrdtool graph och bearbeta det i en form som flotchart vill ha det. Det kan du göra i ett program som körs på webbservern, tex php eller python, eller så gör du det i webbläsaren med lite egen javascriptkod. Jag känner inte till nåt färdigt program för det (annat än mitt eget...)
Det är bara att lägga till en DS för varje sensor till rrdtool create kommandot. Du kan inte få sensordata med olika tidsstämpel i RRD. Då du definierar databasen så berättar du att nytt data kommer tex med 150s mellanrum. Då skapas en databas med en plats för varje DS för varje tidpunkt som databasen omfattar, där platsen i databasen motsvarar dess tidsstämpel. Alla data är från början odefinierade och missar man att uppdatera en lucka i rätt tid så kommer RRD att betrakta den sensorn i den tidpunkten som odefinierad. Sen då du uppdaterar databasen så måste du uppdatera alla sensorer i samma kommando, annars saknas ju de andra sensorerna för den tidspunkten och blir odefinierade. Man kan alltså inte uppdatera en sensor åt gången.
Kod: Markera allt
#!/bin/bash
OutsideTempSensor="28.FFE45E001602"
InsideTempSensor="28.FFD06D001602"
RRDDataDirectory="/mnt/ramdisk/rrddata/rrdbas/"
RRDDataFile="temp_database.rrd"
# Get temps form OWFS
OutsideTemp=`cat /mnt/ramdisk/1wire/$OutsideTempSensor/temperature|sed -e s/" "//g|awk '{$1=$1 + 0.005;printf "%.2f", $1}'`
InsideTemp=cat /mnt/ramdisk/1wire/$InsideTempSensor/temperature|sed -e s/" "//g|awk '{$1=$1 + 0.005;printf "%.2f", $1}'`
#Update RRD database
rrdtool update $RRDDataDirectory$RRDDataFile N:$OutsideTemp;N:$InsideTemp
echo $OutsideTemp;$InsideTemp
Kod: Markera allt
#!/usr/bin/perl
use RRDs;
my $cur_time = time();
my $start_time = $cur_time - 86400; # set end time to 24 hours ago
RRDs::graph "/mnt/ramdisk/www/graph_temp.png",
"--start= $start_time",
"--end= $cur_time",
"--title= Temp ute",
"--height= 300",
"--width= 500",
"--vertical-label= °C",
"DEF:OutsideTemp=/mnt/ramdisk/rrddata/outside_temp.rrd:outsidetemp:AVERAGE",
"COMMENT:\t\t\t\tNu Medel Max Min\\n",
"HRULE:0#0000FF",
"LINE2:OutsideTemp#000000:Ute\t\t\t",
"GPRINT:OutsideTemp:LAST:%6.1lf",
"GPRINT:OutsideTemp:AVERAGE:%6.1lf",
"GPRINT:OutsideTemp:MAX:%6.1lf",
"GPRINT:OutsideTemp:MIN:%6.1lf\\n";
"LINE2:OutsideTemp#FFAA00:Ute\t\t\t",
"GPRINT:OutsideTemp:LAST:%6.1lf",
"GPRINT:OutsideTemp:AVERAGE:%6.1lf",
"GPRINT:OutsideTemp:MAX:%6.1lf",
"GPRINT:OutsideTemp:MIN:%6.1lf\\n";
my $err=RRDs::error;
if ($err) {print "problem generating the graph: $err\n";}
print "Done!\n"
Kod: Markera allt
sudo i2cdetect -y 1
Kod: Markera allt
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- 1b -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
Kod: Markera allt
pi@raspberrypi:~ $ cd /mnt/ramdisk/rrddata/rrdbas
pi@raspberrypi:/mnt/ramdisk/rrddata/rrdbas $ rrdtool lastupdate temp_database.rrd
ERROR: mmaping file 'temp_database.rrd': Ogiltigt argument
pi@raspberrypi:/mnt/ramdisk/rrddata/rrdbas $
Kod: Markera allt
ls -l
Du är en klippa! Svaret blev:motoz skrev:Du får det felmeddelandet om din databasfil existerar men har storleken noll. Körför att kolla om du har filstorlek noll på databasen.Kod: Markera allt
ls -l
Det är då nåt fel i kommandot som skapar databasen. Får du inget felmeddelande då du kör skriptet som ska skapa en ny databas?
Kod: Markera allt
#!/bin/bash
# Script to create rrd-file
# 24h with 2,5 min resolution
# 7d with 5 min resolution
# 1y with 10 min resolution
# 20y with 1h resolution
directory="/mnt/ramdisk/rrddata/rrdbas/"
filename="temp_db.rrd"
# Check i file already exists
if [ ! -f "$directory$filename" ]
then
# File doesn't exist, create new rrd-file
echo "Creating RRDtool DB for outside temp sensor"
rrdtool create $directory$filename \
--step 150 \
DS:Ute:GAUGE:300:-50:60 \
DS:Inne:GAUGE:300:-50:60 \
DS:Sovrum:GAUGE:300:-50:60 \
DS:Altan:GAUGE:300:-50:100 \
DS:Syd:GAUGE:300:-50:60 \
DS:Norr:GAUGE:300:-50:60 \
DS:OST:GAUGE:300:-50:60 \
DS:Temp_1:GAUGE:300:-50:60 \
DS:Temp_2:GAUGE:300:-50:60 \
DS:Temp_3:GAUGE:300:-50:60 \
DS:Drifttid_VP:COUNTER:300:50:60 \
DS:Drift_Pool:COUNTER:300:-50:60 \
DS:El:COUNTER:300:-50:60 \
RRA:AVERAGE:0.5:1:576 \
RRA:AVERAGE:0.5:2:2016 \
RRA:AVERAGE:0.5:4:52560 \
RRA:AVERAGE:0.5:24:175200 \
RRA:MAX:0.5:1:5760 \
RRA:MAX:0.5:2:2016 \
RRA:MAX:0.5:4:52560 \
RRA:MAX:0.5:24:175200 \
RRA:MIN:0.5:1:5760 \
RRA:MIN:0.5:2:2016 \
RRA:MIN:0.5:4:52560 \
RRA:MIN:0.5:24:175200
echo "Done!"
else
echo $directory$filename" already exists, delete it first."
fi