Så här ser mitt insamlingsscript ut. Min databas heter alltså weathersensors.
Kod: Markera allt
#!/bin/bash
# collect.sh Script to collect data from 1-wire sensors
# Created 29 July 2009 by Gunnar Flygt
# The sensors have soft links in the working directory
#
mysql="/usr/bin/mysql -ugunnar -pmittpassword weathersensors"
GREP="/bin/grep"
TR="/usr/bin/tr"
cd /home/gunnar/weatherdata
nr="1"
# This is the collector procedure
while [ $nr -le 4 ];
do
# Get the sensor ID for storing in database
sensid=`ls -l sensor$nr | awk '{ print $11 }' \
| awk 'BEGIN { FS = "/" } ; { print $5 }'`
# Get the temperature value strip whitespace
temp=`$GREP . sensor$nr | $TR -d [:space:]`
# define INSERT statement
insert="INSERT INTO measures VALUES('${sensid}',${temp},CURRENT_TIMESTAMP)"
# pollute database
`echo ${insert} | ${mysql}`
nr=$(( $nr + 1 ))
done
Räknaren räknar till 4 eftersom jag har 4 sensorer. Jag har 3 tabeller, en för temperaturdata, en för fuktmätning och en för sensorerna.
Kod: Markera allt
mysql> show tables;
+--------------------------+
| Tables_in_weathersensors |
+--------------------------+
| fukt |
| measures |
| sensors |
+--------------------------+
3 rows in set (0.00 sec)
mysql> desc sensors;
+--------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+--------------+------+-----+---------+-------+
| namn | varchar(128) | YES | | NULL | |
| sensor | varchar(20) | YES | | NULL | |
+--------+--------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
mysql> select * from sensors;
+--------------------+-----------------+
| namn | sensor |
+--------------------+-----------------+
| Ute | 10.67AC92010800 |
| Kallare | 10.88AA92010800 |
| Varmvattenberedare | 10.C0C692010800 |
| Inne | 10.FEC592010800 |
| Humidity | 26.88C1E2000000 |
+--------------------+-----------------+
5 rows in set (0.00 sec)
mysql> desc measures;
+----------+--------------+------+-----+-------------------+-----------------------------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------+------+-----+-------------------+-----------------------------+
| sensor | varchar(20) | YES | | NULL | |
| value | decimal(8,6) | YES | | NULL | |
| tidpunkt | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+----------+--------------+------+-----+-------------------+-----------------------------+
3 rows in set (0.00 sec)
Och sen några script för att plot-a
plotweek.sh här:
Kod: Markera allt
#!/bin/bash
# Script to get data from weathersensors database
# Copied and modified by Gunnar Flygt 29 July 2009
#
NU=$(date '+%H%M')
IDAG=$(date '+%Y%m%d')
cd /home/gunnar/weatherdata
mysql="/usr/bin/mysql -ugunnar -pmittpassword weathersensors"
# PLATS är de olika sensorerna
for PLATS in Ute Kallare Varmvattenberedare Inne ; do
query="SELECT tidpunkt,value FROM measures WHERE
DATE_SUB(CURDATE(),INTERVAL 1 WEEK) <= tidpunkt
AND sensor = (SELECT sensor FROM sensors WHERE namn='${PLATS}')
ORDER BY tidpunkt;"
# Mata ut och få in data.
echo ${query} | ${mysql} | sed 's/\ /-/1;1d' >weekdata.${PLATS}
done
cp /home/gunnar/public_html/plotweek.png arkiv/${IDAG}week.png
# Plotta
/usr/bin/gnuplot <weekdata.plotfile
där man ju också måste se weekdata.plotfile:
Kod: Markera allt
#!/usr/bin/gnuplot
#
# hel.plotfile
#
# Plotscript © Gunnar Flygt
# Stulet av Måns Nilsson med Måns tillstånd ;-)
#
set xdata time
set timefmt "%Y-%m-%d-%H:%M%S"
# Vi vill ha streck i stället för punkter, och ett rutnät att fästa mot.
set style data lines
set grid
# Förklaringar.
set title "Temperaturer senaste veckan, Orno"
set xlabel "Datum"
set ylabel "Grader Celsius"
# PNG liten font och transparens.
set term png small transparent
# Filnamn
set output "/home/gunnar/public_html/plotweek.png"
# Plotkommando tre kolumner; tid, sensor-ID, värde
# där sensorvärde är redundant tack vare tidigare
# sortering till separata filer.
plot 'weekdata.Ute' using 1:2 title "Ute", \
'weekdata.Kallare' using 1:2 title "Kallare", \
'weekdata.Varmvattenberedare' using 1:2 title "Varmvattenberedare", \
'weekdata.Inne' using 1:2 title "Inne"
Ungefär så alltså. Jag tycker också att det är roligare att ha efteråt påverkbar data.
Gunnar