41 Commits

Author SHA1 Message Date
lejubila
6d4f522f21 Aggiunto changelog per nuova versione, e file di configurazione di esempio per il nuovo driver rainsensorqty 2019-08-12 08:40:55 +02:00
lejubila
51e4391237 Merge branch 'rainsensorqty' into develop 2019-08-12 08:26:28 +02:00
lejubila
e2eda96f2c Aggiornato driver rainsensorqty alla versione 0.2.0 2019-08-12 08:24:57 +02:00
lejubila
aa12f5a8a5 Aggiunto compressione file di log dei driver 2019-06-23 12:44:33 +02:00
lejubila
40ab2e3b25 Aggiunto implementazione driver rainsensorqty railizzato da @androtto 2018-12-09 12:49:09 +01:00
lejubila
40eb0b2429 Iniziato integrazione codice di @androtto nel driver rainsensorqty 2018-11-17 09:20:24 +01:00
lejubila
9d9ef42679 Aggiornato numero versione 2018-11-13 12:47:26 +01:00
lejubila
70c4e063f8 corretto bug su driver openweathermap che in alcuni casi causa una malformazione dello status json e impediva la comunicazione con piGardenWeb 2018-11-13 12:45:28 +01:00
lejubila
4d4b35c3cc corretto bug su driver openweathermap che in alcuni casi causa una malformazione dello status json e impediva la comunicazione con piGardenWeb 2018-11-13 12:43:26 +01:00
lejubila
71e91cc861 Corretto bug che impediva la pubblicazione del topic mqtt per ogni evento 2018-11-12 23:15:34 +01:00
David Bigagli
e26292fe36 Delete mqtt_status.sh 2018-11-11 23:39:22 +01:00
lejubila
d99566ef93 aggiunto scheletro driver rainsensorqty 2018-11-11 23:31:13 +01:00
lejubila
a76c797b22 Corretto nome variabile errata EV1_MONOSTAVLE nel file di configurazione 2018-11-11 15:34:28 +01:00
lejubila
07a594e799 aggiunto possibilità di disabilitare servizio meteo online 2018-11-11 11:57:59 +01:00
lejubila
dfa68c2b83 Implementato possibilità di disabilitare servizio meteo online impostando il valore none in WEATHER_SERVICE 2018-11-11 11:49:35 +01:00
lejubila
e284bbcb25 Fix bug in single monostable solenodid management caused from wrong variable name EV_IS_MONOSTAVLE 2018-11-11 11:14:28 +01:00
lejubila
d324faf8bb Fix bug in single monostable solenodid management caused from wrong variable name EV_IS_MONOSTAVLE 2018-11-11 10:13:21 +01:00
lejubila
383cbc44a9 Fix bug in single monostable solenodid management caused from wrong variable name EV_IS_MONOSTAVLE 2018-11-11 10:09:02 +01:00
lejubila
9864709b44 Cambiato changelog 2018-11-01 12:03:07 +01:00
lejubila
6d8c82f0a3 Modificato gestione di invio messaggi tramite socket server 2018-10-14 22:47:43 +02:00
lejubila
a997081aa9 Rimosso mqttconnector 2018-09-22 08:23:13 +02:00
lejubila
c145171306 Aggiunto nel json_status il tipo di evento attualmente triggerato 2018-09-22 08:20:54 +02:00
lejubila
e9a676188f Aggiunto supporto mqtt per la pubblicazione dello stato in formato json verso il broker 2018-09-20 10:53:40 +02:00
lejubila
0d748031fd variato file di configurazione di mqttconnector 2018-08-15 12:09:47 +02:00
lejubila
3ed46d80ad Merge branch 'master' of https://github.com/lejubila/piGarden 2018-07-18 23:10:29 +02:00
lejubila
05a73720bb Inserito data nel CHANGELOG prima della pubbilicazione della release, aggiunto prima implementazione sperimentale di mqttconnector 2018-07-18 23:08:16 +02:00
lejubila
2ea6588c32 Implementato controllo meteo su servizio online tramite driver, implementato driver per interfacciarsi con le api di openweathermap e wunderground 2018-07-15 23:18:59 +02:00
David Bigagli
fc717f18a2 Update README.md 2018-06-05 18:00:25 +02:00
David Bigagli
50117a5a96 Update README.md 2018-06-05 17:57:14 +02:00
David Bigagli
309c209b1b Update README.md 2018-06-05 17:56:35 +02:00
David Bigagli
9a81f0fbba Update README.md 2018-06-05 17:53:36 +02:00
lejubila
419695b420 Implementato driver subsistem per il controllo delle condizioni meteo tramite servizio online. Implementato driver 'wunderground' per il controllo meteo tramite il servizio wunderground 2018-06-05 16:31:45 +02:00
lejubila
3239006922 Modificato file README dei driver, variato numero di versione di piGarden 2018-06-01 22:16:26 +02:00
lejubila
24baa97dad Corretto nome di funzione nel driver sonoff_tasmota_http 2018-05-24 22:06:12 +02:00
lejubila
c354f72c0c Eseguito correzioni su driver sonoff_tasmota_http 2018-05-23 17:57:24 +02:00
lejubila
6f80b8ea21 Corretto problema parsing json su driver sonoff_tasmota_http 2018-05-22 12:53:57 +02:00
lejubila
87edbbbe7a Eseguito correzioni su driver sonoff_tasmota_http 2018-05-21 22:21:27 +02:00
lejubila
3eb45fd1e9 Aggiunto prima implementazione del driver sonoff_tesmota_http, aggiunto implementazione parametro EVx_MONOSTABLE per potere definire singolarmente le elettrovamvole monostabili, corretto alcuni commenti 2018-05-20 17:14:58 +02:00
lejubila
7c96a6afd1 Modificato output di notifiche eventi dello script rpinotify.sh, aggiornato CHANGELOG per nuova versione 2018-05-04 21:17:32 +02:00
lejubila
c664bea16a corretto timestamp su eventi ev_not_open_for_rain, ev_not_open_for_rain_online, ev_not_open_for_rain_sensor 2018-05-03 12:02:48 +02:00
lejubila
78fa176848 Implementato eventi events/ev_not_open_for_rain, events/ev_not_open_for_rain_sensor, events/ev_not_open_for_rain_online. Aggiornato script di invio mail notifiche 2018-05-03 11:45:47 +02:00
49 changed files with 1970 additions and 75 deletions

View File

@@ -1,3 +1,32 @@
# 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
# 0.5.11 - 11/11/2018
- Added ability to disable online weather service by defining WEATHER_SERVICE="none" in the configuration file
# 0.5.10 - 11/11/2018
- Fix bug in single monostable solenodid management caused from wrong variable name EV_IS_MONOSTAVLE
# 0.5.9 - 01/11/2018
- Added mqtt support for publishing status to broker
# 0.5.8 - 19/07/2018
- Added "openweathermap" driver for impement check weather condition from openweatermap api
# 0.5.7 - 01/06/2018
- Added "sonoff_tasmota_http" driver for interfacin with Sonoff module with Tasmota firmware over http protocol
# 0.5.6 - 04/05/2018
- Added events ev_not_open_for_rain, ev_not_open_for_rain_sensor, ev_not_open_for_rain_online
- Added script rpinotify.sh for notificate events to telegram
# 0.5.5 - 25/03/2018
- Added "remote" driver to control remote pigarden

View File

@@ -53,8 +53,13 @@ READLINK="/bin/readlink"
# Percorso stat
STAT="/usr/bin/stat"
# Percorso mosquito_pub
# # Installare con apt install mosquitto-clients
MOSQUITTO_PUB="/usr/bin/mosquitto_pub"
# Se impostato con il valore 1, indica che il sistema gestisce elettrovalvole monostabili,
# se impostato a 0 il sistema gestirà elettrovalvole bisstabili
# 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
@@ -90,6 +95,7 @@ EV_TOTAL=6
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
@@ -106,9 +112,21 @@ EV5_GPIO=23 # Physical 16 - wPi 4
EV6_ALIAS="6" #
EV6_GPIO=24 # Physical 18 - wPi 5
# Definisce l'api key e il luogo per recuperare lo stato meteo online
# 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="IY/Monsummano" # http://www.wunderground.com/weather/api/d/docs?d=resources/country-to-iso-matching&MR=1
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.
@@ -128,3 +146,12 @@ 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

View File

@@ -0,0 +1,163 @@
# Log file
LOG_FILE="/home/pi/piGarden/log/piGarden.log"
LOG_FILE_MAX_SIZE=1048576 # 1MB
# Log file for driver output
LOG_OUTPUT_DRV_FILE="/tmp/piGarden.drv.log"
# Status directory
STATUS_DIR="/home/pi/piGarden/state"
# Event directory
EVENT_DIR="/home/pi/piGarden/events"
# Posizione gpio
GPIO="/usr/local/bin/gpio"
# Posizione js
JQ="/usr/local/bin/jq"
# Percorso curl
CURL="/usr/bin/curl"
# Percorso wc
WC="/usr/bin/wc"
# Percorso gzip
GZIP="/bin/gzip"
# Percorso mv
MV="/bin/mv"
# Percorso di tr
TR="/usr/bin/tr"
# Percorso di cut
CUT="/usr/bin/cut"
# Percorso tcpserver
TCPSERVER="/usr/bin/tcpserver"
# Percorso cron
CRONTAB="/usr/bin/crontab"
# Percorso grep
GREP="/bin/grep"
# Percorsp sed
SED="/bin/sed"
# Percorso readlink
READLINK="/bin/readlink"
# Percorso stat
STAT="/usr/bin/stat"
# Percorso mosquito_pub
# # Installare con apt install mosquitto-clients
MOSQUITTO_PUB="/usr/bin/mosquitto_pub"
# Se impostato con il valore 1, indica che il sistema gestisce elettrovalvole monostabili,
# se impostato a 0 il sistema gestirà elettrovalvole bistabili
EV_MONOSTABLE=0
# Id gpio usati per simulare il doppio deviatore con cui eseguire l'alimentazione alle elettrovalvole
SUPPLY_GPIO_1=2 # Physical 3 - wPi 8
SUPPLY_GPIO_2=3 # Physical 5 - wPi 9
# Stato dei due gpio per impartire l'alimentazione positiva alle elettrovalvole (aperta)
SUPPLY_GPIO_POS=0
# Stato dei due gpio per impartire l'alimentazione negativa alle elettrovalvole (chiusa)
SUPPLY_GPIO_NEG=1
# Stato di ingresso da assegnare al gpio per chiudere il rele
RELE_GPIO_CLOSE=0
# Stato di ingresso da assegnare al gpio per aprire il rele
RELE_GPIO_OPEN=1
# Id del gpio usato per collegare il sensore di rilevamento pioggia
# 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

View File

@@ -53,6 +53,11 @@ READLINK="/bin/readlink"
# Percorso stat
STAT="/usr/bin/stat"
# Percorso mosquito_pub
# Installare con apt install mosquitto-clients
MOSQUITTO_PUB="/usr/bin/mosquitto_pub"
# Se impostato con il valore 1, indica che il sistema gestisce elettrovalvole monostabili,
# se impostato a 0 il sistema gestirà elettrovalvole bisstabili
EV_MONOSTABLE=0
@@ -100,11 +105,21 @@ EV4_ALIAS="Giardino_Posteriore_GPIO" #
EV4_GPIO="18"
# 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
# Definisce l'api key e il luogo per recuperare lo stato meteo online
# 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
@@ -123,6 +138,15 @@ 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
#
# Configurazione piGarden remoti

View File

@@ -0,0 +1,166 @@
# Log file
LOG_FILE="/home/pi/piGarden/log/piGarden.log"
LOG_FILE_MAX_SIZE=1048576 # 1MB
# Log file for driver output
#LOG_OUTPUT_DRV_FILE="/tmp/piGarden.drv.log"
# Status directory
STATUS_DIR="/home/pi/piGarden/state"
# Event directory
EVENT_DIR="/home/pi/piGarden/events"
# Posizione gpio
GPIO="/usr/local/bin/gpio"
# Posizione js
JQ="/usr/local/bin/jq"
# Percorso curl
CURL="/usr/bin/curl"
# Percorso wc
WC="/usr/bin/wc"
# Percorso gzip
GZIP="/bin/gzip"
# Percorso mv
MV="/bin/mv"
# Percorso di tr
TR="/usr/bin/tr"
# Percorso di cut
CUT="/usr/bin/cut"
# Percorso tcpserver
TCPSERVER="/usr/bin/tcpserver"
# Percorso cron
CRONTAB="/usr/bin/crontab"
# Percorso grep
GREP="/bin/grep"
# Percorsp sed
SED="/bin/sed"
# Percorso readlink
READLINK="/bin/readlink"
# Percorso stat
STAT="/usr/bin/stat"
# Percorso mosquito_pub
# # Installare con apt install mosquitto-clients
MOSQUITTO_PUB="/usr/bin/mosquitto_pub"
# Se impostato con il valore 1, indica che il sistema gestisce elettrovalvole monostabili,
# se impostato a 0 il sistema gestirà elettrovalvole bisstabili
EV_MONOSTABLE=0
# Id gpio usati per simulare il doppio deviatore con cui eseguire l'alimentazione alle elettrovalvole
SUPPLY_GPIO_1=2
SUPPLY_GPIO_2=3
# Stato dei due gpio per impartire l'alimentazione positiva alle elettrovalvole (aperta)
SUPPLY_GPIO_POS=0
# Stato dei due gpio per impartire l'alimentazione negativa alle elettrovalvole (chiusa)
SUPPLY_GPIO_NEG=1
# Stato di ingresso da assegnare al gpio per chiudere il rele
RELE_GPIO_CLOSE=0
# Stato di ingresso da assegnare al gpio per aprire il rele
RELE_GPIO_OPEN=1
# Id del gpio usato per collegare il sensore di rilevamento pioggia
RAIN_GPIO=25 # Physical 22 - wPi 6
# Valore in ingresso sul gpio definito in RAIN_GPIO che indica lo stato di pioggia
RAIN_GPIO_STATE=0
# Numero totale di elettrovalvole
EV_TOTAL=4
# Definizione delle elettrovalvole
EV1_ALIAS="Giardino_Posteriore_DX"
EV1_GPIO="drv:sonoff_tasmota_http:SONOFF1:Power1"
EV1_MONOSTABLE=1
EV2_ALIAS="Giardino_Posteriore_CN"
EV2_GPIO="drv:sonoff_tasmota_http:SONOFF1:Power2"
EV2_MONOSTABLE=1
EV3_ALIAS="Giardino_Posteriore_SX"
EV3_GPIO="drv:sonoff_tasmota_http:SONOFF1:Power3"
EV3_MONOSTABLE=1
EV4_ALIAS="Giardino_Anteriore"
EV4_GPIO="drv:sonoff_tasmota_http:SONOFF2:Power1"
# 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
#
# Configurazione moduli sonoff
#
SONOFF1_IP="192.168.1.1"
SONOFF1_USER="user"
SONOFF1_PWD="pwd"
SONOFF2_IP="192.168.1.21"
SONOFF2_USER=""
SONOFF2_PWD=""

View File

@@ -53,6 +53,11 @@ READLINK="/bin/readlink"
# Percorso stat
STAT="/usr/bin/stat"
# Percorso mosquito_pub
# Installare con apt install mosquitto-clients
MOSQUITTO_PUB="/usr/bin/mosquitto_pub"
# Se impostato con il valore 1, indica che il sistema gestisce elettrovalvole monostabili,
# se impostato a 0 il sistema gestirà elettrovalvole bisstabili
EV_MONOSTABLE=1
@@ -472,9 +477,20 @@ EV128_ALIAS="Zona_128" #
EV128_GPIO="drv:spb16ch:128"
# Definisce l'api key e il luogo per recuperare lo stato meteo online
# 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="IY/Monsummano" # http://www.wunderground.com/weather/api/d/docs?d=resources/country-to-iso-matching&MR=1
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.
@@ -494,6 +510,15 @@ 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
#
# Configurazione schede spb16ch

View File

@@ -0,0 +1,13 @@
# Driver for check wather condition with openweathermap online service
# Example of configuration in piGarden.conf
```bash
WEATHER_SERVICE="openweathermap"
OPENWEATHERMAP_KEY="d4d22ea805788420267971135563b4cc" # Set with your api key of openweathermap
OPENWEATHERMAP_LOCATION="q=Pieve%20a%20Nievole,it" # Set with location identify, see https://openweathermap.org/current
OPENWEATHERMAP_TZ="Europe/Rome" # Set with your time zone
```

View File

@@ -0,0 +1,123 @@
#
# Funzioni comuni utilizzate dal driver
#
#
# Recupera la descrizione della condizione meteo
#
# $1 condizione meteo recuperata dalle api
#
function drv_openweathermap_get_wather {
declare -A w
w["thunderstorm with light rain"]="Thunderstorms and Rain"
w["thunderstorm with rain"]="Thunderstorms and Rain"
w["thunderstorm with heavy rain"]="Thunderstorms and Rain"
w["light thunderstorm"]="Thunderstorm"
w["thunderstorm"]="Thunderstorm"
w["heavy thunderstorm"]="Thunderstorm"
w["ragged thunderstorm"]="Thunderstorm"
w["thunderstorm with light drizzle"]="Thunderstorms and Rain"
w["thunderstorm with drizzle"]="Thunderstorms and Rain"
w["thunderstorm with heavy drizzle"]="Thunderstorms and Rain"
w["light intensity drizzle"]="Drizzle"
w["drizzle"]="Drizzle"
w["heavy intensity drizzle"]="Drizzle"
w["light intensity drizzle rain"]="Drizzle"
w["drizzle rain"]="Drizzle"
w["heavy intensity drizzle rain"]="Drizzle"
w["shower rain and drizzle"]="Drizzle"
w["heavy shower rain and drizzle"]="Drizzle"
w["shower drizzle"]="Drizzle"
w["light rain"]="Rain Mist"
w["moderate rain"]="Rain"
w["heavy intensity rain"]="Rain"
w["very heavy rain"]="Rain"
w["extreme rain"]="Rain"
w["freezing rain"]="Freezing Rain"
w["light intensity shower rain"]="Rain"
w["shower rain"]="Rain"
w["heavy intensity shower rain"]="Rain"
w["ragged shower rain"]="Rain"
w["light snow"]="Snow"
w["snow"]="Snow"
w["heavy snow"]=""
w["sleet"]="Snow Grains"
w["shower sleet"]="Snow Grains"
w["light rain and snow"]="Snow"
w["rain and snow"]="Snow"
w["light shower snow"]="Snow"
w["shower snow"]="Snow"
w["heavy shower snow"]="Snow"
w["mist"]="Mist"
w["smoke"]="Smoke"
w["haze"]="Haze"
w["sand, dust whirls"]="Dust Whirls"
w["fog"]="Fog"
w["sand"]="Sand"
w["dust"]="Widespread Dust"
w["volcanic ash"]="Volcanic Ash"
w["squalls"]="Squalls"
w["tornado"]="Tornado"
w["clear sky"]="Clear"
w["few clouds"]="Partly Cloudy"
w["scattered clouds"]="Scattered Clouds"
w["broken clouds"]="Partly Cloudy"
w["overcast clouds"]="Mostly Cloudy"
local weather=${w[$1]}
if [ -z "$weather" ]; then
weather="$1"
fi
echo $weather
}
#
# Recupera la l'icona rappresentativa delle condizione meteo
#
# $1 nome dell'icona recuperato delle api weather.icon
#
function drv_openweathermap_get_ico {
declare -A w
w["01d"]="http://icons.wxug.com/i/c/k/clear.gif"
w["01n"]="http://icons.wxug.com/i/c/k/nt_clear.gif"
w["02d"]="http://icons.wxug.com/i/c/k/partlycloudy.gif"
w["02n"]="http://icons.wxug.com/i/c/k/nt_partlycloudy.gif"
w["03d"]="http://icons.wxug.com/i/c/k/cloudy.gif"
w["03n"]="http://icons.wxug.com/i/c/k/nt_cloudy.gif"
w["04d"]="http://icons.wxug.com/i/c/k/cloudy.gif"
w["04n"]="http://icons.wxug.com/i/c/k/nt_cloudy.gif"
w["09d"]="http://icons.wxug.com/i/c/k/sleet.gif"
w["09n"]="http://icons.wxug.com/i/c/k/nt_sleet.gif"
w["10d"]="http://icons.wxug.com/i/c/k/rain.gif"
w["10n"]="http://icons.wxug.com/i/c/k/nt_rain.gif"
w["11d"]="http://icons.wxug.com/i/c/k/tstorms.gif"
w["11n"]="http://icons.wxug.com/i/c/k/nt_tstorms.gif"
w["13d"]="http://icons.wxug.com/i/c/k/snow.gif"
w["13n"]="http://icons.wxug.com/i/c/k/nt_snow.gif"
w["50d"]="http://icons.wxug.com/i/c/k/fog.gif"
w["50n"]="http://icons.wxug.com/i/c/k/nt_fog.gif"
local ico=${w[$1]}
if [ -z "$ico" ]; then
ico="$1"
fi
echo $ico
}

View File

@@ -0,0 +1,74 @@
#
# Ritorna lo stato delle condizioni meteo interrogando il servizio online
#
# $i identificativo gpio del sensore di pioggia
#
# return output: 0 - errore durante il recupero delle condizioni meteo
# >0 - rilevato pioggia, timestamp del rilevamento
# <0 - rilevato nessuna pioggia, timestamp del rilevamento
function drv_openweathermap_rain_online_get {
# http://www.wunderground.com/weather/api/d/docs?d=resources/phrase-glossary&MR=1
$CURL "http://api.openweathermap.org/data/2.5/weather?$OPENWEATHERMAP_LOCATION&units=metric&appid=$OPENWEATHERMAP_KEY" > $TMP_PATH/check_rain_online.openweathermap.json
local weather=`cat $TMP_PATH/check_rain_online.openweathermap.json | $JQ -M ".weather[0].main"`
local wind_deg=$(cat $TMP_PATH/check_rain_online.openweathermap.json | $JQ -r -M ".wind.deg")
local wind_speed=$(cat $TMP_PATH/check_rain_online.openweathermap.json | $JQ -r -M ".wind.speed")
if [ "$wind_speed" == "null" ]; then
#wind_speed=$($JQ -n $wind_speed*3600/1000)
wind_speed=0
fi
local weather="$(cat $TMP_PATH/check_rain_online.openweathermap.json | $JQ -r -M ".weather[0].description")"
local ico=$(cat $TMP_PATH/check_rain_online.openweathermap.json | $JQ -r -M ".weather[0].icon")
weather=$(drv_openweathermap_get_wather "$weather")
ico=$(drv_openweathermap_get_ico "$ico")
local current_observation=$(cat <<EOF
{
"display_location": {
"city": "$(cat $TMP_PATH/check_rain_online.openweathermap.json | $JQ -r -M ".name")"
},
"observation_epoch": "$(cat $TMP_PATH/check_rain_online.openweathermap.json | $JQ -r -M ".dt")",
"local_epoch": "$(cat $TMP_PATH/check_rain_online.openweathermap.json | $JQ -r -M ".dt")",
"local_tz_long": "$OPENWEATHERMAP_TZ",
"weather": "$weather",
"temp_c": "$(cat $TMP_PATH/check_rain_online.openweathermap.json | $JQ -r -M ".main.temp")",
"relative_humidity": "$(cat $TMP_PATH/check_rain_online.openweathermap.json | $JQ -r -M ".main.humidity")%",
"wind_dir": "$(deg2dir $wind_deg)",
"wind_degrees": "$wind_deg",
"wind_kph": "$wind_speed",
"wind_gust_kph": "--",
"pressure_mb": "$(cat $TMP_PATH/check_rain_online.openweathermap.json | $JQ -r -M ".main.pressure")",
"dewpoint_c": "--",
"feelslike_c": "--",
"icon_url": "$ico"
}
EOF
)
# "icon_url": "http://openweathermap.org/img/w/$(cat $TMP_PATH/check_rain_online.openweathermap.json | $JQ -r -M ".weather[0].icon").png"
#local current_observation=`cat $TMP_PATH/check_rain_online.json | $JQ -M ".current_observation"`
if [ "$weather" = "null" ]; then
echo "0"
else
echo "$current_observation" > "$STATUS_DIR/last_weather_online"
local local_epoch=`cat $STATUS_DIR/last_weather_online | $JQ -M -r ".local_epoch"`
if [[ "$weather" == *"Rain"* ]] ||
[[ "$weather" == *"Snow"* ]] ||
[[ "$weather" == *"Hail"* ]] ||
[[ "$weather" == *"Ice"* ]] ||
[[ "$weather" == *"Thunderstorm"* ]] ||
[[ "$weather" == *"Drizzle"* ]];
then
echo $local_epoch
else
echo "-$local_epoch"
fi
fi
}

4
drv/rainsensorqty/.gitignore vendored Normal file
View File

@@ -0,0 +1,4 @@
# Ignore everything in this directory
.set_var
# Except this file
!.gitignore

View File

@@ -0,0 +1,98 @@
#
# Driver rainsensorqty - driver for measure the rain volume
# Author: androtto
# file README.md
# Version: 0.2.0
# Data: 11/Aug/2019
FILE DI CONFIGURAZIONE /etc/piGarden.conf:
-----------------------------------------
NOTA: vedere nella directory conf_example il file esempio piu' aggiornato!
per attivare il driver è necessario inserire la seguente variabile nel file di configurazion
RAIN_GPIO="drv:rainsensorqty:25" # Physical 22 - wPi 6
la variabile seguente è impiegata anche da drvrainsensorqty per rilevare la chiusura del contatto magnetico che, in un circuito pull-up, è lo stato 1.
# Valore in ingresso sul gpio definito in RAIN_GPIO che indica lo stato di pioggia
RAIN_GPIO_STATE=1
le seguenti variabili controllano il driver come descritto:
RAINSENSORQTY_LOOPSFORSETRAINING=16 # dopo 10 impulsi, 10 vaschette riempite si considera pioggia
RAINSENSORQTY_SECSBETWEENRAINEVENT=10800 # =3h, significa che dopo 3 si resetta il numero di vaschette da riempire e solo dopo il riempimento del numero di vaschette si considera una nuova pioggia
infine la variabile seguente è la quantita' di acqua espressa in mm di precipitazioni:
RAINSENSORQTY_MMEACH=0.33 # see RAINSENSORQTY driver readme for details
CALIBRAZIONE SENSORE PIOGGIA
----------------------------
secondo il seguente processo da me effettuato sul mio misuratore di pioggia:
Ho erogato 18 ml di acqua nel rain gauge che hanno prodotto 10 impulsi; pertanto il riempimento di 1.8 ml ha causato un impulso, 1 ml = 1000 mmc (mm cubici),
1.8 ml sono pari a 1800 mmc
la superficie della vaschetta in mmq è pari a 110 mm x 55 mm = 5500 mmq
volume / superficie mi da' l'altezza, quindi 1800 mmc / 5500 mmq = 0.32727273 mm
se fossero stati 1.7 ml di acqua per ogni impulso/vaschetta riempita, la varibile sarebbe stata impostata a 0.30909091 mm
COMANDI SPECIALI
----------------
nella sottidirectory command sono prensenti:
commands/rainsensorqty_CHECK.sh
chiama la funzione di verifica piggio, la medesima chiamata da check_rain_sensor
commands/rainsensorqty_HISTORY.sh
visualizza lo storico della pioggia
commands/rainsensorqty_INIT.sh
inizializza il driver eseguendo lo script di monitoring - normalmente tale processo avviene da piGarden.sh
utile quando si vuole testare dei cambiamenti o se necessario riavviare dopo il kill del comando successivo
commands/rainsensorqty_KILL.sh
killa i processi di monitoring ed eventuali figli
commands/rainsensorqty_RAINNOW.sh
simula una pioggia
ULTERIORI VARIABILI in config.include.sh
----------------------------------------
esistono ulteriori variabili che potrebbe essere necessario variare
RAINSENSOR_ANTIBOUNCE=0.3 # 0.3 seconds for manage antibounce of reed contact
server per ritardare la lettura di un secondo impulso falso causato dal rimbalzo del contatto magnetico
RAINSENSORQTY_verbose="yes"
aumenta il livello di verbosita' nei file di log
RAINSENSORQTY_LASTRAIN="$STATUS_DIR/rainsensorqty_lastrain"
memorizza l'ultima pioggia
RAINSENSORQTY_HISTORY="$STATUS_DIR/rainsensorqty_history"
memorizza tutte le piogge permettendo di visualizzarlo storico (commands/rainsensorqty_HISTORY.sh)
RAINSENSORQTY_MONITORLOG="$DIR_SCRIPT/log/rainsensorqty_monitor.log"
log del script di monitoring, popolato solo se RAINSENSORQTY_verbose="yes"
RAINSENSORQTY_MONPID="$TMP_PATH/rainsensorqty_monitor.pid"
file che viene popolato con il pid dello script di monitoring
RAINSENSORQTY_DIR="$DIR_SCRIPT/drv/rainsensorqty"
home directory del driver
monitor_sh="$RAINSENSORQTY_DIR/drv_rainsensorqty_monitor.sh"
script di monitoring
lo script eredita le varibili di ambiente da .set_var in $RAINSENSORQTY_DIR
#rising means waiting for 1 status (from 0)
#falling means waiting for 0 status (from 1)
#RAINSENSORQTY_PULSE=rising # pull-down circuit (rest status is 0)
#RAINSENSORQTY_PULSE=falling # pull-up circuit (rest status is 1)
if (( RAIN_GPIO_STATE = 1 )) ; then
RAINSENSORQTY_PULSE=rising # pull-down circuit (rest status is 0)
fi
if (( RAIN_GPIO_STATE = 0 )) ; then
RAINSENSORQTY_PULSE=falling # pull-up circuit (rest status is 1)
fi
if [[ -z $RAINSENSORQTY_PULSE ]] ; then
echo "ERROR: RAIN_GPIO_STATE non set in piGarden.conf"
exit 1
fi
lo script di monitoring ascolta il cambiamento di stato da quello di riposo allo stato di impulso (chiusura del contatto reed).
dipendentemente dal circuto implementato, se lo stato di riposo e' 0, lo script attende la variazione verso 1 (rising)
se lo stato di riposo e' 1, lo script attende la variazione verso 0 (falling)
la variabile RAINSENSORQTY_PULSE viene impostata secondo il valore di RAIN_GPIO_STATE presente in /etc/piGarden.conf
cioe' il valore che ci si aspetta per registrare lo stato di pioggia

View File

@@ -0,0 +1,40 @@
#!/bin/bash
#
# Driver rainsensorqty - driver for measure the rain volume
# Author: androtto
# file "test_rainsensorqty_CHECK.sh"
# test script for checking rain status using drv_rainsensorqty_rain_sensor_get function
# Version: 0.2.0
# Data: 11/Aug/2019
SCRIPTDIR="$(cd `dirname $0` ; pwd )"
SCRIPTNAME=${0##*/}
cd $SCRIPTDIR/.. # command is a subdirectory of driver
DIR_SCRIPT=/home/pi/piGarden # home directory of piGarden
CONFIG_ETC="/etc/piGarden.conf"
TMP_PATH="/run/shm"
if [ ! -d "$TMP_PATH" ]; then
TMP_PATH="/tmp"
fi
LOG_OUTPUT_DRV_FILE="$DIR_SCRIPT/log/$LOG_OUTPUT_DRV_FILE"
. $CONFIG_ETC
. ./common.include.sh
. ./config.include.sh
. ./init.include.sh
. ./rainsensor.include.sh
# restituisce 0 se piove, e nell'output di testo il valore di "$RAIN_GPIO_STATE"
# restituisce 99 se non piove, output "norain"
# esce con 1 se non c'e' il monitoring, output "ERROR"
drv_rainsensorqty_rain_sensor_get
case $? in
0) echo "NORMAL: it's raining" ;;
99) echo "NORMAL: it's not raining" ;;
1) echo "ERROR: monitor process $DIR_SCRIPT/drv/rainsensorqty/drv_rainsensorqty_monitor.sh is not running" ;;
esac

View File

@@ -0,0 +1,40 @@
#!/bin/bash
#
# Driver rainsensorqty - driver for measure the rain volume
# Author: androtto
# file "test_rainsensorqty_CHECK.sh"
# test script for checking rain status using drv_rainsensorqty_rain_sensor_get function
# Version: 0.2.0
# Data: 11/Aug/2019
SCRIPTDIR="$(cd `dirname $0` ; pwd )"
SCRIPTNAME=${0##*/}
cd $SCRIPTDIR/.. # command is a subdirectory of driver
DIR_SCRIPT=/home/pi/piGarden # home directory of piGarden
CONFIG_ETC="/etc/piGarden.conf"
TMP_PATH="/run/shm"
if [ ! -d "$TMP_PATH" ]; then
TMP_PATH="/tmp"
fi
LOG_OUTPUT_DRV_FILE="$DIR_SCRIPT/log/$LOG_OUTPUT_DRV_FILE"
. $CONFIG_ETC
. ./common.include.sh
. ./config.include.sh
. ./init.include.sh
. ./rainsensor.include.sh
echo "RAIN HISTORY"
rain_history
cat $RAINSENSORQTY_HISTORY | while read line
do
set -- ${line//:/ }
when=$1
howmuch=$2
printf "RAINED on %s for %.2f mm\n" "$(date --date="@$1")" $( $JQ -n "$howmuch * $RAINSENSORQTY_MMEACH" )
done

View File

@@ -0,0 +1,29 @@
#!/bin/bash
# Driver rainsensorqty - driver for measure the rain volume
# Author: androtto
# file "test_rainsensorqty_INIT.sh"
# test script for initialize driver and executing monitor process
# Version: 0.2.0
# Data: 11/Aug/2019
SCRIPTDIR="$(cd `dirname $0` ; pwd )"
SCRIPTNAME=${0##*/}
cd $SCRIPTDIR/.. # command is a subdirectory of driver
DIR_SCRIPT=/home/pi/piGarden # home directory of piGarden
CONFIG_ETC="/etc/piGarden.conf"
TMP_PATH="/run/shm"
if [ ! -d "$TMP_PATH" ]; then
TMP_PATH="/tmp"
fi
. $CONFIG_ETC
. ./config.include.sh
. ./common.include.sh
. ./init.include.sh
. ./rainsensor.include.sh
drv_rainsensorqty_rain_sensor_init
drv_rainsensorqty_init

View File

@@ -0,0 +1,48 @@
#!/bin/bash
SCRIPTDIR="$(cd `dirname $0` ; pwd )"
SCRIPTNAME=${0##*/}
cd $SCRIPTDIR/.. # command is a subdirectory of driver
DIR_SCRIPT=/home/pi/piGarden # home directory of piGarden
CONFIG_ETC="/etc/piGarden.conf"
TMP_PATH="/run/shm"
if [ ! -d "$TMP_PATH" ]; then
TMP_PATH="/tmp"
fi
. $CONFIG_ETC
. ./config.include.sh
. ./common.include.sh
. ./init.include.sh
. ./rainsensor.include.sh
# check if rain monitor process is running...
if [[ -f "$RAINSENSORQTY_MONPID" ]] ; then
pid="$( < "$RAINSENSORQTY_MONPID" )"
if ps -fp $pid >/dev/null ; then
echo "process $pid pid and its child(ren)"
children_pid="$(ps -ef| awk "\$3==$pid {print \$2}")"
ps -fp $pid
ps -fp $children_pid | tail +2
echo -e "\nsending TERM signal to $pid and its child(ren)"
echo kill $children_pid
echo kill $pid
kill $children_pid
kill $pid
echo -e "\nchecking $pid pid and its child(ren) are still alive"
for process in $pid $children_pid
do
if ps -fp $process >/dev/null ; then
echo "$process is still alive"
else
echo "$process is dead"
fi
done
else
echo "no RAIN process alive"
fi
fi

View File

@@ -0,0 +1,27 @@
#!/bin/bash
# Driver rainsensorqty - driver for measure the rain volume
# Author: androtto
# file "test_rainsensorqty_RAINNOW.sh"
# test script for simulate rain ... now!
# Version: 0.2.0
# Data: 11/Aug/2019
SCRIPTDIR="$(cd `dirname $0` ; pwd )"
SCRIPTNAME=${0##*/}
cd $SCRIPTDIR/.. # command is a subdirectory of driver
DIR_SCRIPT=/home/pi/piGarden # home directory of piGarden
CONFIG_ETC="/etc/piGarden.conf"
TMP_PATH="/run/shm"
if [ ! -d "$TMP_PATH" ]; then
TMP_PATH="/tmp"
fi
. $CONFIG_ETC
. ./config.include.sh
. ./common.include.sh
. ./init.include.sh
. ./rainsensor.include.sh
echo "$(date +%s):$RAINSENSORQTY_LOOPSFORSETRAINING" > ${RAINSENSORQTY_LASTRAIN}

View File

@@ -0,0 +1,69 @@
#
# Driver rainsensorqty - driver for measure the rain volume
# Author: androtto
# file "common.include.sh"
# common functions used by driver
# Version: 0.2.0
# Data: 11/Aug/2019
#note:
#RAINSENSORQTY_MONPID="$TMP_PATH/rainsensorqty_monitor.pid"
#
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) $*"
}
rain_history()
{
[[ ! -f $RAINSENSORQTY_HISTORY ]] && touch $RAINSENSORQTY_HISTORY
[[ ! -f $RAINSENSORQTY_LASTRAIN ]] && return 1
if grep -q ^$(<$RAINSENSORQTY_LASTRAIN)$ $RAINSENSORQTY_HISTORY ; then
: # do nothing
return 2
else
cat $RAINSENSORQTY_LASTRAIN >> $RAINSENSORQTY_HISTORY
return 0
fi
}

View File

@@ -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

View File

@@ -0,0 +1,39 @@
#
# Driver rainsensorqty - driver for measure the rain volume
# Author: androtto
# file "config.include.sh"
# specific driver config file
# Version: 0.2.0
# Data: 11/Aug/2019
RAINSENSOR_ANTIBOUNCE=0.3 # 0.3 seconds for manage antibounce of reed contact
RAINSENSORQTY_verbose="no" # yes/no
RAINSENSORQTY_LASTRAIN="$STATUS_DIR/rainsensorqty_lastrain"
RAINSENSORQTY_HISTORY="$STATUS_DIR/rainsensorqty_history"
RAINSENSORQTY_MONITORLOG="$DIR_SCRIPT/log/rainsensorqty_monitor.log"
RAINSENSORQTY_MONPID="$TMP_PATH/rainsensorqty_monitor.pid"
RAINSENSORQTY_DIR="$DIR_SCRIPT/drv/rainsensorqty"
monitor_sh="$RAINSENSORQTY_DIR/drv_rainsensorqty_monitor.sh"
#rising means waiting for 1 status (from 0)
#falling means waiting for 0 status (from 1)
#RAINSENSORQTY_PULSE=rising # pull-down circuit (rest status is 0)
#RAINSENSORQTY_PULSE=falling # pull-up circuit (rest status is 1)
if (( RAIN_GPIO_STATE = 1 )) ; then
RAINSENSORQTY_PULSE=rising # pull-down circuit (rest status is 0)
fi
if (( RAIN_GPIO_STATE = 0 )) ; then
RAINSENSORQTY_PULSE=falling # pull-up circuit (rest status is 1)
fi
if [[ -z $RAINSENSORQTY_PULSE ]] ; then
echo "ERROR: RAIN_GPIO_STATE non set in piGarden.conf"
exit 1
fi

View File

@@ -0,0 +1,75 @@
#!/bin/bash
#
# Driver rainsensorqty - driver for measure the rain volume
# Author: androtto
# file "drv_rainsensorqty_monitor.sh"
# monitor script
# Version: 0.2.0
# Data: 11/Aug/2019
###############
# MAIN #
###############
DIRNAME="$( dirname $0 )"
f="$(basename $0)"
. $DIRNAME/common.include.sh
set_var="$DIRNAME/.set_var"
if [[ -f "$set_var" ]] ; then
en_echo "NORMAL: file $set_var found - getting variables"
. "$set_var"
else
echo "ERROR: $set_var not found"
exit 1
fi
#drvt="$( echo $RAIN_GPIO | $CUT -f 1 -d: )"
#drv="$( echo $RAIN_GPIO | $CUT -f 2 -d: )"
gpio_port="$( echo $RAIN_GPIO | $CUT -f 3 -d: )"
# check if no other rain monitor process running...
if [[ -f "$RAINSENSORQTY_MONPID" ]] ; then
pid="$( < "$RAINSENSORQTY_MONPID" )"
if ps -fp $pid >/dev/null ; then
drv_rainsensorqty_writelog $f "ERROR monitor process already running\n$( ps -fp $pid )"
exit 1
fi
fi
echo $$ > $RAINSENSORQTY_MONPID
drv_rainsensorqty_writelog $f "NORMAL - $$ pid monitor process started - see $RAINSENSORQTY_MONPID"
# init variables
MMEACH="$RAINSENSORQTY_MMEACH"
(( counter=0 ))
rain_history
echo ""
en_echo "---- NEW RUN "
# loop forever
while true
do
before=`date +%s`
sleep $RAINSENSOR_ANTIBOUNCE
en_echo "WAITING FOR PULSE"
$GPIO -g wfi $gpio_port $RAINSENSORQTY_PULSE
now=`date +%s`
(( elapsed = now - before ))
if (( elapsed >= RAINSENSORQTY_SECSBETWEENRAINEVENT )) ; then
(( counter=0 ))
drv_rainsensorqty_writelog $f "first drops after $elapsed seconds since last rain ( greater than $RAINSENSORQTY_SECSBETWEENRAINEVENT )- new cycle - waiting for $( $JQ -n "$RAINSENSORQTY_LOOPSFORSETRAINING * $MMEACH" )" &
rain_history
fi
(( counter+=1 ))
en_echo "PULSE RECEIVED (counter $counter)"
MMWATER=$( $JQ -n "$counter*$MMEACH" )
text=$(printf "%.2f mm height (loop %d)" $MMWATER $counter )
if (( counter >= RAINSENSORQTY_LOOPSFORSETRAINING )) ; then
drv_rainsensorqty_writelog $f "RAINING - $text" &
echo "$(date +%s):$counter" > ${RAINSENSORQTY_LASTRAIN}
else
drv_rainsensorqty_writelog $f "now is $text" &
fi
done

View File

@@ -0,0 +1,26 @@
#
# 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
}
set | $GREP -e ^GPIO -e ^LOG -e ^CUT -e ^JQ -e ^RAIN -e ^SCR -e ^TMP > "${RAINSENSORQTY_DIR}/.set_var"

View File

@@ -0,0 +1,77 @@
#
# 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()
{
drv_rainsensorqty_writelog "drv_rainsensorqty_rain_sensor_init" $1
local drvt="$( echo $RAIN_GPIO | $CUT -f 1 -d: )"
local drv="$( echo $RAIN_GPIO | $CUT -f 2 -d: )"
local gpio_port="$( echo $RAIN_GPIO | $CUT -f 3 -d: )"
$GPIO -g mode $gpio_port in
}
#
# 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
}

View File

@@ -1,4 +1,14 @@
# Driver per controllare pigarden remoti in rete da un'installazione pigarden master
# Driver for controlling remote pigarden on the network from a pigarden master installation
Per maggiori informazioni consulta https://www.lejubila.net/2018/03/pigardent-0-5-5-driver-master-per-implementare-un-architettura-master-slave/
For more information see https://www.lejubila.net/2018/03/pigardent-0-5-5-driver-master-per-implementare-un-architettura-master-slave/
# Example of zone configuration in piGarden.conf
```bash
EV1_ALIAS="Giarino_Posteriore_DX" #
EV1_GPIO="drv:remote:PIREMOTE1:Giardino_Posteriore_DX"
PIREMOTE1_IP="192.168.1.51"
PIREMOTE1_PORT="8084"
PIREMOTE1_USER=""
PIREMOTE1_PWD=""
```

View File

@@ -68,8 +68,8 @@ function drv_remote_rele_close {
error="${error%\"}"
error="${error#\"}"
echo "error=$error"
log_write "Remote rele open error: $error"
message_write "warning" "Remote rele open error: $error"
log_write "Remote rele close error: $error"
message_write "warning" "Remote rele close error: $error"
return 1
fi
}

View File

@@ -1,6 +1,6 @@
#
# Questa funzione viene invocata dalla funzione "setup_drv" di piGarden ad ogni avvio dello script
# e serve per eseguire l'evenutale setup del driver se necessario
# e serve per eseguire l'eventuale setup del driver se necessario
#
function drv_remote_setup {

View File

@@ -5,7 +5,7 @@
#
# Funzione di esempio
#
function sample_foo {
function drv_sample_foo {
echo "bar"

View File

@@ -0,0 +1,13 @@
#
# Ritorna lo stato delle condizioni meteo interrogando il servizio online
#
# return output: 0 - errore durante il recupero delle condizioni meteo
# >0 - rilevato pioggia, timestamp del rilevamento
# <0 - rilevato nessuna pioggia, timestamp del rilevamento
function drv_sample_rain_online_get {
local FOO="bar"
}

View File

@@ -1,6 +1,6 @@
#
# Questa funzione viene invocata dalla funzione "setup_drv" di piGarden ad ogni avvio dello script
# e serve per eseguire l'evenutale setup del driver se necessario
# e serve per eseguire l'eventuale setup del driver se necessario
#
function drv_sample_setup {

View File

@@ -0,0 +1,22 @@
# Driver for controlling Sonoff remote relays with Tasmota firmware via http protocol
More information on Sonoff Tasmota firmware: https://github.com/arendst/Sonoff-Tasmota
# Example of zone configuration in piGarden.conf
```bash
EV1_ALIAS="Giardino_Posteriore_DX"
EV1_GPIO="drv:sonoff_tasmota_http:SONOFF1:Power1"
EV1_MONOSTABLE=1
EV2_ALIAS="Giardino_Posteriore_CN"
EV2_GPIO="drv:sonoff_tasmota_http:SONOFF1:Power2"
EV2_MONOSTABLE=1
SONOFF1_IP="192.168.1.1"
SONOFF1_USER="user"
SONOFF1_PWD="pwd"
```
More information for configuration: https://www.lejubila.net/2018/06/pigarden-0-5-7-gestisci-le-tue-elettrovalvole-con-i-moduli-sonoff-grazie-al-nuovo-driver-sonoff_tasmota_http

View File

@@ -0,0 +1,50 @@
#
# Funzioni comuni utilizzate dal driver
#
#
# Invia un comando al modulo sonoff tramite http
#
# $1 identificativo modulo sonoff
# $2 comando da eseguire
#
function drv_sonoff_tasmota_http_command {
local remote="$1"
local command="$2"
local remote_ip_var=$remote"_IP"
local remote_user_var=$remote"_USER"
local remote_pwd_var=$remote"_PWD"
local remote_ip="${!remote_ip_var}"
local remote_user="${!remote_user_var}"
local remote_pwd="${!remote_pwd_var}"
local url="http://$remote_ip/cm"
local credentials=""
local response=""
if [[ ! -z $remote_user ]] && [[ ! -z $remote_pwd ]]; then
credentials="user=$remote_user&password=$remote_pwd&"
fi
url="$url?$credentials$command"
echo "url api sonoff: $url" >> "$LOG_OUTPUT_DRV_FILE"
$CURL --connect-timeout 5 -sb -H "$url"
local res=$?
echo "curl code response: $res" >> "$LOG_OUTPUT_DRV_FILE"
if [ "$res" != "0" ]; then
echo "The curl command failed with: $res - url: $url"
fi
#echo "{\"POWER1\":\"ON\"}"
}

View File

@@ -0,0 +1,7 @@
#
# File di configurazione del driver
#
# Dichiarazione variabile di esempio
#declare -g SAMPLE_FOO
#SAMPLE_FOO="bar"

View File

@@ -0,0 +1,9 @@
#
# Questa funzione viene inviocata dalla funzione "init" di piGarden se sono presenti elettrovalvole o sensori che utilizzano questo driver
#
function drv_sonoff_tasmota_http_init {
local FOO=bar
}

View File

@@ -0,0 +1,23 @@
#
# Inizializza il sensore di rilevamento pioggia
#
# $i identificativo gpio del sensore di pioggia
#
function drv_sonoff_tasmota_http_rain_sensor_init {
local FOO="bar"
}
#
# Ritorna lo stato del sensore di rilevamento pioggia
#
# $i identificativo gpio del sensore di pioggia
#
function drv_sonoff_tasmota_http_rain_sensor_get {
local FOO="bar"
}

View File

@@ -0,0 +1,78 @@
#
# Inizializzazione rele
#
# $1 identificativo relè da inizializzare
#
function drv_sonoff_tasmota_http_rele_init {
drv_sonoff_tasmota_http_rele_open "$1"
}
#
# Apertura rele
#
# $1 identificativo relè da aprire (chiude l'elettrovalvola)
#
function drv_sonoff_tasmota_http_rele_open {
local remote=`echo $1 | $CUT -d':' -f3,3`
local remote_alias=`echo $1 | $CUT -d':' -f4,4`
local command="cmnd=$remote_alias%20Off"
echo "remote=$remote"
echo "remote_alias=$remote_alias"
echo "command=$command"
local response=$(drv_sonoff_tasmota_http_command "$remote" "$command")
echo "response=$response"
local jskey=${remote_alias^^}
local result=$(echo $response|$JQ -M ".$jskey")
echo "result=$result"
if [[ "$result" != "\"OFF\"" ]]; then
local error="Command error: $response"
error="${error%\"}"
error="${error#\"}"
echo "error=$error"
log_write "Remote rele open error: $error"
message_write "warning" "Remote rele open error: $error"
return 1
fi
}
#
# Chiusura rele
#
# $1 identificativo relè da chiudere (apre l'elettrovalvola)
#
function drv_sonoff_tasmota_http_rele_close {
local remote=`echo $1 | $CUT -d':' -f3,3`
local remote_alias=`echo $1 | $CUT -d':' -f4,4`
local command="cmnd=$remote_alias%20On"
echo "remote=$remote"
echo "remote_alias=$remote_alias"
echo "command=$command"
local response=$(drv_sonoff_tasmota_http_command "$remote" "$command")
echo "response=$response"
local jskey=${remote_alias^^}
local result=$(echo $response|$JQ -M ".$jskey")
echo "result=$result"
if [[ "$result" != "\"ON\"" ]]; then
local error="Command error: $response"
error="${error%\"}"
error="${error#\"}"
echo "error=$error"
log_write "Remote rele close error: $error"
message_write "warning" "Remote rele close error: $error"
return 1
fi
}

View File

@@ -0,0 +1,10 @@
#
# Questa funzione viene invocata dalla funzione "setup_drv" di piGarden ad ogni avvio dello script
# e serve per eseguire l'eventuale setup del driver se necessario
#
function drv_sonoff_tasmota_http_setup {
local FOO="bar"
}

View File

@@ -0,0 +1,34 @@
#
# Inizializza i rele che gestiscono l'alimentazione per le valvole bistabili
#
# $1 identificativo relè
#
function drv_sonoff_tasmota_http_supply_bistable_init {
drv_sonoff_tasmota_http_supply_negative "$1"
}
#
# Imposta l'alimentazione delle elettrovalvole con voltaggio positivo
#
# $1 identificativo relè
#
function drv_sonoff_tasmota_http_supply_positive {
drv_sonoff_tasmota_http_rele_open "$1"
}
#
# Imposta l'alimentazione delle elettrovalvole con voltaggio negativo
#
# $1 identificativo relè
#
function drv_sonoff_tasmota_http_supply_negative {
drv_sonoff_tasmota_http_rele_close "$1"
}

View File

@@ -0,0 +1,12 @@
# Driver for check wather condition with wunderground online service
# Example of configuration in piGarden.conf
```bash
WEATHER_SERVICE="wunderground"
WUNDERGROUND_KEY="" # Set with your api key of wunderground
WUNDERGROUND_LOCATION="IY/Monsummano" # Set with your location indentify, see http://www.wunderground.com/weather/api/d/docs?d=resources/country-to-iso-matching&MR=1
```

View File

@@ -0,0 +1,12 @@
#
# Funzioni comuni utilizzate dal driver
#
#
# Funzione di esempio
#
function sample_foo {
echo "bar"
}

View File

@@ -0,0 +1,36 @@
#
# Ritorna lo stato delle condizioni meteo interrogando il servizio online
#
# $i identificativo gpio del sensore di pioggia
#
# return output: 0 - errore durante il recupero delle condizioni meteo
# >0 - rilevato pioggia, timestamp del rilevamento
# <0 - rilevato nessuna pioggia, timestamp del rilevamento
function drv_wunderground_rain_online_get {
# http://www.wunderground.com/weather/api/d/docs?d=resources/phrase-glossary&MR=1
$CURL http://api.wunderground.com/api/$WUNDERGROUND_KEY/conditions/q/$WUNDERGROUND_LOCATION.json > $TMP_PATH/check_rain_online.json
local weather=`cat $TMP_PATH/check_rain_online.json | $JQ -M ".current_observation.weather"`
local current_observation=`cat $TMP_PATH/check_rain_online.json | $JQ -M ".current_observation"`
local local_epoch=`cat $TMP_PATH/check_rain_online.json | $JQ -M -r ".current_observation.local_epoch"`
if [ "$weather" = "null" ]; then
echo "0"
else
if [[ "$weather" == *"Rain"* ]] ||
[[ "$weather" == *"Snow"* ]] ||
[[ "$weather" == *"Hail"* ]] ||
[[ "$weather" == *"Ice"* ]] ||
[[ "$weather" == *"Thunderstorm"* ]] ||
[[ "$weather" == *"Drizzle"* ]];
then
echo $local_epoch
else
echo "-$local_epoch"
fi
echo "$current_observation" > "$STATUS_DIR/last_weather_online"
fi
}

View File

@@ -0,0 +1,4 @@
# Ignore everything in this directory
*
# Except this file
!.gitignore

View File

@@ -0,0 +1,4 @@
# Ignore everything in this directory
*
# Except this file
!.gitignore

View File

@@ -0,0 +1,4 @@
# Ignore everything in this directory
*
# Except this file
!.gitignore

111
events/scripts/rpinotify.sh Executable file
View File

@@ -0,0 +1,111 @@
#!/bin/bash
#
# Send telegram notificacion on triggered event
#
# $1 = event
# $2 = cause
# $3 = time
#
# To use this script, you must get your hash. Register for the rpinotify service. Get the hash and enter it below
#
# rpinotify token
TOKEN=""
EVENT="$1"
TO="mail@destination.com"
FROM="piGarden@your_domain.com"
SUBJECT="[piGarden notification mail] event $EVENT"
BODY=""
case "$EVENT" in
"init_before" | "init_after")
TIME=$2
BODY="PiGarden triggered new event --- EVENT: $EVENT --- TIME: $(/bin/date -d@$TIME)"
;;
"ev_open_before" | "ev_open_after")
ALIAS="$2"
FORCE="$3"
TIME=$4
BODY="PiGarden triggered new event --- EVENT: $EVENT --- ZONE: $ALIAS --- FORCED IRRIGATION: $FORCE --- TIME: $(/bin/date -d@$TIME)"
;;
"ev_open_in_before")
ALIAS="$2"
FORCE="$3"
MINUTE_START="$4"
MINUTE_STOP="$5"
TIME=$6
BODY="PiGarden triggered new event --- EVENT: $EVENT --- ZONE: $ALIAS --- FORCED IRRIGATION: $FORCE --- MINUTE START: $MINUTE_START --- MINUTE STOP: $MINUTE_STOP --- TIME: $(/bin/date -d@$TIME)"
;;
"ev_open_in_after")
ALIAS="$2"
FORCE="$3"
CRON_START="$4"
CRON_STOP="$5"
TIME=$6
BODY="PiGarden triggered new event --- EVENT: $EVENT --- ZONE: $ALIAS --- FORCED IRRIGATION: $FORCE --- CRON START: $CRON_START --- CRON STOP: $CRON_STOP --- TIME: $(/bin/date -d@$TIME)"
;;
"ev_close_before" | "ev_close_after")
ALIAS="$2"
TIME=$3
BODY="PiGarden triggered new event --- EVENT: $EVENT --- ZONE: $ALIAS --- TIME: $(/bin/date -d@$TIME);"
;;
"ev_not_open_for_rain" | "ev_not_open_for_rain_online" | "ev_not_open_for_rain_sensor")
ALIAS="$2"
TIME=$3
BODY="PiGarden triggered new event --- EVENT: $EVENT --- ZONE: $ALIAS --- TIME: $(/bin/date -d@$TIME)"
;;
"check_rain_sensor_before" | "check_rain_sensor_after" | "check_rain_sensor_change")
STATE="$2"
TIME=$3
BODY="PiGarden triggered new event --- EVENT: $EVENT --- STATE: $STATE --- TIME: $(/bin/date -d@$TIME)"
;;
"check_rain_online_before")
STATE="$2"
TIME=$3
BODY="PiGarden triggered new event --- EVENT: $EVENT --- STATE: $STATE --- TIME: $(/bin/date -d@$TIME)"
;;
"check_rain_online_after" | "check_rain_online_change")
STATE="$2"
WEATHER="$3"
TIME=$4
BODY="PiGarden triggered new event --- EVENT: $EVENT --- STATE: $STATE --- WEATHER: $WEARTHER --- TIME: $(/bin/date -d@$TIME)"
;;
"cron_add_before" | "cron_add_after")
CRON_TYPE="$2"
CRON_ARG="$3"
CRON_ELEMENT="$4"
TIME=$5
BODY="PiGarden triggered new event --- EVENT: $EVENT --- CRON TYPE: $CRON_TYPE --- CRON ARG: $CRON_ARG --- CRON ELEMENT: $CRON_ELEMENT\nTIME: $(/bin/date -d@$TIME)"
;;
"cron_del_before" | "cron_del_after")
CRON_TYPE="$2"
CRON_ARG="$3"
TIME=$4
BODY="PiGarden triggered new event --- EVENT: $EVENT --- CRON TYPE: $CRON_TYPE --- CRON ARG: $CRON_ARG --- TIME: $(/bin/date -d@$TIME)"
;;
"exec_poweroff_before" | "exec_poweroff_after" | "exec_reboot_before" | "exec_reboot_after")
TIME=$2
BODY="PiGarden triggered new event --- EVENT: $EVENT --- TIME: $(/bin/date -d@$TIME)"
;;
*)
exit
;;
esac
curl -X POST -F "text=$BODY" https://api.rpinotify.it/message/$TOKEN/

View File

@@ -65,6 +65,12 @@ case "$EVENT" in
BODY="PiGarden triggered new event\n\nEVENT: $EVENT\nZONE: $ALIAS\nTIME: $(/bin/date -d@$TIME)"
;;
"ev_not_open_for_rain" | "ev_not_open_for_rain_online" | "ev_not_open_for_rain_sensor")
ALIAS="$2"
TIME=$3
BODY="PiGarden triggered new event\n\nEVENT: $EVENT\nZONE: $ALIAS\nTIME: $(/bin/date -d@$TIME)"
;;
"check_rain_sensor_before" | "check_rain_sensor_after" | "check_rain_sensor_change")
STATE="$2"
TIME=$3

View File

@@ -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,8 +22,8 @@ function setup_drv {
fi
done
# Inizializza i driver per gli altri gpio
for gpio in "$SUPPLY_GPIO_1" "$SUPPLY_GPIO_2" "$RAIN_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
local drv=`echo $gpio | $CUT -d':' -f2,2`
@@ -29,10 +33,13 @@ 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
for callback in config common init rele supply rainsensor setup
for callback in config common init rele supply rainsensor rainonline setup
do
file_drv="$DIR_SCRIPT/drv/$drv/$callback.include.sh"
if [ -f "$file_drv" ]; then
@@ -315,3 +322,30 @@ function drv_rain_sensor_get {
echo "$vret"
}
#
# Legge lo stato le condizioni meteo dal servizio online
#
# $1 identificativo gpio sensore pioggia
#
function drv_rain_online_get {
local idx="$1"
local fnc=`get_driver_callback "rain_online_get" "$idx"`
local vret=""
# Nessun driver definito, esegue la lettura del sensore tramite gpio del raspberry
if [ -z "$fnc" ]; then
log_write "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"
message_write "warning" "Driver not found: $idx"
else
echo "$(date) $fnc arg:$idx" >> "$LOG_OUTPUT_DRV_FILE"
vret=`$fnc "$idx"`
fi
echo "$vret"
}

View File

@@ -17,12 +17,14 @@ function trigger_event {
case "$EVENT" in
"ev_open_before" | "ev_open_after")
ALIAS="$2"
CURRENT_EVENT_ALIAS="$ALIAS"
FORCE="$3"
$f "$EVENT" "$ALIAS" "$FORCE" `date +%s` &> /dev/null
;;
"ev_open_in_before")
ALIAS="$2"
CURRENT_EVENT_ALIAS="$ALIAS"
FORCE="$3"
local MINUTE_START="$4"
local MINUTE_STOP="$5"
@@ -31,6 +33,7 @@ function trigger_event {
"ev_open_in_after")
ALIAS="$2"
CURRENT_EVENT_ALIAS="$ALIAS"
FORCE="$3"
local CRON_START="$4"
local CRON_STOP="$5"
@@ -39,6 +42,7 @@ function trigger_event {
"ev_close_before" | "ev_close_after")
ALIAS="$2"
CURRENT_EVENT_ALIAS="$ALIAS"
$f "$EVENT" "$ALIAS" `date +%s` &> /dev/null
;;
@@ -89,7 +93,13 @@ function trigger_event {
local ec=$?
#echo "$EVENT ec=$ec" >> /tmp/piGarden.testevent
#CURRENT_EVENT="$EVENT"
#mqtt_status &
if [ $ec -ne 0 ]; then
CURRENT_EVENT="$EVENT"
mqtt_status &
log_write "Stop events chain for exit code $ec in $current_event_dir/$f"
return $ec
fi
@@ -98,6 +108,9 @@ function trigger_event {
fi
CURRENT_EVENT="$EVENT"
mqtt_status &
}

View File

@@ -1,47 +1,48 @@
#
# Controlla se se piove tramite http://api.wunderground.com/
# Esegue controllo meteo tramite servizio online configurato in WEATHER_SERVICE
#
function check_rain_online {
if [ "$WEATHER_SERVICE" == "none" ]; then
log_write "check_rain_online - online service is disable"
return
fi
trigger_event "check_rain_online_before" ""
# http://www.wunderground.com/weather/api/d/docs?d=resources/phrase-glossary&MR=1
$CURL http://api.wunderground.com/api/$WUNDERGROUND_KEY/conditions/q/$WUNDERGROUND_LOCATION.json > $TMP_PATH/check_rain_online.json
local weather=`cat $TMP_PATH/check_rain_online.json | $JQ -M ".current_observation.weather"`
local current_observation=`cat $TMP_PATH/check_rain_online.json | $JQ -M ".current_observation"`
local local_epoch=`cat $TMP_PATH/check_rain_online.json | $JQ -M -r ".current_observation.local_epoch"`
local local_epoch=`drv_rain_online_get $WEATHER_SERVICE`
local current_state_rain_online=""
local last_state_rain_online=`cat "$STATUS_DIR/last_state_rain_online" 2> /dev/null`
#echo $weather
#weather="[Light/Heavy] Drizzle"
if [ "$weather" = "null" ]; then
log_write "check_rain_online - failed read online data"
else
log_write "check_rain_online - weather=$weather, local_epoch=$local_epoch"
#if [[ "$weather" == *"Clear"* ]]; then
#if [[ "$weather" == *"Rain"* ]]; then
if [[ "$weather" == *"Rain"* ]] ||
[[ "$weather" == *"Snow"* ]] ||
[[ "$weather" == *"Hail"* ]] ||
[[ "$weather" == *"Ice"* ]] ||
[[ "$weather" == *"Thunderstorm"* ]] ||
[[ "$weather" == *"Drizzle"* ]];
then
current_state_rain_online='rain'
echo $local_epoch > "$STATUS_DIR/last_rain_online"
local weather="null"
if [[ $local_epoch =~ ^-?[0-9]+$ ]]; then
if [ $local_epoch -eq 0 ]; then
log_write "check_rain_online - failed read online data"
else
current_state_rain_online='norain'
fi
echo "$current_observation" > "$STATUS_DIR/last_weather_online"
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"
if [ $local_epoch -gt 0 ]; then
current_state_rain_online='rain'
echo $local_epoch > "$STATUS_DIR/last_rain_online"
else
current_state_rain_online='norain'
fi
weather=$(cat "$STATUS_DIR/last_weather_online" | $JQ -M ".weather")
log_write "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"
fi
trigger_event "check_rain_online_after" "$current_state_rain_online" "$weather"
}
#
# Controlla se se piove tramite sensore
#

View File

@@ -63,7 +63,7 @@ function socket_server_command {
log_write "socket connection from: $TCPREMOTEIP - command: $arg1 $arg2 $arg3 $arg4 $arg5 $arg6 $arg7 $arg8"
reset_messages &> /dev/null
#reset_messages &> /dev/null
case "$arg1" in
status)
@@ -225,7 +225,7 @@ function socket_server_command {
esac
reset_messages &> /dev/null
#reset_messages &> /dev/null
}

View File

@@ -63,7 +63,7 @@ function initialize {
#
# Elimina i file contenente i messaggi da inserire nel json status
#
function reset_messages {
function reset_messages_old {
rm -f "$LAST_INFO_FILE.$!"
rm -f "$LAST_WARNING_FILE.$!"
rm -f "$LAST_SUCCESS_FILE.$!"
@@ -85,6 +85,8 @@ function ev_open {
local EVNORAIN=`ev_number2norain $EVNUM`
local EV_IS_REMOTE_VAR=EV"$EVNUM"_REMOTE
local EV_IS_REMOTE=${!EV_IS_REMOTE_VAR}
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
@@ -93,8 +95,10 @@ function ev_open {
local dif=0
let "dif = now - last_rain"
if [ $dif -lt $NOT_IRRIGATE_IF_RAIN_ONLINE ]; then
log_write "Solenoid '$1' not open for rain (online check)"
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
fi
fi
@@ -106,8 +110,10 @@ function ev_open {
local dif=0
let "dif = now - last_rain"
if [ $dif -lt $NOT_IRRIGATE_IF_RAIN_SENSOR ]; then
log_write "Solenoid '$1' not open for rain (sensor check)"
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
@@ -122,13 +128,14 @@ function ev_open {
if [ $? -ne 0 ]; then
log_write "Solenoid '$1' not open due to external event"
message_write 'warning' "Solenoid not open due to external event"
mqtt_status
return
fi
lock
# Gestisce l'apertura dell'elettrovalvola in base alla tipologia (monostabile / bistabile)
if [ "$EV_MONOSTABLE" == "1" ] || [ "$EV_IS_REMOTE" == "1" ]; then
if [ "$EV_MONOSTABLE" == "1" ] || [ "$EV_IS_REMOTE" == "1" ] || [ "$EV_IS_MONOSTABLE" == "1" ]; then
drv_rele_close "$g"
if [ $? -eq 1 ]; then
unlock
@@ -143,12 +150,12 @@ function ev_open {
ev_set_state $EVNUM $state
log_write "Solenoid '$1' open"
message_write "success" "Solenoid open"
trigger_event "ev_open_after" "$1" "$2"
unlock
log_write "Solenoid '$1' open"
message_write "success" "Solenoid open"
}
#
@@ -169,21 +176,25 @@ function ev_open_in {
if ! [[ $minute_start =~ $re ]] ; then
echo -e "Time start of irrigation is wrong or not specified"
message_write "warning" "Time start of irrigation is wrong or not specified"
mqtt_status
return 1
fi
if ! [[ $minute_stop =~ $re ]] ; then
echo -e "Time stop of irrigation is wrong or not specified"
message_write "warning" "Time stop of irrigation is wrong or not specified"
mqtt_status
return 1
fi
if [ $minute_stop -lt "1" ] ; then
echo -e "Time stop of irrigation is wrong"
message_write "warning" "Time stop of irrigation is wrong"
mqtt_status
return 1
fi
if [ "empty$alias" == "empty" ]; then
echo -e "Alias solenoid not specified"
message_write "warning" "Alias solenoid not specified"
mqtt_status
return 1
fi
@@ -251,13 +262,13 @@ function ev_close {
ev_set_state $EVNUM 0
log_write "Solenoid '$1' close"
message_write "success" "Solenoid close"
trigger_event "ev_close_after" "$1"
unlock
log_write "Solenoid '$1' close"
message_write "success" "Solenoid close"
cron_del open_in_stop $1 > /dev/null 2>&1
}
@@ -288,6 +299,14 @@ function log_write {
fi
fi
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" >> $LOG_FILE
}
@@ -297,6 +316,20 @@ function log_write {
# $2 messaggio
#
function message_write {
local file_message=""
if [ "$1" = 'info' ]; then
MESSAGE_INFO="$2"
elif [ "$1" = "warning" ]; then
MESSAGE_WARNING="$2"
elif [ "$1" = "success" ]; then
MESSAGE_SUCCESS="$2"
else
return
fi
}
function message_write_old {
local file_message=""
if [ "$1" = 'info' ]; then
file_message="$LAST_INFO_FILE.$!"
@@ -345,6 +378,7 @@ function gpio_alias2number {
log_write "ERROR solenoid alias not found: $1"
message_write "warning" "Solenoid alias not found"
mqtt_status
exit 1
}
@@ -364,6 +398,7 @@ function ev_alias2number {
log_write "ERROR solenoid alias not found: $1"
message_write "warning" "Solenoid alias not found"
mqtt_status
exit 1
}
@@ -486,6 +521,12 @@ function json_status {
local last_success=""
local with_get_cron="0"
local with_get_cron_open_in="0"
local current_pid=$!
local json_event="\"event\": {\"event\": \"$CURRENT_EVENT\", \"alias\": \"$CURRENT_EVENT_ALIAS\"}"
if [ "$PARENT_PID" -gt "0" ]; then
current_pid=$PARENT_PID
fi
local vret=""
for i in $1 $2 $3 $4 $5 $6
@@ -510,7 +551,8 @@ function json_status {
if [ -n "$json" ]; then
json="$json,"
fi
json="$json\"$i\":{\"name\":\"$av\",\"state\":$sv}"
#json="$json\"$i\":{\"name\":\"$av\",\"state\":$sv}"
json="$json\"$av\":{\"name\":\"$av\",\"state\":$sv}"
done
json="\"zones\":{$json}"
@@ -521,15 +563,18 @@ function json_status {
if [[ ! -z "$last_weather_online" ]]; then
json_last_weather_online=$last_weather_online
fi
if [ -f "$LAST_INFO_FILE.$!" ]; then
last_info=`cat "$LAST_INFO_FILE.$!"`
fi
if [ -f "$LAST_WARNING_FILE.$!" ]; then
last_warning=`cat "$LAST_WARNING_FILE.$!"`
fi
if [ -f "$LAST_SUCCESS_FILE.$!" ]; then
last_success=`cat "$LAST_SUCCESS_FILE.$!"`
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"
local json_last_weather_online="\"last_weather_online\":$json_last_weather_online"
local json_last_rain_sensor="\"last_rain_sensor\":\"$last_rain_sensor\""
local json_last_rain_online="\"last_rain_online\":\"$last_rain_online\""
@@ -601,9 +646,10 @@ function json_status {
json_get_cron_open_in="\"open_in\": {$values_open_in},\"open_in_stop\": {$values_open_in_stop}"
fi
local json_cron_open_in="\"cron_open_in\":{$json_get_cron_open_in}"
local json_cron_open_in="\"cron_open_in\":{$json_get_cron_open_in}"
local json_timestamp="\"timestamp\": $(date +%s)"
json="{$json_version,$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_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}"
echo "$json"
@@ -611,6 +657,26 @@ function json_status {
}
#
# Invia al broker mqtt il json contentente lo stato del sistema
#
# $1 parent pid (opzionale)
#
function mqtt_status {
if [ ! $MQTT_ENABLE -eq 1 ]; then
return
fi
if [ ! -z "$1" ]; then
PARENT_PID=$1
fi
local js=$(json_status)
$MOSQUITTO_PUB -h $MQTT_HOST -p $MQTT_PORT -u $MQTT_USER -P $MQTT_PWD -i $MQTT_CLIENT_ID -r -t "$MQTT_TOPIC" -m "$js"
}
#
# Mostra il i parametri dello script
#
@@ -626,6 +692,7 @@ function show_usage {
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 "\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 "\t$NAME_SCRIPT check_rain_sensor check rain from hardware sensor"
echo -e "\t$NAME_SCRIPT close_all_for_rain close all solenoid if it's raining"
@@ -776,6 +843,94 @@ function exec_reboot {
trigger_event "exec_reboot_after"
}
#
# Converte da gradi a direzione
#
# $1 gradi
#
function deg2dir {
local deg=$(echo $1 | $SED 's/\..*$//')
local dir=""
if [ "$deg" == "null" ]; then
echo ""
return
fi
# N 348.75 - 11.25
if [ $deg -le 11 ]; then
dir="North"
# NNE 11.25 - 33.75
elif [ $deg -le 33 ]; then
dir="NNE"
# NE 33.75 - 56.25
elif [ $deg -le 56 ]; then
dir="NE"
# ENE 56.25 - 78.75
elif [ $deg -le 78 ]; then
dir="ENE"
# E 78.75 - 101.25
elif [ $deg -le 101 ]; then
dir="East"
# ESE 101.25 - 123.75
elif [ $deg -le 123 ]; then
dir="ESE"
# SE 123.75 - 146.25
elif [ $deg -le 146 ]; then
dir="SE"
# SSE 146.25 - 168.75
elif [ $deg -le 168 ]; then
dir="SSE"
# S 168.75 - 191.25
elif [ $deg -le 191 ]; then
dir="South"
# SSW 191.25 - 213.75
elif [ $deg -le 213 ]; then
dir="SSW"
# SW 213.75 - 236.25
elif [ $deg -le 236 ]; then
dir="SW"
# WSW 236.25 - 258.75
elif [ $deg -le 258 ]; then
dir="WSW"
# W 258.75 - 281.25
elif [ $deg -le 281 ]; then
dir="West"
# WNW 281.25 - 303.75
elif [ $deg -le 303 ]; then
dir="WNW"
# NW 303.75 - 326.25
elif [ $deg -le 326 ]; then
dir="NW"
# NNW 326.25 - 348.75
elif [ $deg -le 348 ]; then
dir="NNW"
# N 348.75 - 11.25
else
dir="North"
fi
echo $dir
}
function debug1 {
. "$DIR_SCRIPT/debug/debug1.sh"
}
@@ -786,7 +941,7 @@ function debug2 {
VERSION=0
SUB_VERSION=5
RELEASE_VERSION=5
RELEASE_VERSION=13
DIR_SCRIPT=`dirname $0`
NAME_SCRIPT=${0##*/}
@@ -814,9 +969,17 @@ fi
. "$DIR_SCRIPT/include/rain.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"
#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=""
CURRENT_EVENT=""
CURRENT_EVENT_ALIAS=""
PARENT_PID=0
if [ -z $LOG_OUTPUT_DRV_FILE ]; then
LOG_OUTPUT_DRV_FILE="/dev/null"
@@ -826,6 +989,11 @@ if [ -z "$EVENT_DIR" ]; then
EVENT_DIR="$DIR_SCRIPT/events"
fi
if [ -z $WEATHER_SERVICE ]; then
WEATHER_SERVICE="drv:wunderground"
elif [ "$WEATHER_SERVICE" != "none" ]; then
WEATHER_SERVICE="drv:$WEATHER_SERVICE"
fi
# Elimina il file di lock se più vecchio di 11 secondi
if [ -f "$LOCK_FILE" ]; then
@@ -882,6 +1050,10 @@ case "$1" in
json_status $2 $3 $4 $5 $6
;;
mqtt_status)
mqtt_status $2
;;
check_rain_online)
check_rain_online
;;
@@ -1023,4 +1195,4 @@ esac
rm "$TMP_CRON_FILE" 2> /dev/null
rm "$TMP_CRON_FILE-2" 2> /dev/null
reset_messages &> /dev/null
#reset_messages &> /dev/null