From e2eda96f2c53fa330127ae2a0fd64b4ffb375488 Mon Sep 17 00:00:00 2001 From: lejubila Date: Mon, 12 Aug 2019 08:24:57 +0200 Subject: [PATCH] Aggiornato driver rainsensorqty alla versione 0.2.0 --- drv/rainsensorqty/README.md | 98 ++++++++++++++++++- .../commands/rainsensorqty_CHECK.sh | 40 ++++++++ .../commands/rainsensorqty_HISTORY.sh | 40 ++++++++ .../commands/rainsensorqty_INIT.sh | 29 ++++++ .../commands/rainsensorqty_KILL.sh | 48 +++++++++ .../commands/rainsensorqty_RAINNOW.sh | 27 +++++ drv/rainsensorqty/common.include.sh | 54 ++++++++-- .../piGarden.conf.rainsensorqty.example | 14 +++ drv/rainsensorqty/config.include.sh | 43 ++++---- .../drv_rainsensorqty_monitor.sh | 75 ++++++++++++++ drv/rainsensorqty/init.include.sh | 16 ++- drv/rainsensorqty/rainsensor.include.sh | 58 +++++++---- drv/rainsensorqty/rainsensorqty_monitor.sh | 84 ---------------- drv/rainsensorqty/test_rainsensorqty_CHECK.sh | 23 ----- drv/rainsensorqty/test_rainsensorqty_INIT.sh | 23 ----- 15 files changed, 490 insertions(+), 182 deletions(-) create mode 100755 drv/rainsensorqty/commands/rainsensorqty_CHECK.sh create mode 100755 drv/rainsensorqty/commands/rainsensorqty_HISTORY.sh create mode 100755 drv/rainsensorqty/commands/rainsensorqty_INIT.sh create mode 100755 drv/rainsensorqty/commands/rainsensorqty_KILL.sh create mode 100755 drv/rainsensorqty/commands/rainsensorqty_RAINNOW.sh create mode 100644 drv/rainsensorqty/conf_example/piGarden.conf.rainsensorqty.example create mode 100755 drv/rainsensorqty/drv_rainsensorqty_monitor.sh delete mode 100755 drv/rainsensorqty/rainsensorqty_monitor.sh delete mode 100755 drv/rainsensorqty/test_rainsensorqty_CHECK.sh delete mode 100755 drv/rainsensorqty/test_rainsensorqty_INIT.sh diff --git a/drv/rainsensorqty/README.md b/drv/rainsensorqty/README.md index 427d12c..772e50a 100644 --- a/drv/rainsensorqty/README.md +++ b/drv/rainsensorqty/README.md @@ -1,2 +1,98 @@ -# Fake driver for sample and testing +# +# Driver rainsensorqty - driver for measure the rain volume +# Author: androtto +# file README.md +# Version: 0.2.0 +# Data: 11/Aug/2019 + + +FILE DI CONFIGURAZIONE /etc/piGarden.conf: +----------------------------------------- +NOTA: vedere nella directory conf_example il file esempio piu' aggiornato! + +per attivare il driver è necessario inserire la seguente variabile nel file di configurazion + RAIN_GPIO="drv:rainsensorqty:25" # Physical 22 - wPi 6 + +la variabile seguente è impiegata anche da drvrainsensorqty per rilevare la chiusura del contatto magnetico che, in un circuito pull-up, è lo stato 1. + # Valore in ingresso sul gpio definito in RAIN_GPIO che indica lo stato di pioggia + RAIN_GPIO_STATE=1 +le seguenti variabili controllano il driver come descritto: + RAINSENSORQTY_LOOPSFORSETRAINING=16 # dopo 10 impulsi, 10 vaschette riempite si considera pioggia + RAINSENSORQTY_SECSBETWEENRAINEVENT=10800 # =3h, significa che dopo 3 si resetta il numero di vaschette da riempire e solo dopo il riempimento del numero di vaschette si considera una nuova pioggia +infine la variabile seguente è la quantita' di acqua espressa in mm di precipitazioni: + RAINSENSORQTY_MMEACH=0.33 # see RAINSENSORQTY driver readme for details + +CALIBRAZIONE SENSORE PIOGGIA +---------------------------- +secondo il seguente processo da me effettuato sul mio misuratore di pioggia: +Ho erogato 18 ml di acqua nel rain gauge che hanno prodotto 10 impulsi; pertanto il riempimento di 1.8 ml ha causato un impulso, 1 ml = 1000 mmc (mm cubici), +1.8 ml sono pari a 1800 mmc +la superficie della vaschetta in mmq è pari a 110 mm x 55 mm = 5500 mmq +volume / superficie mi da' l'altezza, quindi 1800 mmc / 5500 mmq = 0.32727273 mm +se fossero stati 1.7 ml di acqua per ogni impulso/vaschetta riempita, la varibile sarebbe stata impostata a 0.30909091 mm + +COMANDI SPECIALI +---------------- +nella sottidirectory command sono prensenti: +commands/rainsensorqty_CHECK.sh + chiama la funzione di verifica piggio, la medesima chiamata da check_rain_sensor +commands/rainsensorqty_HISTORY.sh + visualizza lo storico della pioggia +commands/rainsensorqty_INIT.sh + inizializza il driver eseguendo lo script di monitoring - normalmente tale processo avviene da piGarden.sh + utile quando si vuole testare dei cambiamenti o se necessario riavviare dopo il kill del comando successivo +commands/rainsensorqty_KILL.sh + killa i processi di monitoring ed eventuali figli +commands/rainsensorqty_RAINNOW.sh + simula una pioggia + +ULTERIORI VARIABILI in config.include.sh +---------------------------------------- +esistono ulteriori variabili che potrebbe essere necessario variare + +RAINSENSOR_ANTIBOUNCE=0.3 # 0.3 seconds for manage antibounce of reed contact + server per ritardare la lettura di un secondo impulso falso causato dal rimbalzo del contatto magnetico + +RAINSENSORQTY_verbose="yes" + aumenta il livello di verbosita' nei file di log + +RAINSENSORQTY_LASTRAIN="$STATUS_DIR/rainsensorqty_lastrain" + memorizza l'ultima pioggia +RAINSENSORQTY_HISTORY="$STATUS_DIR/rainsensorqty_history" + memorizza tutte le piogge permettendo di visualizzarlo storico (commands/rainsensorqty_HISTORY.sh) + +RAINSENSORQTY_MONITORLOG="$DIR_SCRIPT/log/rainsensorqty_monitor.log" + log del script di monitoring, popolato solo se RAINSENSORQTY_verbose="yes" + +RAINSENSORQTY_MONPID="$TMP_PATH/rainsensorqty_monitor.pid" + file che viene popolato con il pid dello script di monitoring + +RAINSENSORQTY_DIR="$DIR_SCRIPT/drv/rainsensorqty" + home directory del driver + +monitor_sh="$RAINSENSORQTY_DIR/drv_rainsensorqty_monitor.sh" + script di monitoring + lo script eredita le varibili di ambiente da .set_var in $RAINSENSORQTY_DIR + +#rising means waiting for 1 status (from 0) +#falling means waiting for 0 status (from 1) +#RAINSENSORQTY_PULSE=rising # pull-down circuit (rest status is 0) +#RAINSENSORQTY_PULSE=falling # pull-up circuit (rest status is 1) +if (( RAIN_GPIO_STATE = 1 )) ; then + RAINSENSORQTY_PULSE=rising # pull-down circuit (rest status is 0) +fi +if (( RAIN_GPIO_STATE = 0 )) ; then + RAINSENSORQTY_PULSE=falling # pull-up circuit (rest status is 1) +fi +if [[ -z $RAINSENSORQTY_PULSE ]] ; then + echo "ERROR: RAIN_GPIO_STATE non set in piGarden.conf" + exit 1 +fi + + lo script di monitoring ascolta il cambiamento di stato da quello di riposo allo stato di impulso (chiusura del contatto reed). + dipendentemente dal circuto implementato, se lo stato di riposo e' 0, lo script attende la variazione verso 1 (rising) + se lo stato di riposo e' 1, lo script attende la variazione verso 0 (falling) + la variabile RAINSENSORQTY_PULSE viene impostata secondo il valore di RAIN_GPIO_STATE presente in /etc/piGarden.conf + cioe' il valore che ci si aspetta per registrare lo stato di pioggia + diff --git a/drv/rainsensorqty/commands/rainsensorqty_CHECK.sh b/drv/rainsensorqty/commands/rainsensorqty_CHECK.sh new file mode 100755 index 0000000..8796de7 --- /dev/null +++ b/drv/rainsensorqty/commands/rainsensorqty_CHECK.sh @@ -0,0 +1,40 @@ +#!/bin/bash +# +# Driver rainsensorqty - driver for measure the rain volume +# Author: androtto +# file "test_rainsensorqty_CHECK.sh" +# test script for checking rain status using drv_rainsensorqty_rain_sensor_get function +# Version: 0.2.0 +# Data: 11/Aug/2019 + +SCRIPTDIR="$(cd `dirname $0` ; pwd )" +SCRIPTNAME=${0##*/} +cd $SCRIPTDIR/.. # command is a subdirectory of driver + +DIR_SCRIPT=/home/pi/piGarden # home directory of piGarden +CONFIG_ETC="/etc/piGarden.conf" +TMP_PATH="/run/shm" +if [ ! -d "$TMP_PATH" ]; then + TMP_PATH="/tmp" +fi + +LOG_OUTPUT_DRV_FILE="$DIR_SCRIPT/log/$LOG_OUTPUT_DRV_FILE" + +. $CONFIG_ETC + +. ./common.include.sh +. ./config.include.sh +. ./init.include.sh +. ./rainsensor.include.sh + +# restituisce 0 se piove, e nell'output di testo il valore di "$RAIN_GPIO_STATE" +# restituisce 99 se non piove, output "norain" +# esce con 1 se non c'e' il monitoring, output "ERROR" + +drv_rainsensorqty_rain_sensor_get +case $? in + 0) echo "NORMAL: it's raining" ;; + 99) echo "NORMAL: it's not raining" ;; + 1) echo "ERROR: monitor process $DIR_SCRIPT/drv/rainsensorqty/drv_rainsensorqty_monitor.sh is not running" ;; +esac + diff --git a/drv/rainsensorqty/commands/rainsensorqty_HISTORY.sh b/drv/rainsensorqty/commands/rainsensorqty_HISTORY.sh new file mode 100755 index 0000000..b841615 --- /dev/null +++ b/drv/rainsensorqty/commands/rainsensorqty_HISTORY.sh @@ -0,0 +1,40 @@ +#!/bin/bash +# +# Driver rainsensorqty - driver for measure the rain volume +# Author: androtto +# file "test_rainsensorqty_CHECK.sh" +# test script for checking rain status using drv_rainsensorqty_rain_sensor_get function +# Version: 0.2.0 +# Data: 11/Aug/2019 + +SCRIPTDIR="$(cd `dirname $0` ; pwd )" +SCRIPTNAME=${0##*/} +cd $SCRIPTDIR/.. # command is a subdirectory of driver + +DIR_SCRIPT=/home/pi/piGarden # home directory of piGarden +CONFIG_ETC="/etc/piGarden.conf" +TMP_PATH="/run/shm" +if [ ! -d "$TMP_PATH" ]; then + TMP_PATH="/tmp" +fi + +LOG_OUTPUT_DRV_FILE="$DIR_SCRIPT/log/$LOG_OUTPUT_DRV_FILE" + +. $CONFIG_ETC + +. ./common.include.sh +. ./config.include.sh +. ./init.include.sh +. ./rainsensor.include.sh + +echo "RAIN HISTORY" +rain_history + +cat $RAINSENSORQTY_HISTORY | while read line +do + set -- ${line//:/ } + when=$1 + howmuch=$2 + printf "RAINED on %s for %.2f mm\n" "$(date --date="@$1")" $( $JQ -n "$howmuch * $RAINSENSORQTY_MMEACH" ) +done + diff --git a/drv/rainsensorqty/commands/rainsensorqty_INIT.sh b/drv/rainsensorqty/commands/rainsensorqty_INIT.sh new file mode 100755 index 0000000..7ec27f9 --- /dev/null +++ b/drv/rainsensorqty/commands/rainsensorqty_INIT.sh @@ -0,0 +1,29 @@ +#!/bin/bash +# Driver rainsensorqty - driver for measure the rain volume +# Author: androtto +# file "test_rainsensorqty_INIT.sh" +# test script for initialize driver and executing monitor process +# Version: 0.2.0 +# Data: 11/Aug/2019 + +SCRIPTDIR="$(cd `dirname $0` ; pwd )" +SCRIPTNAME=${0##*/} +cd $SCRIPTDIR/.. # command is a subdirectory of driver + +DIR_SCRIPT=/home/pi/piGarden # home directory of piGarden +CONFIG_ETC="/etc/piGarden.conf" +TMP_PATH="/run/shm" +if [ ! -d "$TMP_PATH" ]; then + TMP_PATH="/tmp" +fi + +. $CONFIG_ETC + +. ./config.include.sh +. ./common.include.sh +. ./init.include.sh +. ./rainsensor.include.sh + +drv_rainsensorqty_rain_sensor_init + +drv_rainsensorqty_init diff --git a/drv/rainsensorqty/commands/rainsensorqty_KILL.sh b/drv/rainsensorqty/commands/rainsensorqty_KILL.sh new file mode 100755 index 0000000..63683f9 --- /dev/null +++ b/drv/rainsensorqty/commands/rainsensorqty_KILL.sh @@ -0,0 +1,48 @@ +#!/bin/bash + +SCRIPTDIR="$(cd `dirname $0` ; pwd )" +SCRIPTNAME=${0##*/} +cd $SCRIPTDIR/.. # command is a subdirectory of driver + +DIR_SCRIPT=/home/pi/piGarden # home directory of piGarden +CONFIG_ETC="/etc/piGarden.conf" +TMP_PATH="/run/shm" +if [ ! -d "$TMP_PATH" ]; then + TMP_PATH="/tmp" +fi + +. $CONFIG_ETC + +. ./config.include.sh +. ./common.include.sh +. ./init.include.sh +. ./rainsensor.include.sh + +# check if rain monitor process is running... +if [[ -f "$RAINSENSORQTY_MONPID" ]] ; then + pid="$( < "$RAINSENSORQTY_MONPID" )" + if ps -fp $pid >/dev/null ; then + echo "process $pid pid and its child(ren)" + children_pid="$(ps -ef| awk "\$3==$pid {print \$2}")" + ps -fp $pid + ps -fp $children_pid | tail +2 + echo -e "\nsending TERM signal to $pid and its child(ren)" + echo kill $children_pid + echo kill $pid + kill $children_pid + kill $pid + echo -e "\nchecking $pid pid and its child(ren) are still alive" + for process in $pid $children_pid + do + if ps -fp $process >/dev/null ; then + echo "$process is still alive" + else + echo "$process is dead" + fi + done + else + echo "no RAIN process alive" + fi + +fi + diff --git a/drv/rainsensorqty/commands/rainsensorqty_RAINNOW.sh b/drv/rainsensorqty/commands/rainsensorqty_RAINNOW.sh new file mode 100755 index 0000000..e87377d --- /dev/null +++ b/drv/rainsensorqty/commands/rainsensorqty_RAINNOW.sh @@ -0,0 +1,27 @@ +#!/bin/bash +# Driver rainsensorqty - driver for measure the rain volume +# Author: androtto +# file "test_rainsensorqty_RAINNOW.sh" +# test script for simulate rain ... now! +# Version: 0.2.0 +# Data: 11/Aug/2019 + +SCRIPTDIR="$(cd `dirname $0` ; pwd )" +SCRIPTNAME=${0##*/} +cd $SCRIPTDIR/.. # command is a subdirectory of driver + +DIR_SCRIPT=/home/pi/piGarden # home directory of piGarden +CONFIG_ETC="/etc/piGarden.conf" +TMP_PATH="/run/shm" +if [ ! -d "$TMP_PATH" ]; then + TMP_PATH="/tmp" +fi + +. $CONFIG_ETC + +. ./config.include.sh +. ./common.include.sh +. ./init.include.sh +. ./rainsensor.include.sh + +echo "$(date +%s):$RAINSENSORQTY_LOOPSFORSETRAINING" > ${RAINSENSORQTY_LASTRAIN} diff --git a/drv/rainsensorqty/common.include.sh b/drv/rainsensorqty/common.include.sh index daf144e..810e9c7 100644 --- a/drv/rainsensorqty/common.include.sh +++ b/drv/rainsensorqty/common.include.sh @@ -1,17 +1,37 @@ # -# Funzioni comuni utilizzate dal driver -# +# Driver rainsensorqty - driver for measure the rain volume +# Author: androtto +# file "common.include.sh" +# common functions used by driver +# Version: 0.2.0 +# Data: 11/Aug/2019 + + +#note: #RAINSENSORQTY_MONPID="$TMP_PATH/rainsensorqty_monitor.pid" # - -function drv_rainsensorqty_writelog { - #2 variables - $1 function, $2 message - echo -e "$1 - `date`\t\t$2" >> "$LOG_OUTPUT_DRV_FILE" +d() # short date & time +{ +date '+%X-%x' } -function drv_rainsensorqty_check () { +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 @@ -21,7 +41,7 @@ function drv_rainsensorqty_check () { drv_rainsensorqty_writelog $f "NORMAL: $pid pid is running" return 0 else - drv_rainsensorqty_writelog $f "$pid pid monitor process NOT running - $RAINSENSORQTY_MONPID file contains $pid" + drv_rainsensorqty_writelog $f "ERROR: $pid pid monitor process NOT running - $RAINSENSORQTY_MONPID file contains $pid" return 1 fi else @@ -29,3 +49,21 @@ function drv_rainsensorqty_check () { return 1 fi } + +en_echo() # enhanched echo - check verbose variable +{ + [[ $RAINSENSORQTY_verbose = yes ]] && echo "$(d) $*" +} + +rain_history() +{ + [[ ! -f $RAINSENSORQTY_HISTORY ]] && touch $RAINSENSORQTY_HISTORY + [[ ! -f $RAINSENSORQTY_LASTRAIN ]] && return 1 + if grep -q ^$(<$RAINSENSORQTY_LASTRAIN)$ $RAINSENSORQTY_HISTORY ; then + : # do nothing + return 2 + else + cat $RAINSENSORQTY_LASTRAIN >> $RAINSENSORQTY_HISTORY + return 0 + fi +} diff --git a/drv/rainsensorqty/conf_example/piGarden.conf.rainsensorqty.example b/drv/rainsensorqty/conf_example/piGarden.conf.rainsensorqty.example new file mode 100644 index 0000000..b6e8199 --- /dev/null +++ b/drv/rainsensorqty/conf_example/piGarden.conf.rainsensorqty.example @@ -0,0 +1,14 @@ +# cfg file version 0.2.0 +# Id del gpio usato per collegare il sensore di rilevamento pioggia +# attraverso il driver rainsensorqty +RAIN_GPIO="drv:rainsensorqty:25" # Physical 22 - wPi 6 + +# Valore in ingresso sul gpio definito in RAIN_GPIO che indica lo stato di pioggia +# variabile usata anche da drv:rainsensorqty, se e' a 1, significa che il reed contact e' collegato ad un circuito pull-down, vuol dire che attende l'impulso a 1 per contare le vaschette, normalmente e' a 0. +# se e' a 0, significa che il reed contact e' collegato ad un circuito pull-up, vuol dire che attende l'impulso a 0 per contare le vaschette, normalmente e' a 0. +RAIN_GPIO_STATE=0 + +RAINSENSORQTY_LOOPSFORSETRAINING=16 # dopo 16 impulsi, 16 vaschette riempite si considera pioggia +RAINSENSORQTY_SECSBETWEENRAINEVENT=10800 # =3h, significa che dopo 3 ore si resetta il numero di vaschette riempire e solo dopo un nuovo ciclo di riempimento si considera una nuova pioggia + +RAINSENSORQTY_MMEACH=0.33 # see RAINSENSORQTY driver readme for details diff --git a/drv/rainsensorqty/config.include.sh b/drv/rainsensorqty/config.include.sh index febafaa..9de7056 100644 --- a/drv/rainsensorqty/config.include.sh +++ b/drv/rainsensorqty/config.include.sh @@ -1,30 +1,39 @@ # -# File di configurazione del driver -# +# Driver rainsensorqty - driver for measure the rain volume +# Author: androtto +# file "config.include.sh" +# specific driver config file +# Version: 0.2.0 +# Data: 11/Aug/2019 + +RAINSENSOR_ANTIBOUNCE=0.3 # 0.3 seconds for manage antibounce of reed contact + +RAINSENSORQTY_verbose="no" # yes/no -declare -g RAINSENSORQTY_LASTRAIN RAINSENSORQTY_LASTRAIN="$STATUS_DIR/rainsensorqty_lastrain" +RAINSENSORQTY_HISTORY="$STATUS_DIR/rainsensorqty_history" -#not used, to be checked -#declare -g RAINSENSORQTY_LOG -#RAINSENSORQTY_LOG="$DIR_SCRIPT/log/rainsensorqty.log" - -declare -g RAINSENSORQTY_MONITORLOG RAINSENSORQTY_MONITORLOG="$DIR_SCRIPT/log/rainsensorqty_monitor.log" -declare -g RAINSENSORQTY_PID RAINSENSORQTY_MONPID="$TMP_PATH/rainsensorqty_monitor.pid" -declare -g RAINSENSORQTY_DIR RAINSENSORQTY_DIR="$DIR_SCRIPT/drv/rainsensorqty" -declare -g RAINSENSORQTY_PULSE -RAINSENSORQTY_PULSE=falling +monitor_sh="$RAINSENSORQTY_DIR/drv_rainsensorqty_monitor.sh" -declare -g RAINSENSORQTY_WAIT -RAINSENSORQTY_WAIT=rising -# mm of water for each pulse - default -declare -g RAINSENSORQTY_MMEACH -RAINSENSORQTY_MMEACH=0.303030303 +#rising means waiting for 1 status (from 0) +#falling means waiting for 0 status (from 1) +#RAINSENSORQTY_PULSE=rising # pull-down circuit (rest status is 0) +#RAINSENSORQTY_PULSE=falling # pull-up circuit (rest status is 1) +if (( RAIN_GPIO_STATE = 1 )) ; then + RAINSENSORQTY_PULSE=rising # pull-down circuit (rest status is 0) +fi +if (( RAIN_GPIO_STATE = 0 )) ; then + RAINSENSORQTY_PULSE=falling # pull-up circuit (rest status is 1) +fi +if [[ -z $RAINSENSORQTY_PULSE ]] ; then + echo "ERROR: RAIN_GPIO_STATE non set in piGarden.conf" + exit 1 +fi diff --git a/drv/rainsensorqty/drv_rainsensorqty_monitor.sh b/drv/rainsensorqty/drv_rainsensorqty_monitor.sh new file mode 100755 index 0000000..9d87501 --- /dev/null +++ b/drv/rainsensorqty/drv_rainsensorqty_monitor.sh @@ -0,0 +1,75 @@ +#!/bin/bash +# +# Driver rainsensorqty - driver for measure the rain volume +# Author: androtto +# file "drv_rainsensorqty_monitor.sh" +# monitor script +# Version: 0.2.0 +# Data: 11/Aug/2019 + +############### +# MAIN # +############### + +DIRNAME="$( dirname $0 )" +f="$(basename $0)" +. $DIRNAME/common.include.sh +set_var="$DIRNAME/.set_var" + +if [[ -f "$set_var" ]] ; then + en_echo "NORMAL: file $set_var found - getting variables" + . "$set_var" +else + echo "ERROR: $set_var not found" + exit 1 +fi + +#drvt="$( echo $RAIN_GPIO | $CUT -f 1 -d: )" +#drv="$( echo $RAIN_GPIO | $CUT -f 2 -d: )" +gpio_port="$( echo $RAIN_GPIO | $CUT -f 3 -d: )" + +# check if no other rain monitor process running... +if [[ -f "$RAINSENSORQTY_MONPID" ]] ; then + pid="$( < "$RAINSENSORQTY_MONPID" )" + if ps -fp $pid >/dev/null ; then + drv_rainsensorqty_writelog $f "ERROR monitor process already running\n$( ps -fp $pid )" + exit 1 + fi +fi + +echo $$ > $RAINSENSORQTY_MONPID +drv_rainsensorqty_writelog $f "NORMAL - $$ pid monitor process started - see $RAINSENSORQTY_MONPID" + +# init variables +MMEACH="$RAINSENSORQTY_MMEACH" +(( counter=0 )) +rain_history + +echo "" +en_echo "---- NEW RUN " + +# loop forever +while true +do + before=`date +%s` + sleep $RAINSENSOR_ANTIBOUNCE + en_echo "WAITING FOR PULSE" + $GPIO -g wfi $gpio_port $RAINSENSORQTY_PULSE + now=`date +%s` + (( elapsed = now - before )) + if (( elapsed >= RAINSENSORQTY_SECSBETWEENRAINEVENT )) ; then + (( counter=0 )) + drv_rainsensorqty_writelog $f "first drops after $elapsed seconds since last rain ( greater than $RAINSENSORQTY_SECSBETWEENRAINEVENT )- new cycle - waiting for $( $JQ -n "$RAINSENSORQTY_LOOPSFORSETRAINING * $MMEACH" )" & + rain_history + fi + (( counter+=1 )) + en_echo "PULSE RECEIVED (counter $counter)" + MMWATER=$( $JQ -n "$counter*$MMEACH" ) + text=$(printf "%.2f mm height (loop %d)" $MMWATER $counter ) + if (( counter >= RAINSENSORQTY_LOOPSFORSETRAINING )) ; then + drv_rainsensorqty_writelog $f "RAINING - $text" & + echo "$(date +%s):$counter" > ${RAINSENSORQTY_LASTRAIN} + else + drv_rainsensorqty_writelog $f "now is $text" & + fi +done diff --git a/drv/rainsensorqty/init.include.sh b/drv/rainsensorqty/init.include.sh index 838628e..f599cf2 100644 --- a/drv/rainsensorqty/init.include.sh +++ b/drv/rainsensorqty/init.include.sh @@ -1,17 +1,17 @@ # +# Driver rainsensorqty - driver for measure the rain volume +# Author: androtto +# file "init.include.sh" # Inizializza il driver, viene richiamata nella funzione init di piGarden -# -# variables from general config file /etc/piGarden.conf -#RAINSENSORQTY_LOOPSFORSETRAINING=10 # dopo 10 impulsi, 10 vaschette riempite si considera pioggia -#RAINSENSORQTY_SECSBETWEENRAINEVENT=10800 # =3h, significa che dopo 3 si resetta il numero di vaschette da riempire e solo dopo il riempimento del numero di vaschette si considera una nuova pioggia +# Version: 0.2.0 +# Data: 11/Aug/2019 function drv_rainsensorqty_init { local f="drv_rainsensorqty_init" - local monitor_sh="$RAINSENSORQTY_DIR/rainsensorqty_monitor.sh" # format RAIN_GPIO="drv:rainsensorqty:25" - drv_rainsensorqty_writelog $f "NORMAL - executing $monitor_sh" + drv_rainsensorqty_writelog $f "NORMAL: executing $monitor_sh" # esegue rainmonitor if [ -x "$monitor_sh" ] ; then @@ -21,8 +21,6 @@ function drv_rainsensorqty_init { else drv_rainsensorqty_writelog $f "ERROR: cannot find \"\$monitor_sh \" " fi - } -set | $GREP -e ^GPIO -e ^LOG -e ^CUT -e ^JQ -e ^RAIN -e ^SCR -e ^TMP > "$RAINSENSORQTY_DIR/set_var" - +set | $GREP -e ^GPIO -e ^LOG -e ^CUT -e ^JQ -e ^RAIN -e ^SCR -e ^TMP > "${RAINSENSORQTY_DIR}/.set_var" diff --git a/drv/rainsensorqty/rainsensor.include.sh b/drv/rainsensorqty/rainsensor.include.sh index 64e4a22..4da40e7 100644 --- a/drv/rainsensorqty/rainsensor.include.sh +++ b/drv/rainsensorqty/rainsensor.include.sh @@ -1,9 +1,19 @@ +# +# Driver rainsensorqty - driver for measure the rain volume, for rain meter, for rain gauge +# Author: androtto +# file "rainsensor.include.sh" +# functions called by piGarden.sh +# Version: 0.1.2 +# Data: 19/Mar/2019 +# fixed output drv_rainsensorqty_rain_sensor_get + # # Inizializza il sensore di rilevamento pioggia # # $1 identificativo gpio del sensore di pioggia # -function drv_rainsensorqty_rain_sensor_init { +drv_rainsensorqty_rain_sensor_init() +{ drv_rainsensorqty_writelog "drv_rainsensorqty_rain_sensor_init" $1 local drvt="$( echo $RAIN_GPIO | $CUT -f 1 -d: )" @@ -19,35 +29,49 @@ function drv_rainsensorqty_rain_sensor_init { # # $1 identificativo gpio del sensore di pioggia # -function drv_rainsensorqty_rain_sensor_get { +# restituisce 0 se piove, e nell'output di testo il valore di "$RAIN_GPIO_STATE" +# restituisce 99 se non piove, output "norain" +# esce con 1 se non c'e' il monitoring, output "ERROR" +drv_rainsensorqty_rain_sensor_get() +{ local now=$(date +%s) - local interval=100 # 100 secondi > 1 minuto frequenza di verifica da parte di, come da seguente schedulazione + local interval=60 # because check_rain_sensor is scheduled once a minute ... to changed if schedule is modified, from crontab: #* * * * * /home/pi/piGarden/piGarden.sh check_rain_sensor 2> /tmp/check_rain_sensor.err - local f="drv_rainsensorqty_check" - drv_rainsensorqty_writelog $f $1 - # verifica se lo script di monitorin e' attivo + local f="drv_rainsensorqty_check" + + # script called with: + #drv_rainsensorqty_writelog $f $1 + # ignora il parametro di $1, lo recupera dal file di configurazione + + # verifica se lo script di monitoring e' attivo if drv_rainsensorqty_check ; then drv_rainsensorqty_writelog $f "NORMAL - drv_rainsensorqty_check ok, monitor process running" if [ -f "$RAINSENSORQTY_LASTRAIN" ] ; then - local lastrain="$( < "$RAINSENSORQTY_LASTRAIN" )" + local lastrain="$( cat "$RAINSENSORQTY_LASTRAIN" | $CUT -f 1 -d: )" + local counter="$( cat "$RAINSENSORQTY_LASTRAIN" | $CUT -f 2 -d: )" + LEVEL=$( $JQ -n "$counter/$RAINSENSORQTY_LOOPSFORSETRAINING" | $JQ 'floor' ) (( diff = now - lastrain )) - drv_rainsensorqty_writelog $f "NORMAL: last rain $( date --date="@$lastrain" ) " + drv_rainsensorqty_writelog $f "NORMAL: last rain $( date --date="@$lastrain" ) - LEVEL $LEVEL rain" drv_rainsensorqty_writelog $f "NORMAL: check rain $( date --date="@$now" ) " if (( diff <= interval )) ; then - drv_rainsensorqty_writelog $f "RAIN : check rain - diff $diff < $interval - return $RAIN_GPIO_STATE" - return $RAIN_GPIO_STATE + drv_rainsensorqty_writelog $f "RAIN - return \$RAIN_GPIO_STATE = $RAIN_GPIO_STATE as output" + drv_rainsensorqty_writelog $f "DEBUG : check rain - diff $diff < $interval - return $RAIN_GPIO_STATE" + msg="$RAIN_GPIO_STATE" + echo $msg + return 0 else - drv_rainsensorqty_writelog $f "NO_RAIN : check rain - diff $diff < $interval - return 99" + drv_rainsensorqty_writelog $f "NO_RAIN - return \"norain\" as output" + drv_rainsensorqty_writelog $f "DEBUG : check rain - diff $diff < $interval - return 99" + msg="norain" + echo $msg return 99 fi - fi else - drv_rainsensorqty_writelog $f "ERROR - drv_rainsensorqty_check failed, no monitor process running" - exit 1 - + drv_rainsensorqty_writelog $f "ERROR: drv_rainsensorqty_check failed, no monitor process running ($monitor_sh)" + msg="ERROR" + echo $msg + return 1 fi - - } diff --git a/drv/rainsensorqty/rainsensorqty_monitor.sh b/drv/rainsensorqty/rainsensorqty_monitor.sh deleted file mode 100755 index 70b30d4..0000000 --- a/drv/rainsensorqty/rainsensorqty_monitor.sh +++ /dev/null @@ -1,84 +0,0 @@ -#!/bin/bash -# -# Bash monitor script to measure rainfall -# Author: androtto -# -# - - -############### -# MAIN # -############### - - -DIRNAME="$( dirname $0 )" -f="$(basename $0)" -. $DIRNAME/common.include.sh - -echo "$(date) ---------------- NEW RUN " - -if [[ -f "$DIRNAME/set_var" ]] ; then - echo "NORMAL: file $DIRNAME/set_var found - getting variables" - . "$DIRNAME/set_var" -else - echo "ERROR: $DIRNAME/set_var not found" - exit 1 -fi - -#drvt="$( echo $RAIN_GPIO | $CUT -f 1 -d: )" -#drv="$( echo $RAIN_GPIO | $CUT -f 2 -d: )" -gpio_port="$( echo $RAIN_GPIO | $CUT -f 3 -d: )" - -#got from config file above: -#RAINSENSORQTY_LASTRAIN="$STATUS_DIR/rainsensorqty_lastrain" -#RAINSENSORQTY_LOG="$DIR_SCRIPT/log/rainsensorqty.log" -#RAINSENSORQTY_MONPID="$TMP_PATH/rainsensorqty_monitor.pid" -#RAINSENSORQTY_DIR="$DIR_SCRIPT/drv/rainsensorqty" -#RAINSENSORQTY_PULSE=falling -#RAINSENSORQTY_WAIT=rising - - -# no other monitor process running... -if [[ -f "$RAINSENSORQTY_MONPID" ]] ; then - pid="$( < "$RAINSENSORQTY_MONPID" )" - if ps -fp $pid >/dev/null ; then - drv_rainsensorqty_writelog $f "ERROR monitor process already running\n$( ps -fp $pid )" - exit 1 - fi -fi - -#drv_rainsensorqty_writelog $f "NORMAL - no rainmonitor process already running" -echo $$ > $RAINSENSORQTY_MONPID -drv_rainsensorqty_writelog $f "NORMAL - $$ pid monitor process started - see $RAINSENSORQTY_MONPID" -#echo "NORMAL: no raining monitor process $( echo ; ps -ef | grep rain | grep monitor)" - -# init variables -MMEACH="$RAINSENSORQTY_MMEACH" -counter=0 - -while true -do - before=`date +%s` - echo $GPIO -g wfi $gpio_port $RAINSENSORQTY_PULSE # falling 1->0 - $GPIO -g wfi $gpio_port $RAINSENSORQTY_PULSE # falling 1->0 - #sleep $(= $RAINSENSORQTY_SECSBETWEENRAINEVENT )) ; then - counter=0 - drv_rainsensorqty_writelog $f "$elapsed seconds elapsed ( greater than $RAINSENSORQTY_SECSBETWEENRAINEVENT set ) since last rain, first $MMEACH mm rain" - echo "$elapsed seconds elapsed ( greater than $RAINSENSORQTY_SECSBETWEENRAINEVENT set ) since last rain, first $MMEACH mm rain (first loop)" - fi - counter=$(( counter+=1 )) - MMWATER=$( $JQ -n "$counter*$MMEACH" ) - drv_rainsensorqty_writelog $f "now is $MMWATER mm rain" - echo "now is $MMWATER mm rain (loop $counter)" - if (( $counter >= $RAINSENSORQTY_LOOPSFORSETRAINING )) ; then - drv_rainsensorqty_writelog $f "$MMWATER mm - irrigation to be stopped" - echo "$MMWATER mm - irrigation to be stopped (loop $counter)" - date +%s > ${RAINSENSORQTY_LASTRAIN} - date > ${RAINSENSORQTY_LASTRAIN}_date - fi - echo $GPIO -g wfi $gpio_port $RAINSENSORQTY_WAIT # rising 0->1 - $GPIO -g wfi $gpio_port $RAINSENSORQTY_WAIT # rising 0->1 -done diff --git a/drv/rainsensorqty/test_rainsensorqty_CHECK.sh b/drv/rainsensorqty/test_rainsensorqty_CHECK.sh deleted file mode 100755 index 77d4c0b..0000000 --- a/drv/rainsensorqty/test_rainsensorqty_CHECK.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/bash -DIR_SCRIPT=/home/pi/piGarden -NAME_SCRIPT="not_needed" -CONFIG_ETC="/etc/piGarden.conf" -TMP_PATH="/run/shm" -if [ ! -d "$TMP_PATH" ]; then - TMP_PATH="/tmp" -fi - -LOG_OUTPUT_DRV_FILE="$DIR_SCRIPT/log/LOG_OUTPUT_DRV_FILE" - - - -. $CONFIG_ETC - -. ./common.include.sh -. ./config.include.sh -. ./init.include.sh -. ./rainsensor.include.sh - -drv_rainsensorqty_rain_sensor_get -echo "drv_rainsensorqty_rain_sensor_get $?" - diff --git a/drv/rainsensorqty/test_rainsensorqty_INIT.sh b/drv/rainsensorqty/test_rainsensorqty_INIT.sh deleted file mode 100755 index bdcae96..0000000 --- a/drv/rainsensorqty/test_rainsensorqty_INIT.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/bash -DIR_SCRIPT=/home/pi/piGarden -NAME_SCRIPT="not_needed" -CONFIG_ETC="/etc/piGarden.conf" -TMP_PATH="/run/shm" -if [ ! -d "$TMP_PATH" ]; then - TMP_PATH="/tmp" -fi - - -. $CONFIG_ETC - -. ./config.include.sh -. ./common.include.sh -. ./init.include.sh -. ./rainsensor.include.sh - -drv_rainsensorqty_rain_sensor_init - -drv_rainsensorqty_init - -drv_rainsensorqty_rain_sensor_get -echo "drv_rainsensorqty_rain_sensor_get $?"