WARNING IN CASO DI PERDITE DI ACQUA

Tenere sotto controllo la nostra rete idrica per eventuali rotture nei tubi

Con il prezzo che ha ora l'acqua potabile (forse non proprio correlato al reale costo!) direi che non è il caso di lasciare che ci siano perdite di acqua dalle nostre tubazioni. Inoltre non dimentichiamo che tutte le gocce di acqua sprecate e non realmente utilizzate devono farci sentire colpevoli verso l'ambiente, anche se non viviamo in aree aride. Non serve girare la colpa sulle reti pubbliche che, si sa, hanno perdite strutturali che arrivano al 50%!!.
Dobbiamo quindi prestare attenzione a non lasciare che qualche buco o manicotto lento faccia girare il nostro contatore anche con i rubinetti chiusi (sapete come ci girano le .... quando poi riceviamo la bolletta?).
Da qualche hanno ho messo un misuratore di pressione sulla linea dell'acqua per monitorare la pressione dell'acqua calda (ed eventuali problemi della caldaia). Questo sensore legge comunque la pressione dell'acqua generale dalla casa.
Per tenere sotto controllo eventuali perdite ho deciso di creare un codice in python che mi rileva se la pressione scende sotto quella che ho quando tutti i rubinetti sono chiusi, per più di un tot di tempo.
Il concetto è semplice: se la pressione scende sotto i 7 bar (la pressione che ho in entrata) per più di 50 minuti, mandami un messaggio.

Qui di seguito la parte essenziale del codice:

def thread_prex():
while True:
if prex < 7 and flag_prex == False:
start_timeprex = datetime.datetime.now()
start_timeprex = start_timeprex.replace(microsecond=0)
while prex < 7 and flag_prex == False:
time.sleep(1)
end_timeprex = datetime.datetime.now()
end_timeprex = end_timeprex.replace(microsecond=0)
delta_timeprex = end_timeprex - start_timeprex
delta_timeprex = datetime.timedelta.total_seconds(delta_timeprex)

if delta_timeprex > 3000 and flag_prex == False:
flag_prex = True
mail_waterpipe_leak()
sendPush("WARNING WATER PIPES LEAK", "A water leak in pipes occoured!")
time.sleep(2)
continue
elif prex >= 7:
flag_prex = False
xp = threading.Thread(target=thread_prex)
xp.start()

Poiché ho inserito questa parte di codice in uno script che già monitora i consumi del gas e altri sensori (con pubblicazione json-ista su MQTT), per far sì che il check e l'eventuale rilevazione della pressione acqua non sia bloccante, ho creato un thread.
Ogni volta che la pressione scende sotto 7 bar (un rubinetto aperto o una perdita) inizia un conteggio. Questo conteggio è scandito da un time.sleep di 1 secondo che però, con altre parti del programma che stanno facendo altro, non è rigidamente l'intervallo di tempo esatto. Tuttavia da prove da me effettuate il conteggio dovrebbe fermarsi a circa 50 minuti (per questo controllo non è rilevante avere un tempo esatto).
Dopo questi "50 minuti", un tempo in cui la pressione dell'acqua è scesa continuamente sotto i 7 bar, il programma invia un pushover ed una mail di warning.
Il lavoro poi avverrà il giorno dopo, alla ricerca della perdita che, se siamo sfortunati, è pure interrata!!