Min balkong

Här kan du se temperaturen ute på min balkong. Värdet uppdateras varje minut.

Bild 1. En barometer. Den har inget att göra med min balkong, men visst är den fin.

-2.3 °C

Tid: 2012-11-25 11:38

Statistik och grafer

MinMedMax
-2.8-0.11.8

Utrustning

En USB-dongel för kommunikation med ett 1-wire nät (I2C-bus). Just nu bara en sensor inkopplad. Finns att köpa på www.temperatur.nu för cirka 600 spänn.
Hade först tänkt låta en gammal utrangerad dator tjäna som datalogger, men när jag hittade en perfekt strömsnål och minimal PC så kunde jag inte låta bli att köpa den. Det är en fit-PC slim med Ubuntu-linux förinstallerad. Finns att inhandla från System Technology för blygsamma 4200:- inklusive moms och frakt. Så detta är just nu värdens dyraste termometer. (Observera det avsiktligt humoristiska ordvalet)

Så gjorde jag

ds2490

Först måste kommunikationen med 1-wire nätet sättas upp. Jag hittade ett paket som heter digitemp. Använde Ubuntus pakethanterare Synaptic för att installera detta, men det borde även funka med följande kommando.

sudo apt-get install digitemp

Digitemp kan krocka med en kernel-modul, och givetvis var så fallet. Åtgärdas temporärt med sudo modprobe -r ds2490. Men för ett mer varaktigt system måste inladdningen av modulen blockeras. Det löste jag med att svartlista den. Lade till följande rader i /etc/modprobe.d/blacklist

# Clashes with digitemp
blacklist ds2490

Initialiserade digitemp. Då skapades det en fil som heter .digitemprc. Verkar som att den skapas i den mapp man kör initialiseringen. Mer om detta senare.

digitemp_DS2490 -a -i

Testade att det funkar.

digitemp_DS2490 -a

cron

Logga till fil var enkelt när väl kommunikationen började funka. Flaggan -l följt av sökväg till lämplig fil ordnade den biffen. Var inte nöjd med det förvalda formatat för loggfilen. Lyckligtvis gick detta att ändra med -o flaggan. För att automatisera tänkte jag köra detta som ett crontab-jobb. Men förutom automatisk loggning ville jag även ha automatisk uppdatering av aktuell temperatur till min hemsida. Så för att lösa detta skapade jag ett bash-skript med följande namn /root/templogger. Skriptet måste kunna köras (kom ihåg att chmodda).

#!/bin/bash

digitemp_DS2490 -o "%Y-%m-%d %H:%M:%S   %s      %R      %.2C" -t 0 -l /var/log/temperature
tail -n 1 /var/log/temperature > /var/log/temperature.last

ftp -i -n www.mortsell.com <<EOT
user username password
lcd /var/log/
put temperature.last
quit
EOT

För att cron-jobbet skulle funka blev jag tvungen att köra initialiseringen igen, men från roots hemkatalog /root. Cronjobbet sattes upp med att lägga till följande rad i /etc/crontab. För att snabbt ladda in ändringen i cron kan du köra sudo /etc/init.d/cron reload

* *     * * *   root    cd /root && ./templogger

Webb

Nu funkar själva loggningen, och uppladdningen till hemsidan av senaste värdet. Men för att göra det hela lite behagligare för ögat måste det presenteras i vacker HTML. Här är php-skriptet som läser in filen och presenterar temperaturen i en underskön webbsida.

<?php
$string = file_get_contents("../temperature.last");
list($time, $sensorNo, $sensorId, $celsius) = split("\t", $string, 4);
$time = substr($time,0,16);
?>
<p><span style="font-size: 6em;"><?= $celsius ?> &deg;C</span></p>
<p>Temperatur registrerad <?= $time ?></p>

Och som en sista finess lade jag in en automatisk refresh på sidan.

<meta http-equiv="refresh" content="60">

gnuplot

Grafen genereras med följande gnuplotskript /root/dayplot.gnuplot.

set term png size 750,350
set output "dayplot.png"
set xdata time
set timefmt "%Y-%m-%d %H:%M:%S"
set title "Senaste 24 tim"
set xlabel ""
set ylabel "°C"
set yrange [-30:50]
set yzeroaxis 0
set xzeroaxis 0
set format x "%H"
set xtics nomirror
set ytics nomirror
plot "/var/log/temperature.last.24h" using 1:5 with lines title "temp"

Ett bash-skript/root/tempplotter kör gnuplot och puttar ut bilden till hemsidan.

#!/bin/bash

gnuplot dayplot.gnuplot

#cp dayplot.png /var/www/www.mortsell.com
ftp -i -n www.mortsell.com <<EOT
user username password
lcd /root
put dayplot.png
quit
EOT

Lade upp ett cron-jobb som gör detta var femte minut. Här är raden jag lade till i /etc/crontab.
(*/5 betyder "var femte")

*/5 *   * * *   root    cd /root && ./tempplotter