{"id":37,"date":"2026-10-05T14:20:14","date_gmt":"2026-10-05T14:20:14","guid":{"rendered":"https:\/\/sfelectronica.com\/bit\/?p=37"},"modified":"2026-10-05T14:20:14","modified_gmt":"2026-10-05T14:20:14","slug":"sistema-agua-esphome-home-assistant","status":"publish","type":"post","link":"https:\/\/sfelectronica.com\/bit\/sistema-agua-esphome-home-assistant\/","title":{"rendered":"Sistema de \u00c1gua com ESPHome e Home Assistant"},"content":{"rendered":"\n<p class=\"hbc-lede wp-block-paragraph\"><strong>O WaterSystem<\/strong> transforma o quadro de entrada de \u00e1gua de uma casa num sistema vigiado a tempo inteiro: um <strong>ESP32<\/strong> a correr <strong>ESPHome<\/strong> mede o caudal instant\u00e2neo e o consumo acumulado, l\u00ea a temperatura da \u00e1gua da rede e a do dep\u00f3sito de AQS com duas sondas <em>Dallas<\/em>, comanda uma <strong>v\u00e1lvula motorizada de corte geral<\/strong> com dois rel\u00e9s em interlock e dispara um alarme local se o sensor de inunda\u00e7\u00e3o detetar \u00e1gua no ch\u00e3o. Tudo local, sem nuvem e sem subscri\u00e7\u00f5es.<\/p>\n\n\n\n<div class=\"hbc-specs\">\n\n\t<div class=\"hbc-specs__item\"><span class=\"hbc-specs__key\">Projeto<\/span><span class=\"hbc-specs__val\">WaterSystem<\/span><\/div>\n\n\t<div class=\"hbc-specs__item\"><span class=\"hbc-specs__key\">Hardware<\/span><span class=\"hbc-specs__val\">ESP32 \u00b7 caudal\u00edmetro \u00b7 2\u00d7 DS18B20 \u00b7 v\u00e1lvula motorizada \u00b7 sensor de inunda\u00e7\u00e3o<\/span><\/div>\n\n\t<div class=\"hbc-specs__item\"><span class=\"hbc-specs__key\">Firmware<\/span><span class=\"hbc-specs__val\">ESPHome (min. 2024.6.0)<\/span><\/div>\n\n\t<div class=\"hbc-specs__item\"><span class=\"hbc-specs__key\">Plataforma<\/span><span class=\"hbc-specs__val\">Home Assistant<\/span><\/div>\n\n\t<div class=\"hbc-specs__item\"><span class=\"hbc-specs__key\">Ficheiro<\/span><span class=\"hbc-specs__val\">SistemaAgua.yaml<\/span><\/div>\n\n\t<div class=\"hbc-specs__item\"><span class=\"hbc-specs__key\">Rede<\/span><span class=\"hbc-specs__val\">IP est\u00e1tico \u00b7 AP + captive portal<\/span><\/div>\n\n\t<div class=\"hbc-specs__item\"><span class=\"hbc-specs__key\">Nuvem<\/span><span class=\"hbc-specs__val\">Nenhuma \u2014 100% local<\/span><\/div>\n\n<\/div>\n\n\n\n<div class=\"hbc-toc\">\n\n\t<p class=\"hbc-toc__title\">Neste artigo<\/p>\n\n\t<ol>\n\n\t\t<li><a href=\"#visao-geral\">Vis\u00e3o geral do sistema<\/a><\/li>\n\n\t\t<li><a href=\"#hardware\">Hardware e esquema de liga\u00e7\u00e3o<\/a><\/li>\n\n\t\t<li><a href=\"#gpio\">Mapeamento dos GPIO<\/a><\/li>\n\n\t\t<li><a href=\"#yaml\">O YAML, bloco a bloco<\/a><\/li>\n\n\t\t<li><a href=\"#caudal\">Caudal e consumo acumulado<\/a><\/li>\n\n\t\t<li><a href=\"#temperatura\">Temperaturas com OneWire<\/a><\/li>\n\n\t\t<li><a href=\"#valvula\">V\u00e1lvula de corte com interlock<\/a><\/li>\n\n\t\t<li><a href=\"#inundacao\">Alarme de inunda\u00e7\u00e3o<\/a><\/li>\n\n\t\t<li><a href=\"#rede\">Rede, gest\u00e3o e atualiza\u00e7\u00f5es<\/a><\/li>\n\n\t\t<li><a href=\"#instalacao\">Instala\u00e7\u00e3o passo a passo<\/a><\/li>\n\n\t\t<li><a href=\"#home-assistant\">No Home Assistant<\/a><\/li>\n\n\t\t<li><a href=\"#diagnostico\">Diagn\u00f3stico e boas pr\u00e1ticas<\/a><\/li>\n\n\t\t<li><a href=\"#conclusao\">Conclus\u00e3o<\/a><\/li>\n\n\t<\/ol>\n\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"visao-geral\">Vis\u00e3o geral do sistema<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A ideia \u00e9 simples: em vez de comprar um contador inteligente fechado, <strong>instrumenta-se o quadro de entrada de \u00e1gua<\/strong>. O caudal\u00edmetro de impulsos mede o d\u00e9bito instant\u00e2neo, duas sondas DS18B20 leem a temperatura da \u00e1gua da rede e a do dep\u00f3sito de AQS, uma v\u00e1lvula motorizada de esfera corta a \u00e1gua a partir de dois rel\u00e9s e um sensor de humidade vigia o ch\u00e3o. O ESP32 exp\u00f5e tudo ao Home Assistant como sensores, switches e um bin\u00e1rio de alarme.<\/p>\n\n\n\n<ul class=\"hbc-stats wp-block-list\">\n\t<li><strong>2<\/strong><span>Rel\u00e9s para a v\u00e1lvula motorizada (abre\/fecha)<\/span><\/li>\n\t<li><strong>2<\/strong><span>Sondas DS18B20 no mesmo barramento OneWire<\/span><\/li>\n\t<li><strong>1<\/strong><span>Caudal\u00edmetro de impulsos com integra\u00e7\u00e3o em L e m\u00b3<\/span><\/li>\n\t<li><strong>0<\/strong><span>Servi\u00e7os externos ou depend\u00eancia da nuvem<\/span><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">O resultado \u00e9 um sistema h\u00edbrido: a \u00e1gua continua a chegar normalmente, mas passas a ter hist\u00f3rico de consumo, temperatura da rede, temperatura do AQS e um bot\u00e3o de corte geral no telem\u00f3vel \u2014 mais um alarme que dispara se houver fuga.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"hardware\">Hardware e esquema de liga\u00e7\u00e3o<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Nada de ex\u00f3tico. Tudo cabe numa caixa de embutir junto ao quadro de entrada, alimentado por uma fonte de 5&nbsp;V:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\t<li><strong>Placa ESP32<\/strong> \u2014 o YAML usa <code>board: esp32dev<\/code>. O ESP32 \u00e9 obrigat\u00f3rio aqui: o <code>pulse_counter<\/code> exige um contador de hardware.<\/li>\n\t<li><strong>Caudal\u00edmetro de impulsos<\/strong> (tipo YF-B1\/S201, ~396 impulsos\/litro) \u2014 entra no GPIO33 com pull-up.<\/li>\n\t<li><strong>Duas sondas DS18B20<\/strong> \u2014 no barramento OneWire do GPIO4, uma na entrada da rede e outra no dep\u00f3sito de AQS.<\/li>\n\t<li><strong>V\u00e1lvula motorizada de esfera<\/strong> com dois fios de comando (abre\/fecha), acionada por dois rel\u00e9s opto-isolados.<\/li>\n\t<li><strong>Sensor de inunda\u00e7\u00e3o<\/strong> normalmente fechado \u2014 no GPIO26, com dispositivo <code>moisture<\/code>.<\/li>\n\t<li><strong>Buzzer\/ sirene de alarme<\/strong> \u2014 no GPIO27, pulsa em ciclo quando h\u00e1 fuga.<\/li>\n\t<li><strong>Fonte de 5&nbsp;V DC<\/strong>, caixa de embutir e cabo de liga\u00e7\u00e3o.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-figure hbc-screen\"><img decoding=\"async\" src=\"https:\/\/sfelectronica.com\/bit\/wp-content\/uploads\/2026\/10\/watersystem-esquema-ligacao.png\" alt=\"Esquema de liga\u00e7\u00e3o do WaterSystem: fonte de 5 V, ESP32, caudal\u00edmetro, duas sondas DS18B20, m\u00f3dulo de dois rel\u00e9s para a v\u00e1lvula motorizada, sensor de inunda\u00e7\u00e3o e sirene.\" width=\"1200\" height=\"760\" loading=\"lazy\" \/><figcaption>Liga\u00e7\u00e3o completa: ESP32 no centro, caudal\u00edmetro e sondas \u00e0 esquerda, rel\u00e9s e v\u00e1lvula \u00e0 direita<\/figcaption><\/figure>\n\n\n\n<div class=\"hbc-callout hbc-callout--warn\">\n\t<span class=\"hbc-callout__icon\">!<\/span>\n\t<p><strong>Nota de hardware:<\/strong> o caudal\u00edmetro trabalha tipicamente entre 3,3&nbsp;V e 5&nbsp;V, mas conv\u00e9m confirmar a tens\u00e3o de sa\u00edda do modelo que usares e, se for 5&nbsp;V, colocar um divisor de tens\u00e3o ou um level shifter antes do GPIO33 \u2014 o ESP32 n\u00e3o tolera 5&nbsp;V nas entradas.<\/p>\n\t<p>Trabalha sempre com o quadro de \u00e1gua <strong>fechado e sem press\u00e3o<\/strong> durante a instala\u00e7\u00e3o da v\u00e1lvula. Se a v\u00e1lvula motorizada tiver tempos de curso pr\u00f3prios, respeita-os: n\u00e3o alimentes as duas bobinas em simult\u00e2neo.<\/p>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"gpio\">Mapeamento dos GPIO<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">O YAML fixa todos os pinos, com coment\u00e1rios. \u00c9 este o mapa completo:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Sinal<\/th><th>GPIO<\/th><th>Dire\u00e7\u00e3o<\/th><th>Fun\u00e7\u00e3o<\/th><\/tr><\/thead><tbody><tr><td><strong>Barramento OneWire<\/strong><\/td><td>GPIO4<\/td><td>Barramento<\/td><td>Duas sondas DS18B20 (AQS + Rede)<\/td><\/tr><tr><td><strong>Caudal\u00edmetro<\/strong><\/td><td>GPIO33<\/td><td>Entrada (pull-up)<\/td><td>Impulsos de caudal, 396&nbsp;imp\/L<\/td><\/tr><tr><td><strong>Abrir V\u00e1lvula<\/strong><\/td><td>GPIO32<\/td><td>Sa\u00edda \u2192 rel\u00e9<\/td><td>Rel\u00e9 <code>relay1<\/code>, interlock com <code>relay2<\/code><\/td><\/tr><tr><td><strong>Fechar V\u00e1lvula<\/strong><\/td><td>GPIO25<\/td><td>Sa\u00edda \u2192 rel\u00e9<\/td><td>Rel\u00e9 <code>relay2<\/code>, interlock com <code>relay1<\/code><\/td><\/tr><tr><td><strong>Alarme \/ Sirene<\/strong><\/td><td>GPIO27<\/td><td>Sa\u00edda \u2192 buzzer<\/td><td>Pulsa enquanto houver fuga<\/td><\/tr><tr><td><strong>Sensor de \u00c1gua<\/strong><\/td><td>GPIO26<\/td><td>Entrada (invertida)<\/td><td>Dete\u00e7\u00e3o de inunda\u00e7\u00e3o (<code>moisture<\/code>)<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Duas prote\u00e7\u00f5es merecem destaque. A primeira \u00e9 o <strong>interlock<\/strong>: os dois rel\u00e9s da v\u00e1lvula partilham o grupo <code>interlock_group [relay1, relay2]<\/code>, pelo que \u00e9 imposs\u00edvel pedir \u00ababrir\u00bb e \u00abfechar\u00bb ao mesmo tempo \u2014 a v\u00e1lvula nunca fica com as duas bobinas energizadas. A segunda \u00e9 a <strong>invers\u00e3o<\/strong> do sensor de inunda\u00e7\u00e3o: o contacto \u00e9 normalmente fechado e s\u00f3 abre quando deteta \u00e1gua, por isso <code>inverted: true<\/code> faz com que <code>on<\/code> signifique exatamente \u00abh\u00e1 \u00e1gua no ch\u00e3o\u00bb.<\/p>\n\n\n\n<div class=\"hbc-callout hbc-callout--tip\">\n\t<span class=\"hbc-callout__icon\">OK<\/span>\n\t<p>O sensor de inunda\u00e7\u00e3o tem filtros <code>delayed_on: 100ms<\/code> e <code>delayed_off: 100ms<\/code>. Sem isto, uma gota isolada ou uma vibra\u00e7\u00e3o no contacto dispararia o alarme. Com o filtro, s\u00f3 uma presen\u00e7a de \u00e1gua confirmada durante 100&nbsp;ms \u00e9 publicada.<\/p>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"yaml\">O YAML, bloco a bloco<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">O ficheiro <code>SistemaAgua.yaml<\/code> est\u00e1 estruturado por blocos funcionais. Estes s\u00e3o os excertos que interessam, do caudal\u00edmetro \u00e0 v\u00e1lvula:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Caudal e consumo acumulado<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">O <code>pulse_counter<\/code> l\u00ea os impulsos do caudal\u00edmetro e divide-os pelo fator de calibra\u00e7\u00e3o (396 impulsos por litro, ou 6,6&nbsp;impulsos por segundo a 1&nbsp;L\/min, vezes 60). Dois sensores <code>integration<\/code> derivam da\u00ed o total em litros e em metros c\u00fabicos:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">sensor:\n  - platform: pulse_counter\n    pin:\n      number: <span class=\"hljs-number\">33<\/span>\n      mode:\n        input: <span class=\"hljs-keyword\">true<\/span>\n        pullup: <span class=\"hljs-keyword\">true<\/span>\n    unit_of_measurement: <span class=\"hljs-string\">'L\/min'<\/span>\n    accuracy_decimals: <span class=\"hljs-number\">2<\/span>\n    id: water_usage\n    name: <span class=\"hljs-string\">\"Debito agua instantaneo\"<\/span>\n    update_interval: <span class=\"hljs-number\">5<\/span>s\n    filters:\n      - lambda: <span class=\"hljs-keyword\">return<\/span> (x \/ <span class=\"hljs-number\">396<\/span>); <span class=\"hljs-comment\"># 396 = 6.6 * 60<\/span>\n\n  - platform: integration\n    name: <span class=\"hljs-string\">\"Total em M3\"<\/span>\n    unit_of_measurement: <span class=\"hljs-string\">'m\u00b3'<\/span>\n    accuracy_decimals: <span class=\"hljs-number\">2<\/span>\n    sensor: water_usage\n    device_class: water\n    state_class: total_increasing\n    time_unit: min\n    filters:\n      - lambda: <span class=\"hljs-keyword\">return<\/span> (x \/ <span class=\"hljs-number\">1000<\/span>);\n\n  - platform: integration\n    name: <span class=\"hljs-string\">\"Utiliza\u00e7\u00e3o Total\"<\/span>\n    unit_of_measurement: <span class=\"hljs-string\">'L'<\/span>\n    accuracy_decimals: <span class=\"hljs-number\">2<\/span>\n    sensor: water_usage\n    state_class: total_increasing\n    device_class: water\n    time_unit: min<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">Temperaturas com OneWire<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">O barramento OneWire no GPIO4 serve duas sondas DS18B20, cada uma identificada pelo seu endere\u00e7o de 64 bits. Uma mede a \u00e1gua que vem da rede p\u00fablica, a outra a \u00e1gua quente do dep\u00f3sito de AQS. Cada sonda tem o seu pr\u00f3prio <code>update_interval<\/code> \u2014 60&nbsp;s chega para monitoriza\u00e7\u00e3o dom\u00e9stica.<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">one_wire:\n  - platform: gpio\n    pin: GPIO4\n\nsensor:\n  - platform: dallas_temp\n    address: 0x8400000139764228\n    name: Temperatura AQS\n    id: taqs\n    update_interval: 60s\n\n  - platform: dallas_temp\n    address: 0x90000001396C8F28\n    name: Temperatura Rede\n    id: tin\n    update_interval: 60s<\/code><\/span><\/pre>\n\n\n<div class=\"hbc-callout\">\n\t<span class=\"hbc-callout__icon\">i<\/span>\n\t<p><strong>Endere\u00e7os das sondas:<\/strong> cada DS18B20 tem um endere\u00e7o \u00fanico gravado em f\u00e1brica, vis\u00edvel nos logs do ESPHome quando o barramento arranca. Substitui os valores <code>0x8400\u2026<\/code> e <code>0x9000\u2026<\/code> pelos das tuas sondas \u2014 se ficarem trocados, AQS e Rede aparecem invertidos no Home Assistant.<\/p>\n<\/div>\n\n\n\n<h3 class=\"wp-block-heading\">V\u00e1lvula de corte com interlock<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">A v\u00e1lvula motorizada de esfera tem dois fios de comando. Dois rel\u00e9s bastam: um d\u00e1 o pulso de abertura, o outro o de fecho. O <strong>interlock<\/strong> impede que ambos estejam ativos ao mesmo tempo, protegendo o motor da v\u00e1lvula:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">switch<\/span>:\n  - platform: gpio\n    <span class=\"hljs-attr\">pin<\/span>: GPIO32\n    <span class=\"hljs-attr\">name<\/span>: <span class=\"hljs-string\">\"Abrir Valvula\"<\/span>\n    <span class=\"hljs-attr\">id<\/span>: relay1\n    <span class=\"hljs-attr\">interlock<\/span>: &amp;interlock_group &#91;relay1, relay2]\n\n  - platform: gpio\n    <span class=\"hljs-attr\">pin<\/span>: GPIO25\n    <span class=\"hljs-attr\">name<\/span>: <span class=\"hljs-string\">\"Fechar Valvula\"<\/span>\n    <span class=\"hljs-attr\">id<\/span>: relay2\n    <span class=\"hljs-attr\">interlock<\/span>: *interlock_group<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<div class=\"hbc-callout hbc-callout--tip\">\n\t<span class=\"hbc-callout__icon\">OK<\/span>\n\t<p>Se a v\u00e1lvula for do tipo <em>on\/off<\/em> simples (s\u00f3 corta ou d\u00e1 passagem, sem posi\u00e7\u00f5es interm\u00e9dias), podes ligar apenas um rel\u00e9 e usar o outro como reserva. O interlock continua a fazer sentido para nunca deixares os dois contactos fechados em simult\u00e2neo.<\/p>\n<\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Alarme de inunda\u00e7\u00e3o<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">O sensor de humidade \u00e9 um bin\u00e1rio normalmente fechado: em condi\u00e7\u00f5es normais est\u00e1 <code>on<\/code>; quando deteta \u00e1gua, abre. Com <code>inverted: true<\/code>, o Home Assistant passa a ver <code>on<\/code> exatamente quando h\u00e1 fuga \u2014 e o automa\u00e7\u00e3o local dispara a sirene em ciclo, alternando entre <code>on<\/code> e <code>off<\/code> para chamar a aten\u00e7\u00e3o sem ficar sempre a apitar:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">switch<\/span>:\n  - platform: gpio\n    <span class=\"hljs-attr\">pin<\/span>: GPIO27\n    <span class=\"hljs-attr\">name<\/span>: <span class=\"hljs-string\">\"Alarme Inunda\u00e7\u00e3o\"<\/span>\n    <span class=\"hljs-attr\">id<\/span>: buzinunda\n\n<span class=\"hljs-attr\">binary_sensor<\/span>:\n  - platform: gpio\n    <span class=\"hljs-attr\">pin<\/span>:\n      number: GPIO26\n      <span class=\"hljs-attr\">inverted<\/span>: <span class=\"hljs-literal\">true<\/span>\n    <span class=\"hljs-attr\">name<\/span>: <span class=\"hljs-string\">\"Sensor \u00c1gua\"<\/span>\n    <span class=\"hljs-attr\">device_class<\/span>: moisture\n    <span class=\"hljs-attr\">id<\/span>: leak\n    <span class=\"hljs-attr\">filters<\/span>:\n      - delayed_on: <span class=\"hljs-number\">100<\/span>ms\n      - delayed_off: <span class=\"hljs-number\">100<\/span>ms\n    <span class=\"hljs-attr\">on_press<\/span>:\n      - <span class=\"hljs-keyword\">while<\/span>:\n          condition:\n            binary_sensor.is_on: leak\n          <span class=\"hljs-attr\">then<\/span>:\n            - <span class=\"hljs-keyword\">switch<\/span>.turn_on: buzinunda\n            - delay: <span class=\"hljs-number\">200<\/span>ms\n            - <span class=\"hljs-keyword\">switch<\/span>.turn_off: buzinunda\n            - delay: <span class=\"hljs-number\">100<\/span>ms\n            - <span class=\"hljs-keyword\">switch<\/span>.turn_on: buzinunda\n            - delay: <span class=\"hljs-number\">200<\/span>ms\n            - <span class=\"hljs-keyword\">switch<\/span>.turn_off: buzinunda\n            - delay: <span class=\"hljs-number\">400<\/span>ms\n    <span class=\"hljs-attr\">on_release<\/span>:\n      then:\n        - <span class=\"hljs-keyword\">switch<\/span>.turn_off: buzinunda<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<div class=\"hbc-callout\">\n\t<span class=\"hbc-callout__icon\">i<\/span>\n\t<p><strong>Porque \u00e9 que o buzzer pulsa em vez de ficar fixo?<\/strong> Um sinal intermitente \u00e9 mais f\u00e1cil de localizar numa casa grande do que um zumbido cont\u00ednuo, e evita que o buzzer aque\u00e7a se a fuga demorar a ser resolvida. O ciclo <code>200\/100\/200\/400&nbsp;ms<\/code> repete-se enquanto o sensor estiver ativo.<\/p>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"caudal\">Caudal e consumo acumulado<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">O caudal\u00edmetro usado neste projeto \u00e9 do tipo mais comum nos kits de automa\u00e7\u00e3o: um rotor com \u00edm\u00e3 que gera impulsos proporcionais ao caudal. O fator de calibra\u00e7\u00e3o t\u00edpico \u00e9 <strong>6,6 impulsos por segundo por litro\/minuto<\/strong>, ou seja, 396 impulsos por litro. Da\u00ed a f\u00f3rmula <code>x \/ 396<\/code> no filtro do <code>pulse_counter<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Se o teu modelo tiver um fator diferente (encontra-se muitas vezes no datasheet ou medido com um recipiente graduado), basta substituir <code>396<\/code> pelo valor correto. A precis\u00e3o do sistema depende inteiramente deste n\u00famero.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Os dois sensores de integra\u00e7\u00e3o d\u00e3o-te duas leituras complementares: <strong>Utiliza\u00e7\u00e3o Total<\/strong> em litros (\u00fatil para automa\u00e7\u00f5es que comparam consumos di\u00e1rios) e <strong>Total em M3<\/strong> em metros c\u00fabicos (\u00fatil para acompanhar a fatura da \u00e1gua). Ambos t\u00eam <code>state_class: total_increasing<\/code>, o que faz o Home Assistant gerar estat\u00edsticas de longo prazo automaticamente.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"temperatura\">Temperaturas com OneWire<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">As duas DS18B20 partilham um \u00fanico pino (GPIO4) porque o OneWire \u00e9 um barramento multi-drop: cada sonda responde ao seu endere\u00e7o \u00fanico, e o ESPHome distingue-as sem precisar de pinos separados. Isso simplifica muito a cablagem dentro da caixa de embutir.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">As aplica\u00e7\u00f5es pr\u00e1ticas s\u00e3o diretas: comparar a temperatura da rede com a do AQS permite ver se o dep\u00f3sito est\u00e1 a ser aquecido corretamente, se o consumo de \u00e1gua quente est\u00e1 a arrefecer o acumulador mais depressa do que o habitual, ou se a \u00e1gua da rede vem anormalmente fria (o que aumenta o trabalho da bomba de calor).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"valvula\">V\u00e1lvula de corte com interlock<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A v\u00e1lvula motorizada de esfera \u00e9 o atuador central do sistema. Ao contr\u00e1rio de um rel\u00e9 simples, precisa de um <strong>pulso de comando<\/strong> para mudar de posi\u00e7\u00e3o: uma bobina faz rodar o motor num sentido (abrir), a outra no sentido oposto (fechar). O interlock do ESPHome garante que os dois rel\u00e9s nunca est\u00e3o fechados ao mesmo tempo \u2014 o que, na pr\u00e1tica, queimaria o motor da v\u00e1lvula em segundos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">No Home Assistant, os dois switches aparecem como entidades separadas. Podes us\u00e1-los em automa\u00e7\u00f5es de corte geral (fecha a v\u00e1lvula quando sais de casa), em rotinas de f\u00e9rias, ou em conjunto com o sensor de inunda\u00e7\u00e3o para um corte autom\u00e1tico de emerg\u00eancia.<\/p>\n\n\n\n<div class=\"hbc-callout hbc-callout--tip\">\n\t<span class=\"hbc-callout__icon\">OK<\/span>\n\t<p>Se a tua v\u00e1lvula tiver tempos de curso longos (10\u201320&nbsp;s), adiciona um <code>on_turn_on<\/code> com <code>delay<\/code> e <code>switch.turn_off<\/code> em cada rel\u00e9, \u00e0 imagem do que se faz no port\u00e3o. Assim o motor nunca fica energizado depois de a v\u00e1lvula chegar ao fim de curso.<\/p>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"inundacao\">Alarme de inunda\u00e7\u00e3o<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">O sensor de humidade \u00e9 o elemento de seguran\u00e7a do sistema. Fica no ch\u00e3o, junto ao quadro de entrada ou debaixo do dep\u00f3sito de AQS, e deteta a presen\u00e7a de \u00e1gua por condutividade entre dois contactos. O ESPHome exp\u00f5e-no como <code>binary_sensor<\/code> com <code>device_class: moisture<\/code>, o que faz o Home Assistant mostrar o \u00edcone e a cor corretos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Quando o sensor dispara, o buzzer local entra em ciclo intermitente. Esse comportamento \u00e9 definido diretamente no YAML, sem depender do Home Assistant \u2014 o alarme funciona mesmo se a rede Wi-Fi ou o HA estiverem em baixo. No Home Assistant, o bin\u00e1rio fica dispon\u00edvel para notifica\u00e7\u00f5es push, corte autom\u00e1tico da v\u00e1lvula ou registo hist\u00f3rico de eventos.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"rede\">Rede, gest\u00e3o e atualiza\u00e7\u00f5es<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A parte de rede segue o padr\u00e3o do projeto do port\u00e3o: nada depende de um servidor de fabricante. O <code>SistemaAgua.yaml<\/code> garante:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\t<li><strong>IP est\u00e1tico<\/strong> \u2014 o dispositivo vive sempre em <code>192.168.1.231<\/code>, com gateway e DNS em <code>192.168.1.254<\/code>.<\/li>\n\t<li><strong>Rede Wi-Fi<\/strong> \u2014 <code>SF_24G<\/code> com as defini\u00e7\u00f5es est\u00e1ticas; se precisares de redund\u00e2ncia, acrescenta redes adicionais como no port\u00e3o.<\/li>\n\t<li><strong>Access Point de emerg\u00eancia<\/strong> \u2014 com <code>ap: {}<\/code> e <code>captive_portal<\/code>, o dispositivo abre o seu pr\u00f3prio Wi-Fi para reconfigura\u00e7\u00e3o.<\/li>\n\t<li><strong>Improv Serial<\/strong> \u2014 provisionamento de Wi-Fi pela porta s\u00e9rie.<\/li>\n\t<li><strong>OTA<\/strong> \u2014 atualiza\u00e7\u00f5es de firmware sem cabo.<\/li>\n\t<li><strong>Web Server<\/strong> \u2014 interface local de consulta e logs.<\/li>\n\t<li><strong>API nativo<\/strong> \u2014 liga\u00e7\u00e3o direta ao Home Assistant, sem MQTT.<\/li>\n<\/ul>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">wifi<\/span>:\n  <span class=\"hljs-selector-tag\">ap<\/span>: {}\n  <span class=\"hljs-selector-tag\">ssid<\/span>: <span class=\"hljs-selector-tag\">SF_24G<\/span>\n  <span class=\"hljs-selector-tag\">password<\/span>: \"\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\"\n  <span class=\"hljs-selector-tag\">manual_ip<\/span>:\n    <span class=\"hljs-selector-tag\">static_ip<\/span>: 192<span class=\"hljs-selector-class\">.168<\/span><span class=\"hljs-selector-class\">.1<\/span><span class=\"hljs-selector-class\">.231<\/span>\n    <span class=\"hljs-selector-tag\">gateway<\/span>: 192<span class=\"hljs-selector-class\">.168<\/span><span class=\"hljs-selector-class\">.1<\/span><span class=\"hljs-selector-class\">.254<\/span>\n    <span class=\"hljs-selector-tag\">subnet<\/span>: 255<span class=\"hljs-selector-class\">.255<\/span><span class=\"hljs-selector-class\">.255<\/span><span class=\"hljs-selector-class\">.0<\/span>\n    <span class=\"hljs-selector-tag\">dns1<\/span>: 192<span class=\"hljs-selector-class\">.168<\/span><span class=\"hljs-selector-class\">.1<\/span><span class=\"hljs-selector-class\">.254<\/span>\n\n<span class=\"hljs-selector-tag\">captive_portal<\/span>:\n\n<span class=\"hljs-selector-tag\">improv_serial<\/span>:\n\n<span class=\"hljs-selector-tag\">ota<\/span>:\n  <span class=\"hljs-selector-tag\">-<\/span> <span class=\"hljs-selector-tag\">platform<\/span>: <span class=\"hljs-selector-tag\">esphome<\/span>\n\n<span class=\"hljs-selector-tag\">web_server<\/span>:<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<div class=\"hbc-callout hbc-callout--warn\">\n\t<span class=\"hbc-callout__icon\">!<\/span>\n\t<p><strong>Antes de publicar o YAML:<\/strong> as palavras-passe do Wi-Fi ficam em texto no ficheiro \u2014 mant\u00e9m o <code>SistemaAgua.yaml<\/code> fora de reposit\u00f3rios p\u00fablicos. Recomenda-se ainda definir <code>api: encryption_key<\/code> para cifrar a liga\u00e7\u00e3o ao Home Assistant e <code>ota: password<\/code> para proteger as atualiza\u00e7\u00f5es. Com IP est\u00e1tico, reserva tamb\u00e9m o endere\u00e7o no router.<\/p>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"instalacao\">Instala\u00e7\u00e3o passo a passo<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Do ficheiro em branco ao sistema operacional, em sete passos:<\/p>\n\n\n\n<ol class=\"hbc-steps wp-block-list\">\n\t<li><strong>Liga a fia\u00e7\u00e3o em bancada.<\/strong> Monta ESP32 + caudal\u00edmetro + as duas DS18B20 + sensor de inunda\u00e7\u00e3o numa protoboard e confirma que todos os sensores respondem nos logs do ESPHome.<\/li>\n\t<li><strong>Descobre os endere\u00e7os das sondas.<\/strong> No arranque, o ESPHome lista os endere\u00e7os OneWire encontrados. Copia-os para o YAML nos campos <code>address<\/code>.<\/li>\n\t<li><strong>Calibra o caudal\u00edmetro.<\/strong> Deixa correr 10&nbsp;L de \u00e1gua por um recipiente graduado e compara com o total lido no Home Assistant. Ajusta o fator <code>396<\/code> se houver desvio.<\/li>\n\t<li><strong>Grava o firmware.<\/strong> Importa <code>SistemaAgua.yaml<\/code> no ESPHome, corrige as credenciais Wi-Fi e envia via OTA ou USB.<\/li>\n\t<li><strong>Adiciona ao Home Assistant.<\/strong> O dispositivo aparece em <em>Dispositivos &amp; Servi\u00e7os<\/em>; aceita a liga\u00e7\u00e3o API e as entidades ficam dispon\u00edveis.<\/li>\n\t<li><strong>Instala no quadro de \u00e1gua.<\/strong> Com o quadro fechado e sem press\u00e3o, monta a v\u00e1lvula motorizada, o caudal\u00edmetro, as sondas e o sensor de inunda\u00e7\u00e3o no ch\u00e3o.<\/li>\n\t<li><strong>Monta o dashboard e as automa\u00e7\u00f5es.<\/strong> Adiciona os sensores de caudal e temperatura, os dois switches da v\u00e1lvula e o bin\u00e1rio de inunda\u00e7\u00e3o ao painel; cria as automa\u00e7\u00f5es de corte e de alerta.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"home-assistant\">No Home Assistant<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Depois de pareado, o dispositivo cria um conjunto de entidades pronto a usar. \u00c9 no dashboard que o sistema ganha vida:<\/p>\n\n\n\n<div class=\"hbc-features\">\n\n\t<div class=\"hbc-feature\">\n\t\t<span class=\"hbc-feature__num\">01<\/span>\n\t\t<h3 class=\"hbc-feature__title\">Consumo em tempo real<\/h3>\n\t\t<p>O sensor <strong>D\u00e9bito \u00e1gua instant\u00e2neo<\/strong> mostra o caudal em L\/min, e os totais em litros e m\u00b3 acumulam para estat\u00edsticas de longo prazo \u2014 ideais para gr\u00e1ficos di\u00e1rios, semanais e mensais.<\/p>\n\t<\/div>\n\n\t<div class=\"hbc-feature\">\n\t\t<span class=\"hbc-feature__num\">02<\/span>\n\t\t<h3 class=\"hbc-feature__title\">Temperaturas AQS e Rede<\/h3>\n\t\t<p>As duas DS18B20 aparecem como sensores de temperatura independentes, prontos para gr\u00e1ficos de evolu\u00e7\u00e3o e para automa\u00e7\u00f5es (por exemplo, avisar se o AQS desce abaixo de 40&nbsp;\u00b0C).<\/p>\n\t<\/div>\n\n\t<div class=\"hbc-feature\">\n\t\t<span class=\"hbc-feature__num\">03<\/span>\n\t\t<h3 class=\"hbc-feature__title\">Corte geral da \u00e1gua<\/h3>\n\t\t<p>Os switches <strong>Abrir V\u00e1lvula<\/strong> e <strong>Fechar V\u00e1lvula<\/strong> permitem cortar a \u00e1gua da casa a partir do telem\u00f3vel, do Voice Assist ou de uma automa\u00e7\u00e3o de aus\u00eancia.<\/p>\n\t<\/div>\n\n\t<div class=\"hbc-feature\">\n\t\t<span class=\"hbc-feature__num\">04<\/span>\n\t\t<h3 class=\"hbc-feature__title\">Alarme de inunda\u00e7\u00e3o<\/h3>\n\t\t<p>O bin\u00e1rio <strong>Sensor \u00c1gua<\/strong> dispara o buzzer local e pode acionar notifica\u00e7\u00f5es push, corte autom\u00e1tico da v\u00e1lvula e registo hist\u00f3rico de eventos.<\/p>\n\t<\/div>\n\n<\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Automa\u00e7\u00f5es que valem a pena<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Com os sensores e a v\u00e1lvula expostos, qualquer automa\u00e7\u00e3o \u00e9 poss\u00edvel. Estas tr\u00eas s\u00e3o as mais \u00fateis no dia a dia:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\t<li><strong>Corte por inunda\u00e7\u00e3o<\/strong> \u2014 quando o <code>binary_sensor.sensor_agua<\/code> fica <code>on<\/code>, fecha a v\u00e1lvula e envia notifica\u00e7\u00e3o imediata.<\/li>\n\t<li><strong>Aviso de consumo anormal<\/strong> \u2014 se o d\u00e9bito instant\u00e2neo ficar acima de um limiar (por exemplo 20&nbsp;L\/min) durante mais de 10 minutos, notifica.<\/li>\n\t<li><strong>Modo aus\u00eancia<\/strong> \u2014 um <em>scene<\/em> que fecha a v\u00e1lvula e ativa o alarme quando sais de casa.<\/li>\n<\/ul>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">alias: \u00c1gua - corte por inunda\u00e7\u00e3o\n<span class=\"hljs-attr\">trigger<\/span>:\n  - platform: state\n    <span class=\"hljs-attr\">entity_id<\/span>: binary_sensor.sensor_agua\n    <span class=\"hljs-attr\">to<\/span>: <span class=\"hljs-string\">\"on\"<\/span>\n<span class=\"hljs-attr\">action<\/span>:\n  - service: <span class=\"hljs-keyword\">switch<\/span>.turn_on\n    <span class=\"hljs-attr\">target<\/span>:\n      entity_id: <span class=\"hljs-keyword\">switch<\/span>.fechar_valvula\n  - service: notify.mobile_app\n    <span class=\"hljs-attr\">data<\/span>:\n      message: <span class=\"hljs-string\">\"Inunda\u00e7\u00e3o detectada. V\u00e1lvula de \u00e1gua fechada automaticamente.\"<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\" id=\"diagnostico\">Diagn\u00f3stico e boas pr\u00e1ticas<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Quando algo falha, os cinco pontos abaixo resolvem quase sempre o problema:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n\t<li><strong>O caudal\u00edmetro l\u00ea zero.<\/strong> Confirma o fator de calibra\u00e7\u00e3o e verifica se o pino est\u00e1 com pull-up ativo. Sem pull-up, o sinal flutua e o <code>pulse_counter<\/code> n\u00e3o conta.<\/li>\n\t<li><strong>As temperaturas est\u00e3o trocadas.<\/strong> Os endere\u00e7os das duas DS18B20 ficaram invertidos no YAML. Corrige e volta a gravar.<\/li>\n\t<li><strong>A v\u00e1lvula n\u00e3o responde.<\/strong> O interlock pode estar a bloquear o rel\u00e9 oposto. Verifica nos logs se ambos foram pedidos em simult\u00e2neo.<\/li>\n\t<li><strong>Alarme dispara sem \u00e1gua.<\/strong> Contacto do sensor de inunda\u00e7\u00e3o sujo ou h\u00famido. Limpa, seca e confirma os filtros <code>delayed_on\/off<\/code>.<\/li>\n\t<li><strong>Perdeu a liga\u00e7\u00e3o Wi-Fi.<\/strong> Liga ao AP de emerg\u00eancia com o telem\u00f3vel, reentra as credenciais e o dispositivo volta a ligar-se, mantendo o IP est\u00e1tico.<\/li>\n<\/ol>\n\n\n\n<div class=\"hbc-callout hbc-callout--tip\">\n\t<span class=\"hbc-callout__icon\">OK<\/span>\n\t<p>Antes de qualquer altera\u00e7\u00e3o grande, exporta o <code>SistemaAgua.yaml<\/code>. O ESPHome guarda hist\u00f3rico no Home Assistant, mas um ficheiro de c\u00f3pia em local seguro torna qualquer regress\u00e3o instant\u00e2nea.<\/p>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"conclusao\">Conclus\u00e3o<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">O <strong>WaterSystem<\/strong> mostra que n\u00e3o \u00e9 preciso um contador inteligente de operadora para ter controlo total sobre o consumo de \u00e1gua. Com um ESP32, um caudal\u00edmetro, duas sondas de temperatura, dois rel\u00e9s e um sensor de inunda\u00e7\u00e3o, obt\u00e9m-se monitoriza\u00e7\u00e3o cont\u00ednua, hist\u00f3rico de consumos, corte geral remoto e alarme local de fugas \u2014 tudo local e sem subscri\u00e7\u00f5es.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c9 um projeto replic\u00e1vel: copia o <code>SistemaAgua.yaml<\/code>, ajusta os GPIO e os endere\u00e7os das sondas \u00e0s tuas liga\u00e7\u00f5es, calibra o caudal\u00edmetro e tens o sistema no dashboard ao fim de uma tarde. Tudo local, tudo teu.<\/p>\n\n\n\n<div class=\"hbc-cta\">\n\t<h3>Quer montar o teu?<\/h3>\n\t<p>A documenta\u00e7\u00e3o do ESPHome e do Home Assistant cobre tudo o que \u00e9 preciso para dar o primeiro passo \u2014 e o YAML deste artigo serve de ponto de partida.<\/p>\n\t<div class=\"hbc-cta__actions\">\n\t\t<a class=\"holo-btn\" href=\"https:\/\/esphome.io\/components\/sensor\/pulse_counter.html\" target=\"_blank\" rel=\"noopener\">ESPHome \u00b7 Pulse counter<\/a>\n\t\t<a class=\"holo-btn\" href=\"https:\/\/esphome.io\/components\/sensor\/dallas_temp.html\" target=\"_blank\" rel=\"noopener\">ESPHome \u00b7 Dallas temperature<\/a>\n\t<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Sistema de monitoriza\u00e7\u00e3o de \u00e1gua com ESP32 e ESPHome: caudal instant\u00e2neo e consumo acumulado, temperatura da rede e do AQS, v\u00e1lvula de corte geral com interlock e alarme de inunda\u00e7\u00e3o \u2014 local e sem nuvem.<\/p>\n","protected":false},"author":0,"featured_media":36,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12,5],"tags":[18,16,17,13,11],"class_list":["post-37","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-esphome","category-home-assistant","tag-agua","tag-automacao","tag-esp32","tag-esphome","tag-yaml"],"_links":{"self":[{"href":"https:\/\/sfelectronica.com\/bit\/wp-json\/wp\/v2\/posts\/37","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sfelectronica.com\/bit\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sfelectronica.com\/bit\/wp-json\/wp\/v2\/types\/post"}],"replies":[{"embeddable":true,"href":"https:\/\/sfelectronica.com\/bit\/wp-json\/wp\/v2\/comments?post=37"}],"version-history":[{"count":1,"href":"https:\/\/sfelectronica.com\/bit\/wp-json\/wp\/v2\/posts\/37\/revisions"}],"predecessor-version":[{"id":38,"href":"https:\/\/sfelectronica.com\/bit\/wp-json\/wp\/v2\/posts\/37\/revisions\/38"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sfelectronica.com\/bit\/wp-json\/wp\/v2\/media\/36"}],"wp:attachment":[{"href":"https:\/\/sfelectronica.com\/bit\/wp-json\/wp\/v2\/media?parent=37"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sfelectronica.com\/bit\/wp-json\/wp\/v2\/categories?post=37"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sfelectronica.com\/bit\/wp-json\/wp\/v2\/tags?post=37"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}