Medindo o volume da caixa de água

image

image

Este tutorial trata-se da instalação de sensor ultrassônico na caixa de água para medir o volume da mesma integrado ao home assistant e entidades de alerta para volume mínimo e máximo.

O código deste tutorial aplica-se a caixas de água com formato como o mostrado na figura a seguir:
394742_3
O cálculo do volume da caixa será aproximado para a forma de um tronco de cone.

O volume máximo calculado para a caixa será o volume útil (volume utilizável) com base nas características da mesma (principalmente a posição que a boia fecha e a posição das tubulações de saída e do extravasor/ladrão), sendo que pode ser diferente do volume nominal da caixa.

O volume morto é o volume de água que está abaixo da tubulação de saída.

1. Materiais utilizados:

  • Nodemcu (esp8266)
    image
  • Fonte 5V HiLink HLK-PM01
  • Módulo de sensor ultrasônico JSN-SR04T ou JSN-SR20-Y1.

    A principal diferança entre os dois sensores é que o modelo JSN-SR04T tem uma distância mínima de medição de aproximadamente 25 cm (na prática trabalha bem até 22~23 cm) e o modelo JSN-SR20-Y1 a distância mínima é de 2 cm (ainda não testei para validar). Logo você deve avaliar a distância que o sensor ficará do nível máximo da caixa para escolher.

2. Ligação do sensor:

A ligação do sensor ao nodemcu é bem simples:

  1. Ligar o pino 5V do sensor ao pino aos 5V da fonte ou ao pino Vin do nodemcu.
  2. Ligar o pino Trig do sensor ao pino D6 do nodemcu.
  3. Ligar o pino Echo do sensor ao pino D7 do nodemcu.
  4. Ligar o pino GND do sensor a um pino GND do nodemcu.

    Atenção: A ligação do sensor diretamente no pino do NodeMCU/ESP pode diminuir a vida útil do NodeMCU/ESP. Apesar de funcionar sem, é recomendado instalar um level shift converter de 5V para 3.3V.

O sensor deve ser instalado na parte central da tampa da caixa.

3. Informações da instalação e caixa de água:

É necessário obter alguns parâmetros físicos da caixa de água para o cálculo correto do nível e volume de água, a imagem abaixo mostra cada informação necessária com a respectiva sigla da configuração no código:
MedidasCaixa
Configurando os parâmetros físicos da caixa, este código se aplica ao cálculo do volume de caixas deste formato independente do capacidade da mesma (um ponto a se observar é a distância máxima que o sensor é capaz de medir).

4. Código ESPHOME:

Confirme os pinos ligados ao sensor, altere os parâmetros físicos da caixa de água e realize as configurações de rede.

A configuração do sensor ultrasônico no código está para utilizar a medida resultante da mediana móvel de 20 valores que são atualizados a casa 0,5 segundo. Isso descarta eventuais leituras com erros extremos, porém o tempo para o sensor refletir o novo nível será de 10 segundos.

substitutions:
  #Configurações da placa:
  Plataforma: ESP8266
  TipoPlaca: d1_mini
  
  #Configurações do dispositivo:
  hostname: 'casa_caixa_agua' #Hostname do dispositivo na rede
  PrefixoNome: "Caixa Água - "
  
  #Configurações da Rede:
  RedeWifi: !secret RedeWifi #Nome da rede wifi que o dispositivo irá se conectar
  SenhaWifi: !secret  SenhaWifi #Senha da rede wifi que o dispositivo irá se conectar
  SenhaWifiReconfig: !secret SenhaWifiReconfig #Senha do AP Wifi para reconfiguração do wifi do dispositivo
  EndConfig: ${hostname}.local #192.168.1.50 #Endereço para configuração (IP que o esp está acessível atualmente na rede), especialmente usado quando quer alterar o hostname via OTA
  WifiOculto: 'False' #Se a rede wifi está oculta defina como 'True'
  WifiFastConnect: 'False' #Se o esp realizará a conexão à rede wifi sem escanear as redes disponíveis defina como 'True'

  
  #Senhas
  SenhaAPI: !secret SenhaAPI #Senha para adicionar o esp no HA
  SenhaOTA: !secret SenhaOTA #Senha para atualizar o firmware do esp via OTA
  
  #Pinos do Sensor
  SensorTriggerPin: D6
  SensorEchoPin: D7
  
  #INFORMAÇÕES FÍSICAS DA CAIXA E DA INSTALAÇÃO DO SENSOR (medidas em metros):
  #Diametro interno da base da caixa (fundo)
  DD1: "0.95"
  #Diametro interno da borda superior sem a tampa
  DM: "1.22"
  #Distância entre o fundo da caixa e a borda sem a tampa 
  HB: "0.58"
  #Distância entre o fundo da caixa e a borda superior da tampa (onde o sensor será instalado)
  HT: "0.72"
  #Distância entre o fundo da caixa e o nível da base da tubulação de saída (altura da coluna de água do nível morto)
  HMT: "0.038"
  #Distância entre o fundo da caixa e o nível máximo normal (altura da água onde a boia é fechada)
  HM: "0.54"
  #Distância entre o sensor e o nível máximo normal (altura onde a boia é fechada até o sensor)
  HS: "0.22"
  #Distância entre o fundo da caixa e o nível de transbordamento (ou nível do extravasor/ladrão, o que o ocorrer primeiro)
  HMA: "0.55"

#Logger
  LoggerUART: UART0_SWAP
  LoggerLevel: DEBUG

esphome:
  name: $hostname
  platform: ${Plataforma}
  board: ${TipoPlaca}
  
wifi:
  networks:
  - ssid: ${RedeWifi}
    password: ${SenhaWifi}
    hidden: ${WifiOculto}
  fast_connect: ${WifiFastConnect}
  use_address: ${EndConfig}
  
  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: WIFI
    password: ${SenhaWifiReconfig}

#Habilita um AP Wifi para reconfigurar em caso de perda de conexão com a rede configurada
captive_portal:

#Habilita a atualização de firmware por OTA
ota:
  password: ${SenhaOTA}
  
#Habilita as mensagens de logs pela porta serial e via MQTT
logger:
  hardware_uart: ${LoggerUART}
  level: ${LoggerLevel}

#Habilita a api para comunicar com o Home Assistant
api:
  password: ${SenhaAPI}

switch:
############################# SENSORES DEVICE ##################################
  #Comando reinicilizar esp remotamente
  - platform: restart
    id: ${hostname}_restart
    name: ${PrefixoNome} Reiniciar
    icon: mdi:restart

text_sensor:
############################# SENSORES DEVICE ##################################
  #Informações da conexão wifi
  - platform: wifi_info
    #Endereço IP
    ip_address:
      id: ${hostname}_IP
      name: ${PrefixoNome} Endereço IP
      icon: mdi:ip-network
    #Nome da Rede
    ssid:
      id: ${hostname}_SSID
      name: ${PrefixoNome} Rede Wifi
      icon: mdi:wifi
  #Informação da versão da compilação
  - platform: version
    id: ${hostname}_versao
    name: ${PrefixoNome} Versão
    icon: mdi:information

binary_sensor:
############################# SENSORES DEVICE ##################################
  #Status (conectado ou desconectado)
  - platform: status
    id: ${hostname}_status
    name: ${PrefixoNome} Status
    device_class: connectivity

############################# ALERTA DE NIVEIS #################################
  #Nível mínimo de alerta
  - platform: template
    id: NAMIN
    name: ${PrefixoNome} Nível Mínimo de Alerta
    ##internal: True
    lambda: |-
      if (id(VAGUAP).state <= id(AMIN).state) {
        return true;
      } else {
        return false;
      }

  #Nível máximo de alerta
  - platform: template
    id: NAMAX
    name: ${PrefixoNome} Nível Máximo de Alerta
    ##internal: True
    lambda: |-
      if (id(VAGUAP).state >= id(AMAX).state) {
        return true;
      } else {
        return false;
      }
      
  #Erro medição
  - platform: template
    id: ERRO_MED
    name: ${PrefixoNome} Erro Medição
    #internal: True
    lambda: |-
      if (((id(HMED).state>((id(HM).state+id(HS).state)))) or (id(HMED).state<id(HS).state)) {
        return true;
      } else {
        return false;
      }

sensor:
############################# SENSORES DEVICE ##################################
  #Sensor Intensidade Sinal Wifi
  - platform: wifi_signal
    id: ${hostname}_wifi_sinal
    name: ${PrefixoNome} Intensidade Wifi
    icon: mdi:signal
    update_interval: 10s

############################ IMPORT VARIAVÉIS HA ###############################
  - platform: homeassistant
    id: AMIN
    name: ${PrefixoNome} Nível Mínimo de Alerta
    internal: true #false Apenas para debug
    entity_id: input_number.caixa_agua_alerta_nivel_minimo
    accuracy_decimals: 2

  - platform: homeassistant
    id: AMAX
    name: ${PrefixoNome} Nível Máximo de Alerta
    internal: true #false Apenas para debug
    entity_id: input_number.caixa_agua_alerta_nivel_maximo
    accuracy_decimals: 2

############################ SENSOR ULTRASONICO ################################
  - platform: ultrasonic
    id: HMED
    trigger_pin: ${SensorTriggerPin}
    echo_pin: ${SensorEchoPin}
    name: ${PrefixoNome} Distância Medida Sensor
    internal: false
    accuracy_decimals: 6
    update_interval: 0.5s
    filters:
      - median:
        window_size: 20
        send_every: 20
        send_first_at: 20
      
#################### INFORMAÇÕES FÍSICAS DA INSTALAÇÃO #########################
  #Diametro interno da base da caixa (fundo)
  - platform: template
    id: DD1
    name: ${PrefixoNome} Diâmentro Interno Base
    internal: true #false Apenas para debug
    unit_of_measurement: m
    lambda: return ${DD1};
    accuracy_decimals: 4
    update_interval: 1s

  #Diametro interno da borda superior sem a tampa
  - platform: template
    id: DM
    name: ${PrefixoNome} Diâmetro Interno Superior
    internal: true #false Apenas para debug
    unit_of_measurement: m
    lambda: return ${DM};
    accuracy_decimals: 4
    update_interval: 1s

  #Distância entre o fundo da caixa e a borda sem a tampa
  - platform: template
    id: HB
    name: ${PrefixoNome} Altura Interna até a borda 
    internal: true #false Apenas para debug
    unit_of_measurement: m
    lambda: return ${HB};
    accuracy_decimals: 4
    update_interval: 1s

  #Distância entre o fundo da caixa e a borda superior da tampa (onde o sensor será instalado)
  - platform: template
    id: HT
    name: ${PrefixoNome} Altura com Tampa
    internal: true #false Apenas para debug
    unit_of_measurement: m
    lambda: return ${HT};
    accuracy_decimals: 4
    update_interval: 1s
    
  #Distância entre o fundo da caixa e o nível da base da tubulação de saída (altura da coluna de água do nível morto)
  - platform: template
    id: HMT
    name: ${PrefixoNome} Coluna de Água Nível Morto
    internal: true #false Apenas para debug
    unit_of_measurement: m
    lambda: return ${HMT};
    accuracy_decimals: 4
    update_interval: 1s
  
  #Distância entre o fundo da caixa e o nível máximo normal (altura da água onde a boia é fechada)
  - platform: template
    id: HM
    name: ${PrefixoNome} Coluna de Água Útil
    internal: true #false Apenas para debug
    unit_of_measurement: m
    lambda: return ${HM};
    accuracy_decimals: 4
    update_interval: 1s
  
  #Distância entre o sensor e o nível máximo normal (altura onde a boia é fechada até o sensor)
  - platform: template
    id: HS
    name: ${PrefixoNome} Distância Sensor Nível Máximo
    internal: true #false Apenas para debug
    unit_of_measurement: m
    lambda: return ${HS};
    accuracy_decimals: 4
    update_interval: 1s

  #Distância entre o fundo da caixa e o nível de transbordamento (ou nível do extravasor/ladrão, o que o ocorrer primeiro)
  - platform: template
    id: HMA
    name: ${PrefixoNome} Coluna de Água Transbordamento
    internal: true #false Apenas para debug
    unit_of_measurement: m
    lambda: return ${HMA};
    accuracy_decimals: 4
    update_interval: 1s
    
######################### CÁLCULOS AUXILIARES ##################################
  #Coluna de água medida (descontado a distância do sensor)
  - platform: template
    id: H
    name: ${PrefixoNome} Coluna de Água Atual
    internal: false
    unit_of_measurement: m
    lambda: return (id(HM).state+id(HS).state-id(HMED).state);
    accuracy_decimals: 4
    update_interval: 1s
    
  #Raio menor do reservatório
  - platform: template
    id: R1
    name: ${PrefixoNome} Raio Menor 
    internal: true #false Apenas para debug
    unit_of_measurement: m
    lambda: return (id(DD1).state/2);
    accuracy_decimals: 4
    update_interval: 1s
  
  #Raio maior máximo do reservatório
  - platform: template
    id: RM
    name: ${PrefixoNome} Raio Maior Máximo Físico
    internal: true #false Apenas para debug
    unit_of_measurement: m
    lambda: return (id(DM).state/2);
    accuracy_decimals: 4
    update_interval: 1s
  
  #Raio maior máximo de acordo com o nível máximo de água
  - platform: template
    id: R2M
    name: ${PrefixoNome} Raio Maior com Nível Máximo
    internal: true #false Apenas para debug
    unit_of_measurement: m
    lambda: return (id(R1).state+(id(HM).state*tan(atan(((id(DM).state-id(DD1).state)/2)/(id(HB).state)))));
    accuracy_decimals: 4
    update_interval: 1s
  
  #Raio maior atual do reservatório (de acordo com o nível da água)
  - platform: template
    id: R2
    name: ${PrefixoNome} Raio Maior com o Nível Atual
    internal: true #false Apenas para debug
    unit_of_measurement: m
    lambda: return (id(R1).state+(id(H).state*tan(atan(((id(DM).state-id(DD1).state)/2)/(id(HB).state)))));
    accuracy_decimals: 4
    update_interval: 1s
  
  #Raio maior o volume morto
  - platform: template
    id: RHMT
    name: ${PrefixoNome} Raio Maior no Nível Mínimo
    internal: true #false Apenas para debug
    unit_of_measurement: m
    lambda: return (id(R1).state+(id(HMT).state*tan(atan(((id(DM).state-id(DD1).state)/2)/(id(HB).state)))));
    accuracy_decimals: 4
    update_interval: 1s
    
########################## CÁLCULOS DOS VOLUMES#################################
  #Volume com o reservatório cheio (altura da borda)
  - platform: template
    id: VTT
    name: ${PrefixoNome} Volume com o Reservatório Cheio
    internal: true
    unit_of_measurement: litros
    lambda: return ((1.047197*id(HB).state)*((id(RM).state*id(RM).state)+(id(RM).state*id(R1).state)+(id(R1).state*id(R1).state))*1000)-id(VMT).state;
    accuracy_decimals: 0
    update_interval: 1s

  #Volume de água do volume morto (abaixo da saída)
  - platform: template
    id: VMT
    name: ${PrefixoNome} Volume Morto
    internal: false
    unit_of_measurement: litros
    lambda: return ((1.047197*id(HMT).state)*((id(RHMT).state*id(RHMT).state)+(id(RHMT).state*id(R1).state)+(id(R1).state*id(R1).state))*1000);
    accuracy_decimals: 0
    update_interval: 1s

  #Volume de água com o nível máximo
  - platform: template
    id: VT
    name: ${PrefixoNome} Volume com o Nível Máximo
    internal: false
    unit_of_measurement: litros
    lambda: return ((1.047197*id(HM).state)*((id(R2M).state*id(R2M).state)+(id(R2M).state*id(R1).state)+(id(R1).state*id(R1).state))*1000)-id(VMT).state;
    accuracy_decimals: 0
    update_interval: 1s
    
  #Volume de Água
  - platform: template
    id: VAGUA
    name: ${PrefixoNome} Volume
    unit_of_measurement: litros
    lambda: |-
      if ( (((1.047197*id(H).state)*((id(R2).state*id(R2).state)+(id(R2).state*id(R1).state)+(id(R1).state*id(R1).state))*1000)-id(VMT).state) <0 ) {
        return 0;
      } else if  (  (((1.047197*id(H).state)*((id(R2).state*id(R2).state)+(id(R2).state*id(R1).state)+(id(R1).state*id(R1).state))*1000)-id(VMT).state) > id(VTT).state) {
        return id(VTT).state;
      } else {
        return (((1.047197*id(H).state)*((id(R2).state*id(R2).state)+(id(R2).state*id(R1).state)+(id(R1).state*id(R1).state))*1000)-id(VMT).state);
      }
    accuracy_decimals: 0
    update_interval: 1s

  #Volume Percentual
  - platform: template
    id: VAGUAP
    name: ${PrefixoNome} Volume Percentual
    unit_of_measurement: "%"
    lambda: return ((id(VAGUA).state / id(VT).state)*100);
    accuracy_decimals: 1
    update_interval: 1s

Todas essas informações importantes (senhas OTA e API, configuração da rede wifi, etc) estão armazenadas no arquivo secrets.yaml (ver aqui e aqui para mais detalhes de configuração e uso).

4. Criação dos input number:

Código para os input number de configuração do alerta de nível (os mesmos id_entity usados aqui devem ser usados no código do esphome, nos ids AMIN e AMAX):

input_number:
  caixa_agua_alerta_nivel_minimo:
    icon: mdi:percent
    name: Caixa de Água Nível  Mínimo
    min: 0
    max: 110
    step: 1
    mode: slider
    
  caixa_agua_alerta_nivel_maximo:
    icon: mdi:percent
    name: Caixa de Água Nível Máximo
    min: 0
    max: 110
    step: 1
    mode: slider

Você pode criar os input number incluindo o código acima no arquivo de configuração do home assistant ou manualmente acessando Configurações > Ajudantes > Adicionar Ajudante > Número.

5. Lovelace

Card para exibir as principais informações sobre o nível no lovelace:

Código:

type: grid
columns: 1
title: Caixa de Água
cards:
  - type: grid
    columns: 2
    cards:
      - type: entity
        entity: sensor.caixa_agua_volume
        state_color: true
        name: Volume
        icon: mdi:water
      - type: entity
        entity: binary_sensor.caixa_agua_erro_medicao
        state_color: true
        name: Erro de Medição
        icon: mdi:water-alert
    square: false
  - type: gauge
    entity: sensor.caixa_agua_volume_percentual
    min: 0
    max: 100
    needle: true
    severity:
      green: 75
      yellow: 25
      red: 0
    name: Volume Percentual
  - type: entities
    entities:
      - entity: input_number.caixa_agua_alerta_nivel_maximo
        icon: mdi:water-percent-alert
      - entity: binary_sensor.caixa_agua_nivel_maximo_de_alerta
        icon: mdi:water-alert-outline
      - entity: input_number.caixa_agua_alerta_nivel_minimo
        icon: mdi:water-percent-alert
      - entity: binary_sensor.caixa_agua_nivel_minimo_de_alerta
        icon: mdi:water-alert-outline
    state_color: true
    title: Níveis de Alerta
square: false

Card simples para exibir todas as entidades implementadas no lovelace:

Código:

type: grid
columns: 1
title: Caixa de Água
cards:
  - type: entities
    entities:
      - binary_sensor.caixa_agua_erro_medicao
      - sensor.caixa_agua_volume
      - sensor.caixa_agua_volume_percentual
      - sensor.caixa_agua_volume_com_o_nivel_maximo
      - sensor.caixa_agua_volume_morto
    title: Volume
  - type: entities
    entities:
      - entity: sensor.caixa_agua_distancia_medida_sensor
      - entity: sensor.caixa_agua_coluna_de_agua_atual
    title: Sensor
  - type: entities
    entities:
      - entity: input_number.caixa_agua_alerta_nivel_maximo
      - entity: input_number.caixa_agua_alerta_nivel_minimo
      - entity: binary_sensor.caixa_agua_nivel_maximo_de_alerta
      - entity: binary_sensor.caixa_agua_nivel_minimo_de_alerta
    title: Níveis de Alerta
  - type: entities
    entities:
      - entity: binary_sensor.caixa_agua_status
      - entity: sensor.caixa_agua_rede_wifi
      - entity: sensor.caixa_agua_intensidade_wifi
      - entity: sensor.caixa_agua_endereco_ip
      - entity: switch.caixa_agua_reiniciar
      - entity: sensor.caixa_agua_versao
    title: Informações do Dispositivo
square: false

6. Erro de Medição:

A entidade erro de medição para ser verdadeira verifica uma das seguintes condições:

  • Se a distância medida pelo sensor é maior que a altura do nível máximo + a distância do sensor ao nível máximo.
  • Se a distância medida pelo sensor é menor que a distância entre o sensor e o nível máximo.
13 Likes

Cara, QUE OBRA DE ENGENHARIA, PARABÉNS MAN!!!

5 Likes

Meus parabéns de verdade, seu trabalho ficou ótimo.
Acabei de fazer um sensor para a caixa d’agua com Nodemcu mas estou usando um potenciômetro e um nível de boia para medir. Vou tentar adaptar o seu trabalho ao meu sensor, não sei se vai dar certo, quanto terminar posto aqui.
De qualquer forma te agradeço muito por esse seu trabalho que vai ajudar a mim e a muitos outros amigos aqui do fórum.
Grande abraço e muito obrigado.

1 Like

Acabei de comprar os itens, uma pergunta, como você posicionou o sensor dentro da caixa d’gua?

Abrços

A instalação do sensor é no centro da tampa, mas dependendo do local da sua caixa d’água a água que acumula na tampa pode influenciar a medição. Para evitar isso o pessoal tem usado instalar o sensor no centro da tampa mas afastado dela um pouco com o auxílio de um suporte.

O melhor é você ir testando e ajustando até chegar a uma medição estável.

oi Douglas, Obrigado pela resposta.
Mas agora fiquei na dúvida você instala o sensor em cima da tampa ou precisa furar a tampa para instalar o sensor?
Quanto a acuracidade dos dados? Seu experiência diz que os números são confiaveis?

Abraços

1 Like

No meu caso eu furei a tampa, mas alguns confeccionam um suporte de modo a fixar na borda da caixa e o sensor ficar no centro.

Realmente, uma obra prima! Esta de parabens!

Só imaginei um pequeno problema: o nodemcu, assim como o d1 mini e outros modulos esp trabalham com 3.3v de tensao nos pinos e vc ligou a alimentação da placa do sensor ultrassom utilizando 5v. No pino trigger td bem, pois é o node quem vai acina-lo com 3.3v…mas no pino echo, 99% dos modulos utiliza a mesma tensao vdd de entrada do modulo…neste caso, 5v. Seu modulo node continua funcionando?

Sim, continua funcionando.


Conforme eu imaginei, o seu node nao deve durar muito tempo. A saida echo tem como referencia VDD, que no seu caso ( e no meu teste) é 5v. Esp8266/esp32 operam com 3.3v, com pequenos picos de 5v…por isso nao deve ter queimado ainda. Recomendo altamente usar um level shift converter.

1 Like

Incluí esta observação no tutorial.
Obrigado.

Em dez/21 vai completar 2 anos que implantei o projeto Caixa d’água (volume e vazão) e até hj funcionando muito bem. O módulo ultrassônico a prova d’água alimentado em 5Vcc e o pino Echo enviando dados para o NodeMCU, cujos IOs na teoria suportam tensões máximas de 3,3Vcc.
image

1 Like

Também resolvi usar sem a conversão. Mas deixei o alerta no post para que cada um resolva conscientemente usar ou não.

1 Like

De qualquer forma, como é um requisito recorrente nos meus projetos, acabei desenvolvendo uma placa adaptadora para o ESP32…ela não tem nada de complexo, só possui uma fonte AC/DC ‘embutida’ e cerca de 10 level-shitft converters ligados aos primeiros 10 pinos de IO do ESP32.
É basicamente como se você pegasse 10 shift-converters e ligasse no ESP32…no meu caso, já estão na mesma placa!
Também deixei headers de 5v, gnd e dois específicos para i2c (para ligar vários dispositivos ao mesmo tempo).
É a primeira versão, bem beta mesmo…mas esta funcionando corretamente.
Na próxima irei adicionar um fusível AC e talvez um varistor para proteção extra.

Com relação ao sensor na caixa, eu ainda não instalei com essa placa, utilizando os 5v ao invés dos 3v. Porém, pesquisando um pouco nos fóruns, descobri que esse tipo de sensor tem um problema: condensação…e é exatamente o que esta acontecendo na minha caixa.
Como ela é fechada quase que totalmente (só possui o cano do ladrão), a condensação dentro da caixa é enorme…e quando vc abre a tampa, ela esta cheia de gotículas de agua…logo, o sensor que esta nela também…e com certeza essas gotículas atrapalham na leitura da distancia.
Vejam, o sensor é a prova d’água…ele não será danificado…mas a leitura não será precisa ou real, já que várias gotículas na frente do sensor vão alterar a distancia.

1 Like

Valeu por compartilhar o conhecimento @douglasit dei uma ajeitada no lovelace pessoal aqui, vou deixar o código abaixo para caso queiram.

Consumo de Água:

type: vertical-stack
cards:
  - type: custom:button-card
    color_type: label-card
    icon: mdi:water-pump
    layout: icon_name_state
    name: Consumo de Água
    styles:
      card:
        - height: 40px
        - background-color: var(--card-background-color)
        - font-size: 14px
        - padding: 8px
        - color: var(--state-icon-active-color)
        - box-shadow: 4px 0px 0px 0px var(--state-icon-active-color)
  - type: horizontal-stack
    cards:
      - type: custom:mini-graph-card
        color_thresholds:
          - color: '#FF0000'
            value: 500
          - color: '#FF9933'
            value: 250
          - color: '#E5FFCC'
            value: 75
        entities:
          - sensor.sensor_caixa_d_agua_fluxo_de_vazao
        font_size: 80
        height: 110
        hours_to_show: 12
        line_width: 1
        name: Vazão (24h)
        points_per_hour: 10
        show:
          extrema: true
          fill: true
          average: true
  - type: horizontal-stack
    cards:
      - type: custom:mini-graph-card
        color_thresholds:
          - color: '#C62828'
            value: 1000
          - color: '#FF8000'
            value: 500
          - color: '#66FF66'
            value: 400
        entities:
          - entity: sensor.sensor_caixa_d_agua_temperatura_da_agua
            index: 0
        font_size: 50
        hours_to_show: 24
        line_width: 2
        points_per_hour: 2
        name: Temperatura da Água
        show:
          icon: false
          state: true
          name: true
      - type: custom:mini-graph-card
        color_thresholds:
          - color: '#C62828'
            value: 500
          - color: '#FF8000'
            value: 250
          - color: '#66FF66'
            value: 125
        entities:
          - entity: sensor.sensor_caixa_d_agua_volume_percentual
            index: 0
        font_size: 50
        hours_to_show: 24
        line_width: 2
        points_per_hour: 2
        name: Nível da Água
        show:
          icon: false
          state: true
          name: true
  - cards:
      - entity: sensor.consumo_agua_diario
        name: Diário
        show_icon: false
        show_state: true
        styles:
          name:
            - font-weight: 500
          state:
            - font-size: 12px
        type: custom:button-card
      - entity: sensor.consumo_agua_semanal
        icon: hass:water
        name: Semanal
        show_icon: false
        show_state: true
        styles:
          name:
            - font-weight: 500
          state:
            - font-size: 12px
        type: custom:button-card
      - entity: sensor.consumo_agua_mensal
        icon: hass:water
        name: Mensal
        show_icon: false
        show_state: true
        styles:
          name:
            - font-weight: 500
          state:
            - font-size: 12px
        type: custom:button-card
      - entity: sensor.consumo_agua_anual
        icon: hass:water
        name: Anual
        show_icon: false
        show_state: true
        styles:
          name:
            - font-weight: 500
          state:
            - font-size: 12px
        type: custom:button-card
    type: horizontal-stack
  - cards:
      - entity: sensor.agua_total_gasta_hoje
        type: custom:button-card
        show_icon: true
        show_name: false
        show_state: true
        units: ' '
        icon: mdi:currency-brl
        styles:
          icon:
            - margin-left: 3px
            - height: 20px
          state:
            - margin-right: '-30px'
            - margin-top: '-20px'
            - font-size: 18px
      - entity: sensor.agua_total_gasta_semanal
        type: custom:button-card
        show_icon: true
        show_name: false
        show_state: true
        units: ' '
        styles:
          icon:
            - margin-left: 3px
            - height: 20px
          state:
            - margin-right: '-30px'
            - margin-top: '-20px'
            - font-size: 18px
      - entity: sensor.agua_total_gasta_mensal
        type: custom:button-card
        show_icon: true
        show_name: false
        show_state: true
        units: ' '
        styles:
          icon:
            - margin-left: 3px
            - height: 20px
          state:
            - margin-right: '-30px'
            - margin-top: '-20px'
            - font-size: 18px
      - entity: sensor.agua_total_gasta_anual
        type: custom:button-card
        show_icon: true
        show_name: false
        show_state: true
        units: ' '
        styles:
          icon:
            - margin-left: 3px
            - height: 20px
          state:
            - margin-right: '-30px'
            - margin-top: '-20px'
            - font-size: 18px
    type: horizontal-stack

Informações da Caixa D’ Água:

type: vertical-stack
cards:
  - type: custom:button-card
    color_type: label-card
    icon: mdi:water-boiler
    layout: icon_name_state
    name: Informações da Caixa D' Água
    styles:
      card:
        - height: 40px
        - background-color: var(--card-background-color)
        - font-size: 14px
        - padding: 8px
        - color: var(--state-icon-active-color)
        - box-shadow: 4px 0px 0px 0px var(--state-icon-active-color)
  - type: custom:mini-graph-card
    entities:
      - entity: sensor.sensor_caixa_d_agua_volume
        name: Volume
        color: green
      - entity: sensor.sensor_caixa_d_agua_volume_com_o_nivel_maximo
        name: Volume com o Nível Máximo
    font_size: 80
    height: 110
    hours_to_show: 24
    line_width: 1
    unit: L
    name: Volume
    points_per_hour: 1
    show:
      extrema: true
      fill: true
      average: true
  - type: custom:mini-graph-card
    entities:
      - entity: sensor.sensor_caixa_d_agua_coluna_de_agua_atual
        name: Coluna de Água
        color: green
      - entity: sensor.sensor_caixa_d_agua_distancia_medida_sensor
        name: Distância de Medida do Sensor
    font_size: 80
    height: 110
    hours_to_show: 24
    line_width: 1
    name: Distância de Medida dos Sensores
    points_per_hour: 1
    value_factor: 2
    unit: CM
    show:
      extrema: true
      fill: true
      average: true

Informações de Água:

type: vertical-stack
cards:
  - type: custom:button-card
    color_type: label-card
    icon: mdi:water
    layout: icon_name_state
    name: Informações de Água
    styles:
      card:
        - height: 40px
        - background-color: var(--card-background-color)
        - font-size: 14px
        - padding: 8px
        - color: var(--state-icon-active-color)
        - box-shadow: 4px 0px 0px 0px var(--state-icon-active-color)
  - type: entities
    entities:
      - entity: input_number.tarifa_agua_litro
      - entity: input_number.caixa_agua_alerta_nivel_maximo
      - entity: binary_sensor.sensor_caixa_d_agua_nivel_maximo_de_alerta
      - entity: input_number.caixa_agua_alerta_nivel_minimo
      - entity: binary_sensor.sensor_caixa_d_agua_nivel_minimo_de_alerta
      - entity: switch.sensor_caixa_d_agua_reiniciar
        name: Reiniciar Monitoramento

2 Likes

Top demais essa configuração… já penso em fazer adaptação para outras aplicações
obrigado por compartilhar

1 Like

Projeto TOP, fiz aqui com ESP01, mas o ESPHOME está travando o HA ao fazer download… Várias vezes tentando e trava tudo… só consigo voltar o HA desligando e ligando a alimentação dele.

1 Like

O meu aqui usa bastante CPU ao compilar, você usa outra aplicação que demande muito processamento? Talvez pará-la durante a compilação ajude.

Aqui eu tenho 2 Rasp rodando aplicações diferentes… um oficial da casa e outro que uso pra testes de desenvolvimento. No rasp da casa, tem bastante coisa rodando junto mas ele compila… já no rasp de testes e desenvolvimento não tem nada rodando junto mas é justamente nele que trava no passo de compilação.

Os dois são o mesmo hardware/modelo? Então conseguiu compilar no “oficial da casa”?