Medidor Água - Companhia Saneamento - Caesb, Saneago, Sanepar, Sabesp, etc

Boa noite!
Alguém já encontrou uma solução para integrar medidores de água por pulso ou outro tipo para medir o consumo de água da residência ou empresa?

Aqui no fórum têm dois projetos que se complementam, o projeto do Leonardo (Como medir consumo da caixa d'água com Home Assistant) que mede o consumo de água e o projeto do Remontti (https://github.com/remontti/SensorAgua/) que além de medir o consumo, mede tb o nível da caixa dágua. Implementei os dois há 9 meses atrás e estão funcionando filé!

Boa tarde.
Eu comprei o kit (Hidrometro + Medidor de Agua) que se integra por MQTT ao Home Assistant.

Link no mercado livre:

Ainda estou aprimorando a integração mas achei interessante deixar aqui para o caso de mais alguém querer utilizá-lo.

O suporte da da IE Tecnologia (fabricante brasileira do medidor) está sendo muito bom.

Lovelace:
HidrometroLovelace

Configuration.yaml:
HidrometroConfigurationYAML

Estou tentando apromorar com o NodeRED:
HidrometroNodeRED

1 curtida

Ola achei isso bem interessante:

Pessoal,

Conclui a configuração do medidor de água com o hidrômetro de pulso que comentei acima.

Quem tiver curiosidade deixo abaixo em maiores detalhes.

Instalação dentro da casa de bomba:


Obs: o ideal seria instalar logo após a entrada da rua e antes da cisterna mas para evitar obras achei esse o melhor ponto para fazer a instalação na minha casa.
Como eu quase não utilizo a cisterna pois a água entra da rua direto para a minha caixa d’água e caso eu venha utilizar a água da cisterna ela também passa pelo hidrômetro dessa forma ficou boa a instalação para mim.

Obs2: a recepção do Wi-Fi desse medidor é razoável mas como no meu caso o roteador fica a 20m de distância e com parede e algumas telhas interferindo no sinal eu resolvi colocar um cabo até a casa de bomba com um segundo roteador (que eu tinha sobrando) expandindo o sinal do Wi-Fi.

Resultado no home assistant ficou assim:

Os passos para conectar o SM-WA (medidor Wi-Fi de água da IE Tecnologia foram bem simples:

1- ligar os fios e se conectar ao ponto de acesso do medidor pelo caminho 192.168.4.1
2- configurar pulsos por litros e rede Wi-Fi que ele deve se conectar
3- depois de conectado na minha rede busquei o IP dele nas configurações do meu roteador
4- acessar o medidor pelo ip dele
5- concluir a configuração com os acessos para que ele publique por MQTT
6- Criar um MQTT Sensor no configuration.YAML lendo o tópico que foi configurado no medidor
Obs: como esse tópico pública sempre 3 mensagens ao mesmo tempo (uma para o total medido em litros, outra para a vazao instantânea e uma outra que não descobri ainda eu precisei “quebrar” as mensagens em novas mensagens separando a medição em litros (consumo) da vazao instantânea. Fiz isso pelo node-RED.
7- separar mensagens recebidas pelo MQTT (tópico configurado no medidor) em duas novas mensagens (publicadas pelo Node-RED: consumo e vazao)
8- criei no configuration.YAML utility_meter para visualizar o consumo diário, semanal, mensal e anual
9- criação do lovelace para visualizar os dados no home assistant.

Telas:

Configurações do medidor pelo ip do mesmo na rede:

Node-RED E configuration.YAML:

1 curtida

Boa tarde, amigo tudo bem?

Estou fazendo o mesmo fluxo que o seu porém com o SM-3W que é o medidor elétrico da IE Tecnologia. Estou apanhando no fluxo “Filtro MQTT” do node red, teria como compartilhar o seu fluxo para que possa comparar com o meu?
Obrigado!!! Abs

Claro.

Filtro MQTT:

Não sei porque eu incluí o function node.
Acabei não fazendo nada com ele e apenas retorno a mensagem.
Como está funcionando dessa forma não vou mexer. kkk

Publica consumo por MQTT:

Muito obrigado! Segui exatamente a mesma lógica e deu certo.

1 curtida

Bom dia,

depois de dias batalhando e sem conseguir fazer a parte do switch (filtro mqtt) funcionar chego a seguinte conclusão:

  1 - Ou eu não entendi a logica do funcionamento 

                          ## OU ##

                  2 - Não funciona.

Segui exatamente a mesma logica e não consegui passar nada pelo filtro, tentei usar o injetor mas não deu certo.

Alguém que realmente saiba resolver ou me orientar na resolução do problema ? (não é meu caso, sou novato)

@lokss Testa asim:

[{"id":"8f4b77c78b39a174","type":"inject","z":"4fcf8d484e65f829","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"{\"variable\":\"L\",\"value\":7502,\"unit\":\"L\"}","payloadType":"json","x":230,"y":1180,"wires":[["d6ab4c9e8132bef4"]]},{"id":"7751a052780bfe2c","type":"inject","z":"4fcf8d484e65f829","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"{\"variable\":\"Q\",\"value\":0,\"unit\":\"L/h\"}","payloadType":"json","x":230,"y":1260,"wires":[["d6ab4c9e8132bef4"]]},{"id":"92c2f8b76516fbc6","type":"inject","z":"4fcf8d484e65f829","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"{\"variable\":\"P\",\"value\":1,\"unit\":\"1\"}","payloadType":"json","x":230,"y":1340,"wires":[["d6ab4c9e8132bef4"]]},{"id":"d6ab4c9e8132bef4","type":"switch","z":"4fcf8d484e65f829","name":"","property":"payload.variable","propertyType":"msg","rules":[{"t":"eq","v":"L","vt":"str"},{"t":"eq","v":"Q","vt":"str"},{"t":"eq","v":"P","vt":"str"}],"checkall":"true","repair":false,"outputs":3,"x":490,"y":1260,"wires":[["50fd8ed3d18033ec"],["260277745307ae92"],["74ecc9e61652fb26"]]},{"id":"50fd8ed3d18033ec","type":"debug","z":"4fcf8d484e65f829","name":"debug 110","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":690,"y":1180,"wires":[]},{"id":"260277745307ae92","type":"debug","z":"4fcf8d484e65f829","name":"debug 111","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":690,"y":1260,"wires":[]},{"id":"74ecc9e61652fb26","type":"debug","z":"4fcf8d484e65f829","name":"debug 112","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":690,"y":1340,"wires":[]}]

@vodopives
Além dos prints é bom compartilhar o fluxo, assim facilita para quem esta começando.

Funcionou. Fiz uns ajustes, criei 3 topicos, 1 para cada tipo de mensagem.
Ficou assim:

[{“id”:“e0ac055656065954”,“type”:“tab”,“label”:“Medidor de Agua”,“disabled”:false,“info”:“”,“env”:},{“id”:“3e84769837287e2c”,“type”:“mqtt in”,“z”:“e0ac055656065954”,“name”:“mqtt IN”,“topic”:“saneouro”,“qos”:“0”,“datatype”:“auto-detect”,“broker”:“9c40130b1968c426”,“nl”:false,“rap”:false,“rh”:0,“inputs”:0,“x”:90,“y”:260,“wires”:[[“3e089d50bee0ce5c”]]},{“id”:“982c8c8b25d583a6”,“type”:“mqtt out”,“z”:“e0ac055656065954”,“name”:“Publica Consumo”,“topic”:“/saneouro/consumo”,“qos”:“0”,“retain”:“”,“respTopic”:“”,“contentType”:“”,“userProps”:“”,“correl”:“”,“expiry”:“”,“broker”:“9c40130b1968c426”,“x”:750,“y”:160,“wires”:},{“id”:“fe1cddfa4ada1d62”,“type”:“mqtt out”,“z”:“e0ac055656065954”,“name”:“Publica vazão”,“topic”:“/saneouro/vazao”,“qos”:“0”,“retain”:“”,“respTopic”:“”,“contentType”:“”,“userProps”:“”,“correl”:“”,“expiry”:“”,“broker”:“9c40130b1968c426”,“x”:740,“y”:300,“wires”:},{“id”:“e55098f3eb14044b”,“type”:“debug”,“z”:“e0ac055656065954”,“name”:“vazao”,“active”:true,“tosidebar”:true,“console”:false,“tostatus”:false,“complete”:“payload”,“targetType”:“msg”,“statusVal”:“”,“statusType”:“auto”,“x”:710,“y”:260,“wires”:},{“id”:“72091fc48509b1e2”,“type”:“debug”,“z”:“e0ac055656065954”,“name”:“consumo”,“active”:true,“tosidebar”:true,“console”:false,“tostatus”:false,“complete”:“payload”,“targetType”:“msg”,“statusVal”:“”,“statusType”:“auto”,“x”:720,“y”:120,“wires”:},{“id”:“3e089d50bee0ce5c”,“type”:“switch”,“z”:“e0ac055656065954”,“name”:“filtro MQTT”,“property”:“payload.variable”,“propertyType”:“msg”,“rules”:[{“t”:“eq”,“v”:“L”,“vt”:“str”},{“t”:“eq”,“v”:“Q”,“vt”:“str”},{“t”:“eq”,“v”:“P”,“vt”:“str”}],“checkall”:“true”,“repair”:false,“outputs”:3,“x”:290,“y”:260,“wires”:[[“475da4ae7c15b768”],[“1101dcdbf0f6c33e”],[“d7cfdeb790efc572”]]},{“id”:“475da4ae7c15b768”,“type”:“function”,“z”:“e0ac055656065954”,“name”:“Variavel L”,“func”:“\nreturn msg;”,“outputs”:1,“noerr”:0,“initialize”:“”,“finalize”:“”,“libs”:,“x”:500,“y”:160,“wires”:[[“72091fc48509b1e2”,“982c8c8b25d583a6”]]},{“id”:“1101dcdbf0f6c33e”,“type”:“function”,“z”:“e0ac055656065954”,“name”:“Variavel Q”,“func”:“\nreturn msg;”,“outputs”:1,“noerr”:0,“initialize”:“”,“finalize”:“”,“libs”:,“x”:510,“y”:260,“wires”:[[“e55098f3eb14044b”,“fe1cddfa4ada1d62”]]},{“id”:“a6a2b6256363e139”,“type”:“debug”,“z”:“e0ac055656065954”,“name”:“Pulso”,“active”:true,“tosidebar”:true,“console”:false,“tostatus”:false,“complete”:“payload”,“targetType”:“msg”,“statusVal”:“”,“statusType”:“auto”,“x”:710,“y”:360,“wires”:},{“id”:“d7cfdeb790efc572”,“type”:“function”,“z”:“e0ac055656065954”,“name”:“Variavel P”,“func”:“\nreturn msg;”,“outputs”:1,“noerr”:0,“initialize”:“”,“finalize”:“”,“libs”:,“x”:500,“y”:360,“wires”:[[“a6a2b6256363e139”,“36a5d74268f32e63”]]},{“id”:“36a5d74268f32e63”,“type”:“mqtt out”,“z”:“e0ac055656065954”,“name”:“Publica vazão”,“topic”:“/saneouro/pulso_por_litro”,“qos”:“0”,“retain”:“”,“respTopic”:“”,“contentType”:“”,“userProps”:“”,“correl”:“”,“expiry”:“”,“broker”:“9c40130b1968c426”,“x”:740,“y”:400,“wires”:},{“id”:“9c40130b1968c426”,“type”:“mqtt-broker”,“name”:“Mosquitto”,“broker”:“192.168.15.100”,“port”:“1883”,“clientid”:“”,“autoConnect”:true,“usetls”:false,“protocolVersion”:“5”,“keepalive”:“60”,“cleansession”:true,“birthTopic”:“”,“birthQos”:“0”,“birthPayload”:“”,“birthMsg”:{},“closeTopic”:“”,“closeQos”:“0”,“closePayload”:“”,“closeMsg”:{},“willTopic”:“”,“willQos”:“0”,“willPayload”:“”,“willMsg”:{},“userProps”:“”,“sessionExpiry”:“”}]

Muito obrigado pela ajuda. Não sei nem como agradecer.

Pq ao invés de publicar um tópico vc não cria um sensor com o valor?

da pra fazer um sensor mqtt com template que ignora as menssagems dependendo do formato e eliminar e o node red

Como que faz ? Eu estou no aprendizado ainda…

1 curtida
[{"id":"8f4b77c78b39a174","type":"inject","z":"4fcf8d484e65f829","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"{\"variable\":\"L\",\"value\":7502,\"unit\":\"L\"}","payloadType":"json","x":190,"y":1340,"wires":[["d6ab4c9e8132bef4"]]},{"id":"7751a052780bfe2c","type":"inject","z":"4fcf8d484e65f829","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"{\"variable\":\"Q\",\"value\":0,\"unit\":\"L/h\"}","payloadType":"json","x":190,"y":1420,"wires":[["d6ab4c9e8132bef4"]]},{"id":"92c2f8b76516fbc6","type":"inject","z":"4fcf8d484e65f829","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"{\"variable\":\"P\",\"value\":1,\"unit\":\"1\"}","payloadType":"json","x":190,"y":1500,"wires":[["d6ab4c9e8132bef4"]]},{"id":"5e48ebdd1be30dce","type":"inject","z":"4fcf8d484e65f829","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"{\"variable\":\"L\",\"value\":800,\"unit\":\"L\"}","payloadType":"json","x":190,"y":1380,"wires":[["d6ab4c9e8132bef4"]]},{"id":"d6ab4c9e8132bef4","type":"switch","z":"4fcf8d484e65f829","name":"","property":"payload.variable","propertyType":"msg","rules":[{"t":"eq","v":"L","vt":"str"},{"t":"eq","v":"Q","vt":"str"},{"t":"eq","v":"P","vt":"str"}],"checkall":"true","repair":false,"outputs":3,"x":530,"y":1380,"wires":[["50fd8ed3d18033ec","6c2e676a04137c78"],["260277745307ae92"],["74ecc9e61652fb26"]]},{"id":"50fd8ed3d18033ec","type":"debug","z":"4fcf8d484e65f829","name":"debug 110","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":730,"y":1300,"wires":[]},{"id":"260277745307ae92","type":"debug","z":"4fcf8d484e65f829","name":"debug 111","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":730,"y":1380,"wires":[]},{"id":"74ecc9e61652fb26","type":"debug","z":"4fcf8d484e65f829","name":"debug 112","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":730,"y":1460,"wires":[]},{"id":"6c2e676a04137c78","type":"ha-sensor","z":"4fcf8d484e65f829","name":"teste litros","entityConfig":"ea81455f47be413e","version":0,"state":"payload.value","stateType":"msg","attributes":[],"inputOverride":"allow","outputProperties":[],"x":870,"y":1220,"wires":[[]]},{"id":"ea81455f47be413e","type":"ha-entity-config","server":"33803899.487d48","deviceConfig":"","name":"teste litros","version":"6","entityType":"sensor","haConfig":[{"property":"name","value":"teste litros"},{"property":"icon","value":""},{"property":"entity_category","value":""},{"property":"entity_picture","value":""},{"property":"device_class","value":""},{"property":"unit_of_measurement","value":"L"},{"property":"state_class","value":""}],"resend":false,"debugEnabled":false},{"id":"33803899.487d48","type":"server","name":"Home Assistant","version":5,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true,"heartbeat":false,"heartbeatInterval":"30","areaSelector":"friendlyName","deviceSelector":"friendlyName","entitySelector":"friendlyName","statusSeparator":"at: ","statusYear":"hidden","statusMonth":"short","statusDay":"numeric","statusHourCycle":"h23","statusTimeFormat":"h:m","enableGlobalContextStore":true}]

- name: "Sensor consumo”
  state_topic: "topico”
  unit_of_measurement: "L"
  value_template: "{{ value_json.value if value_json.variable==“L” else this.state}}"

E aí só fazer mesma coisa pros outros 2 não tem necessidade do node red.

@ariel_leventhal, Vou testar as duas sugestões, tanto a sua quanto a do @Walber.

Entendo que o sensor que você indicou a criação deva estar dentro de mqtt.yaml, certo ?
Estou recebendo este erro.

Invalid config for [mqtt]: invalid template (TemplateSyntaxError: unexpected char ‘“’ at 44) for dictionary value @ data[‘mqtt’][‘sensor’][1][‘value_template’]. Got ‘{{ value_json.value if value_json.variable==“L” else this.state}}’. (See /config/configuration.yaml, line 13)

CONFIGURATION.YAML
image

MQTT.YAML

MENSAGEM DE ERRO

Foi erro meu; aspas duplas dentro de aspas duplas.
Tenta com aspas simples: json_value.variable=='L'

Mesmo erro

É que eu digitei pelo celular a resposta foi as aspas erradas, se você copiou não vai ir tem que digitar
É essa aspas:’
Editei a repsosta antiga com as aspas corretas também