From d99566ef93c1dacd9961e4a44814530d7ece45fd Mon Sep 17 00:00:00 2001 From: lejubila Date: Sun, 11 Nov 2018 23:31:13 +0100 Subject: [PATCH 1/5] aggiunto scheletro driver rainsensorqty --- conf/piGarden.conf.rainsensorqty.example | 160 +++++++++++++++++++++++ drv/rainsensorqty/README.md | 2 + drv/rainsensorqty/common.include.sh | 12 ++ drv/rainsensorqty/config.include.sh | 7 + drv/rainsensorqty/init.include.sh | 9 ++ drv/rainsensorqty/rainsensor.include.sh | 46 +++++++ drv/rainsensorqty/setup.include.sh | 11 ++ events/scripts/mqtt_status.sh | 6 + 8 files changed, 253 insertions(+) create mode 100644 conf/piGarden.conf.rainsensorqty.example create mode 100644 drv/rainsensorqty/README.md create mode 100644 drv/rainsensorqty/common.include.sh create mode 100644 drv/rainsensorqty/config.include.sh create mode 100644 drv/rainsensorqty/init.include.sh create mode 100644 drv/rainsensorqty/rainsensor.include.sh create mode 100644 drv/rainsensorqty/setup.include.sh create mode 100644 events/scripts/mqtt_status.sh diff --git a/conf/piGarden.conf.rainsensorqty.example b/conf/piGarden.conf.rainsensorqty.example new file mode 100644 index 0000000..ebcdc75 --- /dev/null +++ b/conf/piGarden.conf.rainsensorqty.example @@ -0,0 +1,160 @@ +# Log file +LOG_FILE="/home/pi/piGarden/log/piGarden.log" +LOG_FILE_MAX_SIZE=1048576 # 1MB + +# Log file for driver output +LOG_OUTPUT_DRV_FILE="/tmp/piGarden.drv.log" + +# Status directory +STATUS_DIR="/home/pi/piGarden/state" + +# Event directory +EVENT_DIR="/home/pi/piGarden/events" + +# Posizione gpio +GPIO="/usr/local/bin/gpio" + +# Posizione js +JQ="/usr/local/bin/jq" + +# Percorso curl +CURL="/usr/bin/curl" + +# Percorso wc +WC="/usr/bin/wc" + +# Percorso gzip +GZIP="/bin/gzip" + +# Percorso mv +MV="/bin/mv" + +# Percorso di tr +TR="/usr/bin/tr" + +# Percorso di cut +CUT="/usr/bin/cut" + +# Percorso tcpserver +TCPSERVER="/usr/bin/tcpserver" + +# Percorso cron +CRONTAB="/usr/bin/crontab" + +# Percorso grep +GREP="/bin/grep" + +# Percorsp sed +SED="/bin/sed" + +# Percorso readlink +READLINK="/bin/readlink" + +# Percorso stat +STAT="/usr/bin/stat" + +# Percorso mosquito_pub +# # Installare con apt install mosquitto-clients +MOSQUITTO_PUB="/usr/bin/mosquitto_pub" + + +# Se impostato con il valore 1, indica che il sistema gestisce elettrovalvole monostabili, +# se impostato a 0 il sistema gestirà elettrovalvole bistabili +EV_MONOSTABLE=0 + +# Id gpio usati per simulare il doppio deviatore con cui eseguire l'alimentazione alle elettrovalvole +SUPPLY_GPIO_1=2 # Physical 3 - wPi 8 +SUPPLY_GPIO_2=3 # Physical 5 - wPi 9 + +# Stato dei due gpio per impartire l'alimentazione positiva alle elettrovalvole (aperta) +SUPPLY_GPIO_POS=0 + +# Stato dei due gpio per impartire l'alimentazione negativa alle elettrovalvole (chiusa) +SUPPLY_GPIO_NEG=1 + +# Stato di ingresso da assegnare al gpio per chiudere il rele +RELE_GPIO_CLOSE=0 + +# Stato di ingresso da assegnare al gpio per aprire il rele +RELE_GPIO_OPEN=1 + +# Id del gpio usato per collegare il sensore di rilevamento pioggia +RAIN_GPIO="drv:rainsensorqty:25" # Physical 22 - wPi 6 + +# Valore in ingresso sul gpio definito in RAIN_GPIO che indica lo stato di pioggia +RAIN_GPIO_STATE=0 + + +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 + + + + +# Numero totale di elettrovalvole +EV_TOTAL=6 + +# Definizione delle elettrovalvole +EV1_ALIAS="1" # +EV1_GPIO=17 # Physical 11 - wPi 0 +#EV1_NORAIN=1 # Non interrompe l'irrigazione di questa zona in caso di pioggia +#EV1_MONOSTABLE=1 # L'elettrovalvola è monostabile + +EV2_ALIAS="2" # +EV2_GPIO=27 # Physical 13 - wPi 2 + +EV3_ALIAS="3" # +EV3_GPIO=22 # Physical 15 - wPi 3 + +EV4_ALIAS="4" # +EV4_GPIO=18 # Physical 12 - wPi 1 + +EV5_ALIAS="5" # +EV5_GPIO=23 # Physical 16 - wPi 4 + +EV6_ALIAS="6" # +EV6_GPIO=24 # Physical 18 - wPi 5 + + +# Definisci il servizio online da utilizzare per il controllo delle condizioni meteo, puoi scegliere openweathermap oppure wunderground. +# Se non vuoi configurare nessun servizio imposta il vale "none" +WEATHER_SERVICE="openweathermap" +#WEATHER_SERVICE="none" # Nessun servizio configurato + +# Parametri di openweathermap, definisce l'api key e il luogo per recuperare lo stato meteo online +OPENWEATHERMAP_KEY="" +OPENWEATHERMAP_LOCATION="q=Pieve%20a%20Nievole,it" # https://openweathermap.org/current +OPENWEATHERMAP_TZ="Europe/Rome" # Time zone + +# Parametri di wunderground, definisce l'api key e il luogo per recuperare lo stato meteo online +WUNDERGROUND_KEY="" +WUNDERGROUND_LOCATION="IT/Pieve%20a%20Nievole" # http://www.wunderground.com/weather/api/d/docs?d=resources/country-to-iso-matching&MR=1 + + +# Blocca l'irrigazione se l'ultima pioggia rilevata online è avvenuta nell'ultima quantità di tempo inserita. +# Il tempo è espresso in secondi. Quindi inserendo 86400, se nelle ultime 24 ore ha piovuto viene bloccata l'irrigazione. Inserendo il valore zero non viene eseguito nessun controllo. +NOT_IRRIGATE_IF_RAIN_ONLINE=86400 + +# Il parametro è simile a quello precedente, il controllo però anziché essere fatto attingendo a wunderground, viene eseguito direttamente sul sensore se installato. Inserendo il valore zero non viene eseguito nessun controllo. +NOT_IRRIGATE_IF_RAIN_SENSOR=86400 + +# Indirizzo ip e porta di ascolto del socket server +TCPSERVER_IP="127.0.0.1" +TCPSERVER_PORT="8084" + +# Utente e password che i clients devono utilizzare per stabilire una connessione tramite socket server +TCPSERVER_USER="" +TCPSERVER_PWD="" + +# Con impostato il valore 1 non invia l'identificativi per statistiche di utilizzo +NO_SEND_IDENTIFIER=0 + +# Parametri connessione al broker mqtt +MQTT_ENABLE=0 # set 1 to enable +MQTT_HOST=you_host_mqtt +MQTT_PORT=1883 +MQTT_USER=your_user_mqtt +MQTT_PWD=yout_password_mqtt +MQTT_TOPIC="pigarden/result" +MQTT_CLIENT_ID=piGarden + diff --git a/drv/rainsensorqty/README.md b/drv/rainsensorqty/README.md new file mode 100644 index 0000000..427d12c --- /dev/null +++ b/drv/rainsensorqty/README.md @@ -0,0 +1,2 @@ +# Fake driver for sample and testing + diff --git a/drv/rainsensorqty/common.include.sh b/drv/rainsensorqty/common.include.sh new file mode 100644 index 0000000..d9c63da --- /dev/null +++ b/drv/rainsensorqty/common.include.sh @@ -0,0 +1,12 @@ +# +# Funzioni comuni utilizzate dal driver +# + +# +# Funzione di esempio +# +function rainsensorqty_foo { + + echo "bar" + +} diff --git a/drv/rainsensorqty/config.include.sh b/drv/rainsensorqty/config.include.sh new file mode 100644 index 0000000..3310bf7 --- /dev/null +++ b/drv/rainsensorqty/config.include.sh @@ -0,0 +1,7 @@ +# +# File di configurazione del driver +# + +declare -g RAINSENSORQTY_FILE_RUN +RAINSENSORQTY_FILE_RUN="$STATUS_DIR/rainsensorqty_run" + diff --git a/drv/rainsensorqty/init.include.sh b/drv/rainsensorqty/init.include.sh new file mode 100644 index 0000000..b3ebac3 --- /dev/null +++ b/drv/rainsensorqty/init.include.sh @@ -0,0 +1,9 @@ +# +# Inizializza il driver, viene richiamata nella funzione init di piGarden +# +function drv_rainsensorqty_init { + + local FOO="bar" + +} + diff --git a/drv/rainsensorqty/rainsensor.include.sh b/drv/rainsensorqty/rainsensor.include.sh new file mode 100644 index 0000000..683bf64 --- /dev/null +++ b/drv/rainsensorqty/rainsensor.include.sh @@ -0,0 +1,46 @@ +# +# Inizializza il sensore di rilevamento pioggia +# +# $1 identificativo gpio del sensore di pioggia +# +function drv_rainsensorqty_rain_sensor_init { + + echo "drv_rainsensorqty_rain_sensor_init $1" >> "$LOG_OUTPUT_DRV_FILE" + echo 0 > "$RAINSENSORQTY_FILE_RUN" + +} + +# +# Ritorna lo stato del sensore di rilevamento pioggia +# +# $1 identificativo gpio del sensore di pioggia +# return 0 = pioggia +# +function drv_rainsensorqty_rain_sensor_get { + + echo "drv_rainsensorqty_rain_sensor_get $1" >> "$LOG_OUTPUT_DRV_FILE" + + local state_rain="" + + if [ $(cat "$RAINSENSORQTY_FILE_RUN") == 1 ]; then + return + else + echo 1 > "$RAINSENSORQTY_FILE_RUN" + fi + + # Inserisci qui il codice per il controllo della pioggia e imposta il valore 0 a state_rain quando se sta piovendo + + + + + + + + + echo 0 > "$RAINSENSORQTY_FILE_RUN" + + return $state_rain + +} + + diff --git a/drv/rainsensorqty/setup.include.sh b/drv/rainsensorqty/setup.include.sh new file mode 100644 index 0000000..b556ff7 --- /dev/null +++ b/drv/rainsensorqty/setup.include.sh @@ -0,0 +1,11 @@ +# +# Questa funzione viene invocata dalla funzione "setup_drv" di piGarden ad ogni avvio dello script +# e serve per eseguire l'eventuale setup del driver se necessario +# +function drv_rainsensorqty_setup { + + declare -g RAINSENSORQTY_FILE_RUN + RAINSENSORQTY_FILE_RUN="$STATUS_DIR/rainsensorqty_run" + +} + diff --git a/events/scripts/mqtt_status.sh b/events/scripts/mqtt_status.sh new file mode 100644 index 0000000..82d1070 --- /dev/null +++ b/events/scripts/mqtt_status.sh @@ -0,0 +1,6 @@ +#!/bin/bash +EVENT="$1" +CAUSE="$2" +DATE="$3" +DIR_SCRIPT=`dirname $0` +"$DIR_SCRIPT/../../piGarden.sh" mqtt_status #&>> /tmp/pigarden_mqtt.log From e26292fe36217769d438192f333f316421341940 Mon Sep 17 00:00:00 2001 From: David Bigagli Date: Sun, 11 Nov 2018 23:39:22 +0100 Subject: [PATCH 2/5] Delete mqtt_status.sh --- events/scripts/mqtt_status.sh | 6 ------ 1 file changed, 6 deletions(-) delete mode 100644 events/scripts/mqtt_status.sh diff --git a/events/scripts/mqtt_status.sh b/events/scripts/mqtt_status.sh deleted file mode 100644 index 82d1070..0000000 --- a/events/scripts/mqtt_status.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash -EVENT="$1" -CAUSE="$2" -DATE="$3" -DIR_SCRIPT=`dirname $0` -"$DIR_SCRIPT/../../piGarden.sh" mqtt_status #&>> /tmp/pigarden_mqtt.log From 40eb0b24297a11aaa2d0524472cd1cd4beb50203 Mon Sep 17 00:00:00 2001 From: lejubila Date: Sat, 17 Nov 2018 09:20:24 +0100 Subject: [PATCH 3/5] Iniziato integrazione codice di @androtto nel driver rainsensorqty --- drv/rainsensorqty/common.include.sh | 22 ++++-- drv/rainsensorqty/config.include.sh | 18 ++++- drv/rainsensorqty/init.include.sh | 18 ++++- drv/rainsensorqty/rainsensor.include.sh | 46 +++++++----- drv/rainsensorqty/rainsensorqty_monitor.sh | 83 ++++++++++++++++++++++ drv/rainsensorqty/setup.include.sh | 11 --- drv/sample/common.include.sh | 2 +- include/drv.include.sh | 11 ++- 8 files changed, 169 insertions(+), 42 deletions(-) create mode 100755 drv/rainsensorqty/rainsensorqty_monitor.sh delete mode 100644 drv/rainsensorqty/setup.include.sh diff --git a/drv/rainsensorqty/common.include.sh b/drv/rainsensorqty/common.include.sh index d9c63da..2bc0a6a 100644 --- a/drv/rainsensorqty/common.include.sh +++ b/drv/rainsensorqty/common.include.sh @@ -1,12 +1,24 @@ # # Funzioni comuni utilizzate dal driver # - +#RAINSENSORQTY_MONPID="$TMP_PATH/rainsensorqty_monitor.pid" # -# Funzione di esempio -# -function rainsensorqty_foo { - echo "bar" +function drv_rainsensorqty_check () { + if [[ -f "$RAINSENSORQTY_MONPID" && -z "$RAINSENSORQTY_MONPID" ]] ; then + pid=$( < "$RAINSENSORQTY_MONPID" ) + echo "drv_rainsensorqty_check - NORMAL: checking if $pid pid is running" >> "$LOG_OUTPUT_DRV_FILE" + log_write "$$ pid monitor process - see $RAINSENSORQTY_MONPID" + if ps -fp $pid >/dev/null ; then + echo "drv_rainsensorqty_check - NORMAL: $pid pid is running" >> "$LOG_OUTPUT_DRV_FILE" + return 0 + else + echo "drv_rainsensorqty_check - NORMAL: $pid pid is NOT running" >> "$LOG_OUTPUT_DRV_FILE" + return 1 + fi + else + echo "drv_rainsensorqty_check - ERROR: no raining monitor process file \$RAINSENSORQTY_MONPID" >> "$LOG_OUTPUT_DRV_FILE" + return 1 + fi } diff --git a/drv/rainsensorqty/config.include.sh b/drv/rainsensorqty/config.include.sh index 3310bf7..22f39fc 100644 --- a/drv/rainsensorqty/config.include.sh +++ b/drv/rainsensorqty/config.include.sh @@ -2,6 +2,20 @@ # File di configurazione del driver # -declare -g RAINSENSORQTY_FILE_RUN -RAINSENSORQTY_FILE_RUN="$STATUS_DIR/rainsensorqty_run" +declare -g RAINSENSORQTY_LASTRAIN +RAINSENSORQTY_LASTRAIN="$STATUS_DIR/rainsensorqty_lastrain" +declare -g RAINSENSORQTY_LOG +RAINSENSORQTY_LOG="$DIR_SCRIPT/log/rainsensorqty.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 + +declare -g RAINSENSORQTY_WAIT +RAINSENSORQTY_WAIT=rising diff --git a/drv/rainsensorqty/init.include.sh b/drv/rainsensorqty/init.include.sh index b3ebac3..4fe3ddd 100644 --- a/drv/rainsensorqty/init.include.sh +++ b/drv/rainsensorqty/init.include.sh @@ -1,9 +1,23 @@ # # Inizializza il driver, viene richiamata nella funzione init di piGarden # -function drv_rainsensorqty_init { +# 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 + +function drv_rainsensorqty_init { + # format RAIN_GPIO="drv:rainsensorqty:25" + + # esegue rainmonitor + if [[ -x "$monitor_sh" ]] ; then + echo "OK - run rainmonitor" + nohup "$monitor_sh" $gpio $RAINSENSORQTY_LOOPSFORSETRAINING $RAINSENSORQTY_SECSBETWEENRAINEVENT >> /tmp/debug_rainmonitor.log 2>&1 & + sleep 1 + else + : + echo "KO - not run rainmonitor" + fi - local FOO="bar" } diff --git a/drv/rainsensorqty/rainsensor.include.sh b/drv/rainsensorqty/rainsensor.include.sh index 683bf64..bdf34f0 100644 --- a/drv/rainsensorqty/rainsensor.include.sh +++ b/drv/rainsensorqty/rainsensor.include.sh @@ -6,40 +6,48 @@ function drv_rainsensorqty_rain_sensor_init { echo "drv_rainsensorqty_rain_sensor_init $1" >> "$LOG_OUTPUT_DRV_FILE" - echo 0 > "$RAINSENSORQTY_FILE_RUN" + + local drvt="$( echo $RAIN_GPIO | $CUT -f 1 -d: )" + local drv="$( echo $RAIN_GPIO | $CUT -f 2 -d: )" + local gpio="$( echo $RAIN_GPIO | $CUT -f 3 -d: )" + + $GPIO -g mode $gpio in } # -# Ritorna lo stato del sensore di rilevamento pioggia +# Ritorna in output lo stato del sensore di rilevamento pioggia # # $1 identificativo gpio del sensore di pioggia -# return 0 = pioggia # function drv_rainsensorqty_rain_sensor_get { echo "drv_rainsensorqty_rain_sensor_get $1" >> "$LOG_OUTPUT_DRV_FILE" + if [ drv_rainsensorqty_check ]; then + # Cosa deve fare ???? + # gli facciamo rieseguire drv_rainsensorqty_init in modo che riavvii il monitor ??? + fi + + local state_rain="" - if [ $(cat "$RAINSENSORQTY_FILE_RUN") == 1 ]; then - return - else - echo 1 > "$RAINSENSORQTY_FILE_RUN" - fi + # INSERISCI QUI DENTRO I CONTROLLI SUL FILE $STATUS_DIR/rainsensorqty_lastrain + # SE SI VERIFICANO LE CONDIZIONI PER CUI SI DEVE INTERROMPERE L'IRRIGAZIONE + # DEVI IMPOSTARE last_rain CON IL VALORE $RAIN_GPIO_STATE - # Inserisci qui il codice per il controllo della pioggia e imposta il valore 0 a state_rain quando se sta piovendo + # + # + # + # + # + # + # + # + # + # - - - - - - - - echo 0 > "$RAINSENSORQTY_FILE_RUN" - - return $state_rain + echo $state_rain } diff --git a/drv/rainsensorqty/rainsensorqty_monitor.sh b/drv/rainsensorqty/rainsensorqty_monitor.sh new file mode 100755 index 0000000..100f6dd --- /dev/null +++ b/drv/rainsensorqty/rainsensorqty_monitor.sh @@ -0,0 +1,83 @@ +#!/bin/bash -x +# +# Bash script to measure rainfall +# Author: androtto +# Url: +# +# +# Scrive un messaggio nel file di log +# $1 log da scrivere +# 3 parameter expected in order: +#$gpio +#$RAINSENSORQTY_LOOPSFORSETRAINING +#$RAINSENSORQTY_SECSBETWEENRAINEVENT + +function log_write { + echo -e "`date`\t\t$1" >> $RAINSENSORQTY_LOG +} + +############### +# MAIN +############### + +if [ ! $# = 3 ] ; then + echo "ERROR: 3 parameters expected" +fi + +GPIO=$1 +LOOPSFORSETRAINING=$2 +SECSBETWEENRAINEVENT=$3 + +DIRNAME="$( dirname $0 )" +. /etc/piGarden.conf # test sulla presenza del file gia' fatti prima +. "$DIRNAME/config.include.sh" + +#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 + + +if [[ -f "$RAINSENSORQTY_MONPID" && -z "$RAINSENSORQTY_MONPID" ]] ; then + pid=$( < "$RAINSENSORQTY_MONPID" ) + if ps -fp $pid >/dev/null ; then + log_write "ERROR monitor process already running\n$( ps -fp $pid )" + exit 1 + else + log_write "no rainmonitor process running" + echo $$ > $RAINSENSORQTY_MONPID + log_write "$$ pid monitor process - see $RAINSENSORQTY_MONPID" + fi +fi + +MMEACH=0.303030303 + +counter=0 + +while true +do + before=`date +%s` + #gpio -g wfi $GPIO $RAINSENSORQTY_PULSE # falling 1->0 + sleep $(= $SECSBETWEENRAINEVENT )) ; then + counter=0 + log_write "sono passati $elapsed secondi ( > di $SECSBETWEENRAINEVENT ) dall'ultima precipitazione, reset counter" + echo "sono passati $elapsed secondi ( > di $SECSBETWEENRAINEVENT ) dall'ultima precipitazione, reset counter" + fi + counter=$(( counter+=1 )) + MMWATER=$( $JQ -n "$counter*$MMEACH" ) + log_write "counter $counter - $MMWATER mm acqua" + echo "counter $counter - $MMWATER mm acqua" + if (( counter >= $LOOPSFORSETRAINING )) ; then + log_write "raggiunta acqua per impedire irrigazione: $MMWATER mm" + echo "raggiunta acqua per impedire irrigazione: $MMWATER mm" + date +%s > ${RAINSENSORQTY_LASTRAIN} + date > ${RAINSENSORQTY_LASTRAIN}_date + fi + #gpio -g wfi $GPIO $RAINSENSORQTY_WAIT # rising 0->1 +done diff --git a/drv/rainsensorqty/setup.include.sh b/drv/rainsensorqty/setup.include.sh deleted file mode 100644 index b556ff7..0000000 --- a/drv/rainsensorqty/setup.include.sh +++ /dev/null @@ -1,11 +0,0 @@ -# -# Questa funzione viene invocata dalla funzione "setup_drv" di piGarden ad ogni avvio dello script -# e serve per eseguire l'eventuale setup del driver se necessario -# -function drv_rainsensorqty_setup { - - declare -g RAINSENSORQTY_FILE_RUN - RAINSENSORQTY_FILE_RUN="$STATUS_DIR/rainsensorqty_run" - -} - diff --git a/drv/sample/common.include.sh b/drv/sample/common.include.sh index b2a9700..7827c08 100644 --- a/drv/sample/common.include.sh +++ b/drv/sample/common.include.sh @@ -5,7 +5,7 @@ # # Funzione di esempio # -function sample_foo { +function drv_sample_foo { echo "bar" diff --git a/include/drv.include.sh b/include/drv.include.sh index c6c8ab5..b75d862 100644 --- a/include/drv.include.sh +++ b/include/drv.include.sh @@ -1,11 +1,15 @@ declare -a list_drv +# +# Funzione eseguita ad ogni avvio di piGarden.sh, si occupa includere tutti i file dei driver utilizzati e di lanciare +# la funzione di setup di ogni driver se esistente +# function setup_drv { #declare -a list_drv list_drv=() - # Inizializza i driver per le elettrovalvole + # Raccoglie i nomi dei driver utilizzati per le elettrovalvole for i in $(seq $EV_TOTAL) do local a=EV"$i"_GPIO @@ -18,7 +22,7 @@ function setup_drv { fi done - # Inizializza i driver per gli altri gpio + # Raccoglie i nomi dei driver utilizzati per gli altri gpio for gpio in "$SUPPLY_GPIO_1" "$SUPPLY_GPIO_2" "$RAIN_GPIO" "$WEATHER_SERVICE" do if [[ "$gpio" == drv:* ]]; then @@ -29,6 +33,9 @@ function setup_drv { fi done + # + # Esegue l'unclusione dei file dei driver e per ognuno lancia l'eventuale funzione di setup + # local file_drv for drv in "${list_drv[@]}" do From 40ab2e3b25c3f79e61b785156da6920eecf2ffaa Mon Sep 17 00:00:00 2001 From: lejubila Date: Sun, 9 Dec 2018 12:49:09 +0100 Subject: [PATCH 4/5] Aggiunto implementazione driver rainsensorqty railizzato da @androtto --- drv/rainsensorqty/common.include.sh | 23 +++-- drv/rainsensorqty/config.include.sh | 13 ++- drv/rainsensorqty/init.include.sh | 23 +++-- drv/rainsensorqty/rainsensor.include.sh | 57 +++++++------ drv/rainsensorqty/rainsensorqty_monitor.sh | 83 ++++++++++--------- drv/rainsensorqty/test_rainsensorqty_CHECK.sh | 23 +++++ drv/rainsensorqty/test_rainsensorqty_INIT.sh | 23 +++++ 7 files changed, 156 insertions(+), 89 deletions(-) create mode 100755 drv/rainsensorqty/test_rainsensorqty_CHECK.sh create mode 100755 drv/rainsensorqty/test_rainsensorqty_INIT.sh diff --git a/drv/rainsensorqty/common.include.sh b/drv/rainsensorqty/common.include.sh index 2bc0a6a..daf144e 100644 --- a/drv/rainsensorqty/common.include.sh +++ b/drv/rainsensorqty/common.include.sh @@ -4,21 +4,28 @@ #RAINSENSORQTY_MONPID="$TMP_PATH/rainsensorqty_monitor.pid" # -function drv_rainsensorqty_check () { - if [[ -f "$RAINSENSORQTY_MONPID" && -z "$RAINSENSORQTY_MONPID" ]] ; then - pid=$( < "$RAINSENSORQTY_MONPID" ) - echo "drv_rainsensorqty_check - NORMAL: checking if $pid pid is running" >> "$LOG_OUTPUT_DRV_FILE" - log_write "$$ pid monitor process - see $RAINSENSORQTY_MONPID" +function drv_rainsensorqty_writelog { + #2 variables - $1 function, $2 message + echo -e "$1 - `date`\t\t$2" >> "$LOG_OUTPUT_DRV_FILE" +} + + +function 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 - echo "drv_rainsensorqty_check - NORMAL: $pid pid is running" >> "$LOG_OUTPUT_DRV_FILE" + drv_rainsensorqty_writelog $f "NORMAL: $pid pid is running" return 0 else - echo "drv_rainsensorqty_check - NORMAL: $pid pid is NOT running" >> "$LOG_OUTPUT_DRV_FILE" + drv_rainsensorqty_writelog $f "$pid pid monitor process NOT running - $RAINSENSORQTY_MONPID file contains $pid" return 1 fi else - echo "drv_rainsensorqty_check - ERROR: no raining monitor process file \$RAINSENSORQTY_MONPID" >> "$LOG_OUTPUT_DRV_FILE" + drv_rainsensorqty_writelog $f "ERROR: no raining monitor process file \$RAINSENSORQTY_MONPID" return 1 fi } diff --git a/drv/rainsensorqty/config.include.sh b/drv/rainsensorqty/config.include.sh index 22f39fc..febafaa 100644 --- a/drv/rainsensorqty/config.include.sh +++ b/drv/rainsensorqty/config.include.sh @@ -5,8 +5,12 @@ declare -g RAINSENSORQTY_LASTRAIN RAINSENSORQTY_LASTRAIN="$STATUS_DIR/rainsensorqty_lastrain" -declare -g RAINSENSORQTY_LOG -RAINSENSORQTY_LOG="$DIR_SCRIPT/log/rainsensorqty.log" +#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" @@ -19,3 +23,8 @@ RAINSENSORQTY_PULSE=falling declare -g RAINSENSORQTY_WAIT RAINSENSORQTY_WAIT=rising + +# mm of water for each pulse - default +declare -g RAINSENSORQTY_MMEACH +RAINSENSORQTY_MMEACH=0.303030303 + diff --git a/drv/rainsensorqty/init.include.sh b/drv/rainsensorqty/init.include.sh index 4fe3ddd..838628e 100644 --- a/drv/rainsensorqty/init.include.sh +++ b/drv/rainsensorqty/init.include.sh @@ -6,18 +6,23 @@ #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 function drv_rainsensorqty_init { + local f="drv_rainsensorqty_init" + local monitor_sh="$RAINSENSORQTY_DIR/rainsensorqty_monitor.sh" + # format RAIN_GPIO="drv:rainsensorqty:25" - # esegue rainmonitor - if [[ -x "$monitor_sh" ]] ; then - echo "OK - run rainmonitor" - nohup "$monitor_sh" $gpio $RAINSENSORQTY_LOOPSFORSETRAINING $RAINSENSORQTY_SECSBETWEENRAINEVENT >> /tmp/debug_rainmonitor.log 2>&1 & - sleep 1 - else - : - echo "KO - not run rainmonitor" - fi + drv_rainsensorqty_writelog $f "NORMAL - executing $monitor_sh" + # esegue rainmonitor + if [ -x "$monitor_sh" ] ; then + nohup "$monitor_sh" >> $RAINSENSORQTY_MONITORLOG 2>&1 & + sleep 1 + drv_rainsensorqty_writelog $f "NORMAL: $monitor_sh has pid $( < $RAINSENSORQTY_MONPID)" + 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" + diff --git a/drv/rainsensorqty/rainsensor.include.sh b/drv/rainsensorqty/rainsensor.include.sh index bdf34f0..64e4a22 100644 --- a/drv/rainsensorqty/rainsensor.include.sh +++ b/drv/rainsensorqty/rainsensor.include.sh @@ -4,14 +4,13 @@ # $1 identificativo gpio del sensore di pioggia # function drv_rainsensorqty_rain_sensor_init { - - echo "drv_rainsensorqty_rain_sensor_init $1" >> "$LOG_OUTPUT_DRV_FILE" + drv_rainsensorqty_writelog "drv_rainsensorqty_rain_sensor_init" $1 local drvt="$( echo $RAIN_GPIO | $CUT -f 1 -d: )" local drv="$( echo $RAIN_GPIO | $CUT -f 2 -d: )" - local gpio="$( echo $RAIN_GPIO | $CUT -f 3 -d: )" + local gpio_port="$( echo $RAIN_GPIO | $CUT -f 3 -d: )" - $GPIO -g mode $gpio in + $GPIO -g mode $gpio_port in } @@ -21,34 +20,34 @@ function drv_rainsensorqty_rain_sensor_init { # $1 identificativo gpio del sensore di pioggia # function 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 + #* * * * * /home/pi/piGarden/piGarden.sh check_rain_sensor 2> /tmp/check_rain_sensor.err + local f="drv_rainsensorqty_check" + drv_rainsensorqty_writelog $f $1 - echo "drv_rainsensorqty_rain_sensor_get $1" >> "$LOG_OUTPUT_DRV_FILE" + # verifica se lo script di monitorin 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" )" + (( diff = now - lastrain )) + drv_rainsensorqty_writelog $f "NORMAL: last rain $( date --date="@$lastrain" ) " + 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 + else + drv_rainsensorqty_writelog $f "NO_RAIN : check rain - diff $diff < $interval - return 99" + return 99 + fi - if [ drv_rainsensorqty_check ]; then - # Cosa deve fare ???? - # gli facciamo rieseguire drv_rainsensorqty_init in modo che riavvii il monitor ??? + fi + else + drv_rainsensorqty_writelog $f "ERROR - drv_rainsensorqty_check failed, no monitor process running" + exit 1 + fi - local state_rain="" - - # INSERISCI QUI DENTRO I CONTROLLI SUL FILE $STATUS_DIR/rainsensorqty_lastrain - # SE SI VERIFICANO LE CONDIZIONI PER CUI SI DEVE INTERROMPERE L'IRRIGAZIONE - # DEVI IMPOSTARE last_rain CON IL VALORE $RAIN_GPIO_STATE - - # - # - # - # - # - # - # - # - # - # - - echo $state_rain - } - - diff --git a/drv/rainsensorqty/rainsensorqty_monitor.sh b/drv/rainsensorqty/rainsensorqty_monitor.sh index 100f6dd..70b30d4 100755 --- a/drv/rainsensorqty/rainsensorqty_monitor.sh +++ b/drv/rainsensorqty/rainsensorqty_monitor.sh @@ -1,36 +1,33 @@ -#!/bin/bash -x +#!/bin/bash # -# Bash script to measure rainfall +# Bash monitor script to measure rainfall # Author: androtto -# Url: # # -# Scrive un messaggio nel file di log -# $1 log da scrivere -# 3 parameter expected in order: -#$gpio -#$RAINSENSORQTY_LOOPSFORSETRAINING -#$RAINSENSORQTY_SECSBETWEENRAINEVENT -function log_write { - echo -e "`date`\t\t$1" >> $RAINSENSORQTY_LOG -} ############### -# MAIN +# MAIN # ############### -if [ ! $# = 3 ] ; then - echo "ERROR: 3 parameters expected" -fi - -GPIO=$1 -LOOPSFORSETRAINING=$2 -SECSBETWEENRAINEVENT=$3 DIRNAME="$( dirname $0 )" -. /etc/piGarden.conf # test sulla presenza del file gia' fatti prima -. "$DIRNAME/config.include.sh" +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" @@ -41,43 +38,47 @@ DIRNAME="$( dirname $0 )" #RAINSENSORQTY_WAIT=rising -if [[ -f "$RAINSENSORQTY_MONPID" && -z "$RAINSENSORQTY_MONPID" ]] ; then - pid=$( < "$RAINSENSORQTY_MONPID" ) +# no other monitor process running... +if [[ -f "$RAINSENSORQTY_MONPID" ]] ; then + pid="$( < "$RAINSENSORQTY_MONPID" )" if ps -fp $pid >/dev/null ; then - log_write "ERROR monitor process already running\n$( ps -fp $pid )" + drv_rainsensorqty_writelog $f "ERROR monitor process already running\n$( ps -fp $pid )" exit 1 - else - log_write "no rainmonitor process running" - echo $$ > $RAINSENSORQTY_MONPID - log_write "$$ pid monitor process - see $RAINSENSORQTY_MONPID" fi fi -MMEACH=0.303030303 +#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` - #gpio -g wfi $GPIO $RAINSENSORQTY_PULSE # falling 1->0 - sleep $(0 + $GPIO -g wfi $gpio_port $RAINSENSORQTY_PULSE # falling 1->0 + #sleep $(= $SECSBETWEENRAINEVENT )) ; then + if (( $elapsed >= $RAINSENSORQTY_SECSBETWEENRAINEVENT )) ; then counter=0 - log_write "sono passati $elapsed secondi ( > di $SECSBETWEENRAINEVENT ) dall'ultima precipitazione, reset counter" - echo "sono passati $elapsed secondi ( > di $SECSBETWEENRAINEVENT ) dall'ultima precipitazione, reset counter" + 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" ) - log_write "counter $counter - $MMWATER mm acqua" - echo "counter $counter - $MMWATER mm acqua" - if (( counter >= $LOOPSFORSETRAINING )) ; then - log_write "raggiunta acqua per impedire irrigazione: $MMWATER mm" - echo "raggiunta acqua per impedire irrigazione: $MMWATER mm" + 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 - #gpio -g wfi $GPIO $RAINSENSORQTY_WAIT # rising 0->1 + 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 new file mode 100755 index 0000000..77d4c0b --- /dev/null +++ b/drv/rainsensorqty/test_rainsensorqty_CHECK.sh @@ -0,0 +1,23 @@ +#!/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 new file mode 100755 index 0000000..bdcae96 --- /dev/null +++ b/drv/rainsensorqty/test_rainsensorqty_INIT.sh @@ -0,0 +1,23 @@ +#!/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 $?" From e2eda96f2c53fa330127ae2a0fd64b4ffb375488 Mon Sep 17 00:00:00 2001 From: lejubila Date: Mon, 12 Aug 2019 08:24:57 +0200 Subject: [PATCH 5/5] 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 $?"