Compare commits
35 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3d0d36077d | ||
|
|
a30e1cb6ef | ||
|
|
81ce03e90a | ||
|
|
2001b09937 | ||
|
|
c91128cbb4 | ||
|
|
7242b1c2ab | ||
|
|
5152252653 | ||
|
|
50fc8a72b2 | ||
|
|
9183bbcef5 | ||
|
|
bdab0fb6fe | ||
|
|
6ed0510c7f | ||
|
|
15e36e95a3 | ||
|
|
3a5c3ef934 | ||
|
|
f3c11a7fee | ||
|
|
ac95194b3e | ||
|
|
a125ff31d8 | ||
|
|
bb435f0ee6 | ||
|
|
b8daa7acab | ||
|
|
dd289f8b31 | ||
|
|
2add0c725f | ||
|
|
0b34b7010f | ||
|
|
c527702c72 | ||
|
|
b6de96debe | ||
|
|
ea681816fe | ||
|
|
8ca698d4ee | ||
|
|
70943c5f5e | ||
|
|
aa9799cdaf | ||
|
|
6d4f522f21 | ||
|
|
51e4391237 | ||
|
|
e2eda96f2c | ||
|
|
aa12f5a8a5 | ||
|
|
40ab2e3b25 | ||
|
|
40eb0b2429 | ||
|
|
e26292fe36 | ||
|
|
d99566ef93 |
31
CHANGELOG.md
31
CHANGELOG.md
@@ -1,3 +1,34 @@
|
||||
# 0.6.4 - 03/10/2021
|
||||
- Add support for sensor: moisture, temperature, fertility, illuminance
|
||||
- Add command line: sensor_status, sensor_status_all, sensor_status_set
|
||||
- Add api command: sensor_status_set
|
||||
- Add event ev_not_open_for_moisture, sensor_set_state_before, sensor_set_state_after
|
||||
- Added zone humidity management: when a zone has reached the humidity defined in EVx_SENSOR_MOISTURE it does not start irrigation or interrupts it if it is already active. In case of rain it does not stop irrigation if the soil humidity has not reached the configured value
|
||||
|
||||
# 0.6.3 - 10/08/2021
|
||||
- Add command last_rain_sensor_timestamp, last_rain_online_timestamp, reset_last_rain_sensor_timestamp, reset_last_rain_online_timestamp
|
||||
- Add socket server api for reset_last_rain_sensor_timestamp, reset_last_rain_online_timestamp
|
||||
|
||||
# 0.6.2 - 24/04/2021
|
||||
- Update rainsensorqty driver to version 0.2.5c
|
||||
|
||||
# 0.6.1 - 06/09/2020
|
||||
- Add support for send log to piGardenWeb
|
||||
|
||||
# 0.6.0 - 16/05/2020
|
||||
- Add support for enable all cron fron api
|
||||
- Update rainsensorqty driver to version 0.2.5b
|
||||
|
||||
# 0.5.14 - 24/09/2019
|
||||
- Updated rainsensorqty driver to version 0.2.3
|
||||
- Added api and command for manage piGardenSched scheduling
|
||||
|
||||
# 0.5.13 - 12/08/2019
|
||||
- Added driver rainsensorqty for menage rainfall detection based on quantity
|
||||
|
||||
# 0.5.12.1 - 23/06/2019
|
||||
- Added zip log drver file when exceeding the size limit
|
||||
|
||||
# 0.5.12 - 13/11/2018
|
||||
- Fixed a bug that prevented the publication of the mqtt topic for each event
|
||||
- Fixed a bug on openweathermap driver which in some cases causes a malformation of the json status and prevented communication with piGardenWeb
|
||||
|
||||
@@ -41,8 +41,8 @@ sudo make install
|
||||
|
||||
``` bash
|
||||
cd
|
||||
git clone git://git.drogon.net/wiringPi
|
||||
cd wiringPi
|
||||
git clone https://github.com/WiringPi/WiringPi.git
|
||||
cd WiringPi
|
||||
git pull origin
|
||||
./build
|
||||
```
|
||||
|
||||
@@ -2,6 +2,14 @@
|
||||
LOG_FILE="/home/pi/piGarden/log/piGarden.log"
|
||||
LOG_FILE_MAX_SIZE=1048576 # 1MB
|
||||
|
||||
#
|
||||
# Enable send log to piGardenWeb
|
||||
#
|
||||
|
||||
#LOG_URL="http://url_of_your_pigardenweb/api/log"
|
||||
#LOG_API_TOKEN="token_of_pigardenweb_user"
|
||||
#LOG_CURL_PARAM="--data-urlencode -k"
|
||||
|
||||
# Log file for driver output
|
||||
LOG_OUTPUT_DRV_FILE="/tmp/piGarden.drv.log"
|
||||
|
||||
@@ -57,6 +65,9 @@ STAT="/usr/bin/stat"
|
||||
# # Installare con apt install mosquitto-clients
|
||||
MOSQUITTO_PUB="/usr/bin/mosquitto_pub"
|
||||
|
||||
# Percorso di piGardenSched, se non definito non verranno gestire le schedulazioni di piGardenSched tramite api
|
||||
#PIGARDENSCHED_PATH="/home/pi/piGardenSched/piGardenSched.sh"
|
||||
|
||||
|
||||
# Se impostato con il valore 1, indica che il sistema gestisce elettrovalvole monostabili,
|
||||
# se impostato a 0 il sistema gestirà elettrovalvole bistabili
|
||||
@@ -96,6 +107,9 @@ 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
|
||||
#EV1_SENSOR_ALIAS=Mi_Flora # Nome del sensore (definito in SENSORx_ALIAS) per stabilire l'umidità del terreno
|
||||
#EV1_SENSOR_MOISTURE=50 # Percentule di umidità ottimale
|
||||
#EV1_SENSOR_MOISTURE_AUTOCLOSE=1 # Chiude automaticamente l'elettrovalvola quando supera l'umidità impostata in EVx_MONOSTABLE
|
||||
|
||||
EV2_ALIAS="2" #
|
||||
EV2_GPIO=27 # Physical 13 - wPi 2
|
||||
@@ -113,6 +127,16 @@ EV6_ALIAS="6" #
|
||||
EV6_GPIO=24 # Physical 18 - wPi 5
|
||||
|
||||
|
||||
|
||||
# Numero di sensori
|
||||
SENSOR_TOTAL=1
|
||||
|
||||
# Definizione sensori
|
||||
SENSOR1_ALIAS=Mi_Flora
|
||||
|
||||
|
||||
|
||||
|
||||
# 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"
|
||||
|
||||
174
conf/piGarden.conf.rainsensorqty.example
Normal file
174
conf/piGarden.conf.rainsensorqty.example
Normal file
@@ -0,0 +1,174 @@
|
||||
# Log file
|
||||
LOG_FILE="/home/pi/piGarden/log/piGarden.log"
|
||||
LOG_FILE_MAX_SIZE=1048576 # 1MB
|
||||
|
||||
#
|
||||
# Enable send log to piGardenWeb
|
||||
#
|
||||
|
||||
#LOG_URL="http://url_of_your_pigardenweb/api/log"
|
||||
#LOG_API_TOKEN="token_of_pigardenweb_user"
|
||||
#LOG_CURL_PARAM="--data-urlencode -k"
|
||||
|
||||
# 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"
|
||||
|
||||
# Percorso di piGardenSched, se non definito non verranno gestire le schedulazioni di piGardenSched tramite api
|
||||
#PIGARDENSCHED_PATH="/home/pi/piGardenSched/piGardenSched.sh"
|
||||
|
||||
|
||||
# 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
|
||||
# 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
|
||||
|
||||
|
||||
|
||||
# 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
|
||||
|
||||
@@ -2,6 +2,14 @@
|
||||
LOG_FILE="/home/pi/piGarden/log/piGarden.log"
|
||||
LOG_FILE_MAX_SIZE=1048576 # 1MB
|
||||
|
||||
#
|
||||
# Enable send log to piGardenWeb
|
||||
#
|
||||
|
||||
#LOG_URL="http://url_of_your_pigardenweb/api/log"
|
||||
#LOG_API_TOKEN="token_of_pigardenweb_user"
|
||||
#LOG_CURL_PARAM="--data-urlencode -k"
|
||||
|
||||
# Log file for driver output
|
||||
#LOG_OUTPUT_DRV_FILE="/tmp/piGarden.drv.log"
|
||||
|
||||
@@ -57,6 +65,9 @@ STAT="/usr/bin/stat"
|
||||
# Installare con apt install mosquitto-clients
|
||||
MOSQUITTO_PUB="/usr/bin/mosquitto_pub"
|
||||
|
||||
# Percorso di piGardenSched, se non definito non verranno gestire le schedulazioni di piGardenSched tramite api
|
||||
#PIGARDENSCHED_PATH="/home/pi/piGardenSched/piGardenSched.sh"
|
||||
|
||||
|
||||
# Se impostato con il valore 1, indica che il sistema gestisce elettrovalvole monostabili,
|
||||
# se impostato a 0 il sistema gestirà elettrovalvole bisstabili
|
||||
|
||||
@@ -2,6 +2,14 @@
|
||||
LOG_FILE="/home/pi/piGarden/log/piGarden.log"
|
||||
LOG_FILE_MAX_SIZE=1048576 # 1MB
|
||||
|
||||
#
|
||||
# Enable send log to piGardenWeb
|
||||
#
|
||||
|
||||
#LOG_URL="http://url_of_your_pigardenweb/api/log"
|
||||
#LOG_API_TOKEN="token_of_pigardenweb_user"
|
||||
#LOG_CURL_PARAM="--data-urlencode -k"
|
||||
|
||||
# Log file for driver output
|
||||
#LOG_OUTPUT_DRV_FILE="/tmp/piGarden.drv.log"
|
||||
|
||||
@@ -57,6 +65,9 @@ STAT="/usr/bin/stat"
|
||||
# # Installare con apt install mosquitto-clients
|
||||
MOSQUITTO_PUB="/usr/bin/mosquitto_pub"
|
||||
|
||||
# Percorso di piGardenSched, se non definito non verranno gestire le schedulazioni di piGardenSched tramite api
|
||||
#PIGARDENSCHED_PATH="/home/pi/piGardenSched/piGardenSched.sh"
|
||||
|
||||
|
||||
# Se impostato con il valore 1, indica che il sistema gestisce elettrovalvole monostabili,
|
||||
# se impostato a 0 il sistema gestirà elettrovalvole bisstabili
|
||||
|
||||
@@ -2,6 +2,14 @@
|
||||
LOG_FILE="/home/pi/piGarden/log/piGarden.log"
|
||||
LOG_FILE_MAX_SIZE=1048576 # 1MB
|
||||
|
||||
#
|
||||
# Enable send log to piGardenWeb
|
||||
#
|
||||
|
||||
#LOG_URL="http://url_of_your_pigardenweb/api/log"
|
||||
#LOG_API_TOKEN="token_of_pigardenweb_user"
|
||||
#LOG_CURL_PARAM="--data-urlencode -k"
|
||||
|
||||
# Log file for driver output
|
||||
#LOG_OUTPUT_DRV_FILE="/tmp/piGarden.drv.log"
|
||||
|
||||
@@ -57,6 +65,9 @@ STAT="/usr/bin/stat"
|
||||
# Installare con apt install mosquitto-clients
|
||||
MOSQUITTO_PUB="/usr/bin/mosquitto_pub"
|
||||
|
||||
# Percorso di piGardenSched, se non definito non verranno gestire le schedulazioni di piGardenSched tramite api
|
||||
#PIGARDENSCHED_PATH="/home/pi/piGardenSched/piGardenSched.sh"
|
||||
|
||||
|
||||
# Se impostato con il valore 1, indica che il sistema gestisce elettrovalvole monostabili,
|
||||
# se impostato a 0 il sistema gestirà elettrovalvole bisstabili
|
||||
|
||||
4
drv/rainsensorqty/.gitignore
vendored
Normal file
4
drv/rainsensorqty/.gitignore
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
# Ignore everything in this directory
|
||||
.set_var
|
||||
# Except this file
|
||||
!.gitignore
|
||||
124
drv/rainsensorqty/README.md
Normal file
124
drv/rainsensorqty/README.md
Normal file
@@ -0,0 +1,124 @@
|
||||
#
|
||||
# Driver rainsensorqty - driver for measure the rain volume
|
||||
# Author: androtto
|
||||
# file README.md
|
||||
# Version: 0.2.5
|
||||
# Data: 07/Apr/2020
|
||||
|
||||
|
||||
FILE DI CONFIGURAZIONE /etc/piGarden.conf:
|
||||
-----------------------------------------
|
||||
NOTA: vedere nella directory conf_example il file esempio piu' aggiornato!
|
||||
|
||||
per attivare il driver e' necessario inserire la seguente variabile nel file di configurazion
|
||||
RAIN_GPIO="drv:rainsensorqty:25" # Physical 22 - wPi 6
|
||||
|
||||
la variabile seguente e' impiegata anche da drv_rainsensorqty per rilevare la chiusura del contatto magnetico che, in un circuito pull-up, e' 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 16 impulsi, 16 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 nuovo numero di vaschette si considera una nuova pioggia
|
||||
infine la variabile seguente e' 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 e' 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 variabile sarebbe stata impostata a 0.30909091 mm
|
||||
|
||||
COMANDI SPECIALI
|
||||
----------------
|
||||
nella sottodirectory command sono presenti:
|
||||
commands/rainsensorqty_CHECK.sh
|
||||
chiama la funzione di verifica pioggia, la medesima chiamata da check_rain_sensor
|
||||
commands/rainsensorqty_HISTORY.sh
|
||||
visualizza lo storico della pioggia consultando il file $RAINSENSORQTY_HISTORY
|
||||
puo' essere lanciato con l''opzione -force per ricostruire il file $RAINSENSORQTY_HISTORY dal $RAINSENSORQTY_HISTORYRAW
|
||||
e con un argomento X, che permette di evidenziare solo gli ultimi X eventi
|
||||
commands/rainsensorqty_HISTORYRAW.sh
|
||||
visualizza lo storico della pioggia consultando il file $RAINSENSORQTY_HISTORYRAW
|
||||
puo' essere lanciato senza argomenti per processare l'intero file, chiede conferma visto che i tempi sono potenzialmente lunghi
|
||||
con un argomento X, che permette di evidenziare solo gli ultimi X eventi
|
||||
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 registrandola in $RAINSENSORQTY_LASTRAIN $RAINSENSORQTY_HISTORY $RAINSENSORQTY_HISTORYRAW
|
||||
puo' essere lanciato in 3 modi:
|
||||
senza argomenti: genera una pioggia per un numero di loop pari al valore della variabile RAINSENSORQTY_LOOPSFORSETRAINING, quindi una pioggia completa
|
||||
con un argomento: che indica quanti loop
|
||||
con due argomenti: quanti loop e quanti secondi tra uno e l'altro
|
||||
commands/rainsensorqty_REMOVELASTRAIN.sh
|
||||
rimuove dai file $RAINSENSORQTY_LASTRAIN $RAINSENSORQTY_HISTORY $RAINSENSORQTY_HISTORYRAW l'ultima pioggia registrata
|
||||
commands/rainsensorqty_RESET.sh
|
||||
invia il SIGUSR1 al processo di monitor per resettare i cicli. Viene visualizzato il reset solo dopo il successivo PULSE, questo perche' non e' possibile per lo script ricevere il trap in quanto il processo $GPIO e' attivo in attesa del PULSE
|
||||
|
||||
questi i timestamps alla data del file:
|
||||
-rwxr-xr-x 1 pi pi 1044 Sep 24 18:26 rainsensorqty_CHECK.sh
|
||||
-rwxr-xr-x 1 pi pi 1139 Nov 28 00:17 rainsensorqty_HISTORYRAW.sh
|
||||
-rwxr-xr-x 1 pi pi 1462 Nov 19 00:19 rainsensorqty_HISTORY.sh
|
||||
-rwxr-xr-x 1 pi pi 596 Sep 24 18:26 rainsensorqty_INIT.sh
|
||||
-rwxr-xr-x 1 pi pi 1300 Sep 24 18:26 rainsensorqty_KILL.sh
|
||||
-rwxr-xr-x 1 pi pi 1111 Nov 27 00:05 rainsensorqty_RAINNOW.sh
|
||||
-rwxr-xr-x 1 pi pi 1252 Nov 22 00:18 rainsensorqty_REMOVELASTRAIN.sh
|
||||
-rwxr-xr-x 1 pi pi 897 Sep 24 18:26 rainsensorqty_RESET.sh
|
||||
|
||||
ULTERIORI VARIABILI in config.include.sh
|
||||
----------------------------------------
|
||||
esistono ulteriori variabili che potrebbe essere necessario variare
|
||||
|
||||
RAINSENSOR_DEBOUNCE=0.3 # 0.3 seconds for manage debounce of reed contact
|
||||
serve 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 visualizzare lo storico (commands/rainsensorqty_HISTORY.sh)
|
||||
RAINSENSORQTY_HISTORYRAW="$STATUS_DIR/rainsensorqty_history.raw"
|
||||
memorizza in formato grezzo (raw) tutti gli impulsi registrati (formato: "secondi:impulsi" ) - consultabile il contenuto con commands/rainsensorqty_HISTORYRAW.sh
|
||||
|
||||
RAINSENSORQTY_MONITORLOG="$DIR_SCRIPT/log/rainsensorqty_monitor.log"
|
||||
log dello script di monitoring, popolato solo se RAINSENSORQTY_verbose="yes"
|
||||
|
||||
RAINSENSORQTY_MONPID="$TMPDIR/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 variabili di ambiente da $RAINSENSORQTY_VAR ($TMPDIR/.rainsensorqty_var)
|
||||
|
||||
NOTA: $TMPDIR e' /tmp e lo script visualizza un warning se non e' un tmpfs
|
||||
|
||||
# internal gpio resistor, 3 values: pull-up, pull-down, none
|
||||
# pull-up/down if rain gauge is connected directly to raspberry
|
||||
# none if connected through an optocoupler circuit
|
||||
GPIO_RESISTOR="none" #pull-up|pull-down|none
|
||||
enable pull-up or pull-down resistor: https://raspberry-projects.com/pi/pi-hardware/raspberry-pi-model-b-plus/model-b-plus-io-pins
|
||||
Pull-up is 50K min - 65K max.
|
||||
Pull-down is 50K min - 60K max.
|
||||
|
||||
#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)
|
||||
(( RAIN_GPIO_STATE == 1 )) && RAINSENSORQTY_PULSE=rising # pull-down circuit (rest status is 0)
|
||||
(( RAIN_GPIO_STATE == 0 )) && RAINSENSORQTY_PULSE=falling # pull-up circuit (rest status is 1)
|
||||
|
||||
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 il riempimento della vaschetta dello stato di pioggia
|
||||
0
drv/rainsensorqty/_version_0.2.5c
Normal file
0
drv/rainsensorqty/_version_0.2.5c
Normal file
35
drv/rainsensorqty/commands/rainsensorqty_CHECK.sh
Executable file
35
drv/rainsensorqty/commands/rainsensorqty_CHECK.sh
Executable file
@@ -0,0 +1,35 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# Driver rainsensorqty - driver for measure the rain volume
|
||||
# Author: androtto
|
||||
# file "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"
|
||||
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
|
||||
|
||||
59
drv/rainsensorqty/commands/rainsensorqty_HISTORY.sh
Executable file
59
drv/rainsensorqty/commands/rainsensorqty_HISTORY.sh
Executable file
@@ -0,0 +1,59 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# Driver rainsensorqty - driver for measure the rain volume
|
||||
# Author: androtto
|
||||
# file "rainsensorqty_CHECK.sh"
|
||||
# test script for checking rain status using drv_rainsensorqty_rain_sensor_get function
|
||||
# Version: 0.2.5
|
||||
# Data: 08/Jan/2020
|
||||
|
||||
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"
|
||||
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
|
||||
|
||||
if [[ $1 = "-force" ]] ; then
|
||||
if [[ -s $RAINSENSORQTY_HISTORY ]] ; then
|
||||
echo backup $RAINSENSORQTY_HISTORY to ${RAINSENSORQTY_HISTORY}.old$$
|
||||
cp $RAINSENSORQTY_HISTORY ${RAINSENSORQTY_HISTORY}.old$$
|
||||
fi
|
||||
|
||||
echo "generate all rain events to $RAINSENSORQTY_HISTORY"
|
||||
if ! rainevents > ${RAINSENSORQTY_HISTORY} ; then
|
||||
echo "WARNING: rainevents function had error"
|
||||
fi
|
||||
shift
|
||||
fi
|
||||
|
||||
if ! rain_history tmp ; then # update rain history with last rain if not
|
||||
echo "WARNING: rain_history function had error"
|
||||
fi
|
||||
|
||||
cmd="cat"
|
||||
if [[ $# > 0 ]] ; then
|
||||
if (( $1 >= 1 )) ; then
|
||||
echo "processing last $1 lines of $RAINSENSORQTY_HISTORYRAW file"
|
||||
cmd="tail -$1"
|
||||
else
|
||||
echo "argument not recognized - exit"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
echo -e "\n\n"
|
||||
|
||||
if [[ -s $RAINSENSORQTY_HISTORY ]] ; then
|
||||
echo "RAIN HISTORY"
|
||||
cat $RAINSENSORQTY_HISTORY $RAINSENSORQTY_HISTORYTMP | $cmd | rain_when_amount
|
||||
else
|
||||
echo "WARNING: no \$RAINSENSORQTY_HISTORY file"
|
||||
fi
|
||||
50
drv/rainsensorqty/commands/rainsensorqty_HISTORYRAW.sh
Executable file
50
drv/rainsensorqty/commands/rainsensorqty_HISTORYRAW.sh
Executable file
@@ -0,0 +1,50 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# Driver rainsensorqty - driver for measure the rain volume
|
||||
# Author: androtto
|
||||
# file "rainsensorqty_CHECK.sh"
|
||||
# test script for checking rain status using drv_rainsensorqty_rain_sensor_get function
|
||||
# Version: 0.2.5
|
||||
# Data: 07/Apr/2020
|
||||
|
||||
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"
|
||||
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
|
||||
|
||||
|
||||
if [[ $# = 0 ]] ; then
|
||||
cmd=cat
|
||||
echo "processing all entire $RAINSENSORQTY_HISTORYRAW file, will go on? (y/n)"
|
||||
read answer
|
||||
echo $answer
|
||||
[[ $answer = [yY] ]] || exit 1
|
||||
else
|
||||
if (( $1 >= 1 )) ; then
|
||||
echo "processing $1 lines of $RAINSENSORQTY_HISTORYRAW file"
|
||||
cmd="tail -$1"
|
||||
else
|
||||
echo "argument not recognized - exit"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
echo -e "\n\n"
|
||||
|
||||
$cmd $RAINSENSORQTY_HISTORYRAW | while read line
|
||||
do
|
||||
set -- ${line//:/ }
|
||||
secs=$1
|
||||
counter=$2
|
||||
echo "$(sec2date $1):$counter"
|
||||
done
|
||||
|
||||
25
drv/rainsensorqty/commands/rainsensorqty_INIT.sh
Executable file
25
drv/rainsensorqty/commands/rainsensorqty_INIT.sh
Executable file
@@ -0,0 +1,25 @@
|
||||
#!/bin/bash
|
||||
# Driver rainsensorqty - driver for measure the rain volume
|
||||
# Author: androtto
|
||||
# file "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"
|
||||
|
||||
. $CONFIG_ETC
|
||||
|
||||
. ./config.include.sh
|
||||
. ./common.include.sh
|
||||
. ./init.include.sh
|
||||
. ./rainsensor.include.sh
|
||||
|
||||
drv_rainsensorqty_rain_sensor_init
|
||||
|
||||
drv_rainsensorqty_init
|
||||
52
drv/rainsensorqty/commands/rainsensorqty_KILL.sh
Executable file
52
drv/rainsensorqty/commands/rainsensorqty_KILL.sh
Executable file
@@ -0,0 +1,52 @@
|
||||
#!/bin/bash
|
||||
# Driver rainsensorqty - driver for measure the rain volume
|
||||
# Author: androtto
|
||||
# file "rainsensorqty_KILL.sh"
|
||||
# script for killing monitor process(es)
|
||||
# Version: 0.2.0a
|
||||
# Data: 29/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"
|
||||
|
||||
. $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
|
||||
else
|
||||
echo "no RAIN process alive"
|
||||
fi
|
||||
|
||||
67
drv/rainsensorqty/commands/rainsensorqty_RAINNOW.sh
Executable file
67
drv/rainsensorqty/commands/rainsensorqty_RAINNOW.sh
Executable file
@@ -0,0 +1,67 @@
|
||||
#!/bin/bash
|
||||
# Driver rainsensorqty - driver for measure the rain volume
|
||||
# Author: androtto
|
||||
# file "rainsensorqty_RAINNOW.sh"
|
||||
# test script for simulate rain ... now!
|
||||
# Version: 0.2.5
|
||||
# Data: 07/Apr/2020
|
||||
|
||||
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"
|
||||
. $CONFIG_ETC
|
||||
|
||||
. ./config.include.sh
|
||||
. ./common.include.sh
|
||||
. ./init.include.sh
|
||||
. ./rainsensor.include.sh
|
||||
|
||||
wait=0
|
||||
timestart=$( date +%s)
|
||||
if [[ $# -ne 0 ]] ; then
|
||||
if [[ $# = 1 ]] ; then
|
||||
howmany=$1
|
||||
echo "one argument passed: rain event for $howmany loops"
|
||||
(( time = timestart - howmany ))
|
||||
elif [[ $# = 2 ]] ; then
|
||||
howmany=$1
|
||||
wait=$2
|
||||
echo "two arguments passed: rain event for $howmany loops every $wait seconds"
|
||||
(( time = timestart ))
|
||||
else
|
||||
echo "too many arguments... exit"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
howmany=$RAINSENSORQTY_LOOPSFORSETRAINING
|
||||
(( time = timestart - $RAINSENSORQTY_LOOPSFORSETRAINING ))
|
||||
fi
|
||||
|
||||
|
||||
echo "RAIN now! (for $howmany loops)"
|
||||
for (( c=1; c<=$howmany; c++ ))
|
||||
do
|
||||
if (( wait > 0 )) ; then
|
||||
time=$( date +%s)
|
||||
else
|
||||
(( time+= 1 ))
|
||||
fi
|
||||
linetoadd="$time:$c"
|
||||
echo $linetoadd >> $RAINSENSORQTY_HISTORYRAW
|
||||
sleep $wait
|
||||
echo -e ".\c"
|
||||
done
|
||||
echo
|
||||
|
||||
if ! rain_history ; then # update rain history with last rain if not
|
||||
echo "WARNING: rain_history function had error"
|
||||
fi
|
||||
|
||||
echo $linetoadd > ${RAINSENSORQTY_LASTRAIN}
|
||||
echo "file ${RAINSENSORQTY_LASTRAIN} updated."
|
||||
|
||||
echo "last 2 rain events:"
|
||||
tail -2 $RAINSENSORQTY_HISTORY | rain_when_amount
|
||||
44
drv/rainsensorqty/commands/rainsensorqty_REMOVELASTRAIN.sh
Executable file
44
drv/rainsensorqty/commands/rainsensorqty_REMOVELASTRAIN.sh
Executable file
@@ -0,0 +1,44 @@
|
||||
#!/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.5
|
||||
# Data: 07/Apr/2020
|
||||
|
||||
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"
|
||||
|
||||
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
|
||||
|
||||
# two variables for store rain data
|
||||
# RAINSENSORQTY_LASTRAIN
|
||||
# RAINSENSORQTY_HISTORY
|
||||
|
||||
echo "RAIN HISTORY - last two events"
|
||||
tail -2 $RAINSENSORQTY_HISTORY
|
||||
tail -2 $RAINSENSORQTY_HISTORY | rain_when_amount
|
||||
|
||||
echo "...removing last event"
|
||||
removelastrain
|
||||
echo "...rebuilding ${RAINSENSORQTY_HISTORY} from ${RAINSENSORQTY_HISTORYRAW}"
|
||||
if ! rainevents > ${RAINSENSORQTY_HISTORY} ; then
|
||||
echo "WARNING: rainevents function had error"
|
||||
fi
|
||||
tail -1 ${RAINSENSORQTY_HISTORYRAW} > ${RAINSENSORQTY_LASTRAIN}
|
||||
|
||||
echo -e "\nnew RAIN HISTORY - last two events"
|
||||
tail -2 $RAINSENSORQTY_HISTORY
|
||||
tail -2 $RAINSENSORQTY_HISTORY | rain_when_amount
|
||||
|
||||
35
drv/rainsensorqty/commands/rainsensorqty_RESET.sh
Executable file
35
drv/rainsensorqty/commands/rainsensorqty_RESET.sh
Executable file
@@ -0,0 +1,35 @@
|
||||
#!/bin/bash
|
||||
# Driver rainsensorqty - driver for measure the rain volume
|
||||
# Author: androtto
|
||||
# file "rainsensorqty_RESET.sh"
|
||||
# script for reset counter in monitor script
|
||||
# Version: 0.2.0a
|
||||
# Data: 29/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"
|
||||
|
||||
. $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 "sending SIGUSR1 to $pid"
|
||||
kill -SIGUSR1 $pid
|
||||
echo -e "sent SIGUSR1 - reset will be shown after next cycle"
|
||||
else
|
||||
echo "no RAIN process alive"
|
||||
fi
|
||||
else
|
||||
echo "no RAIN process alive"
|
||||
fi
|
||||
1
drv/rainsensorqty/commands/test_pulse
Executable file
1
drv/rainsensorqty/commands/test_pulse
Executable file
@@ -0,0 +1 @@
|
||||
echo 1 > /tmp/tick ; sleep 0.9 ; echo 0 > /tmp/tick
|
||||
203
drv/rainsensorqty/common.include.sh
Normal file
203
drv/rainsensorqty/common.include.sh
Normal file
@@ -0,0 +1,203 @@
|
||||
#
|
||||
# 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
|
||||
}
|
||||
66
drv/rainsensorqty/conf_example/config.include.sh
Normal file
66
drv/rainsensorqty/conf_example/config.include.sh
Normal file
@@ -0,0 +1,66 @@
|
||||
#
|
||||
# Driver rainsensorqty - driver for measure the rain volume
|
||||
# Author: androtto
|
||||
# file "config.include.sh"
|
||||
# specific driver config file
|
||||
# Version: 0.2.5
|
||||
# Data: 08/Jan/2020
|
||||
|
||||
export TMPDIR=/tmp
|
||||
|
||||
RAINSENSOR_DEBOUNCE=0.3 # 0.3 seconds for manage debounce of reed contact
|
||||
|
||||
RAINSENSORQTY_verbose="yes" # yes/no
|
||||
|
||||
RAINSENSORQTY_LASTRAIN="$STATUS_DIR/rainsensorqty_lastrain"
|
||||
RAINSENSORQTY_HISTORY="$STATUS_DIR/rainsensorqty_history"
|
||||
RAINSENSORQTY_HISTORYRAW="$STATUS_DIR/rainsensorqty_history.raw"
|
||||
RAINSENSORQTY_HISTORYTMP="$TMPDIR/rainsensorqty_history.tmp"
|
||||
|
||||
RAINSENSORQTY_MONITORLOG="$DIR_SCRIPT/log/rainsensorqty_monitor.log"
|
||||
|
||||
RAINSENSORQTY_MONPID="$TMPDIR/rainsensorqty_monitor.pid"
|
||||
RAINSENSORQTY_STATE="$TMPDIR/rainsensorqty_state"
|
||||
RAINSENSORQTY_STATE_HIST="$TMPDIR/rainsensorqty_state.history"
|
||||
|
||||
RAINSENSORQTY_DIR="$DIR_SCRIPT/drv/rainsensorqty"
|
||||
|
||||
monitor_sh="$RAINSENSORQTY_DIR/drv_rainsensorqty_monitor.sh"
|
||||
|
||||
# internal gpio resistor, 3 values: pull-up, pull-down, none
|
||||
# pull-up/down if rain gauge is connected directly to raspberry
|
||||
# none if connected through an optocoupler circuit
|
||||
GPIO_RESISTOR="pull-up" #pull-up|pull-down|none
|
||||
|
||||
#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)
|
||||
(( RAIN_GPIO_STATE == 1 )) && RAINSENSORQTY_PULSE=rising # pull-down circuit (rest status is 0)
|
||||
(( RAIN_GPIO_STATE == 0 )) && RAINSENSORQTY_PULSE=falling # pull-up circuit (rest status is 1)
|
||||
|
||||
|
||||
config_check()
|
||||
{
|
||||
var2check="RAINSENSOR_DEBOUNCE RAINSENSORQTY_verbose RAINSENSORQTY_LASTRAIN RAINSENSORQTY_HISTORY RAINSENSORQTY_MONITORLOG RAINSENSORQTY_MONPID RAINSENSORQTY_DIR monitor_sh"
|
||||
for var in $var2check
|
||||
do
|
||||
#${!a}
|
||||
if [[ -z ${!var} ]] ; then
|
||||
echo "ERROR: \$$var not set"
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
if [[ -z $RAINSENSORQTY_PULSE ]] ; then
|
||||
echo "ERROR: RAIN_GPIO_STATE not set in piGarden.conf"
|
||||
exit 1
|
||||
fi
|
||||
return 0
|
||||
case $GPIO_RESISTOR in
|
||||
pull-up|pull-down|none) return 0 ;;
|
||||
*) echo "ERROR: GPIO_RESISTOR not set correctly - values are \"pull-up|pull-down|none\" "
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
@@ -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
|
||||
66
drv/rainsensorqty/config.include.sh
Normal file
66
drv/rainsensorqty/config.include.sh
Normal file
@@ -0,0 +1,66 @@
|
||||
#
|
||||
# Driver rainsensorqty - driver for measure the rain volume
|
||||
# Author: androtto
|
||||
# file "config.include.sh"
|
||||
# specific driver config file
|
||||
# Version: 0.2.5
|
||||
# Data: 08/Jan/2020
|
||||
|
||||
export TMPDIR=/tmp
|
||||
|
||||
RAINSENSOR_DEBOUNCE=0.3 # 0.3 seconds for manage debounce of reed contact
|
||||
|
||||
RAINSENSORQTY_verbose="yes" # yes/no
|
||||
|
||||
RAINSENSORQTY_LASTRAIN="$STATUS_DIR/rainsensorqty_lastrain"
|
||||
RAINSENSORQTY_HISTORY="$STATUS_DIR/rainsensorqty_history"
|
||||
RAINSENSORQTY_HISTORYRAW="$STATUS_DIR/rainsensorqty_history.raw"
|
||||
RAINSENSORQTY_HISTORYTMP="$TMPDIR/rainsensorqty_history.tmp"
|
||||
|
||||
RAINSENSORQTY_MONITORLOG="$DIR_SCRIPT/log/rainsensorqty_monitor.log"
|
||||
|
||||
RAINSENSORQTY_MONPID="$TMPDIR/rainsensorqty_monitor.pid"
|
||||
RAINSENSORQTY_STATE="$TMPDIR/rainsensorqty_state"
|
||||
RAINSENSORQTY_STATE_HIST="$TMPDIR/rainsensorqty_state.history"
|
||||
|
||||
RAINSENSORQTY_DIR="$DIR_SCRIPT/drv/rainsensorqty"
|
||||
|
||||
monitor_sh="$RAINSENSORQTY_DIR/drv_rainsensorqty_monitor.sh"
|
||||
|
||||
# internal gpio resistor, 3 values: pull-up, pull-down, none
|
||||
# pull-up/down if rain gauge is connected directly to raspberry
|
||||
# none if connected through an optocoupler circuit
|
||||
GPIO_RESISTOR="pull-up" #pull-up|pull-down|none
|
||||
|
||||
#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)
|
||||
(( RAIN_GPIO_STATE == 1 )) && RAINSENSORQTY_PULSE=rising # pull-down circuit (rest status is 0)
|
||||
(( RAIN_GPIO_STATE == 0 )) && RAINSENSORQTY_PULSE=falling # pull-up circuit (rest status is 1)
|
||||
|
||||
|
||||
config_check()
|
||||
{
|
||||
var2check="RAINSENSOR_DEBOUNCE RAINSENSORQTY_verbose RAINSENSORQTY_LASTRAIN RAINSENSORQTY_HISTORY RAINSENSORQTY_MONITORLOG RAINSENSORQTY_MONPID RAINSENSORQTY_DIR monitor_sh"
|
||||
for var in $var2check
|
||||
do
|
||||
#${!a}
|
||||
if [[ -z ${!var} ]] ; then
|
||||
echo "ERROR: \$$var not set"
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
if [[ -z $RAINSENSORQTY_PULSE ]] ; then
|
||||
echo "ERROR: RAIN_GPIO_STATE not set in piGarden.conf"
|
||||
exit 1
|
||||
fi
|
||||
return 0
|
||||
case $GPIO_RESISTOR in
|
||||
pull-up|pull-down|none) return 0 ;;
|
||||
*) echo "ERROR: GPIO_RESISTOR not set correctly - values are \"pull-up|pull-down|none\" "
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
113
drv/rainsensorqty/drv_rainsensorqty_monitor.sh
Executable file
113
drv/rainsensorqty/drv_rainsensorqty_monitor.sh
Executable file
@@ -0,0 +1,113 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# Driver rainsensorqty - driver for measure the rain volume
|
||||
# Author: androtto
|
||||
# file "drv_rainsensorqty_monitor.sh"
|
||||
# monitor script
|
||||
# Version: 0.2.5c
|
||||
# Data: 08/Dec/2020
|
||||
|
||||
resetcounter()
|
||||
{
|
||||
(( counter = 0 ))
|
||||
drv_rainsensorqty_writelog $f "SIGUSR1 received after last PULSE - counter resetted" &
|
||||
echo "SIGUSR1 received after last PULSE - counter resetted"
|
||||
}
|
||||
|
||||
# DEBUG FUNCTION:
|
||||
testloop()
|
||||
{
|
||||
touch /tmp/tick
|
||||
while true
|
||||
do
|
||||
if [[ $( < /tmp/tick ) = "1" ]] ; then
|
||||
break
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
}
|
||||
|
||||
###############
|
||||
# MAIN #
|
||||
###############
|
||||
|
||||
trap "resetcounter" SIGUSR1
|
||||
|
||||
|
||||
DIRNAME="$( dirname $0 )"
|
||||
f="$(basename $0)"
|
||||
. $DIRNAME/common.include.sh
|
||||
|
||||
RAINSENSORQTY_VAR=$TMPDIR/.rainsensorqty_var
|
||||
|
||||
if [[ -f "$RAINSENSORQTY_VAR" ]] ; then
|
||||
en_echo "NORMAL: file $RAINSENSORQTY_VAR found - getting variables"
|
||||
. "$RAINSENSORQTY_VAR"
|
||||
else
|
||||
echo "ERROR: $RAINSENSORQTY_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"
|
||||
|
||||
echo ""
|
||||
en_echo "---- NEW RUN ----"
|
||||
|
||||
# check if monitor script was killed before writing a complete rain event
|
||||
check_incomplete_loop
|
||||
case $? in
|
||||
2) echo "\$RAINSENSORQTY_HISTORY - wrong entry found - no fix possible" ;;
|
||||
1) echo "\$RAINSENSORQTY_HISTORY - fixed incomplete loop" ;;
|
||||
0) echo "\$RAINSENSORQTY_HISTORY - no incomplete loop needed to be fixed" ;;
|
||||
esac
|
||||
|
||||
# init variables
|
||||
MMEACH="$RAINSENSORQTY_MMEACH"
|
||||
(( counter=0 ))
|
||||
before="-1"
|
||||
|
||||
en_echo "WAITING FOR $RAINSENSORQTY_PULSE PULSE"
|
||||
|
||||
# loop forever
|
||||
while true
|
||||
do
|
||||
sleep $RAINSENSOR_DEBOUNCE
|
||||
#DEBUG: testloop #DEBUG
|
||||
$GPIO -g wfi $gpio_port $RAINSENSORQTY_PULSE
|
||||
now=`date +%s`
|
||||
(( elapsed = now - before ))
|
||||
if (( elapsed >= RAINSENSORQTY_SECSBETWEENRAINEVENT )) ; then
|
||||
last_event="$started:$before:$counter"
|
||||
(( 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" ) mm of rain" &
|
||||
(( before > 0 )) && echo $last_event >> $RAINSENSORQTY_HISTORY
|
||||
en_echo "---- NEW CYCLE ----"
|
||||
fi
|
||||
(( counter+=1 ))
|
||||
(( counter == 1 )) && (( started = now ))
|
||||
echo "$now:$counter" >> ${RAINSENSORQTY_HISTORYRAW} &
|
||||
MMWATER=$( $JQ -n "$counter*$MMEACH" )
|
||||
en_echo $( printf "%s PULSE #%d RECEIVED (%.2f mm)" $RAINSENSORQTY_PULSE $counter $MMWATER )
|
||||
text=$(printf "%.2f mm height (#%d pulse)" $MMWATER $counter )
|
||||
if (( counter >= RAINSENSORQTY_LOOPSFORSETRAINING )) ; then
|
||||
drv_rainsensorqty_writelog $f "RAINING - $text" &
|
||||
echo "$now:$counter" > ${RAINSENSORQTY_LASTRAIN}
|
||||
else
|
||||
drv_rainsensorqty_writelog $f "now is $text" &
|
||||
fi
|
||||
(( before = now ))
|
||||
done
|
||||
37
drv/rainsensorqty/init.include.sh
Normal file
37
drv/rainsensorqty/init.include.sh
Normal file
@@ -0,0 +1,37 @@
|
||||
#
|
||||
# Driver rainsensorqty - driver for measure the rain volume
|
||||
# Author: androtto
|
||||
# file "init.include.sh"
|
||||
# Inizializza il driver, viene richiamata nella funzione init di piGarden
|
||||
# Version: 0.2.0
|
||||
# Data: 11/Aug/2019
|
||||
|
||||
function drv_rainsensorqty_init {
|
||||
local f="drv_rainsensorqty_init"
|
||||
|
||||
# format RAIN_GPIO="drv:rainsensorqty:25"
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
if ! config_check ; then
|
||||
echo "ERROR in config_check function"
|
||||
exit 1
|
||||
else
|
||||
: #echo "config_check ok"
|
||||
fi
|
||||
|
||||
check_TMPDIR
|
||||
|
||||
RAINSENSORQTY_VAR=$TMPDIR/.rainsensorqty_var
|
||||
|
||||
set | $GREP -e ^GPIO -e ^LOG -e ^CUT -e ^JQ -e ^RAIN -e ^SCR -e ^TMP > $RAINSENSORQTY_VAR
|
||||
104
drv/rainsensorqty/rainsensor.include.sh
Normal file
104
drv/rainsensorqty/rainsensor.include.sh
Normal file
@@ -0,0 +1,104 @@
|
||||
#
|
||||
# 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
|
||||
#
|
||||
drv_rainsensorqty_rain_sensor_init()
|
||||
{
|
||||
local f=drv_rainsensorqty_rain_sensor_init
|
||||
drv_rainsensorqty_writelog "launched: $f" $1
|
||||
|
||||
local drvt="$( echo $RAIN_GPIO | $CUT -f 1 -d: )"
|
||||
local drv="$( echo $RAIN_GPIO | $CUT -f 2 -d: )"
|
||||
local gpio_port="$( echo $RAIN_GPIO | $CUT -f 3 -d: )"
|
||||
|
||||
if $GPIO -g mode $gpio_port in ; then
|
||||
drv_rainsensorqty_writelog $f "NORMAL: '$GPIO -g mode $gpio_port in' set correctly"
|
||||
else
|
||||
drv_rainsensorqty_writelog $f "ERROR: '$GPIO -g mode $gpio_port in' has an error"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
case $GPIO_RESISTOR in
|
||||
pull-up) gpio_arg=up
|
||||
message="NORMAL: '$GPIO -g mode $gpio_port up' set internal pull-up resistor"
|
||||
;;
|
||||
pull-down) gpio_arg=down
|
||||
message="NORMAL: '$GPIO -g mode $gpio_port down' set internal pull-down resistor"
|
||||
;;
|
||||
none) gpio_arg=tri
|
||||
message="NORMAL: '$GPIO -g mode $gpio_port tri' set none to internal resistor"
|
||||
;;
|
||||
*) echo "ERROR: GPIO_RESISTOR not set correctly - values are \"pull-up|pull-down|none\" "
|
||||
drv_rainsensorqty_writelog "drv_rainsensorqty_rain_sensor_init" "ERROR: GPIO_RESISTOR not set correctly - values are \"pull-up|pull-down|none\" "
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
if $GPIO -g mode $gpio_port $gpio_arg ; then
|
||||
drv_rainsensorqty_writelog $f "$message"
|
||||
else
|
||||
drv_rainsensorqty_writelog $f "ERROR: '$GPIO -g mode $gpio_port $gpio_arg' command"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
#
|
||||
# Ritorna in output lo stato del sensore di rilevamento pioggia
|
||||
#
|
||||
# $1 identificativo gpio del sensore di pioggia
|
||||
#
|
||||
# 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=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"
|
||||
|
||||
# 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="$( 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" ) - LEVEL $LEVEL rain"
|
||||
drv_rainsensorqty_writelog $f "NORMAL: check rain $( date --date="@$now" ) "
|
||||
if (( diff <= interval )) ; then
|
||||
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 - 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 ($monitor_sh)"
|
||||
msg="ERROR"
|
||||
echo $msg
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
@@ -35,7 +35,7 @@ function drv_remote_rele_open {
|
||||
error="${error%\"}"
|
||||
error="${error#\"}"
|
||||
echo "error=$error"
|
||||
log_write "Remote rele open error: $error"
|
||||
log_write "drv_remote" "error" "Remote rele open error: $error"
|
||||
message_write "warning" "Remote rele open error: $error"
|
||||
return 1
|
||||
fi
|
||||
@@ -68,7 +68,7 @@ function drv_remote_rele_close {
|
||||
error="${error%\"}"
|
||||
error="${error#\"}"
|
||||
echo "error=$error"
|
||||
log_write "Remote rele close error: $error"
|
||||
log_write "drv_remoter" "error" "Remote rele close error: $error"
|
||||
message_write "warning" "Remote rele close error: $error"
|
||||
return 1
|
||||
fi
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
#
|
||||
# Funzione di esempio
|
||||
#
|
||||
function sample_foo {
|
||||
function drv_sample_foo {
|
||||
|
||||
echo "bar"
|
||||
|
||||
|
||||
@@ -35,7 +35,7 @@ function drv_sonoff_tasmota_http_rele_open {
|
||||
error="${error%\"}"
|
||||
error="${error#\"}"
|
||||
echo "error=$error"
|
||||
log_write "Remote rele open error: $error"
|
||||
log_write "drv_sonoff_tasmota_http" "error" "Remote rele open error: $error"
|
||||
message_write "warning" "Remote rele open error: $error"
|
||||
return 1
|
||||
fi
|
||||
@@ -69,7 +69,7 @@ function drv_sonoff_tasmota_http_rele_close {
|
||||
error="${error%\"}"
|
||||
error="${error#\"}"
|
||||
echo "error=$error"
|
||||
log_write "Remote rele close error: $error"
|
||||
log_write "drv_sonoff_tasmota_http" "error" "Remote rele close error: $error"
|
||||
message_write "warning" "Remote rele close error: $error"
|
||||
return 1
|
||||
fi
|
||||
|
||||
@@ -74,7 +74,7 @@ function drv_spb16ch_boards_id_load {
|
||||
SPB16CH_USED_ID+=("$board_id")
|
||||
done
|
||||
else
|
||||
log_write "spb16ch: file $SPB16CH_BOARD_ID_STORE_FILE not found: remember to run 'piGarden init' to generate the file"
|
||||
log_write "drv_spb16ch" "error" "spb16ch: file $SPB16CH_BOARD_ID_STORE_FILE not found: remember to run 'piGarden init' to generate the file"
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
@@ -19,7 +19,7 @@ function drv_spb16ch_rele_open {
|
||||
local rele_data=${SPB16CH_RELE_MAP[$rele_id]}
|
||||
if [[ -z $rele_data ]]; then
|
||||
local message="Error - Rele map not defined - rele_id=$rele_id - ($1)"
|
||||
log_write "$message"
|
||||
log_write "drv_spb16ch" "error" "$message"
|
||||
message_write "warning" "$message"
|
||||
fi
|
||||
local address_num=${rele_data:0:2}
|
||||
@@ -52,7 +52,7 @@ function drv_spb16ch_rele_close {
|
||||
local rele_data=${SPB16CH_RELE_MAP[$rele_id]}
|
||||
if [[ -z $rele_data ]]; then
|
||||
local message="Error - Rele map not defined - rele_id=$rele_id - ($1)"
|
||||
log_write "$message"
|
||||
log_write "drv_spb16ch" "error" "$message"
|
||||
message_write "warning" "$message"
|
||||
fi
|
||||
local address_num=${rele_data:0:2}
|
||||
|
||||
@@ -10,7 +10,7 @@ function cron_del {
|
||||
|
||||
if [ -z "$CRON_TYPE" ]; then
|
||||
echo "Cron type is empty" >&2
|
||||
log_write "Cron type is empty"
|
||||
log_write "cron" "error" "Cron type is empty"
|
||||
return 1
|
||||
fi
|
||||
|
||||
@@ -25,17 +25,17 @@ function cron_del {
|
||||
fi
|
||||
if ! [[ $START =~ $re ]] ; then
|
||||
echo "Cron start don't find" >&2
|
||||
log_write "Cron start don't find"
|
||||
log_write "cron" "error" "Cron start don't find"
|
||||
return 1
|
||||
fi
|
||||
if ! [[ $END =~ $re ]] ; then
|
||||
echo "Cron end cron don't find" >&2
|
||||
log_write "Cron end cron don't find"
|
||||
log_write "cron" "error" "Cron end cron don't find"
|
||||
return 1
|
||||
fi
|
||||
if [ "$START" -gt "$END" ]; then
|
||||
echo "Wrong position for start and end in cron" >&2
|
||||
log_write "Wrong position for start and end in cron"
|
||||
log_write "cron" "error" "Wrong position for start and end in cron"
|
||||
return 1
|
||||
fi
|
||||
|
||||
@@ -74,7 +74,7 @@ function cron_add {
|
||||
|
||||
if [ -z "$CRON_TYPE" ]; then
|
||||
echo "Cron type is empty" >&2
|
||||
log_write "Cron type is empty"
|
||||
log_write "cron" "error" "Cron type is empty"
|
||||
return 1
|
||||
fi
|
||||
|
||||
@@ -91,12 +91,12 @@ function cron_add {
|
||||
else
|
||||
if ! [[ $START =~ $re ]] ; then
|
||||
echo "Cron start don't find" >&2
|
||||
log_write "Cron start don't find"
|
||||
log_write "cron" "error" "Cron start don't find"
|
||||
return 1
|
||||
fi
|
||||
if ! [[ $END =~ $re ]] ; then
|
||||
echo "Cron end cron don't find" >&2
|
||||
log_write "Cron end cron don't find"
|
||||
log_write "cron" "error" "Cron end cron don't find"
|
||||
return 1
|
||||
fi
|
||||
START=$(($START + 1))
|
||||
@@ -104,7 +104,7 @@ function cron_add {
|
||||
|
||||
if [ "$START" -gt "$END" ]; then
|
||||
echo "Wrong position for start and end in cron" >&2
|
||||
log_write "Wrong position for start and end in cron"
|
||||
log_write "cron" "error" "Wrong position for start and end in cron"
|
||||
return 1
|
||||
fi
|
||||
|
||||
@@ -183,7 +183,7 @@ function cron_add {
|
||||
|
||||
*)
|
||||
echo "Wrong cron type: $CRON_TYPE"
|
||||
log_write "Wrong cron type: $CRON_TYPE"
|
||||
log_write "cron" "error" "Wrong cron type: $CRON_TYPE"
|
||||
;;
|
||||
|
||||
esac
|
||||
@@ -225,7 +225,7 @@ function cron_get {
|
||||
|
||||
if [ -z "$CRON_TYPE" ]; then
|
||||
echo "Cron type is empty" >&2
|
||||
log_write "Cron type is empty"
|
||||
log_write "cron" "error" "Cron type is empty"
|
||||
return 1
|
||||
fi
|
||||
|
||||
@@ -241,12 +241,12 @@ function cron_get {
|
||||
else
|
||||
if ! [[ $START =~ $re ]] ; then
|
||||
echo "Cron start don't find" >&2
|
||||
log_write "Cron start don't find"
|
||||
log_write "cron" "error" "Cron start don't find"
|
||||
return 1
|
||||
fi
|
||||
if ! [[ $END =~ $re ]] ; then
|
||||
echo "Cron end cron don't find" >&2
|
||||
log_write "Cron end cron don't find"
|
||||
log_write "cron" "error" "Cron end cron don't find"
|
||||
return 1
|
||||
fi
|
||||
START=$(($START + 1))
|
||||
@@ -254,7 +254,7 @@ function cron_get {
|
||||
|
||||
if [ "$START" -gt "$END" ]; then
|
||||
echo "Wrong position for start and end in cron" >&2
|
||||
log_write "Wrong position for start and end in cron"
|
||||
log_write "cron" "error" "Wrong position for start and end in cron"
|
||||
return 1
|
||||
fi
|
||||
|
||||
@@ -370,7 +370,7 @@ function add_cron_open {
|
||||
|
||||
local exists=`alias_exists $1`
|
||||
if [ "check $exists" = "check FALSE" ]; then
|
||||
log_write "Alias $1 not found"
|
||||
log_write "cron" "error" "Alias $1 not found"
|
||||
echo "Alias $1 not found"
|
||||
return 1
|
||||
fi
|
||||
@@ -387,7 +387,7 @@ function del_cron_open {
|
||||
|
||||
local exists=`alias_exists $1`
|
||||
if [ "check $exists" = "check FALSE" ]; then
|
||||
log_write "Alias $1 not found"
|
||||
log_write "cron" "error" "Alias $1 not found"
|
||||
echo "Alias $1 not found"
|
||||
return 1
|
||||
fi
|
||||
@@ -404,7 +404,7 @@ function get_cron_open {
|
||||
|
||||
local exists=`alias_exists $1`
|
||||
if [ "check $exists" = "check FALSE" ]; then
|
||||
log_write "Alias $1 not found"
|
||||
log_write "cron" "error" "Alias $1 not found"
|
||||
echo "Alias $1 not found"
|
||||
return 1
|
||||
fi
|
||||
@@ -421,7 +421,7 @@ function del_cron_open_in {
|
||||
|
||||
local exists=`alias_exists $1`
|
||||
if [ "check $exists" = "check FALSE" ]; then
|
||||
log_write "Alias $1 not found"
|
||||
log_write "cron" "error" "Alias $1 not found"
|
||||
echo "Alias $1 not found"
|
||||
return 1
|
||||
fi
|
||||
@@ -439,7 +439,7 @@ function get_cron_close {
|
||||
|
||||
local exists=`alias_exists $1`
|
||||
if [ "check $exists" = "check FALSE" ]; then
|
||||
log_write "Alias $1 not found"
|
||||
log_write "cron" "error" "Alias $1 not found"
|
||||
echo "Alias $1 not found"
|
||||
return 1
|
||||
fi
|
||||
@@ -462,7 +462,7 @@ function add_cron_close {
|
||||
|
||||
local exists=`alias_exists $1`
|
||||
if [ "check $exists" = "check FALSE" ]; then
|
||||
log_write "Alias $1 not found"
|
||||
log_write "cron" "error" "Alias $1 not found"
|
||||
echo "Alias $1 not found"
|
||||
return 1
|
||||
fi
|
||||
@@ -479,7 +479,7 @@ function del_cron_close {
|
||||
|
||||
local exists=`alias_exists $1`
|
||||
if [ "check $exists" = "check FALSE" ]; then
|
||||
log_write "Alias $1 not found"
|
||||
log_write "cron" "error" "Alias $1 not found"
|
||||
echo "Alias $1 not found"
|
||||
return 1
|
||||
fi
|
||||
@@ -559,7 +559,79 @@ function cron_disable_all_open_close {
|
||||
fi
|
||||
|
||||
done
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
#
|
||||
# Attiva tutte le schedulazioni di apertura e chiusura elettrovalvole
|
||||
#
|
||||
function cron_enable_all_open_close {
|
||||
|
||||
local a=""
|
||||
local al=""
|
||||
local cron=""
|
||||
|
||||
#
|
||||
# Disabilita tutte le schedulazioni di apertura
|
||||
#
|
||||
for i in $(seq $EV_TOTAL)
|
||||
do
|
||||
a=EV"$i"_ALIAS
|
||||
al=${!a}
|
||||
local crons=`get_cron_open $al`
|
||||
if [[ ! -z "$crons" ]]; then
|
||||
del_cron_open $al
|
||||
IFS=$'\n' # make newlines the only separator
|
||||
for cron in $crons
|
||||
do
|
||||
#echo "-- $cron --"
|
||||
CRON_M=`echo $cron | $CUT -d' ' -f1,1`
|
||||
CRON_H=`echo $cron | $CUT -d' ' -f2,2`
|
||||
CRON_DOM=`echo $cron | $CUT -d' ' -f3,3`
|
||||
CRON_MON=`echo $cron | $CUT -d' ' -f4,4`
|
||||
CRON_DOW=`echo $cron | $CUT -d' ' -f5,5`
|
||||
|
||||
if [[ ${CRON_M:0:1} == "#" ]]; then
|
||||
CRON_M=${CRON_M:1:${#CRON_M}}
|
||||
fi
|
||||
#echo "++ $CRON_M $CRON_H $CRON_DOM $CRON_MON $CRON_DOW ++"
|
||||
|
||||
add_cron_open $al "$CRON_M" "$CRON_H" "$CRON_DOM" "$CRON_MON" "$CRON_DOW"
|
||||
done
|
||||
fi
|
||||
|
||||
done
|
||||
|
||||
|
||||
#
|
||||
# Disabilita tutte le schedulazioni di chiusura
|
||||
#
|
||||
for i in $(seq $EV_TOTAL)
|
||||
do
|
||||
a=EV"$i"_ALIAS
|
||||
al=${!a}
|
||||
local crons=`get_cron_close $al`
|
||||
if [[ ! -z "$crons" ]]; then
|
||||
del_cron_close $al
|
||||
IFS=$'\n' # make newlines the only separator
|
||||
for cron in $crons
|
||||
do
|
||||
#echo "-- $cron --"
|
||||
CRON_M=`echo $cron | $CUT -d' ' -f1,1`
|
||||
CRON_H=`echo $cron | $CUT -d' ' -f2,2`
|
||||
CRON_DOM=`echo $cron | $CUT -d' ' -f3,3`
|
||||
CRON_MON=`echo $cron | $CUT -d' ' -f4,4`
|
||||
CRON_DOW=`echo $cron | $CUT -d' ' -f5,5`
|
||||
|
||||
if [[ ${CRON_M:0:1} == "#" ]]; then
|
||||
CRON_M=${CRON_M:1:${#CRON_M}}
|
||||
fi
|
||||
#echo "++ $CRON_M $CRON_H $CRON_DOM $CRON_MON $CRON_DOW ++"
|
||||
|
||||
add_cron_close $al "$CRON_M" "$CRON_H" "$CRON_DOM" "$CRON_MON" "$CRON_DOW"
|
||||
done
|
||||
fi
|
||||
|
||||
done
|
||||
}
|
||||
|
||||
@@ -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
|
||||
@@ -87,7 +94,7 @@ function drv_rele_init {
|
||||
$GPIO -g mode $idx out # setta il gpio nella modalita di scrittura
|
||||
# Il driver definito non è stato trovato
|
||||
elif [ "$fnc" == "drvnotfound" ]; then
|
||||
log_write "Driver not found: $idx"
|
||||
log_write "drv" "error" "Driver not found: $idx"
|
||||
message_write "warning" "Driver not found: $idx"
|
||||
else
|
||||
echo "$(date) $fnc arg:$idx" >> "$LOG_OUTPUT_DRV_FILE"
|
||||
@@ -109,7 +116,7 @@ function drv_rele_close {
|
||||
$GPIO -g write $idx $RELE_GPIO_CLOSE
|
||||
# Il driver definito non è stato trovato
|
||||
elif [ "$fnc" == "drvnotfound" ]; then
|
||||
log_write "Driver not found: $idx"
|
||||
log_write "drv" "error" "Driver not found: $idx"
|
||||
message_write "warning" "Driver not found: $idx"
|
||||
return 1
|
||||
else
|
||||
@@ -135,7 +142,7 @@ function drv_rele_open {
|
||||
$GPIO -g write $idx $RELE_GPIO_OPEN
|
||||
# Il driver definito non è stato trovato
|
||||
elif [ "$fnc" == "drvnotfound" ]; then
|
||||
log_write "Driver not found: $idx"
|
||||
log_write "drv" "error" "Driver not found: $idx"
|
||||
message_write "warning" "Driver not found: $idx"
|
||||
return 1
|
||||
else
|
||||
@@ -165,7 +172,7 @@ function drv_supply_bistable_init {
|
||||
$GPIO -g mode $idx1 out
|
||||
# Il driver definito non è stato trovato
|
||||
elif [ "$fnc1" == "drvnotfound" ]; then
|
||||
log_write "Driver not found: $idx1"
|
||||
log_write "drv" "error" "Driver not found: $idx1"
|
||||
message_write "warning" "Driver not found: $idx1"
|
||||
return
|
||||
else
|
||||
@@ -179,7 +186,7 @@ function drv_supply_bistable_init {
|
||||
$GPIO -g mode $idx2 out
|
||||
# Il driver definito non è stato trovato
|
||||
elif [ "$fnc2" == "drvnotfound" ]; then
|
||||
log_write "Driver not found: $idx2"
|
||||
log_write "drv" "error" "Driver not found: $idx2"
|
||||
message_write "warning" "Driver not found: $idx2"
|
||||
else
|
||||
echo "$(date) $fnc2 arg:$idx2" >> "$LOG_OUTPUT_DRV_FILE"
|
||||
@@ -205,7 +212,7 @@ function drv_supply_positive {
|
||||
$GPIO -g write $idx1 $SUPPLY_GPIO_POS
|
||||
# Il driver definito non è stato trovato
|
||||
elif [ "$fnc1" == "drvnotfound" ]; then
|
||||
log_write "Driver not found: $idx1"
|
||||
log_write "drv" "error" "Driver not found: $idx1"
|
||||
message_write "warning" "Driver not found: $idx1"
|
||||
return
|
||||
else
|
||||
@@ -218,7 +225,7 @@ function drv_supply_positive {
|
||||
$GPIO -g write $idx2 $SUPPLY_GPIO_POS
|
||||
# Il driver definito non è stato trovato
|
||||
elif [ "$fnc2" == "drvnotfound" ]; then
|
||||
log_write "Driver not found: $idx2"
|
||||
log_write "drv" "error" "Driver not found: $idx2"
|
||||
message_write "warning" "Driver not found: $idx2"
|
||||
else
|
||||
echo "$(date) $fnc2 arg:$idx2" >> "$LOG_OUTPUT_DRV_FILE"
|
||||
@@ -244,7 +251,7 @@ function drv_supply_negative {
|
||||
$GPIO -g write $idx1 $SUPPLY_GPIO_NEG
|
||||
# Il driver definito non è stato trovato
|
||||
elif [ "$fnc1" == "drvnotfound" ]; then
|
||||
log_write "Driver not found: $idx1"
|
||||
log_write "drv" "error" "Driver not found: $idx1"
|
||||
message_write "warning" "Driver not found: $idx1"
|
||||
return
|
||||
else
|
||||
@@ -257,7 +264,7 @@ function drv_supply_negative {
|
||||
$GPIO -g write $idx2 $SUPPLY_GPIO_NEG
|
||||
# Il driver definito non è stato trovato
|
||||
elif [ "$fnc2" == "drvnotfound" ]; then
|
||||
log_write "Driver not found: $idx2"
|
||||
log_write "drv" "error" "Driver not found: $idx2"
|
||||
message_write "warning" "Driver not found: $idx2"
|
||||
else
|
||||
echo "$(date) $fnc2 arg:$idx2" >> "$LOG_OUTPUT_DRV_FILE"
|
||||
@@ -281,7 +288,7 @@ function drv_rain_sensor_init {
|
||||
$GPIO -g mode $idx in
|
||||
# Il driver definito non è stato trovato
|
||||
elif [ "$fnc" == "drvnotfound" ]; then
|
||||
log_write "Driver not found: $idx"
|
||||
log_write "drv" "error" "Driver not found: $idx"
|
||||
message_write "warning" "Driver not found: $idx"
|
||||
else
|
||||
echo "$(date) $fnc arg:$idx" >> "$LOG_OUTPUT_DRV_FILE"
|
||||
@@ -305,7 +312,7 @@ function drv_rain_sensor_get {
|
||||
vret=`$GPIO -g read $idx`
|
||||
# Il driver definito non è stato trovato
|
||||
elif [ "$fnc" == "drvnotfound" ]; then
|
||||
log_write "Driver not found: $idx"
|
||||
log_write "drv" "error" "Driver not found: $idx"
|
||||
message_write "warning" "Driver not found: $idx"
|
||||
else
|
||||
echo "$(date) $fnc arg:$idx" >> "$LOG_OUTPUT_DRV_FILE"
|
||||
@@ -328,11 +335,11 @@ function drv_rain_online_get {
|
||||
|
||||
# Nessun driver definito, esegue la lettura del sensore tramite gpio del raspberry
|
||||
if [ -z "$fnc" ]; then
|
||||
log_write "Driver not found: $idx"
|
||||
log_write "drv" "error" "Driver not found: $idx"
|
||||
message_write "warning" "Driver not found: $idx"
|
||||
# Il driver definito non è stato trovato
|
||||
elif [ "$fnc" == "drvnotfound" ]; then
|
||||
log_write "Driver not found: $idx"
|
||||
log_write "drv" "error" "Driver not found: $idx"
|
||||
message_write "warning" "Driver not found: $idx"
|
||||
else
|
||||
echo "$(date) $fnc arg:$idx" >> "$LOG_OUTPUT_DRV_FILE"
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
function check_rain_online {
|
||||
|
||||
if [ "$WEATHER_SERVICE" == "none" ]; then
|
||||
log_write "check_rain_online - online service is disable"
|
||||
log_write "rain" "warning" "check_rain_online - online service is disabled"
|
||||
return
|
||||
fi
|
||||
|
||||
@@ -17,7 +17,7 @@ function check_rain_online {
|
||||
|
||||
if [[ $local_epoch =~ ^-?[0-9]+$ ]]; then
|
||||
if [ $local_epoch -eq 0 ]; then
|
||||
log_write "check_rain_online - failed read online data"
|
||||
log_write "rain" "error" "check_rain_online - failed read online data"
|
||||
else
|
||||
if [ $local_epoch -gt 0 ]; then
|
||||
current_state_rain_online='rain'
|
||||
@@ -27,14 +27,14 @@ function check_rain_online {
|
||||
fi
|
||||
weather=$(cat "$STATUS_DIR/last_weather_online" | $JQ -M ".weather")
|
||||
|
||||
log_write "check_rain_online - weather=$weather, local_epoch=$local_epoch"
|
||||
log_write "rain" "info" "check_rain_online - weather=$weather, local_epoch=$local_epoch"
|
||||
if [ "$current_state_rain_online" != "$last_state_rain_online" ]; then
|
||||
echo "$current_state_rain_online" > "$STATUS_DIR/last_state_rain_online"
|
||||
trigger_event "check_rain_online_change" "$current_state_rain_online" "$weather"
|
||||
fi
|
||||
fi
|
||||
else
|
||||
log_write "check_rain_online - failed read online data"
|
||||
log_write "rain" "error" "check_rain_online - failed read online data"
|
||||
fi
|
||||
|
||||
trigger_event "check_rain_online_after" "$current_state_rain_online" "$weather"
|
||||
@@ -57,11 +57,11 @@ function check_rain_sensor {
|
||||
current_state_rain_sensor='rain'
|
||||
local local_epoch=`date +%s`
|
||||
echo $local_epoch > "$STATUS_DIR/last_rain_sensor"
|
||||
log_write "check_rain_sensor - now it's raining ($local_epoch)"
|
||||
log_write "rain" "info" "check_rain_sensor - now it's raining ($local_epoch)"
|
||||
#return $local_epoch
|
||||
else
|
||||
current_state_rain_sensor='norain'
|
||||
log_write "check_rain_sensor - now is not raining"
|
||||
log_write "rain" "info" "check_rain_sensor - now is not raining"
|
||||
fi
|
||||
if [ "$current_state_rain_sensor" != "$last_state_rain_sensor" ]; then
|
||||
echo "$current_state_rain_sensor" > "$STATUS_DIR/last_state_rain_sensor"
|
||||
@@ -69,17 +69,38 @@ function check_rain_sensor {
|
||||
fi
|
||||
trigger_event "check_rain_sensor_after" "$current_state_rain_sensor"
|
||||
else
|
||||
log_write "Rain sensor not present"
|
||||
log_write "rain" "warning" "Rain sensor not present"
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
#
|
||||
# Chiude tutte le elettrovalvole se sta piovendo
|
||||
# Chiude tutte le elettrovalvole se sta piovendo oppure chiude quelle che hanno raggiunto l'mudità massima impostata
|
||||
# Eseguie il controllo in tempo reale sul sensore hardware e sui dati dell'ultima chiamata eseguita online
|
||||
#
|
||||
function close_all_for_rain {
|
||||
|
||||
#
|
||||
# Chiude le elettrovalvole che hanno raggiunto l'umidità del terreno impostata in EVx_SENSOR_MOISTURE
|
||||
#
|
||||
|
||||
for i in $(seq $EV_TOTAL)
|
||||
do
|
||||
local a=EV"$i"_ALIAS
|
||||
local al=${!a}
|
||||
ev_status $al
|
||||
local state=$?
|
||||
local moisture=$(ev_check_moisture_autoclose $i)
|
||||
if [ "$state" = "1" ] && [ "$moisture" -gt 0 ]; then
|
||||
ev_close $al
|
||||
log_write "irrigate" "warning" "close_all_for_rain - Close solenoid '$al' because maximum soil moisture has been reached"
|
||||
fi
|
||||
done
|
||||
|
||||
#
|
||||
# Chiude le elettrovalvole in caso di pioggia
|
||||
#
|
||||
|
||||
local close_all=0
|
||||
local now=`date +%s`
|
||||
|
||||
@@ -102,6 +123,12 @@ function close_all_for_rain {
|
||||
fi
|
||||
|
||||
if [ "$close_all" = "1" ]; then
|
||||
|
||||
#
|
||||
# PIOVE
|
||||
# Valuta se la sciare aperte le elettrovalvole in caso l'umidità del sensore non sia stata raggiunta
|
||||
#
|
||||
|
||||
for i in $(seq $EV_TOTAL)
|
||||
do
|
||||
local a=EV"$i"_ALIAS
|
||||
@@ -110,14 +137,51 @@ function close_all_for_rain {
|
||||
local evnorain=${!a}
|
||||
ev_status $al
|
||||
local state=$?
|
||||
local moisture=$(ev_check_moisture $i)
|
||||
#echo "$al = $state"
|
||||
if [ "$state" = "1" ] && [ "$evnorain" != "1" ]; then
|
||||
if [ "$state" = "1" ] && [ "$evnorain" != "1" ] && [ "$moisture" -ne 0 ]; then
|
||||
ev_close $al
|
||||
log_write "close_all_for_rain - Close solenoid '$al' for rain"
|
||||
log_write "irrigate" "warning" "close_all_for_rain - Close solenoid '$al' for rain"
|
||||
fi
|
||||
done
|
||||
|
||||
fi
|
||||
|
||||
|
||||
}
|
||||
|
||||
#
|
||||
# Mostra il timestamp dell'ultima pioggia rilevato dal sensore
|
||||
#
|
||||
function last_rain_sensor_timestamp {
|
||||
cat "$STATUS_DIR/last_rain_sensor" 2> /dev/null
|
||||
}
|
||||
|
||||
#
|
||||
# Mostra il timestamp dell'ultima pioggia rilevato dal servizio online
|
||||
#
|
||||
function last_rain_online_timestamp {
|
||||
cat "$STATUS_DIR/last_rain_online" 2> /dev/null
|
||||
}
|
||||
|
||||
#
|
||||
# Resetta il timestamp dell'ultima pioggia rilevato dal sensore
|
||||
#
|
||||
function reset_last_rain_sensor_timestamp {
|
||||
trigger_event "reset_last_rain_sensor_timestamp_before" ""
|
||||
rm "$STATUS_DIR/last_rain_sensor" 2> /dev/null
|
||||
trigger_event "reset_last_rain_sensor_timestamp_after" ""
|
||||
log_write "rain" "info" "reset_last_rain_sensor_timestamp"
|
||||
}
|
||||
|
||||
#
|
||||
# Resetta mostra il timestamp dell'ultima pioggia rilevato dal servizio online
|
||||
#
|
||||
function reset_last_rain_online_timestamp {
|
||||
trigger_event "reset_last_rain_online_timestamp_before" ""
|
||||
rm "$STATUS_DIR/last_rain_online" 2> /dev/null
|
||||
trigger_event "reset_last_rain_online_timestamp_before" ""
|
||||
log_write "rain" "info" "reset_last_rain_online_timestamp"
|
||||
}
|
||||
|
||||
|
||||
|
||||
249
include/sensor.include.sh
Normal file
249
include/sensor.include.sh
Normal file
@@ -0,0 +1,249 @@
|
||||
#
|
||||
# Imposta lo stato di una elettrovalvola
|
||||
# $1 numero del sensore
|
||||
# $2 tipologia dello stato
|
||||
# $3 stato da scrivere
|
||||
#
|
||||
function sensor_set_state {
|
||||
trigger_event "sensor_set_state_before" $1 $2 $3
|
||||
echo "$3" > "$STATUS_DIR/sensor$1_$2"
|
||||
trigger_event "sensor_set_state_after" $1 $2 $3
|
||||
}
|
||||
|
||||
#
|
||||
# Legge lo stato di un sensore
|
||||
# $1 numero del sensore
|
||||
# $2 tipologia dello stato
|
||||
#
|
||||
function sensor_get_state {
|
||||
if [ ! -f "$STATUS_DIR/sensor$1_$2" ]; then
|
||||
sensor_set_state $1 $2 ""
|
||||
fi
|
||||
|
||||
local state=$(cat "$STATUS_DIR/sensor$1_$2" 2> /dev/null)
|
||||
echo $state
|
||||
}
|
||||
|
||||
#
|
||||
# Recupera il numero di un sensore in base all'alias
|
||||
# $1 alias del sensore
|
||||
#
|
||||
function sensor_alias2number {
|
||||
for i in $(seq $EV_TOTAL)
|
||||
do
|
||||
a=SENSOR"$i"_ALIAS
|
||||
av=${!a}
|
||||
if [ "$av" == "$1" ]; then
|
||||
return $i
|
||||
fi
|
||||
done
|
||||
|
||||
log_write "general" "error" "ERROR sensor alias not found: $1"
|
||||
message_write "warning" "Sensor alias not found"
|
||||
mqtt_status
|
||||
exit 1
|
||||
}
|
||||
|
||||
#
|
||||
# Verifica se un alias di un sensore esiste
|
||||
# $1 alias dell'elettrovalvola
|
||||
#
|
||||
function sensor_alias_exists {
|
||||
local vret='FALSE'
|
||||
for i in $(seq $EV_TOTAL)
|
||||
do
|
||||
a=SENSOR"$i"_ALIAS
|
||||
av=${!a}
|
||||
if [ "$av" == "$1" ]; then
|
||||
vret='TRUE'
|
||||
fi
|
||||
done
|
||||
|
||||
echo $vret
|
||||
}
|
||||
|
||||
#
|
||||
# Mostra lo stato di tutte le elettrovalvole
|
||||
#
|
||||
function sensor_status_all {
|
||||
for i in $(seq $SENSOR_TOTAL)
|
||||
do
|
||||
a=SENSOR"$i"_ALIAS
|
||||
av=${!a}
|
||||
for t in $SENSOR_STATE_TYPE
|
||||
do
|
||||
local state=$(sensor_get_state $i $t)
|
||||
echo -e "$av: $t $state"
|
||||
done
|
||||
done
|
||||
}
|
||||
|
||||
#
|
||||
# Mostra lo stato di un sensore
|
||||
# $1 alias sensore
|
||||
# $2 tipologia dello stato
|
||||
#
|
||||
function sensor_status {
|
||||
sensor_alias2number $1
|
||||
i=$?
|
||||
if [ -z "$2" ]; then
|
||||
for t in $SENSOR_STATE_TYPE
|
||||
do
|
||||
local state=$(sensor_get_state $i $t)
|
||||
echo -e "$av: $t $state"
|
||||
done
|
||||
else
|
||||
local state=$(sensor_get_state $i $2)
|
||||
echo -e "$state"
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
#
|
||||
# Imposta lo stato di un sensore per alias
|
||||
# $1 alias sensore
|
||||
# $2 tipologia dello stato
|
||||
# $3 stato da imopostare
|
||||
#
|
||||
function sensor_status_set {
|
||||
sensor_alias2number $1
|
||||
i=$?
|
||||
sensor_set_state $i $2 $3
|
||||
mqtt_status
|
||||
}
|
||||
|
||||
#
|
||||
# Stampa la lista degli alias dei sensori
|
||||
#
|
||||
function list_alias_sensor {
|
||||
|
||||
for i in $(seq $SENSOR_TOTAL)
|
||||
do
|
||||
local a=SENSOR"$i"_ALIAS
|
||||
local al=${!a}
|
||||
echo $al
|
||||
done
|
||||
|
||||
}
|
||||
|
||||
#
|
||||
# Stampa lo stato di tutti i sensori in formato json
|
||||
#
|
||||
function json_sensor_status_all {
|
||||
local js=""
|
||||
local js_item=""
|
||||
local js_type=""
|
||||
|
||||
for i in $(seq $SENSOR_TOTAL)
|
||||
do
|
||||
a=SENSOR"$i"_ALIAS
|
||||
av=${!a}
|
||||
|
||||
js_type=""
|
||||
for t in $SENSOR_STATE_TYPE
|
||||
do
|
||||
local state=$(sensor_get_state $i $t)
|
||||
js_type="$js_type \"$t\": \"$state\", "
|
||||
done
|
||||
js_type="${js_type::-2}"
|
||||
js_item="$js_item \"$av\":{$js_type}, ";
|
||||
done
|
||||
|
||||
if [[ ! -z $js_item ]]; then
|
||||
js_item="${js_item::-2}"
|
||||
fi
|
||||
|
||||
js="\"sensor\": {$js_item}"
|
||||
echo $js
|
||||
}
|
||||
|
||||
#
|
||||
# Controlla se la zona comandata da un elettrovalvola ha raggiunto l'umidità necessaria per non fare partire l'irrigazione,
|
||||
# faerla chiudere in caso di pioggia.
|
||||
# Se è stata superata l'umidità indicata in EVx_SENSOR_MOISTURE ritorna l'umidità attuale del sensore relativo all'elettrovalvola
|
||||
# in caso contrario ritorna 0, se no è impostato il parametro EV_xSENSOR_ALIAS o EVxSENSOR?MOISTURE ritorna il valore -1
|
||||
#
|
||||
# $1 numero elettrovalvola da controllare
|
||||
#
|
||||
function ev_check_moisture {
|
||||
|
||||
local s=EV"$1"_SENSOR_ALIAS
|
||||
local sa=${!s}
|
||||
|
||||
if [[ -z $sa ]]; then
|
||||
echo -1
|
||||
return
|
||||
fi
|
||||
|
||||
local moisture=$(sensor_status $sa moisture)
|
||||
|
||||
local s=EV"$1"_SENSOR_MOISTURE
|
||||
local max_moisture=${!s}
|
||||
|
||||
if [ -z $max_moisture ]; then
|
||||
echo -1
|
||||
return
|
||||
fi
|
||||
|
||||
if [ $moisture -gt $max_moisture ]; then
|
||||
log_write "sensor" "info" "ev_check_moisture_autoclose: humidity of the \"$sa\" sensor reached: $moisture%"
|
||||
echo $moisture
|
||||
return $moisture
|
||||
fi
|
||||
|
||||
echo 0
|
||||
return 0
|
||||
}
|
||||
|
||||
#
|
||||
# Controlla se la zona comandata da un elettrovalvola ha raggiunto l'umidità necessaria per essere chiusa in automatico
|
||||
# Se è stata superata l'umidità indicata in EVx_SENSOR_MOISTURE ritorna l'umidità attuale del sensore relativo all'elettrovalvola
|
||||
# in caso contrario ritorna 0, se no è impostato il parametro EV_xSENSOR_ALIAS, EVxSENSOR_MOISTURE o
|
||||
# EVxSENSOR_MOISTURE_AUTOCLOSE ritorna il valore -1
|
||||
#
|
||||
# $1 numero elettrovalvola da controllare
|
||||
#
|
||||
function ev_check_moisture_autoclose {
|
||||
|
||||
local s=EV"$1"_SENSOR_ALIAS
|
||||
local sa=${!s}
|
||||
|
||||
if [[ -z $sa ]]; then
|
||||
echo -1
|
||||
return
|
||||
fi
|
||||
|
||||
local moisture=$(sensor_status $sa moisture)
|
||||
|
||||
local s=EV"$1"_SENSOR_MOISTURE
|
||||
local max_moisture=${!s}
|
||||
|
||||
if [ -z $max_moisture ]; then
|
||||
echo -1
|
||||
return
|
||||
fi
|
||||
|
||||
local s=EV"$1"_SENSOR_MOISTURE_AUTOCLOSE
|
||||
local autoclose=${!s}
|
||||
|
||||
if [ -z $autoclose ]; then
|
||||
echo -1
|
||||
return
|
||||
fi
|
||||
|
||||
if [ $autoclose -ne 1 ]; then
|
||||
echo -1
|
||||
return
|
||||
fi
|
||||
|
||||
if [ $moisture -gt $max_moisture ]; then
|
||||
log_write "sensor" "info" "ev_check_moisture_autoclose: humidity of the \"$sa\" sensor reached: $moisture%"
|
||||
echo $moisture
|
||||
return $moisture
|
||||
fi
|
||||
|
||||
echo 0
|
||||
return 0
|
||||
}
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@ function stop_socket_server {
|
||||
exit 1
|
||||
fi
|
||||
|
||||
log_write "stop socket server"
|
||||
log_write "socket_server" "info" "stop socket server"
|
||||
|
||||
kill -9 $(list_descendants `cat "$TCPSERVER_PID_FILE"`) 2> /dev/null
|
||||
kill -9 `cat "$TCPSERVER_PID_FILE"` 2> /dev/null
|
||||
@@ -44,7 +44,7 @@ function socket_server_command {
|
||||
user=$(echo "$user" | $TR -d '[\r\n]')
|
||||
password=$(echo "$password" | $TR -d '[\r\n]')
|
||||
if [ "$user" != "$TCPSERVER_USER" ] || [ "$password" != "$TCPSERVER_PWD" ]; then
|
||||
log_write "socket connection from: $TCPREMOTEIP - Bad socket server credentials - user:$user"
|
||||
log_write "socket_server" "warning" "socket connection from: $TCPREMOTEIP - Bad socket server credentials - user:$user"
|
||||
json_error 0 "Bad socket server credentials"
|
||||
return
|
||||
fi
|
||||
@@ -61,7 +61,7 @@ function socket_server_command {
|
||||
arg7=$(echo "$line " | $CUT -d ' ' -f7)
|
||||
arg8=$(echo "$line " | $CUT -d ' ' -f8)
|
||||
|
||||
log_write "socket connection from: $TCPREMOTEIP - command: $arg1 $arg2 $arg3 $arg4 $arg5 $arg6 $arg7 $arg8"
|
||||
log_write "socket_server" "info" "socket connection from: $TCPREMOTEIP - command: $arg1 $arg2 $arg3 $arg4 $arg5 $arg6 $arg7 $arg8"
|
||||
|
||||
#reset_messages &> /dev/null
|
||||
|
||||
@@ -102,6 +102,12 @@ function socket_server_command {
|
||||
json_status
|
||||
;;
|
||||
|
||||
cron_enable_all_open_close)
|
||||
cron_enable_all_open_close &> /dev/null
|
||||
message_write "success" "All solenoid enabled"
|
||||
json_status
|
||||
;;
|
||||
|
||||
set_general_cron)
|
||||
local vret=""
|
||||
for i in $arg2 $arg3 $arg4 $arg5 $arg6 $arg7
|
||||
@@ -121,7 +127,7 @@ function socket_server_command {
|
||||
|
||||
if [[ ! -z $vret ]]; then
|
||||
json_error 0 "Cron set failed"
|
||||
log_write "Cron set failed: $vret"
|
||||
log_write "socket_server" "error" "Cron set failed: $vret"
|
||||
else
|
||||
message_write "success" "Cron set successfull"
|
||||
json_status
|
||||
@@ -136,7 +142,7 @@ function socket_server_command {
|
||||
|
||||
if [[ ! -z $vret ]]; then
|
||||
json_error 0 "Cron set failed"
|
||||
log_write "Cron del failed: $vret"
|
||||
log_write "socket_server" "error" "Cron del failed: $vret"
|
||||
else
|
||||
message_write "success" "Cron set successfull"
|
||||
json_status
|
||||
@@ -151,7 +157,7 @@ function socket_server_command {
|
||||
|
||||
if [[ ! -z $vret ]]; then
|
||||
json_error 0 "Cron del failed"
|
||||
log_write "Cron del failed: $vret"
|
||||
log_write "socket_server" "error" "Cron del failed: $vret"
|
||||
else
|
||||
message_write "success" "Scheduled start successfully deleted"
|
||||
json_status "get_cron_open_in:$arg2"
|
||||
@@ -167,7 +173,7 @@ function socket_server_command {
|
||||
|
||||
if [[ ! -z $vret ]]; then
|
||||
json_error 0 "Cron set failed"
|
||||
log_write "Cron set failed: $vret"
|
||||
log_write "socket_server" "error" "Cron set failed: $vret"
|
||||
else
|
||||
message_write "success" "Cron set successfull"
|
||||
json_status
|
||||
@@ -182,7 +188,7 @@ function socket_server_command {
|
||||
|
||||
if [[ ! -z $vret ]]; then
|
||||
json_error 0 "Cron set failed"
|
||||
log_write "Cron set failed: $vret"
|
||||
log_write "socket_server" "error" "Cron set failed: $vret"
|
||||
else
|
||||
message_write "success" "Cron set successfull"
|
||||
json_status
|
||||
@@ -197,7 +203,7 @@ function socket_server_command {
|
||||
|
||||
if [[ ! -z $vret ]]; then
|
||||
json_error 0 "Cron set failed"
|
||||
log_write "Cron set failed: $vret"
|
||||
log_write "socket_server" "error" "Cron set failed: $vret"
|
||||
else
|
||||
message_write "success" "Cron set successfull"
|
||||
json_status
|
||||
@@ -205,6 +211,21 @@ function socket_server_command {
|
||||
|
||||
;;
|
||||
|
||||
cmd_pigardensched)
|
||||
local vret=""
|
||||
|
||||
vret=`cmd_pigardensched $arg2 $arg3 $arg4 $arg5 $arg6`
|
||||
|
||||
if [[ ! -z $vret ]]; then
|
||||
json_error 0 "piGardenSched command failed"
|
||||
log_write "socket_server" "error" "piGardenSched command failed: $vret"
|
||||
else
|
||||
message_write "success" "Schedule set successfull"
|
||||
json_status
|
||||
fi
|
||||
|
||||
;;
|
||||
|
||||
reboot)
|
||||
message_write "warning" "System reboot is started"
|
||||
json_status
|
||||
@@ -219,6 +240,27 @@ function socket_server_command {
|
||||
nohup $PATH_SCRIPT poweroff > /dev/null 2>&1 &
|
||||
;;
|
||||
|
||||
reset_last_rain_sensor_timestamp)
|
||||
reset_last_rain_sensor_timestamp
|
||||
message_write "success" "Timestamp of last sensor rain successfull reset"
|
||||
json_status
|
||||
;;
|
||||
|
||||
reset_last_rain_online_timestamp)
|
||||
reset_last_rain_online_timestamp
|
||||
message_write "success" "Timestamp of last online rain successfull reset"
|
||||
json_status
|
||||
;;
|
||||
|
||||
sensor_status_set)
|
||||
if [ "empty$arg2" == "empty" ]; then
|
||||
json_error 0 "Alias sensor not specified"
|
||||
else
|
||||
sensor_status_set $arg2 $arg3 $arg4 &> /dev/null
|
||||
json_status
|
||||
fi
|
||||
;;
|
||||
|
||||
*)
|
||||
json_error 0 "invalid command"
|
||||
;;
|
||||
|
||||
279
piGarden.sh
279
piGarden.sh
@@ -10,7 +10,7 @@
|
||||
#
|
||||
function initialize {
|
||||
|
||||
log_write "Run initialize"
|
||||
log_write "general" "info" "Run initialize"
|
||||
|
||||
unlock
|
||||
|
||||
@@ -50,13 +50,13 @@ function initialize {
|
||||
# Inizializza il sensore di rilevamento pioggia
|
||||
if [ -n "$RAIN_GPIO" ]; then
|
||||
drv_rain_sensor_init "$RAIN_GPIO"
|
||||
log_write "Rain sensor initialized"
|
||||
log_write "rain" "info" "Rain sensor initialized"
|
||||
else
|
||||
log_write "Rain sensor not present"
|
||||
log_write "rain" "info" "Rain sensor not present"
|
||||
fi
|
||||
|
||||
trigger_event "init_after" ""
|
||||
log_write "End initialize"
|
||||
log_write "general" "info" "End initialize"
|
||||
|
||||
}
|
||||
|
||||
@@ -88,35 +88,48 @@ function ev_open {
|
||||
local EV_IS_MONOSTABLE_VAR=EV"$EVNUM"_MONOSTABLE
|
||||
local EV_IS_MONOSTABLE=${!EV_IS_MONOSTABLE_VAR}
|
||||
|
||||
if [ ! "$2" = "force" ] && [ "$EVNORAIN" != "1" ]; then
|
||||
if [[ "$NOT_IRRIGATE_IF_RAIN_ONLINE" -gt 0 && -f $STATUS_DIR/last_rain_online ]]; then
|
||||
local last_rain=`cat $STATUS_DIR/last_rain_online`
|
||||
local now=`date +%s`
|
||||
local dif=0
|
||||
let "dif = now - last_rain"
|
||||
if [ $dif -lt $NOT_IRRIGATE_IF_RAIN_ONLINE ]; then
|
||||
message_write "warning" "Solenoid not open for rain"
|
||||
trigger_event "ev_not_open_for_rain_online" "$1"
|
||||
trigger_event "ev_not_open_for_rain" "$1"
|
||||
log_write "Solenoid '$1' not open for rain (online check)"
|
||||
return
|
||||
if [ ! "$2" = "force" ]; then
|
||||
|
||||
local moisture=$(ev_check_moisture $EVNUM)
|
||||
if [ $moisture -gt 0 ]; then
|
||||
message_write "warning" "solenoid not open because maximum soil moisture has been reached"
|
||||
trigger_event "ev_not_open_for_moisture" "$1"
|
||||
log_write "irrigate" "warning" "Solenoid '$1' not open because maximum soil moisture has been reached"
|
||||
return
|
||||
fi
|
||||
|
||||
if [ "$EVNORAIN" != "1" ]; then
|
||||
|
||||
if [[ "$NOT_IRRIGATE_IF_RAIN_ONLINE" -gt 0 && -f $STATUS_DIR/last_rain_online ]]; then
|
||||
local last_rain=`cat $STATUS_DIR/last_rain_online`
|
||||
local now=`date +%s`
|
||||
local dif=0
|
||||
let "dif = now - last_rain"
|
||||
if [ $dif -lt $NOT_IRRIGATE_IF_RAIN_ONLINE ] && [ $moisture -ne 0 ]; then
|
||||
message_write "warning" "Solenoid not open for rain"
|
||||
trigger_event "ev_not_open_for_rain_online" "$1"
|
||||
trigger_event "ev_not_open_for_rain" "$1"
|
||||
log_write "irrigate" "warning" "Solenoid '$1' not open for rain (online check)"
|
||||
return
|
||||
fi
|
||||
fi
|
||||
|
||||
check_rain_sensor
|
||||
if [[ "$NOT_IRRIGATE_IF_RAIN_SENSOR" -gt 0 && -f $STATUS_DIR/last_rain_sensor && $moisture -ne 0 ]]; then
|
||||
local last_rain=`cat $STATUS_DIR/last_rain_sensor`
|
||||
local now=`date +%s`
|
||||
local dif=0
|
||||
let "dif = now - last_rain"
|
||||
if [ $dif -lt $NOT_IRRIGATE_IF_RAIN_SENSOR ]; then
|
||||
message_write "warning" "Solenoid not open for rain"
|
||||
trigger_event "ev_not_open_for_rain_sensor" "$1"
|
||||
trigger_event "ev_not_open_for_rain" "$1"
|
||||
log_write "irrigate" "warning" "Solenoid '$1' not open for rain (sensor check)"
|
||||
return
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
check_rain_sensor
|
||||
if [[ "$NOT_IRRIGATE_IF_RAIN_SENSOR" -gt 0 && -f $STATUS_DIR/last_rain_sensor ]]; then
|
||||
local last_rain=`cat $STATUS_DIR/last_rain_sensor`
|
||||
local now=`date +%s`
|
||||
local dif=0
|
||||
let "dif = now - last_rain"
|
||||
if [ $dif -lt $NOT_IRRIGATE_IF_RAIN_SENSOR ]; then
|
||||
message_write "warning" "Solenoid not open for rain"
|
||||
trigger_event "ev_not_open_for_rain_sensor" "$1"
|
||||
trigger_event "ev_not_open_for_rain" "$1"
|
||||
log_write "Solenoid '$1' not open for rain (sensor check)"
|
||||
return
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
local state=1
|
||||
@@ -126,7 +139,7 @@ function ev_open {
|
||||
|
||||
trigger_event "ev_open_before" "$1" "$2"
|
||||
if [ $? -ne 0 ]; then
|
||||
log_write "Solenoid '$1' not open due to external event"
|
||||
log_write "irrigate" "warning" "Solenoid '$1' not open due to external event"
|
||||
message_write 'warning' "Solenoid not open due to external event"
|
||||
mqtt_status
|
||||
return
|
||||
@@ -150,7 +163,7 @@ function ev_open {
|
||||
|
||||
ev_set_state $EVNUM $state
|
||||
|
||||
log_write "Solenoid '$1' open"
|
||||
log_write "irrigate" "info" "Solenoid '$1' open"
|
||||
message_write "success" "Solenoid open"
|
||||
|
||||
trigger_event "ev_open_after" "$1" "$2"
|
||||
@@ -223,9 +236,6 @@ function ev_open_in {
|
||||
|
||||
trigger_event "ev_open_in_after" "$3" "$4" "$cron_start" "$cron_stop"
|
||||
|
||||
#echo $cron_start
|
||||
#echo $cron_stop
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -262,7 +272,7 @@ function ev_close {
|
||||
|
||||
ev_set_state $EVNUM 0
|
||||
|
||||
log_write "Solenoid '$1' close"
|
||||
log_write "irrigate" "info" "Solenoid '$1' close"
|
||||
message_write "success" "Solenoid close"
|
||||
|
||||
trigger_event "ev_close_after" "$1"
|
||||
@@ -288,7 +298,9 @@ function supply_negative {
|
||||
|
||||
#
|
||||
# Scrive un messaggio nel file di log
|
||||
# $1 log da scrivere
|
||||
# $1 type
|
||||
# $2 level
|
||||
# $3 log da scrivere
|
||||
#
|
||||
function log_write {
|
||||
if [ -e "$LOG_FILE" ]; then
|
||||
@@ -299,7 +311,33 @@ function log_write {
|
||||
fi
|
||||
fi
|
||||
|
||||
echo -e "`date`\t\t$1" >> $LOG_FILE
|
||||
if [ -e "$LOG_OUTPUT_DRV_FILE" ]; then
|
||||
local actualsize=$($WC -c <"$LOG_OUTPUT_DRV_FILE")
|
||||
if [ $actualsize -ge $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
|
||||
|
||||
echo -e "`date`\t\t$1\t$2\t$3" >> $LOG_FILE
|
||||
|
||||
log_send "$1" "$2" "`date '+%Y-%m-%d %H:%M:%S'`" "$3"
|
||||
|
||||
}
|
||||
|
||||
#
|
||||
# Invia un log verso piGardenWeb
|
||||
# $1 type
|
||||
# $2 level
|
||||
# $3 date time
|
||||
# $4 messaggio
|
||||
#
|
||||
function log_send {
|
||||
|
||||
if [[ ! -z "$LOG_URL" ]]; then
|
||||
$CURL $LOG_CURL_PARAM "$LOG_URL" -d "api_token=$LOG_API_TOKEN&type=$1&level=$2&datetime_log=$3&message=$4" &> /dev/null &
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
#
|
||||
@@ -368,7 +406,7 @@ function gpio_alias2number {
|
||||
fi
|
||||
done
|
||||
|
||||
log_write "ERROR solenoid alias not found: $1"
|
||||
log_write "general" "error" "ERROR solenoid alias not found: $1"
|
||||
message_write "warning" "Solenoid alias not found"
|
||||
mqtt_status
|
||||
exit 1
|
||||
@@ -388,7 +426,7 @@ function ev_alias2number {
|
||||
fi
|
||||
done
|
||||
|
||||
log_write "ERROR solenoid alias not found: $1"
|
||||
log_write "general" "error" "ERROR solenoid alias not found: $1"
|
||||
message_write "warning" "Solenoid alias not found"
|
||||
mqtt_status
|
||||
exit 1
|
||||
@@ -475,7 +513,7 @@ function close_all {
|
||||
#echo "$al = $state"
|
||||
if [[ "$state" -gt "0" || "$1" = "force" ]]; then
|
||||
ev_close $al
|
||||
log_write "close_all - Close solenoid '$al' for rain"
|
||||
log_write "irrigate" "info" "close_all - Close solenoid '$al' for rain"
|
||||
fi
|
||||
done
|
||||
|
||||
@@ -498,8 +536,9 @@ function list_alias {
|
||||
#
|
||||
# Stampa un json contanente lo status della centralina
|
||||
# $1 .. $6 parametri opzionali
|
||||
# - get_cron: aggiunge i dati relativi ai crontab delle scehdulazioni di apertura/chisura delle elettrovalvole
|
||||
# - get_cron: aggiunge i dati relativi ai crontab delle scehdulazioni di apertura/chisura
|
||||
# - get_cron_open_in: aggiunge i dati relativi ai crontab degli avvii ritardati eseguiti con il comando open_in
|
||||
# - get_schedule: aggiunge i dati relativi alle schedulazioni di piGardenSched
|
||||
#
|
||||
function json_status {
|
||||
local json=""
|
||||
@@ -513,6 +552,7 @@ function json_status {
|
||||
local last_success=""
|
||||
local with_get_cron="0"
|
||||
local with_get_cron_open_in="0"
|
||||
local with_get_schedule="0"
|
||||
local current_pid=$!
|
||||
local json_event="\"event\": {\"event\": \"$CURRENT_EVENT\", \"alias\": \"$CURRENT_EVENT_ALIAS\"}"
|
||||
|
||||
@@ -531,9 +571,12 @@ function json_status {
|
||||
with_get_cron_open_in="1"
|
||||
elif [[ "$i" == get_cron_open_in:* ]]; then
|
||||
with_get_cron_open_in="${i#get_cron_open_in:}"
|
||||
elif [ $i = "get_schedule" ] && [[ $PIGARDENSCHED == "1" ]]; then
|
||||
with_get_schedule="1"
|
||||
fi
|
||||
done
|
||||
|
||||
local json_ev=""
|
||||
for i in $(seq $EV_TOTAL)
|
||||
do
|
||||
local a=EV"$i"_ALIAS
|
||||
@@ -543,10 +586,14 @@ function json_status {
|
||||
if [ -n "$json" ]; then
|
||||
json="$json,"
|
||||
fi
|
||||
#json="$json\"$i\":{\"name\":\"$av\",\"state\":$sv}"
|
||||
json="$json\"$av\":{\"name\":\"$av\",\"state\":$sv}"
|
||||
|
||||
if [ -n "$json_ev" ]; then
|
||||
json_ev="$json_ev,"
|
||||
fi
|
||||
json_ev="$json_ev\"$a\":{\"alias\":\"$av\"}"
|
||||
done
|
||||
json="\"zones\":{$json}"
|
||||
json="\"zones\":{$json},\"ev\":{$json_ev}"
|
||||
|
||||
local last_rain_sensor=`cat "$STATUS_DIR/last_rain_sensor" 2> /dev/null`
|
||||
local last_rain_online=`cat "$STATUS_DIR/last_rain_online" 2> /dev/null`
|
||||
@@ -555,15 +602,7 @@ function json_status {
|
||||
if [[ ! -z "$last_weather_online" ]]; then
|
||||
json_last_weather_online=$last_weather_online
|
||||
fi
|
||||
#if [ -f "$LAST_INFO_FILE.$current_pid" ]; then
|
||||
# last_info=`cat "$LAST_INFO_FILE.$current_pid"`
|
||||
#fi
|
||||
#if [ -f "$LAST_WARNING_FILE.$current_pid" ]; then
|
||||
# last_warning=`cat "$LAST_WARNING_FILE.$current_pid"`
|
||||
#fi
|
||||
#if [ -f "$LAST_SUCCESS_FILE.$current_pid" ]; then
|
||||
# last_success=`cat "$LAST_SUCCESS_FILE.$current_pid"`
|
||||
#fi
|
||||
|
||||
last_info="$MESSAGE_INFO"
|
||||
last_warning="$MESSAGE_WARNING"
|
||||
last_success="$MESSAGE_SUCCESS"
|
||||
@@ -607,6 +646,24 @@ function json_status {
|
||||
fi
|
||||
local json_cron="\"cron\":{$json_get_cron}"
|
||||
|
||||
local json_get_schedule=""
|
||||
local json_schedule=""
|
||||
if [ $with_get_schedule != "0" ]; then
|
||||
json_get_schedule=""
|
||||
for scheduled in `$PIGARDENSCHED_PATH sched`
|
||||
do
|
||||
local ev=$(echo $scheduled|$CUT -f1 -d";")
|
||||
local evcomplete="$ev"_ALIAS
|
||||
local al=${!evcomplete}
|
||||
local json_get_schedule="\"$ev\": {\"alias\": \"$al\", \"entry\": \"$scheduled\"}, $json_get_schedule"
|
||||
done
|
||||
if [[ ! -z $json_get_schedule ]]; then
|
||||
json_get_schedule="${json_get_schedule::-2}"
|
||||
fi
|
||||
|
||||
local json_schedule=", \"schedule\":{$json_get_schedule}"
|
||||
fi
|
||||
|
||||
local json_get_cron_open_in=""
|
||||
if [ $with_get_cron_open_in != "0" ]; then
|
||||
local values_open_in=""
|
||||
@@ -640,8 +697,9 @@ function json_status {
|
||||
fi
|
||||
local json_cron_open_in="\"cron_open_in\":{$json_get_cron_open_in}"
|
||||
local json_timestamp="\"timestamp\": $(date +%s)"
|
||||
local json_sensor="$(json_sensor_status_all)"
|
||||
|
||||
json="{$json_version,$json_timestamp,$json_event,$json,$json_last_weather_online,$json_error,$json_last_info,$json_last_warning,$json_last_success,$json_last_rain_online,$json_last_rain_sensor,$json_cron,$json_cron_open_in}"
|
||||
json="{$json_version,$json_timestamp,$json_event,$json,$json_sensor,$json_last_weather_online,$json_error,$json_last_info,$json_last_warning,$json_last_success,$json_last_rain_online,$json_last_rain_sensor,$json_cron,$json_cron_open_in $json_schedule}"
|
||||
|
||||
echo "$json"
|
||||
|
||||
@@ -683,10 +741,25 @@ function show_usage {
|
||||
echo -e "\t$NAME_SCRIPT list_alias view list of aliases solenoid"
|
||||
echo -e "\t$NAME_SCRIPT ev_status alias show status solenoid"
|
||||
echo -e "\t$NAME_SCRIPT ev_status_all show status solenoids"
|
||||
echo -e "\t$NAME_SCRIPT json_status [get_cron|get_cron_open_in] show status in json format"
|
||||
|
||||
echo -e "\n"
|
||||
echo -e "\t$NAME_SCRIPT list_alias_sensor view list of aliases sensor"
|
||||
echo -e "\t$NAME_SCRIPT sensor_status alias [type] show status sensor (type: $SENSOR_STATE_TYPE)"
|
||||
echo -e "\t$NAME_SCRIPT sensor_status_set alias type value set status of sensor (type: $SENSOR_STATE_TYPE)"
|
||||
echo -e "\t$NAME_SCRIPT sensor_status_all show status of all sensors"
|
||||
|
||||
echo -e "\n"
|
||||
echo -e "\t$NAME_SCRIPT last_rain_sensor_timestamp show timestamp of last rain sensor"
|
||||
echo -e "\t$NAME_SCRIPT last_rain_online_timestamp show timestamp of last rain online"
|
||||
echo -e "\t$NAME_SCRIPT reset_last_rain_sensor_timestamp show timestamp of last rain sensor"
|
||||
echo -e "\t$NAME_SCRIPT reset_last_rain_online_timestamp show timestamp of last rain online"
|
||||
echo -e "\n"
|
||||
echo -e "\t$NAME_SCRIPT json_status [get_cron|get_cron_open_in|get_schedule] show status in json format"
|
||||
echo -e "\t$NAME_SCRIPT mqtt_status send status in json format to mqtt broker"
|
||||
echo -e "\t$NAME_SCRIPT check_rain_online check rain from http://api.wunderground.com/"
|
||||
echo -e "\n"
|
||||
echo -e "\t$NAME_SCRIPT check_rain_online check rain from online api service"
|
||||
echo -e "\t$NAME_SCRIPT check_rain_sensor check rain from hardware sensor"
|
||||
echo -e "\n"
|
||||
echo -e "\t$NAME_SCRIPT close_all_for_rain close all solenoid if it's raining"
|
||||
echo -e "\t$NAME_SCRIPT close_all [force] close all solenoid"
|
||||
echo -e "\n"
|
||||
@@ -715,6 +788,8 @@ function show_usage {
|
||||
echo -e "\t$NAME_SCRIPT del_cron_close alias remove all crontab for close a solenoid"
|
||||
echo -e "\t$NAME_SCRIPT get_cron_close alias get all crontab for close a solenoid"
|
||||
echo -e "\n"
|
||||
echo -e "\t$NAME_SCRIPT cmd_pigardensched [prm1 [prm2 [prm3]...]] performs a pigardensched command"
|
||||
echo -e "\n"
|
||||
echo -e "\t$NAME_SCRIPT debug1 [parameter]|[parameter]|..] Run debug code 1"
|
||||
echo -e "\t$NAME_SCRIPT debug2 [parameter]|[parameter]|..] Run debug code 2"
|
||||
}
|
||||
@@ -753,12 +828,12 @@ function lock {
|
||||
local foo=bar
|
||||
else
|
||||
if [ "$current_time" -gt "$max_time" ]; then
|
||||
log_write "Maximum locked time reached"
|
||||
log_write "general" "error" "Maximum locked time reached"
|
||||
sleep $max_time
|
||||
unlock
|
||||
exit 1
|
||||
fi
|
||||
log_write "Sleep 1 second for locked state"
|
||||
log_write "general" "info" "Sleep 1 second for locked state"
|
||||
sleep 1
|
||||
lock $current_time
|
||||
return
|
||||
@@ -807,7 +882,7 @@ function send_identifier {
|
||||
fi
|
||||
echo "$ID" > "$FILE_ID"
|
||||
|
||||
log_write "Send installation identifier to collect usage"
|
||||
log_write "general" "info" "Send installation identifier to collect usage"
|
||||
|
||||
$CURL https://www.lejubila.net/statistic/collect_usage/piGarden/$ID/$VERSION/$SUB_VERSION/$RELEASE_VERSION > /dev/null 2>&1
|
||||
|
||||
@@ -835,6 +910,31 @@ function exec_reboot {
|
||||
trigger_event "exec_reboot_after"
|
||||
}
|
||||
|
||||
#
|
||||
# Esegue un comando con piGardenSched
|
||||
#
|
||||
# $1 parametro 1
|
||||
# $2 parametro 2
|
||||
# $3 parametro 3
|
||||
# $4 parametro 4
|
||||
# $5 parametro 5
|
||||
|
||||
function cmd_pigardensched {
|
||||
local foo="bar"
|
||||
|
||||
if [ $PIGARDENSCHED == 0 ]; then
|
||||
echo "piGardenSched not configured in piGarden" >&2
|
||||
log_write "piGardenSched" "error" "piGardenSched not configured in piGarden"
|
||||
return
|
||||
fi
|
||||
|
||||
$PIGARDENSCHED_PATH $1 $2 $3 $4 $5
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "piGardenSched command failed"
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
#
|
||||
# Converte da gradi a direzione
|
||||
@@ -932,8 +1032,8 @@ function debug2 {
|
||||
}
|
||||
|
||||
VERSION=0
|
||||
SUB_VERSION=5
|
||||
RELEASE_VERSION=12
|
||||
SUB_VERSION=6
|
||||
RELEASE_VERSION=4
|
||||
|
||||
DIR_SCRIPT=`dirname $0`
|
||||
NAME_SCRIPT=${0##*/}
|
||||
@@ -959,11 +1059,9 @@ fi
|
||||
. "$DIR_SCRIPT/include/cron.include.sh"
|
||||
. "$DIR_SCRIPT/include/socket.include.sh"
|
||||
. "$DIR_SCRIPT/include/rain.include.sh"
|
||||
. "$DIR_SCRIPT/include/sensor.include.sh"
|
||||
. "$DIR_SCRIPT/include/events.include.sh"
|
||||
|
||||
#LAST_INFO_FILE="$STATUS_DIR/last_info"
|
||||
#LAST_WARNING_FILE="$STATUS_DIR/last_warning"
|
||||
#LAST_SUCCESS_FILE="$STATUS_DIR/last_success"
|
||||
MESSAGE_INFO=""
|
||||
MESSAGE_WARNING=""
|
||||
MESSAGE_SUCCESS=""
|
||||
@@ -971,8 +1069,14 @@ MESSAGE_SUCCESS=""
|
||||
CURRENT_EVENT=""
|
||||
CURRENT_EVENT_ALIAS=""
|
||||
|
||||
SENSOR_STATE_TYPE="moisture temperature fertility illuminance"
|
||||
|
||||
PARENT_PID=0
|
||||
|
||||
if [ -z $SENSOR_TOTAL ]; then
|
||||
SENSOR_TOTAL=0
|
||||
fi
|
||||
|
||||
if [ -z $LOG_OUTPUT_DRV_FILE ]; then
|
||||
LOG_OUTPUT_DRV_FILE="/dev/null"
|
||||
fi
|
||||
@@ -987,6 +1091,11 @@ elif [ "$WEATHER_SERVICE" != "none" ]; then
|
||||
WEATHER_SERVICE="drv:$WEATHER_SERVICE"
|
||||
fi
|
||||
|
||||
PIGARDENSCHED="0"
|
||||
if [[ -x "$PIGARDENSCHED_PATH" ]]; then
|
||||
PIGARDENSCHED="1"
|
||||
fi
|
||||
|
||||
# Elimina il file di lock se più vecchio di 11 secondi
|
||||
if [ -f "$LOCK_FILE" ]; then
|
||||
max_age_lock_file=11
|
||||
@@ -1038,6 +1147,26 @@ case "$1" in
|
||||
ev_status_all
|
||||
;;
|
||||
|
||||
list_alias_sensor)
|
||||
list_alias_sensor
|
||||
;;
|
||||
|
||||
sensor_status)
|
||||
sensor_status $2 $3
|
||||
;;
|
||||
|
||||
sensor_status_all)
|
||||
sensor_status_all
|
||||
;;
|
||||
|
||||
sensor_status_set)
|
||||
sensor_status_set $2 $3 $4
|
||||
;;
|
||||
|
||||
json_sensor_status_all)
|
||||
json_sensor_status_all
|
||||
;;
|
||||
|
||||
json_status)
|
||||
json_status $2 $3 $4 $5 $6
|
||||
;;
|
||||
@@ -1046,6 +1175,22 @@ case "$1" in
|
||||
mqtt_status $2
|
||||
;;
|
||||
|
||||
last_rain_sensor_timestamp)
|
||||
last_rain_sensor_timestamp
|
||||
;;
|
||||
|
||||
last_rain_online_timestamp)
|
||||
last_rain_online_timestamp
|
||||
;;
|
||||
|
||||
reset_last_rain_sensor_timestamp)
|
||||
reset_last_rain_sensor_timestamp
|
||||
;;
|
||||
|
||||
reset_last_rain_online_timestamp)
|
||||
reset_last_rain_online_timestamp
|
||||
;;
|
||||
|
||||
check_rain_online)
|
||||
check_rain_online
|
||||
;;
|
||||
@@ -1077,7 +1222,7 @@ case "$1" in
|
||||
nohup $0 start_socket_server_daemon > /dev/null 2>&1 &
|
||||
|
||||
echo "Daemon is started widh pid $!"
|
||||
log_write "start socket server with pid $!"
|
||||
log_write "socket_server" "info" "start socket server with pid $!"
|
||||
;;
|
||||
|
||||
start_socket_server_daemon)
|
||||
@@ -1159,6 +1304,10 @@ case "$1" in
|
||||
get_cron_close)
|
||||
get_cron_close $2
|
||||
;;
|
||||
|
||||
cmd_pigardensched)
|
||||
cmd_pigardensched $2 $3 $4 $5
|
||||
;;
|
||||
|
||||
reboot)
|
||||
exec_reboot
|
||||
|
||||
Reference in New Issue
Block a user