Mercurial > ~darius > hgwebdir.cgi > wh1080
diff plots/doplots @ 0:9dab44dcb331
Initial commit of Greg's code from http://www.lemis.com/grog/tmp/wh1080.tar.gz
author | Daniel O'Connor <darius@dons.net.au> |
---|---|
date | Tue, 09 Feb 2010 13:44:25 +1030 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/plots/doplots Tue Feb 09 13:44:25 2010 +1030 @@ -0,0 +1,169 @@ +#!/bin/sh +# Dereel weather: Generate plots of day's activity +# $Id: doplots,v 1.12 2010/02/07 03:24:24 grog Exp $ +# Comment this out to produce all error messages +# SWALLOW="2> /dev/null" +# SWALLOW="/tmp/vomit" +plotset () +{ + COMMON=$BIN/plots/plot-common.gnuplot + INFILE=$BIN/plots/plot-$PLOT.gnuplot + OUTFILE=$HTML/$PLOT-$INTERVAL-$PLOTSIZE.png + +# echo PLOT: $PLOT +# echo GRAPHSIZE: $GRAPHSIZE +# echo INFILE: $INFILE +# echo OUTFILE: $OUTFILE +# echo INTERVAL: $INTERVAL + + cat $COMMON $INFILE | \ + sed "s:MIDNIGHT:$GNUSTART:; s:ENDTIME:$GNUEND:; s:GRAPHFILE:$TEMPFILE:; s:SIZE:$GRAPHSIZE:; s:OUTFILE:$OUTFILE:; s:SMOOTHED: (smoothed):; s:SMOOTH:smooth bezier:; s:XTICS:$XTICS:" \ + | gnuplot $SWALLOW + chmod 666 $OUTFILE + OUTFILE=$HTML/$PLOT-$INTERVAL-$PLOTSIZE-raw.png + cat $COMMON $INFILE | \ + sed "s:MIDNIGHT:$GNUSTART:; s:ENDTIME:$GNUEND:; s:GRAPHFILE:$TEMPFILE:; s:SIZE:$GRAPHSIZE:; s:OUTFILE:$OUTFILE:; s:SMOOTHED::; s:SMOOTH:smooth bezier:; s:XTICS:$XTICS:" \ + | gnuplot $SWALLOW + chmod 666 $OUTFILE +} +PLOTS="humidity temperatures inside-outside-temp inside-temp outside-temp wind pressure rain comparative-pressure comparative-dewpoint comparative-gust comparative-humidity comparative-pressure comparative-temperature comparative-wind comparative-rain BoM-Dereel BoM-Dereel-pressure" + +PATH=$PATH:/usr/local/bin + +export HTML=/home/grog/public_html/weather +BIN=/home/grog/src/weather/WH-1080 + +DATADIR=/var/tmp/ +TEMPFILE=$DATADIR/dereel-weather-plot.$$ + +# Generate some constants. +# Calculate time zone offset from UTC +# Convert to seconds at UTC +NOW=`date +%G%m%d%H%M` +UTC=`TZ=GMT date -j $NOW +%s` +# And in local time zone +LOCAL=`date -j $NOW +%s` +# The difference is the time zone offset. +TZOFFSET=`expr $UTC - $LOCAL` +# Number of seconds in a day +DAYSECS=86400 +# 2000-1-1 0:0:0 UTC, the gnuplot epoch. Or so it should be, but for +# some reason my plots come out offset by 2 hours. Use GNUFUDGE until +# I find out why. +GNUFUDGE=7200 +Y2K=`expr 946684800` +MY2K=`expr $Y2K + $TZOFFSET + $GNUFUDGE` +# End of constant generation + +# Decide what we're going to do. +# Date of plot +if [ "$1" != "" ]; then # parameter supplied + DATE=$1 +else + DATE=`date +%F` +fi + +# Before we forget it, offload the 5 day plot +$BIN/plots/plot5 $DATE +# Which also allows us to calculate midnight +STARTTIME=`date -j -f "%F %T" "$DATE 0:0:0" +%s` +# Adjust to gnu epoch +GNUSTART=`expr $STARTTIME - $Y2K - $TZOFFSET - $GNUFUDGE` +# End of plot. By default, 1 day, unless we have a second parm +ENDDATE=$2 +if [ "$ENDDATE" = "" ]; then # 1 day + INTERVAL=$DATE + GNUEND=`expr $GNUSTART + $DAYSECS` + ENDTIME=`expr $STARTTIME + 86400` + ENDDATE=`date -r $ENDTIME +%F` +else + # midnight on the end day + INTERVAL=$DATE-$2 + ENDTIME=`date -j -f "%F %T" "$2 0:0:0" +%s` + GNUEND=`expr $ENDTIME - $Y2K - $TZOFFSET - $GNUFUDGE` +echo $ENDTIME - $Y2K - $TZOFFSET - $GNUFUDGE +fi +echo end $ENDTIME start $STARTTIME +DURATION=`expr $ENDTIME - $STARTTIME` +echo DURATION $DURATION +# Decide how often to place the time ticks. +if [ $DURATION -eq $DAYSECS ]; then # single day + XTICS=10800 # 3 hours +elif [ $DURATION -eq 172800 ]; then # 2 days + XTICS=21600 # 6 hours +elif [ $DURATION -le 345600 ]; then # up to 4 days + XTICS=43200 # 6 hours +elif [ $DURATION -le 864000 ]; then # up to 10 days + XTICS=86400 # 6 hours +elif [ $DURATION -le 864000 ]; then # up to 10 days + XTICS=86400 # 1 day +elif [ $DURATION -le 2592000 ]; then # up to 30 days + XTICS=172800 # 2 days +else # > 30 days + XTICS=`expr $DURATION / 10` # just hack it +fi + +echo DATE $DATE ENDDATE $ENDDATE INTERVAL $INTERVAL GNUEND $GNUEND DURATION $DURATION + +# Graph sizes +SMALLGRAPH="375,250" +BIGGRAPH="1024, 720" + +# XXX handle correct station + +# Get the readings from the database +# 1: Time +# 2: inside_temp +# 3: outside_temp +# 4: inside_humidity +# 5: outside_humidity +# 6: inside_dewpoint +# 7: outside_dewpoint +# 8: pressure_msl +# 9: wind_speed +# 10: wind_gust +# 11: wind_direction +# 12: rain +QUERY="SELECT unix_timestamp(timestamp(date, time))-$MY2K, inside_temp, outside_temp, inside_humidity, outside_humidity, inside_dewpoint, outside_dewpoint, pressure_msl, wind_speed, wind_gust, wind_direction, rain FROM observations WHERE date >='$DATE' AND date < '$ENDDATE' ORDER BY date, time" +echo $QUERY +echo $QUERY | mysql weather > $TEMPFILE + +# Rainfall +QUERY="SELECT unix_timestamp(timestamp(date, time))-$MY2K, sum(rain) FROM observations WHERE date >='$DATE' AND date < '$ENDDATE' GROUP BY hour(time)" +echo $QUERY +echo $QUERY | mysql weather > $DATADIR/dereel-rainfall + +# echo Today: $STARTTIME `date -r $STARTTIME` + +STATIONS="IVICTORI86 IVICTORI94 IVICTORI102 IVICTORI115 IVICMTHE3 IVICREDA2 94852 94863 94866" +# Comparative graphs +for STATION in $STATIONS; do + QUERY="SELECT unix_timestamp(timestamp(date, time))-$MY2K, outside_temp, outside_dewpoint, outside_humidity, pressure_msl, wind_speed, wind_gust, rain from remote_observations WHERE station_id = '$STATION' and date >='$DATE' AND date < '$ENDDATE' ORDER by date, time;" + echo $QUERY | mysql weather > $DATADIR/weather-readings.$STATION +done +# XXX remove this +# Local readings +QUERY="SELECT unix_timestamp(timestamp(date, time))-$MY2K, outside_temp, outside_dewpoint, outside_humidity, pressure_msl, wind_speed, wind_gust, rain from observations WHERE date >='$DATE' AND date < '$ENDDATE' ORDER by date, time;" +echo $QUERY +echo $QUERY | mysql weather > $DATADIR/weather-readings.IVICTORI124 + +echo $BIN/local-compare $DATE $ENDDATE Dereel +$BIN/local-compare $DATE $ENDDATE Dereel + +# small graphs +GRAPHSIZE=$SMALLGRAPH +PLOTSIZE=small +for PLOT in $PLOTS; do + plotset +done +# big graphs +GRAPHSIZE=$BIGGRAPH +PLOTSIZE=big +for PLOT in $PLOTS; do + plotset +done + +rm $TEMPFILE # $DATADIR/dereel-rainfall +for STATION in $STATIONS; do + rm -f $DATADIR/weather-readings.$STATION +done