204 lines
4.9 KiB
Bash
204 lines
4.9 KiB
Bash
#
|
|
# Driver rainsensorqty - driver for measure the rain volume
|
|
# Author: androtto
|
|
# file "common.include.sh"
|
|
# common functions used by driver
|
|
# Version: 0.2.5
|
|
# Data: 08/Jan/2020
|
|
|
|
|
|
#note:
|
|
#RAINSENSORQTY_MONPID="$TMPDIR/rainsensorqty_monitor.pid"
|
|
#
|
|
|
|
sec2date()
|
|
{
|
|
date --date="@$1"
|
|
}
|
|
|
|
d() # short date & time
|
|
{
|
|
date '+%X-%x'
|
|
}
|
|
|
|
|
|
drv_rainsensorqty_writelog()
|
|
{
|
|
#2 variables - $1 function, $2 message
|
|
if [[ $2 =~ ERROR || $2 =~ WARNING || $2 =~ RAIN || $RAINSENSORQTY_verbose = yes ]] ; then
|
|
echo -e "$1 - `d`\t\t$2" >> "$LOG_OUTPUT_DRV_FILE"
|
|
# if [[ $($WC -c <"$LOG_OUTPUT_DRV_FILE") > $LOG_FILE_MAX_SIZE )) ; then
|
|
# $GZIP "$LOG_OUTPUT_DRV_FILE"
|
|
# $MV "${LOG_OUTPUT_DRV_FILE}.gz" "${LOG_OUTPUT_DRV_FILE}.$(date +%Y%m%d%H%M).gz"
|
|
# fi
|
|
fi
|
|
}
|
|
|
|
|
|
drv_rainsensorqty_check()
|
|
{
|
|
local f="drv_rainsensorqty_check"
|
|
|
|
if [[ -f "$RAINSENSORQTY_MONPID" ]] ; then
|
|
local pid=$( < "$RAINSENSORQTY_MONPID" )
|
|
drv_rainsensorqty_writelog $f "NORMAL: checking if $pid pid is running"
|
|
if ps -fp $pid >/dev/null ; then
|
|
drv_rainsensorqty_writelog $f "NORMAL: $pid pid is running"
|
|
return 0
|
|
else
|
|
drv_rainsensorqty_writelog $f "ERROR: $pid pid monitor process NOT running - $RAINSENSORQTY_MONPID file contains $pid"
|
|
return 1
|
|
fi
|
|
else
|
|
drv_rainsensorqty_writelog $f "ERROR: no raining monitor process file \$RAINSENSORQTY_MONPID"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
en_echo() # enhanched echo - check verbose variable
|
|
{
|
|
[[ $RAINSENSORQTY_verbose = yes ]] && echo "$(d) $*"
|
|
}
|
|
|
|
check_incomplete_loop()
|
|
{
|
|
[[ ! -f $RAINSENSORQTY_HISTORYRAW ]] && return 1
|
|
[[ ! -f $RAINSENSORQTY_HISTORY ]] && touch $RAINSENSORQTY_HISTORY
|
|
> $RAINSENSORQTY_HISTORYTMP
|
|
|
|
if lastrainevent=$( rainevents 1 ) ; then
|
|
: # done ok
|
|
else
|
|
echo "WARNING: rainevents function had errors"
|
|
return 1
|
|
fi
|
|
|
|
set -- ${lastrainevent//:/ }
|
|
local started=$1
|
|
local before=$2
|
|
local counter=$3
|
|
|
|
wrongevent=$(awk -F ":" '$1=="'$started'" && $2!="'$before'" {print $0}' $RAINSENSORQTY_HISTORY)
|
|
if [[ -n $wrongevent ]] ; then
|
|
echo "ERROR: wrong last rain event found: $wrongevent , right one should be: $lastrainevent"
|
|
return 2
|
|
fi
|
|
|
|
if grep -q ^${lastrainevent}$ $RAINSENSORQTY_HISTORY ; then
|
|
: # already present
|
|
return 0
|
|
else
|
|
|
|
: # missing and fixed
|
|
if [[ $1 == tmp ]] ; then
|
|
echo $lastrainevent > $RAINSENSORQTY_HISTORYTMP
|
|
else
|
|
echo $lastrainevent >> $RAINSENSORQTY_HISTORY
|
|
fi
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
#next function is not used anymore
|
|
rain_history()
|
|
{
|
|
[[ ! -f $RAINSENSORQTY_HISTORYRAW ]] && return 1
|
|
[[ ! -f $RAINSENSORQTY_HISTORY ]] && touch $RAINSENSORQTY_HISTORY
|
|
> $RAINSENSORQTY_HISTORYTMP
|
|
|
|
if lastrainevent=$( rainevents 1 ) ; then
|
|
: # done ok
|
|
else
|
|
echo "WARNING: rainevents function had errors"
|
|
return 1
|
|
fi
|
|
|
|
#old #if grep -q ^$(<$RAINSENSORQTY_LASTRAIN)$ $RAINSENSORQTY_HISTORY ; then
|
|
if grep -q ^${lastrainevent}$ $RAINSENSORQTY_HISTORY ; then
|
|
: # already present
|
|
return 0
|
|
else
|
|
: # missing and fixed
|
|
if [[ $1 == tmp ]] ; then
|
|
echo $lastrainevent > $RAINSENSORQTY_HISTORYTMP
|
|
else
|
|
echo $lastrainevent >> $RAINSENSORQTY_HISTORY
|
|
fi
|
|
return 0
|
|
fi
|
|
}
|
|
|
|
rain_when_amount()
|
|
{
|
|
# from standard input
|
|
# format $time:$endtime:$endsequence
|
|
cat - | while read line
|
|
do
|
|
set -- ${line//:/ }
|
|
start=$1
|
|
stop=$2
|
|
howmuch=$3
|
|
printf "RAINED for %7.2f mm between %s and %s\n" $( $JQ -n "$howmuch * $RAINSENSORQTY_MMEACH" ) "$(date --date="@$start")" "$(date --date="@$stop")"
|
|
done
|
|
}
|
|
|
|
check_TMPDIR()
|
|
{
|
|
if [[ $(df | awk '$NF=="/tmp" {print $1}') != "tmpfs" ]] ; then
|
|
echo "WARNING: /tmp isn't a tmp file system"
|
|
echo -e "\tplease add to your /etc/fstab file:\n\ttmpfs /tmp tmpfs defaults,noatime,nosuid 0 0"
|
|
fi
|
|
}
|
|
|
|
rainevents()
|
|
{
|
|
if [[ ! -f $RAINSENSORQTY_HISTORYRAW ]] ; then
|
|
#echo "WARNING: no \$RAINSENSORQTY_HISTORYRAW file"# cannot echo, redirected output
|
|
return 1
|
|
fi
|
|
case $1 in
|
|
[0-9]|[0-9][0-9]) howmanyevent=$1 ;;
|
|
# -1) skiplast=true ;;
|
|
*) howmanyevent=-1 ;;
|
|
esac
|
|
|
|
newloop=yes
|
|
tac $RAINSENSORQTY_HISTORYRAW | while read line
|
|
do
|
|
set -- ${line//:/ }
|
|
time=$1
|
|
sequence=$2
|
|
if [[ $newloop == yes ]] ; then
|
|
endtime=$time
|
|
endsequence=$sequence
|
|
newloop=no
|
|
fi
|
|
if (( sequence == 1 )) ; then
|
|
# [[ $skiplast=true ]] && { skiplast=false ; continue ; }
|
|
echo $time:$endtime:$endsequence
|
|
newloop=yes
|
|
(( event +=1 ))
|
|
fi
|
|
(( howmanyevent == event )) && break
|
|
done | sort -k1n
|
|
}
|
|
|
|
removelastrain()
|
|
{
|
|
if [[ ! -f $RAINSENSORQTY_HISTORYRAW ]] ; then
|
|
echo "WARNING: no \$RAINSENSORQTY_HISTORYRAW file"
|
|
return 1
|
|
fi
|
|
|
|
next=false
|
|
tac $RAINSENSORQTY_HISTORYRAW | while read line
|
|
do
|
|
set -- ${line//:/ }
|
|
time=$1
|
|
sequence=$2
|
|
[[ $next = true ]] && echo $line
|
|
(( sequence == 1 )) && next=true
|
|
done | tac > ${RAINSENSORQTY_HISTORYRAW}_$$
|
|
mv ${RAINSENSORQTY_HISTORYRAW}_$$ $RAINSENSORQTY_HISTORYRAW
|
|
}
|