Pessoal, já acompanho aqui faz um bom tempo, sou usuário de home assistant a mais de 8 anos, segue uma contribuição para o forum de um projeto que desenvolvi recentemente.
Transformando um hidrômetro mecânico em um medidor de água Zigbee
Eu queria monitorar o consumo de água da minha casa pelo Home Assistant, mas tinha um problema simples: meu hidrômetro é um modelo mecânico convencional e não possui nenhuma saída eletrônica.
A ideia inicial parecia simples: de alguma forma, detectar o movimento do ponteiro do hidrômetro e transformar isso em uma informação digital.
O problema foi encontrar uma maneira de fazer isso de forma confiável, barata e sem precisar modificar o hidrômetro.
A solução: CNY70
Depois de algumas tentativas, cheguei ao CNY70, um pequeno sensor óptico reflexivo.
A ideia é posicionar o sensor próximo ao ponteiro/disco que se movimenta dentro do hidrômetro. Conforme a parte refletiva passa em frente ao sensor, a leitura muda. Aquele do lado direito, cada volta dele representa 10 litros.
Isso permitiu transformar o movimento mecânico em uma sequência de eventos que o ESP32 consegue interpretar.
A leitura do sensor sofre pequenas variações, então utilizei dois limites para criar uma espécie de histerese. Dessa forma, pequenas oscilações não são interpretadas como vários movimentos.
No meu caso, a relação utilizada ficou:
1 volta = 10 litros
Então, cada volta detectada pelo sensor acrescenta 10 litros ao consumo acumulado.
Construção da capa e posicionamento do CNY70
Uma das partes mais importantes do projeto foi conseguir posicionar o CNY70 exatamente no ponto em que ele pudesse enxergar o movimento do mecanismo do hidrômetro.
Para isso, fiz uma pequena capa para acomodar e proteger o sensor, utilizando Durepoxi para construir o suporte e manter o CNY70 na posição correta.
A ideia foi fazer uma solução simples, barata e que pudesse ser adaptada diretamente ao hidrômetro, sem precisar modificar o mecanismo interno.
Suporte construído com Durepoxi para posicionar o CNY70 sobre o mecanismo do hidrômetro.
Diagrama de ligação
A ligação do CNY70 ao ESP32-C6 é bastante simples. O sensor é utilizado como um detector óptico: conforme o mecanismo do hidrômetro se movimenta, a reflexão da luz muda e essa variação é lida pelo ESP32 através da entrada analógica.
Diagrama de ligação do CNY70 utilizado no projeto.
A partir dessa leitura, o ESP32 consegue identificar cada volta do mecanismo e transformar esse movimento em consumo de água.
Do sensor ao ESP32
Usei um ESP32-C6 para fazer a leitura do CNY70.
O sensor fornece uma leitura analógica, que é feita pelo ADC do ESP32. O firmware verifica periodicamente essa leitura e identifica a passagem da parte metálica do ponteiro por diferença de contraste e reflexão da luz.
O funcionamento básico ficou assim:
Hidrômetro mecânico
↓
CNY70
↓
ADC
↓
ESP32-C6
↓
Detecta movimento
↓
+10 litros
Transformando em um dispositivo Zigbee
O ESP32-C6 possui rádio Zigbee, então utilizei o ESP-IDF junto com o Zigbee SDK da Espressif.
Em vez de criar um protocolo próprio, utilizei o Simple Metering cluster, que já é destinado a dispositivos de medição.
O consumo acumulado é enviado através do atributo:
CurrentSummationDelivered
Assim, o dispositivo não precisa ficar enviando uma mensagem específica inventada pelo projeto. Ele se comporta como um dispositivo Zigbee de medição.
E se faltar energia?
Esse era outro ponto importante.
Não queria que o hidrômetro voltasse a zero toda vez que o ESP32 reiniciasse ou a bateria acabasse.
Por isso, o valor acumulado é armazenado na memória não volátil (NVS) do ESP32.
O fluxo ficou:
Movimento detectado
↓
+10 litros
↓
Atualiza contador
↓
Salva na memória
↓
Envia pelo Zigbee
Assim, depois de um reinício, o dispositivo consegue continuar a partir do valor anteriormente armazenado.
Pensando em bateria
Como a ideia é que o dispositivo possa funcionar com bateria, também trabalhei com o Light Sleep do ESP32-C6.
O objetivo é não deixar o microcontrolador trabalhando em potência máxima o tempo todo.
Ainda estou trabalhando na otimização do consumo, principalmente porque existe um equilíbrio entre:
- frequência de leitura do sensor;
- funcionamento do CNY70;
- comunicação Zigbee;
- tempo acordado;
- tempo em Light Sleep.
Essa parte ainda está em desenvolvimento, mas a arquitetura do projeto já considera o funcionamento com baixo consumo.
Zigbee2MQTT
Para integrar o dispositivo ao meu sistema, utilizei o Zigbee2MQTT.
Como o meu dispositivo é um projeto próprio, criei um external converter chamado:
watermeter.mjs
Esse arquivo faz a ponte entre o dispositivo Zigbee e o Zigbee2MQTT.
Ele interpreta o valor enviado pelo CurrentSummationDelivered e disponibiliza duas informações:
water_consumed
→ consumo total em m³
water_consumed_liters
→ consumo total em litros
Assim, no Home Assistant posso trabalhar diretamente com o consumo de água sem precisar interpretar os dados brutos do Zigbee.
Resultado
No final, consegui transformar:
Hidrômetro mecânico
↓
CNY70
↓
ESP32-C6
↓
Zigbee
↓
Zigbee2MQTT
↓
Home Assistant
em um medidor de água integrado à minha automação residencial.
O mais interessante para mim foi conseguir fazer isso sem substituir o hidrômetro e sem precisar de um sensor específico e caro.
O CNY70 acabou sendo uma solução bastante simples para transformar o movimento mecânico em uma informação que o ESP32 consegue interpretar.
Para quem quiser fazer algo parecido
O projeto ainda está em desenvolvimento, mas deixei o código disponível no GitHub:
No repositório estão o firmware do ESP32-C6 e também o external converter utilizado pelo Zigbee2MQTT.
Para reproduzir a ideia, os principais componentes são:
- ESP32-C6
- CNY70
- Alguns resistores
- Um hidrômetro mecânico
- Coordenador Zigbee
- Zigbee2MQTT
A parte mais importante é o posicionamento do CNY70 em relação ao elemento móvel do hidrômetro. O sensor precisa enxergar uma diferença suficientemente clara entre as posições do ponteiro/disco.
A relação de 10 litros por volta também depende do hidrômetro utilizado. Portanto, quem fizer uma adaptação diferente provavelmente precisará determinar primeiro quantos litros correspondem a cada movimento completo.
Próximos passos
Ainda quero melhorar algumas coisas, principalmente:
- consumo de energia;
- autonomia com bateria;
- calibração do sensor;
- instalação física do CNY70;
- testes de longo prazo.
Mas a parte principal já está funcionando: um hidrômetro mecânico comum agora consegue fornecer seu consumo de água via Zigbee para o Home Assistant.







