Agradecimento ao Leonardo Pereira e a Iulisloi Zacarias.
Bibliotecas
MQTT - como instalar -> https://www.youtube.com/watch?v=GMMH6qT8_f4
ESP - como instalar -> https://www.youtube.com/watch?v=4d8joORYTIA&t=1s
Wi-Fi Manager como instalar -> https://www.youtube.com/watch?v=wWO9n5DnuLA
OTA -> já está incluida no IDE do Arudino
NodeMcu Lua ESP8266 ESP-12F http://abre.ai/ajcq
Sensor Fluxo de Vazão http://abre.ai/ajcr
Ultrasonic Module HC-SR04 http://abre.ai/ajct
Mas recomendo comprar o aprova d'agua Ultrasonic Module SN-SR04T http://abre.ai/ajcv
Ligação Sensor de Fluxo:
Fio Vermelho --> Pino VIN 5V Fio Preto --> Pino GND (Qualquer um) Fio Amarelo --> Pino D7 (GPIO13)
Ligação Sensor HC-SR04:
Vcc --> Pino VIN 5V Trig --> Pino D6 (GPIO12) Echo --> Pino D5 (GPIO14) Gnd --> Pino Gnd (Qualquer um)
OBS: Alimentar ambos sensores com 5V //VIN
É importante que você altere as principais configurações no código!
#define MQTT_USERNAME "usuario" #define MQTT_PASSWORD "senha" const String HOSTNAME = "SensorAgua"; // Nome do Host e tambem do AP para fazer a configuração inicial. const char *OTA_PASSWORD = ""; // Senha para conectar no AP (Atualizar o Firmware Over the Air) const char *MQTT_SERVER = "192.168.87.5"; // IP ou DNS do Broker MQTT (IP DO HA)
Ajuste a contagem dos pulsos para saber a sua vazão corretamente. vazao = contaPulso / 6.6; para sua realidade, no meu caso o sensor é 3/4 onde frequencia: F=6.6*Q(Q=L/MIN)
CONECTANDO WIFI
Ao enviar pela primeira vez seu ESP vai ficar em modo AP, com seu celular conecte no nome de sinal abra o 192.168.4.1 e defina o nome e senha de sua rede wifi.
Para resetar as configurações do wifi localize a linha wifiManager.resetSettings();
1 - descomentar a linha wifiManager.resetSettings()
2 - fazer Upload do código para o ESP
3 - voltar a comentar a linha e enviar novamente o código para o ESP
Configuração no Home Assistant:
input_text:
text_valor_agua:
name: "Valor litro"
initial: "0.007"
sensor:
- platform: mqtt
state_topic: 'SensorAgua/contagem'
name: 'Vazão de água'
icon: mdi:water
unit_of_measurement: 'litros'
value_template: '{{ value_json.vazao }}'
- platform: mqtt
state_topic: 'SensorAgua/contagem'
name: 'Vazão de água (Méd/Min)'
icon: mdi:water-pump
unit_of_measurement: 'litros/min'
value_template: '{{ value_json.consumo_agua }}'
- platform: mqtt
state_topic: 'SensorAgua/contagem'
name: "Distancia D'agua"
icon: mdi:ruler
unit_of_measurement: 'cm'
value_template: '{{ value_json.distancia }}'
- platform: template
sensors:
# desconta o espaco da tampa ate a agua que no meu caso é 27cm
nivel_real_variavel:
friendly_name_template: "Nível Real Var"
unit_of_measurement: 'cm'
icon_template: 'mdi:waves'
value_template: "{{ ( float(states.sensor.distancia_d_agua.state) - 27 ) }}"
# Evita valor negativos
nivel_real:
friendly_name_template: "Nível Real"
unit_of_measurement: 'cm'
icon_template: 'mdi:waves'
value_template: >-
{% if states('sensor.nivel_real_variavel')|float < 1 %}
0
{% else %}
{{ states('sensor.nivel_real_variavel') }}
{% endif %}
# Centimetros Real * 100 / 61cm que é o total qnd vazia
caixa_dagua:
friendly_name_template: "Caixa D'agua"
unit_of_measurement: '%'
icon_template: 'mdi:waves'
value_template: "{{ (100 - ( float(states.sensor.nivel_real.state) * 100 / 60 )) | round(2) }}"
# Logo se em 61 cm tem 2000 litros, logo 2000/61 = 32,7868852459
caixa_dagua_litros:
friendly_name_template: "Caixa D'agua"
unit_of_measurement: 'L'
icon_template: 'mdi:cup-water'
value_template: "{{ (2000 - ( float(states.sensor.nivel_real.state) * 32.787 )) | round(0) }}"
# Gasto com aguas
agua_gasta_valor_dia:
friendly_name: "Água gasta hoje"
icon_template: mdi:cash-usd-outline
unit_of_measurement: 'R$'
value_template: "{{ ( float(states.sensor.agua_gasta_dia.state) * float(states.input_text.text_valor_agua.state) ) | round(2) }}"
agua_gasta_valor_mes:
friendly_name: "Água gasta no mês"
icon_template: mdi:cash-usd-outline
unit_of_measurement: 'R$'
value_template: "{{ ( float(states.sensor.agua_gasta_mes.state) * float(states.input_text.text_valor_agua.state) ) | round(2) }}"
agua_gasta_valor_semana:
friendly_name: "Água gasta na semana"
icon_template: mdi:cash-usd-outline
unit_of_measurement: 'R$'
value_template: "{{ ( float(states.sensor.agua_gasta_semana.state) * float(states.input_text.text_valor_agua.state) ) | round(2) }}"
agua_gasta_valor_ano:
friendly_name: "Água gasta no ano"
icon_template: mdi:cash-usd-outline
unit_of_measurement: 'R$'
value_template: "{{ ( float(states.sensor.agua_gasta_ano.state) * float(states.input_text.text_valor_agua.state) ) | round(2) }}"
utility_meter:
agua_gasta_dia:
source: sensor.vazao_de_agua
cycle: daily
agua_gasta_semana:
source: sensor.vazao_de_agua
cycle: weekly
agua_gasta_mes:
source: sensor.vazao_de_agua
cycle: monthly
agua_gasta_ano:
source: sensor.vazao_de_agua
cycle: yearly
automation:
#notificação quando o nível começar a baixar
- alias: 'Notifica caixa dagua nível 90%'
trigger:
platform: template
value_template: "{{states('sensor.caixa_dagua')|float < 90 }}"
for:
minutes: 1
action:
service: notify.telegramtodos
data_template:
message: "Caixa D'agua começou a esvaziar! Nível em {{states('sensor.caixa_dagua')|int}}%, aproximadamente {{states('sensor.caixa_dagua_litros')|int}} litros. Parece que faltou água!"
- alias: 'Notifica caixa dagua nível 50%'
trigger:
platform: template
value_template: "{{states('sensor.caixa_dagua')|float < 50 }}"
for:
minutes: 1
action:
service: notify.telegramtodos
data_template:
message: "Nível da caixa d'agua em {{states('sensor.caixa_dagua')|int}}%, aproximadamente {{states('sensor.caixa_dagua_litros')|int}} litros"
- alias: 'Notifica caixa dagua nível 25%'
trigger:
platform: template
value_template: "{{states('sensor.caixa_dagua')|float < 25 }}"
for:
minutes: 1
action:
service: notify.telegramtodos
data_template:
message: "Nível da caixa d'agua em {{states('sensor.caixa_dagua')|int}}%, aproximadamente {{states('sensor.caixa_dagua_litros')|int}} litros"
CARDs:entities:
- entity: input_text.text_valor_agua
- entity: sensor.vazao_de_agua
name: Vazão de água por segundo
- type: section
- entity: sensor.vazao_de_agua_med_min
- label: Hoje
type: section
- entity: sensor.agua_gasta_dia
name: Litros
- entity: sensor.agua_gasta_valor_dia
name: Valor
- label: Semana
type: section
- entity: sensor.agua_gasta_semana
name: Litros
- entity: sensor.agua_gasta_valor_semana
name: Valor
- label: Mês
type: section
- entity: sensor.agua_gasta_mes
name: Litros
- entity: sensor.agua_gasta_valor_mes
name: Valor
- label: Ano
type: section
- entity: sensor.agua_gasta_ano
name: Litros
- entity: sensor.agua_gasta_valor_ano
name: Valor
show_header_toggle: false
title: Consumo de Água
type: entities
cards:
- entities:
- entity: sensor.distancia_d_agua
name: Sensor Ultrasonico
- entity: sensor.nivel_real
icon: 'mdi:waves'
title: Caixa D'água
show_header_toggle: false
type: entities
- cards:
- entity: sensor.caixa_dagua_litros
name: Litros
max: 2000
min: 0
severity:
green: 1500
red: 500
yellow: 1000
type: gauge
- entity: sensor.caixa_dagua
name: Nível
max: 100
min: 0
severity:
green: 90
red: 20
yellow: 50
type: gauge
type: horizontal-stack
- cards:
- entities:
- color: '#18FFFF'
entity: sensor.vazao_de_agua
show_state: true
font_size: 90
height: 195
hours_to_show: 6
line_width: 2
name: Vazão (6h)
points_per_hour: 25
show:
extrema: true
fill: true
type: 'custom:mini-graph-card'
type: horizontal-stack
type: vertical-stack
cards:
- entities:
- entity: input_text.text_valor_agua
- entity: sensor.vazao_de_agua
name: Vazão de água por segundo
- type: section
- entity: sensor.vazao_de_agua_med_min
show_header_toggle: false
title: Consumo de Água
type: entities
- cards:
- entity: sensor.agua_gasta_dia
name: Hoje
show_state: true
icon: 'mdi:water'
styles:
card:
- height: 78px
name:
- font-weight: 500
- font-size: 14px
state:
- font-size: 11px
type: 'custom:button-card'
- entity: sensor.agua_gasta_semana
name: Semana
show_state: true
icon: 'mdi:water'
styles:
card:
- height: 78px
name:
- font-weight: 500
- font-size: 14px
state:
- font-size: 11px
type: 'custom:button-card'
- entity: sensor.agua_gasta_mes
name: Mês
show_state: true
icon: 'mdi:water'
styles:
card:
- height: 78px
name:
- font-weight: 500
- font-size: 14px
state:
- font-size: 11px
type: 'custom:button-card'
- entity: sensor.agua_gasta_ano
name: Ano
show_state: true
icon: 'mdi:water'
styles:
card:
- height: 78px
name:
- font-weight: 500
- font-size: 14px
state:
- font-size: 11px
type: 'custom:button-card'
type: horizontal-stack
- cards:
- entity: sensor.agua_gasta_valor_dia
name: Hoje
show_state: true
styles:
card:
- height: 68px
name:
- font-weight: 500
- font-size: 14px
state:
- font-size: 11px
type: 'custom:button-card'
- entity: sensor.agua_gasta_valor_semana
name: Semana
show_state: true
styles:
card:
- height: 68px
name:
- font-weight: 500
- font-size: 14px
state:
- font-size: 11px
type: 'custom:button-card'
- entity: sensor.agua_gasta_valor_mes
name: Mês
show_state: true
styles:
card:
- height: 68px
name:
- font-weight: 500
- font-size: 14px
state:
- font-size: 11px
type: 'custom:button-card'
- entity: sensor.agua_gasta_valor_ano
name: Ano
show_state: true
styles:
card:
- height: 68px
name:
- font-weight: 500
- font-size: 14px
state:
- font-size: 11px
type: 'custom:button-card'
type: horizontal-stack
type: vertical-stack





