Aim of this share is to show You how I managed to get semi water-leak automation.
First thing You have to get is reading from Your watermeter. I do recommend this (addon available) plus rtl-sdr or CUL(less CPU USAGE) device. You should also create daily “utility meter” for that meter. It is not precise but there were few times when garden hose got loose and I spent few cubic meters on behalf of this…
First You have to set up 7 helpers “input_number” type “number” lets say waterX (x = from 1 to 7).
OK then we have to get this automations that will cascade (is that right word ?) values before end of the day:
- id: '1609184636677'
alias: Woda zapis stanu z kolejnych dni
description: ''
trigger:
- platform: time
at: '23:59:00'
condition: []
action:
- service: input_number.set_value
entity_id: input_number.water7
data:
value: '{{ states(''input_number.water6'') | float }}'
- service: input_number.set_value
data:
value: '{{ states(''input_number.water5'') | float }}'
entity_id: input_number.water6
- service: input_number.set_value
data:
value: '{{ states(''input_number.water4'') | float }}'
entity_id: input_number.water5
- service: input_number.set_value
data:
value: '{{ states(''input_number.water3'') | float }}'
entity_id: input_number.water4
- service: input_number.set_value
data:
value: '{{ states(''input_number.water2'') | float }}'
entity_id: input_number.water3
- service: input_number.set_value
data:
value: '{{ states(''input_number.water1'') | float }}'
entity_id: input_number.water2
- service: input_number.set_value
data:
value: '{{ states(''sensor.weekly_wodomierz'') | float }}'
entity_id: input_number.water1
mode: single
Simple right ?
Ok then We have to send notification when today value exceeds by 5% (You can adjust that, this is stored in 1.05 ) mean value from previous week:
- id: '1609181281068'
alias: Wodomierz przekroczenie zużycia średniego o 5 % #watermeter exceeded usage by %5
description: ''
trigger:
- platform: time_pattern
minutes: /20
condition:
- condition: template
value_template: '{{ (states(''sensor.daily_wodomierz'') | float) > ((((states(''input_number.water1'')
| float) + (states(''input_number.water2'')| float) + (states(''input_number.water3'')|
float) + (states(''input_number.water4'')| float) + (states(''input_number.water5'')|
float) + (states(''input_number.water6'')| float) + (states(''input_number.water7'')|
float)) / 7) * 1.05) }}'
action:
- service: notify.telefony #notify phones
data:
title: Możliwy wyciek #possible leakage
message: Zużycie wody o {{ ((((states('sensor.daily_wodomierz') | float) -
((states('input_number.water1') | float) + (states('input_number.water2')|
float) + (states('input_number.water3')| float) + (states('input_number.water4')|
float) + (states('input_number.water5')| float) + (states('input_number.water6')|
float) + (states('input_number.water7')| float)) / 7) * 1000 ) | int) }} litrów
większe niż średnia z ostatniego tygodnia. # Water use X liters higher than mean value form previous week.
- delay: 02:00:00
mode: queued
max: 5
This of course will not fully replace having… a leak sensor but still, better than nothing.