Controlling data acquisition using a shell script
To collect the data from all sensors, I wrote a shell script which is started at boot time and stores all values in a CSV file (optional) and MySQL database, respectively. Furthermore, the script generates a UNIX <timestamp> to label the observations. The script also invokes “fswebcam” to take a snapshot with the webcam each 5 minutes. The still images are saved and renamed to <timestamp>.jpg, converted into thumbnails using ImageMagick and placed into separate folders. The UNIX <timestamp> is used to create a caption for each thumbnail. Because storage space is limited on a 16 GB SD card, pictures are deleted after 12 hours. The pictures are then presented as a gallery with the most recent picture in the middle surrounded by thumbnails. This feature can be added with a few lines of javascript and php code. In order to include javascript and php code in your posts, you should use the Exec-Php or a similar plugin and disable the WYSIWYG editor.
#!/bin/bash # mysql username SQLUSER="username" # mysql password SQLPASS="secret" # mysql server hostname/IP SQLHOST="localhost" SQLDB="my_sql_database" SQLTBL="sensor_data" # Write each 60 seconds into the log-file set -u LogInterval=60 while true do # Column 1: Date 2: Time 3: Unix epoch time TimeString=$(date +"{c7f7cb1468c0d02af358b3ce02b96b7aadc0ce32ccb53258bc8958c0e25c05c4}Y-{c7f7cb1468c0d02af358b3ce02b96b7aadc0ce32ccb53258bc8958c0e25c05c4}m-{c7f7cb1468c0d02af358b3ce02b96b7aadc0ce32ccb53258bc8958c0e25c05c4}d;{c7f7cb1468c0d02af358b3ce02b96b7aadc0ce32ccb53258bc8958c0e25c05c4}H:{c7f7cb1468c0d02af358b3ce02b96b7aadc0ce32ccb53258bc8958c0e25c05c4}M:{c7f7cb1468c0d02af358b3ce02b96b7aadc0ce32ccb53258bc8958c0e25c05c4}S") Timestamp=$(date +{c7f7cb1468c0d02af358b3ce02b96b7aadc0ce32ccb53258bc8958c0e25c05c4}s) TimeOffset=$(date -d '1970-01-01 0 sec' +{c7f7cb1468c0d02af358b3ce02b96b7aadc0ce32ccb53258bc8958c0e25c05c4}s) Timestamp=$(($Timestamp - TimeOffset)) # We request a value each 60 seconds if [ $(($Timestamp {c7f7cb1468c0d02af358b3ce02b96b7aadc0ce32ccb53258bc8958c0e25c05c4} 60)) -eq 0 ]; then # Here we start the programs for reading sensor data: thData=$(sudo /var/www/bin/loldht) bpthData=$(sudo /var/www/bin/BMP085_read.py) # When the log-intervall is reached, we append data to the log-file if [ $(($Timestamp {c7f7cb1468c0d02af358b3ce02b96b7aadc0ce32ccb53258bc8958c0e25c05c4} $LogInterval)) -eq 0 ]; then if [ -n "$thData" ]; then sudo echo "$TimeString;$Timestamp;$thData;$bpthData" >> /var/www/data/sensor.log # Send data to the 128x64 OLED display sudo python /var/www/bin/oled.py # Store data in MySQL Database arr=$(echo "$TimeString;$Timestamp;$thData;$bpthData" | sed "s/;/\',\'/g") a="'" sudo echo "INSERT INTO $SQLTBL VALUES ($a$arr$a);" | mysql -u$SQLUSER -p$SQLPASS -h$SQLHOST $SQLDB fi fi fi sleep 1 # Take a WebCam snapshot each 5 min if [ $(($Timestamp {c7f7cb1468c0d02af358b3ce02b96b7aadc0ce32ccb53258bc8958c0e25c05c4} 300)) -eq 0 ]; then sudo fswebcam -c /var/www/bin/fswebcam.conf sleep 5 # Use a timestamp to rename the captured image sudo mv /var/www/data/snaps/snap.jpg /var/www/data/snaps/$Timestamp.jpg sleep 1 # Generate thumbnails for the WebCam gallery sudo convert -thumbnail 150 /var/www/data/snaps/$Timestamp.jpg /var/www/data/thumbs/$Timestamp.jpg sudo ls -C1 -t /var/www/data/snaps/*.jpg | awk 'NR>20'|xargs sudo rm -rf sudo ls -C1 -t /var/www/data/thumbs/*.jpg | awk 'NR>20'|xargs sudo rm -rf fi # Use the CSV file with GNUplot each 10 min if [ $(($Timestamp {c7f7cb1468c0d02af358b3ce02b96b7aadc0ce32ccb53258bc8958c0e25c05c4} 600)) -eq 0 ] then sudo sh /var/www/bin/makeplot_day.sh sudo convert -thumbnail 150 /var/www/images/day.png /var/www/data/thumbs/day.png fi # Make a plot with GNUplot when an hour has passed if [ $(($Timestamp {c7f7cb1468c0d02af358b3ce02b96b7aadc0ce32ccb53258bc8958c0e25c05c4} 3605)) -eq 0 ] then sudo sh /var/www/bin/makeplot_week.sh sudo convert -thumbnail 150 /var/www/images/week.png /var/www/data/thumbs/week.png fi # Make a plot when 12 hours have passed if [ $(($Timestamp {c7f7cb1468c0d02af358b3ce02b96b7aadc0ce32ccb53258bc8958c0e25c05c4} 43210)) -eq 0 ] then sudo sh /var/www/bin/makeplot_month.sh sudo convert -thumbnail 150 /var/www/images/month.png /var/www/data/thumbs/month.png fi done
The recorded sensor data can be used to generate graphs using GNUplot as described in the next tutorial. If you would like to apply some basic statistics on your data i.e. whiskers or boxplots, have a look at this page.