Měření teploty pomocí domácího routeru Turris
První moje kroky vedly k nejsnadnějšímu způsobu a použití programu DigiTemp což je jednoúčeloví program který umí jen měřit teplotu což bylo dobré pro základní zkoušení, ale nejedná se o vhodné řešení pro náročnější projekty jako širší využití sběrnice 1-wire. Tématu plného využití sběrnice 1-wire se bude věnovat další článek. Nyní se spokojíme s tím že se jedná o sběrnici vyvinutou společností Dallas Semiconductor. Pro čtení teploty jsem využil OWFSShell který zobrazí kompletně celou sběrnici 1-wire jako adresářovou strukturu,ale zároveň dokáže přímo přistupovat s menší režii než základní OWFS.
Pro vytvoření databáze použijeme následující příkaz:
rrdtool create /mnt/nas1/mydigitemp/venku.rrd –step 600 DS:temp:GAUGE:1000:-273:5000 RRA:AVERAGE:0.5:1:525600 RRA:MIN:0.5:1:525600 RRA:MAX:0.5:1:525600
Tímto jsme si vytvořili databázi která obsahuje 3 hodnoty „Time“, „temp0“ a „temp1“ s kapacitou pro uložení hodnot co 10 minut na 10 let přičemž výsledný soubor je stále stejně velký a při hustotě záznamu 1 hodnota za 10 minut je datová náročnost cca 1MB na hodnotu a rok.
Nyní když máme databázi si jí můžeme naplnit daty což si předvedeme na následujícím scriptu který již pracuje se dvěma soubory databáze. Tato možnost se hodí pokud chceme v průběhu doby přidávat další čidla a zároveň nechceme přijít o data z dřívější doby.
TEMP0cat=$(owread -s localhost:3000 /28.32F0F8050000/temperature) TEMP0=`echo $TEMP0cat | cut -c -4` TEMP1cat=$(owread -s localhost:3000 /28.DD1AF8050000/temperature)
TEMP1=`echo $TEMP1cat | cut -c -4` TEMP2cat=$(owread -s localhost:3000 /28.F1DDE5050000/temperature)
TEMP2=`echo $TEMP2cat | cut -c -4` TEMP3cat=$(cowread -s localhost:3000 /28.A83780060000/temperature)
TEMP3=`echo $TEMP3cat | cut -c -4` TEMP4cat=$(owread -s localhost:3000 /28.42380A060000/temperature)
TEMP4=`echo $TEMP4cat | cut -c -4` TEMP5cat=$(owread -s localhost:3000 /28.E6A77F060000/temperature)
TEMP5=`echo $TEMP5cat | cut -c -4` TIME=$(date +%s) /usr/bin/rrdtool update /data/mydigitemp/mydigitemp.rrd $TIME:$TEMP0:$TEMP1 /usr/bin/rrdtool update /data/mydigitemp/teplota.rrd $TIME:$TEMP2:$TEMP3:$TEMP4:$TEMP5
Tak data by jsme uložena měla a jak je nyní zobrazit? Přímo RRD tool obsahuje funkce pro přímé vykreslení dat jako obrázku ve formátu png. Práci s tímto nástrojem pro vykreslování si ukážeme na následujícím scriptu.
sleep 15 RRD_FILE=“/data/mydigitemp/mydigitemp.rrd“
RRD_FILE2=“/data/mydigitemp/teplota.rrd“
DST_FILE=“/www3/mydigitemp/$1.png“
RRD_PARAMETERS=‘
$DST_FILE –end=$(date +%s) –vertical-label „Teplota .C“ –width 1700 –height 800 –lower-limit 0
DEF:temp0=$RRD_FILE:temp1:AVERAGE
DEF:temp1=$RRD_FILE:temp0:AVERAGE
DEF:temp2=$RRD_FILE2:temp0:AVERAGE
DEF:temp3=$RRD_FILE2:temp1:AVERAGE
DEF:temp4=$RRD_FILE2:temp2:AVERAGE
DEF:temp5=$RRD_FILE2:temp3:AVERAGE
LINE1:temp0#FF1493:“10 minutovy prumer teploty Venku\\n“
LINE2:temp1#D2691E:“10 minutovy prumer teploty v Kuchyni\\n“
LINE3:temp2#FF4500:“10 minutovy prumer teploty v Obyvaku\\n“
LINE4:temp3#FFFF00:“10 minutovy prumer teploty na Pude\\n“
LINE5:temp4#AFFF2F:“10 minutovy prumer teploty v Racku\\n“
LINE6:temp5#00FF00:“10 minutovy prumer teploty v Topnem okruhu\\n“
COMMENT:“ \\n“
GPRINT:temp0:MIN:“Minimum venkovni \\: %5.1lf .C „
GPRINT:temp0:MAX:“Maximalni teplota venku \\: %8.1lf .C „
GPRINT:temp0:AVERAGE:“Prumer venkovni \\: %5.1lf .C „
GPRINT:temp0:LAST:“Aktualni teplota venku \\: %8.1lf .C\n“
GPRINT:temp1:MIN:“Minimum v kuchyni \\: %4.1lf .C „
GPRINT:temp1:MAX:“Maximalni teplota v kuchyni \\: %4.1lf .C “
GPRINT:temp1:AVERAGE:“Prumer v kuchyni \\: %4.1lf .C „
GPRINT:temp1:LAST:“Aktualni teplota v kuchyni \\: %4.1lf .C\n“
GPRINT:temp2:MIN:“Minimum v obyvaku \\: %4.1lf .C „
GPRINT:temp2:MAX:“Maximalni teplota v obyvaku \\: %4.1lf .C „
GPRINT:temp2:AVERAGE:“Prumer v obyvaku \\: %4.1lf .C „
GPRINT:temp2:LAST:“Aktualni teplota v obyvaku \\: %4.1lf .C\n“
GPRINT:temp3:MIN:“Minimum na pude \\: %6.1lf .C „
GPRINT:temp3:MAX:“Maximalni teplota na pude \\: %6.1lf .C „
GPRINT:temp3:AVERAGE:“Prumer na pude \\: %6.1lf .C „
GPRINT:temp3:LAST:“Aktualni teplota na pude \\: %6.1lf .C\n“
GPRINT:temp4:MIN:“Minimum v Racku \\: %6.1lf .C „
GPRINT:temp4:MAX:“Maximalni teplota v Racku \\: %6.1lf .C „
GPRINT:temp4:AVERAGE:“Prumer v Racku \\: %6.1lf .C „
GPRINT:temp4:LAST:“Aktualni teplota v Racku \\: %6.1lf .C\n“
GPRINT:temp5:MIN:“Minimum topeni \\: %7.1lf .C „
GPRINT:temp5:MAX:“Maximalni teplota topeni \\: %7.1lf .C „
GPRINT:temp5:AVERAGE:“Prumer topeni \\: %7.1lf .C „
GPRINT:temp5:LAST:“Aktualni teplota topeni \\: %7.1lf .C“
> /dev/null
‚case $1 in
daily)
eval /usr/bin/rrdtool graph –start=“end-2days“ –title \’Poslednich 48 hodin [`date +“%F %H:%M“`]\‘ $RRD_PARAMETERS
;;
weekly)
eval /usr/bin/rrdtool graph –start=“end-2week“ –title \’Posleni 2 tydny [`date +“%F %H:%M“`]\‘ $RRD_PARAMETERS
;;
monthly)
eval /usr/bin/rrdtool graph –start=“end-2month“ –title \’Posleni 2 mesice [`date +“%F %H:%M“`]\‘ $RRD_PARAMETERS
;;
yearly)
eval /usr/bin/rrdtool graph –start=“end-1year“ –title \’Rocni graf [`date +“%F %H:%M“`]\‘ $RRD_PARAMETERS
;;
2years)
eval /usr/bin/rrdtool graph –start=“end-2years“ –title \’Dvoulety graf [`date +“%F %H:%M“`]\‘ $RRD_PARAMETERS
;;
5years)
eval /usr/bin/rrdtool graph –start=“end-5years“ –title \’Petilety graf [`date +“%F %H:%M“`]\‘ $RRD_PARAMETERS
;;
10years)
eval /usr/bin/rrdtool graph –start=“end-10years“ –title \’Desetilety graf [`date +“%F %H:%M“`]\‘ $RRD_PARAMETERS
;;
*)
echo „Please specify $0 [daily|weekly|monthly|yearly|2years|5years|10years]“
;;
esac
Povšimněme si sleepu na začátku tohoto scriptu ten nám zaručí že dojde k zobrazení i dat z posledního měření při spouštění v cronu ve stejný čas. Velikost sleepu je uvedena s dostatečnou rezervou pro případ velkého vytížení.
Nakonec si ukážeme jak vypadá můj cron který spouští scripty v nastaveném čase.
*/10 * * * * root /data/mydigitemp/mydigitemp-graph.sh daily
1 0 * * * root /data/mydigitemp/mydigitemp-graph.sh weekly
2 0 * * 0 root /data/mydigitemp/mydigitemp-graph.sh monthly
3 0 1 * * root /data/mydigitemp/mydigitemp-graph.sh yearly
4 0 1 1 * root /data/mydigitemp/mydigitemp-graph.sh 2years
5 0 1 1 * root /data/mydigitemp/mydigitemp-graph.sh 5years
6 0 1 1 * root /data/mydigitemp/mydigitemp-graph.sh 10years
0 * * * * root /data/temperature_sensors/temperature_sensors-graph.sh daily
1 1 * * * root /data/temperature_sensors/temperature_sensors-graph.sh weekly
2 1 * * 0 root /data/temperature_sensors/temperature_sensors-graph.sh monthly
3 1 1 * * root /data/temperature_sensors/temperature_sensors-graph.sh yearly
4 1 1 1 * root /data/temperature_sensors/temperature_sensors-graph.sh 2years
5 1 1 1 * root /data/temperature_sensors/temperature_sensors-graph.sh 5years
6 1 1 1 * root /data/temperature_sensors/temperature_sensors-graph.sh 10years
*/10 * * * * root /data/mydigitemp/teplomer.sh
Co se týče zobrazení scriptů tak upozorňuji že se nemusí správně formátovat ve všech prohlížečích díky stylu stránky která není příliš přizpůsobena pro zobrazování kódu.