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