Hi
My rain sometimes gets wrong readings. Sometimes by spiders that use the
rain tipper as a see-saw.
I use a mysql database and have a script to do it:
#!/bin/bash
clear
if [ "$(id -u)" != "0" ]; then
echo "This script must be run as root" 1>&2
exit 1
fi
#change this if your reporting interval is different as this will be used
to calculate
#rainrate. (60 minutes / INTERVAL) * RAIN - which is entered later on
INTERVAL="5"
#The stuff below is for colours you have to use echo -e
RESTORE='\033[0m'
RED='\033[00;31m'
GREEN='\033[00;32m'
YELLOW='\033[00;33m'
BLUE='\033[00;34m'
PURPLE='\033[00;35m'
CYAN='\033[00;36m'
LIGHTGRAY='\033[00;37m'
LRED='\033[01;31m'
LGREEN='\033[01;32m'
LYELLOW='\033[01;33m'
LBLUE='\033[01;34m'
LPURPLE='\033[01;35m'
LCYAN='\033[01;36m'
WHITE='\033[01;37m'
DBUSER=weewx
DBPASS=weewx
DBNAME=weewx
MYSQLUSER=root
MYSQLPASS=yourpassword
echo This fixes the database if there are any wrong entries
echo -e
#mysql -u$DBUSER -p$DBPASS --database=$DBNAME --execute="SHOW COLUMNS FROM
archive FROM $DBNAME;"
echo If you just press enter for the next two prompts you will get all the
rainfall for the day
echo -e
echo -e Input the date in this format ${LRED} 'YYYY-MM-DD' ${RESTORE}
Press enter for the current date.
read INDATE
#if the date is not entered then default to the current year
if [[ -z "$INDATE" ]]
then
INDATE=`date +%F`
fi
echo -e The date selected is ${LGREEN} $INDATE ${RESTORE}
echo -e
echo -e Input the time you want to find in this format ${LRED} 'HH:MM:SS'
${RESTORE}Press enter to select midnight.
read INTIME
#if the date is not entered then default to the current year
if [[ -z "$INTIME" ]]
then
INTIME="00:00:00"
fi
echo -e The time selected is ${LGREEN} $INTIME ${RESTORE}
echo -e
echo -e Input the rain amount you want to change in this format ${LRED}
'MM.M' ${RESTORE} Press enter to select zero.
read RAIN
#if the rain is not entered then default to zero
if [[ -z "$RAIN" ]]
then
RAIN="0"
fi
echo -e
echo -e The rain amount is ${LGREEN} $RAIN ${RESTORE} and the reporting
interval is ${LGREEN} $INTERVAL ${RESTORE} minutes.
echo -e
RAINRATE=$((60 / INTERVAL))
RAINRATE=$(echo "$RAINRATE * $RAIN" | bc)
#if the rainrate is not entered then default to .001 so my logic to check
for zero still works
#and I can redo the rain if needed. Otherwise I don't see any records
because they are zero
if [[ "$RAINRATE" = "0" ]]
then
RAINRATE="0.001"
fi
FINDDATE=`date -d "$INDATE $INTIME" +%s`
echo -e The epoch date you want to find in the list below is ${LGREEN}
$FINDDATE ${RESTORE}
echo -e
#need to find the next day epoch time in case this program is run for a
date in the past otherwise it
#will show all the rain entries on the screen and not just one days worth
NEXTDAY=$(($FINDDATE+86400))
echo -e Next day epoch date is ${LGREEN} $NEXTDAY ${RESTORE}
MIDNIGHTTIME=`date -d "$INDATE 00:00:00" +%s`
echo -e Midnight time is: ${LGREEN} $MIDNIGHTTIME ${RESTORE}
echo -e
#show the rain for the date selected
echo -e ${LGREEN}
mysql -u$DBUSER -p$DBPASS --database=$DBNAME -e "select dateTime, rain,
rainRate from archive where (rainRate > 0 and dateTime <= $NEXTDAY and
dateTime >= $MIDNIGHTTIME);"
echo -e ${RESTORE}
echo -e Rain value is ${LGREEN} $RAIN ${RESTORE} and rain rate value is
${LGREEN} $RAINRATE ${RESTORE}
echo -e If there are no records above then that means there are no rain
rates for ${LRED} $INDATE $INTIME ${RESTORE}
echo -e
echo Select the first and last record you want updated
echo Usually pick the first record with rain and then the records below it
that have rain rates
echo but do not have rain records. Hope that makes sense.
echo -e
read -p "Select the FIRST dateTime you want to update " FIRSTREC
echo -e The FISRT date you chose is ${LGREEN} `date -d@$FIRSTREC` ${RESTORE}
echo -e
read -p "Select the LAST dateTime you want to update " LASTREC
echo -e The LAST date you chose is ${LGREEN} `date -d@$LASTREC` ${RESTORE}
echo -e
echo -e ${LRED}This is the Rain total and will be deleted
mysql -u$DBUSER -p$DBPASS --database=$DBNAME -e "select * from
archive_day_rain WHERE (maxtime >= $FIRSTREC and maxtime <= $LASTREC);"
echo -e
echo this is the rain rate and will be deleted
mysql -u$DBUSER -p$DBPASS --database=$DBNAME -e "select * from
archive_day_rainRate WHERE (dateTime = $MIDNIGHTTIME);"
echo -e ${RESTORE}
echo -e The rain amount selected is ${LGREEN} $RAIN ${RESTORE}
echo -e The Rain rate will be calculated as: ${LGREEN} $RAINRATE ${RESTORE}
echo -e
echo Press y to update the database.
while true; do
echo The changes will take effect if you press y. Press CTRL-C to
cancel updates.
read -p "Do you wish to update the database?" yn
case $yn in
[Yy]* ) break;;
[Nn]* ) exit;;
* ) echo "Please answer yes or no.";;
esac
done
echo Stop weewx
/etc/init.d/weewx stop
echo Back up database to /tmp
if ! /usr/bin/mysqldump --user=$MYSQLUSER --password=$MYSQLPASS $DBNAME >
/tmp/weewx-$(date +%F-%T).sql ; then
clear
echo Backup failed. Do not contiune as data will be changed after this point
echo Starting weewx
/etc/init.d/weewx start
exit 1
fi
echo then set the data to 0
#have to zero out all the selected records and then update ONLY the first
selected record or the
#rain records will be duplicated. SO LEAVE THE 2 LINES BELOW AS IS!
mysql -u$DBUSER -p$DBPASS --database=$DBNAME -e "UPDATE archive SET rain=0
WHERE (dateTime >= $FIRSTREC and dateTime <= $LASTREC);"
mysql -u$DBUSER -p$DBPASS --database=$DBNAME -e "UPDATE archive SET
rainRate=0.1 WHERE (dateTime >= $FIRSTREC and dateTime <= $LASTREC);"
mysql -u$DBUSER -p$DBPASS --database=$DBNAME -e "UPDATE archive SET
rain=$RAIN WHERE (dateTime = $FIRSTREC);"
mysql -u$DBUSER -p$DBPASS --database=$DBNAME -e "UPDATE archive SET
rainRate=$RAINRATE WHERE (dateTime = $FIRSTREC);"
#mysql -u$DBUSER -p$DBPASS --database=$DBNAME -e "UPDATE archive SET
rainRate=$RAINRATE WHERE (dateTime >= $FIRSTREC and dateTime <= $LASTREC) ;"
mysql -u$DBUSER -p$DBPASS --database=$DBNAME -e "DELETE from
archive_day_rain where dateTime=$MIDNIGHTTIME;"
mysql -u$DBUSER -p$DBPASS --database=$DBNAME -e "DELETE from
archive_day_rainRate where dateTime=$MIDNIGHTTIME;"
##echo If the yearly rainrate is wrong you can use the select statement
below to delete the wrong entry
##echo "You can find the date and time on the yearly records."
##echo "'select * from archive_day_rainRate where maxtime = 1502098500;"
##echo "Then delete the entry"
mysql -u$DBUSER -p$DBPASS --database=$DBNAME -e "DELETE from
archive_day_rainRate where maxtime=$MIDNIGHTTIME;"
echo -e ${LGREEN}
echo -e Number of records to process:
mysql -u$DBUSER -p$DBPASS << EOF
use $DBNAME;
select count(*) from archive;
EOF
echo -e ${RESTORE}
##echo then once that has been done you have to drop the daily
stats usually only if data is corrupted
# wee_database /etc/weewx/weewx.conf --drop-daily
echo Rebuild the dailiy stats for the date $INDATE
wee_database /etc/weewx/weewx.conf --rebuild-daily --from=$INDATE
--to=$INDATE
#wee_database /etc/weewx/weewx.conf --rebuild-daily --date=$INDATE
# wee_database /etc/weewx/weewx.conf --rebuild-daily
##echo if you want to delete data from the database you can use the
delete from archive where dateTime < xxxxxxxxx;
##echo you then delete any NOAA files from
/var/www/html/weather/NOAA
##echo then run the -drop-daily and rebuild-daily commands on hope
it all works.
##echo start weewx again
##echo thats about it
echo Start weewx
/etc/init.d/weewx start
echo regenerate the web pages
wee_reports
I don't know if that would work for you or not but it works for me.
On Saturday, 30 March 2019 18:22:41 UTC+11, Johannes Ebner wrote:
>
> Hi,
>
> Somehow I have strange values for Rain and RainRaite on the 28th of March
> around 10am CET.
>
> You can see it on wetter.familie-ebner.at
>
> How can I show this values in the DB and then select the wrong one for
> deleting?
>
> Br,
> Johannes
>
--
You received this message because you are subscribed to the Google Groups
"weewx-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.