En la puerta de la casa ya sabemos todo: quién tocó el timbre, a qué hora, y con foto. Pero hay un hueco que ningún timbre inteligente cubre. el cartero no toca. Deja la correspondencia, sigue de largo, y uno termina bajando al buzón por tercera vez en la tarde para encontrarlo vacío.

La solución no necesita una cámara ni un buzón nuevo de 150 mil pesos. Necesita saber una sola cosa: si la tapa se abrió. Y eso lo resuelve un sensor magnético, que es el componente más barato y más tonto de toda la electrónica: dos láminas metálicas dentro de un tubo de vidrio que se tocan cuando hay un imán cerca.

En este tutorial vas a armar ese detector con un ESP32-C6 y un reed switch, conectarlo a Home Assistant por WiFi usando ESPHome, y resolver la parte que casi nadie menciona: cómo evitar que te llegue una notificación por cada movimiento de la tapa cuando el cartero la abre tres veces para meter un sobre. Al final vas a tener una tarjeta en el dashboard que dice "llegó correo", con la hora, y que se resetea con un toque.

Por qué armarlo y no comprarlo hecho

El mercado de "sensores de buzón" listos para usar es caro y cerrado. Los detectores de movimiento WiFi rondan los 15 a 20 dólares, los sensores con estación base propia parten en 25, y los buzones completos con app llegan a los 180. Todos traen su propia aplicación, su propia nube y su propio protocolo de radio, y ninguno habla con Home Assistant por su cuenta.

Hay una tercera vía que el tutorial original que inspiró este artículo recorre en detalle: comprar un contacto magnético Zigbee genérico. de esos sin marca que se venden por cientos. y emparejarlo con un coordinador que ya tengas.

Contacto de puerta/ventana Zigbee con su imán, el empaque y el adhesivo sobre una mesa, sin marca visible

Es una opción perfectamente válida y la cubrimos más abajo. Pero tiene dos condiciones que en Chile no siempre se cumplen: necesitas una red Zigbee ya funcionando (o sea, un stick coordinador además del sensor), y necesitas que el modelo exacto que te llegue esté soportado. En estos artículos el vendedor, el empaque y hasta el identificador del fabricante cambian sin que cambie el número de producto: según el lote, el mismo aparato aparece en Home Assistant como un modelo Tuya TS0203 en vez del que decía la publicación.

El camino con ESP32-C6, en cambio, usa componentes que están en el catálogo local, no depende de ningún lote, y te deja el firmware en la mano. Si mañana quieres agregar un segundo reed en la puerta de retiro, es una línea de YAML.

Lo que necesitas

  • Una placa ESP32-C6 DevKit. Cualquier ESP32 sirve para la versión WiFi; elegimos el C6 porque además puede funcionar como router Zigbee más adelante, lo que lo deja útil aunque cambies de enfoque.
  • Un sensor reed magnético (normalmente abierto) con su imán. Los que vienen en carcasa plástica para puerta/ventana son los más cómodos de montar.
  • Un imán de neodimio extra, por si el que viene no alcanza a cerrar el contacto a la distancia que da tu tapa.
  • Jumpers hembra hembra para llegar del reed a la placa.
  • Alimentación: cable USB y una fuente de 5V, o una batería (ver más abajo por qué esto tiene letra chica).
  • Separadores plásticos M3 o algo equivalente para alinear imán y sensor.
  • Un servidor con Home Assistant corriendo. típicamente un Raspberry Pi.

El sensor: dos cables y nada más

Un reed switch no tiene electrónica. Es un interruptor que se cierra cuando el imán se acerca y se abre cuando se aleja. Se conecta entre un pin GPIO y GND, y el pin se configura con resistencia pull up interna: sin imán, el pin queda en alto; con el imán cerca, el reed lo tira a masa.

Traducido a la tapa del buzón: tapa cerrada = imán cerca = pin en bajo. Tapa abierta = imán lejos = pin en alto. Eso es exactamente lo que Home Assistant espera de un device_class: opening, así que no hay que invertir nada.

El detalle que arruina la primera versión: el rebote

Un contacto mecánico no cambia de estado limpiamente. Al abrirse y cerrarse, las láminas rebotan durante algunos milisegundos y el GPIO ve una ráfaga de pulsos. Si no filtras eso, una sola apertura de la tapa genera media docena de eventos y Home Assistant dispara la automatización varias veces por el mismo sobre.

Se resuelve en el firmware con dos filtros de retardo: el estado solo se toma como válido si se mantiene estable durante 50 ms. Es la diferencia entre un sensor confiable y uno que te llena el teléfono de notificaciones.

La configuración de ESPHome

YAML
esphome:
  name: buzon
  friendly_name: Buzón

esp32:
  board: esp32-c6-devkitc-1
  framework:
    type: esp-idf

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

api:
  encryption:
    key: !secret api_key

ota:
  - platform: esphome

logger:

binary_sensor:
  - platform: gpio
    name: "Tapa del buzón"
    device_class: opening
    pin:
      number: GPIO4
      mode:
        input: true
        pullup: true
    filters:
      - delayed_on: 50ms
      - delayed_off: 50ms

Dos notas sobre esta configuración: el ESP32-C6 solo funciona con el framework esp-idf en ESPHome, no con Arduino. si copias una configuración de otro ESP32 y no cambias eso, la compilación falla. Y el GPIO4 es solo un ejemplo: usa cualquier pin de entrada libre que no esté involucrado en el arranque de la placa.

Después de compilar y flashear por USB la primera vez, el dispositivo aparece solo en Home Assistant y las actualizaciones siguientes van por WiFi (OTA).

Montaje en el buzón

La primera decisión es qué movimiento quieres detectar. La tapa de entrada avisa la entrega; la puerta de retiro avisa que vaciaste. Con un sensor tienes uno de los dos, y el que importa es la entrega. El reseteo lo va a hacer la automatización.

La segunda decisión es dónde va la electrónica. Y acá hay una diferencia importante respecto del montaje original que conviene entender antes de taladrar nada.

Sensor con su imán montados en el interior de la tapa del buzón, ambos sobre pequeños separadores

El tutorial original metió el sensor Zigbee completo dentro del buzón metálico y midió si la señal salía. Los resultados fueron mejores de lo esperado:

Posición LQI RSSI
Dentro de la casa, antes del montaje 156 , 61 dBm
Afuera, sobre el buzón, al aire 164 a 168 , 58 a, 59 dBm
Instalado, tapa cerrada 164 , 59 dBm

Entre "al aire libre al lado" e "instalado dentro de la caja cerrada" no hubo diferencia medible, y las nueve pruebas de disparo llegaron las nueve. Un buzón de acero es medio jaula de Faraday, pero medio no es entero: las ranuras, la tapa y las junturas dejan pasar suficiente señal.

Ahora, ese dato no se traslada automáticamente a WiFi. Zigbee y WiFi comparten la banda de 2,4 GHz, pero Zigbee transmite paquetes minúsculos con mucha tolerancia a la pérdida y reintentos baratos, mientras que una conexión WiFi necesita mantener una asociación estable con el router, que suele estar bastante más lejos que un coordinador Zigbee y sin repetidores intermedios. Si tu buzón está en la reja y el router en el segundo piso, la versión WiFi puede simplemente no enganchar.

La solución es elegante y cuesta cero: el reed switch no necesita estar junto a la placa. Son dos cables. Deja el ESP32-C6 fuera del buzón. en una caja estanca en la parte posterior, o dentro de la casa si la distancia lo permite. y mete solo el reed y el imán al interior. El metal deja de importar porque la antena nunca estuvo adentro. Con cable de dos hilos puedes estirar esa conexión varios metros sin problema; es un interruptor, no una señal de datos.

Si prefieres todo adentro, prueba primero: flashea, cierra la tapa y mira la calidad de señal que reporta ESPHome antes de fijar nada en forma definitiva.

Alineación: el error más común

Cuida la distancia entre el imán y el sensor. Con la tapa cerrada, el imán tiene que quedar lo bastante cerca como para cerrar el contacto; si no, el sensor se queda permanentemente en "abierto" y nunca detecta nada. En la mayoría de los buzones hace falta un pequeño separador para que imán y carcasa queden a la misma altura. Los reed switches típicos cierran entre 10 y 15 mm con un imán de neodimio decente, pero eso depende del imán: si el tuyo no alcanza, un neodimio más grueso resuelve el problema mejor que mover el sensor.

Y una advertencia honesta: estos sensores no tienen protección IP. Dentro del buzón están a salvo de la lluvia, pero no de la condensación. Si dejas el ESP32-C6 afuera, va sí o sí en una caja estanca.

La automatización: por qué "tapa abierta → avisar" no funciona

El reflejo es disparar la notificación apenas la tapa se abre. Y ahí falla la solución ingenua: en la práctica el cartero mueve la tapa dos o tres veces por entrega. Recibes tres notificaciones por un sobre.

La solución es antirrebote a nivel de tiempo, no de milisegundos: después de avisar, la automatización espera cinco minutos, y como corre en modo single, todos los disparos de esa ventana se descartan. Una entrega, una notificación. El paquete de la tarde vuelve a avisar normalmente, porque para entonces la ventana ya cerró.

Necesitas dos ayudantes, que creas en Configuración → Dispositivos y servicios → Ayudantes: un interruptor (input_boolean) llamado "Correo en el buzón" y un campo de fecha/hora (input_datetime) para el momento de la última entrega.

YAML
alias: Buzón – correo detectado
triggers:
  - trigger: state
    entity_id: binary_sensor.tapa_del_buzon
    to: "on"
actions:
  - action: input_boolean.turn_on
    target:
      entity_id: input_boolean.correo_en_el_buzon
  - action: input_datetime.set_datetime
    target:
      entity_id: input_datetime.ultima_entrega
    data:
      timestamp: "{{ now().timestamp() }}"
  - parallel:
      - action: notify.mobile_app_tu_telefono
        data:
          title: "Llegó correo"
          message: "Se abrió la tapa del buzón."
      - action: persistent_notification.create
        data:
          title: "Llegó correo"
          message: "Se abrió la tapa del buzón."
          notification_id: buzon_correo
  - delay:
      minutes: 5
mode: single
max_exceeded: silent

max_exceeded: silent evita que los disparos descartados llenen el registro de advertencias. Reemplaza notify.mobile_app_tu_telefono por el servicio de tu app Companion. Si quieres avisar a varios teléfonos, agregas más entradas dentro del bloque parallel.

Conviene sumar dos automatizaciones chicas: una que apague el interruptor a las 23:55 por si nunca confirmaste el retiro, y otra que borre la notificación persistente cuando apagues el interruptor a mano.

La tarjeta en el dashboard

Con componentes estándar alcanza. La sección tiene cinco elementos: una línea de estado en Markdown que dice "llegó correo" con la hora, la tarjeta para confirmar el retiro, el estado actual de la tapa, la batería, y un gráfico de las últimas 24 horas. muy útil mientras configuras, porque ahí ves cada prueba.

Tarjeta Buzón en el dashboard de Home Assistant con estado, batería y el historial de 24 horas

Un truco de usabilidad: configura la tarjeta de correo para que un toque conmute el interruptor (tap_action). Así confirmas el retiro con un dedo, sin necesitar un botón extra.

YAML
type: grid
cards:
  - type: heading
    heading: Buzón
    heading_style: title
    icon: mdi:mailbox
  - type: markdown
    content: >-
      {% set hay = is_state('input_boolean.correo_en_el_buzon','on') %}
      {% set t = states('input_datetime.ultima_entrega') %}
      {% if hay %}## Llegó correo

      {% if t not in ['unknown','unavailable',''] %}Entregado a las **{{ as_timestamp(t) | timestamp_custom('%H:%M del %d-%m') }}**{% else %}Hora aún no registrada{% endif %}

      *Después de retirarlo, toca la tarjeta de abajo.*
      {% else %}## Sin correo nuevo

      {% if t not in ['unknown','unavailable',''] %}Última vez el **{{ as_timestamp(t) | timestamp_custom('%d-%m a las %H:%M') }}**{% else %}Sin entregas registradas{% endif %}{% endif %}
  - type: tile
    entity: input_boolean.correo_en_el_buzon
    name: Correo
    icon: mdi:mailbox-up
    color: orange
    state_content:
      - state
      - last_changed
    tap_action:
      action: toggle
  - type: tile
    entity: binary_sensor.tapa_del_buzon
    name: Tapa
    icon: mdi:mailbox-open-outline
    state_content:
      - state
      - last_changed
  - type: history-graph
    title: Tapa, últimas 24 horas
    hours_to_show: 24
    entities:
      - entity: binary_sensor.tapa_del_buzon

La tarjeta Markdown es lo único con lógica de plantilla: lee el interruptor y la marca de tiempo y arma con eso la línea de estado. Todo lo demás son tarjetas estándar.

La alternativa Zigbee, si ya tienes la red

Si ya corres ZHA o Zigbee2MQTT con un coordinador, el camino más corto es un contacto magnético Zigbee genérico, y te ahorras el firmware por completo.

El emparejamiento no tiene misterio: en Configuración → Dispositivos y servicios → Zigbee Home Automation → Agregar dispositivo inicias la búsqueda y presionas el botón de pairing del sensor hasta que parpadee el LED. A los pocos segundos aparece el dispositivo y le asignas nombre y área.

Home Assistant reporta el dispositivo Zigbee recién emparejado como listo para usar

Quedas con cuatro entidades activas: el contacto como binary_sensor, la batería, un botón de identificación y una entrada de firmware. Otras dos, para calidad de señal (LQI y RSSI), ZHA las crea deshabilitadas. las encuentras en la vista del dispositivo, entre las entidades no activadas, y las habilitas ahí. Si vas a medir la señal tú mismo, ten presente que un contacto de puerta solo transmite cuando se dispara: abrir el diálogo del dispositivo no muestra el estado actual de la radio, sino los valores de la última transmisión. Para comparar, tienes que disparar el sensor varias veces a propósito.

La automatización y el dashboard de arriba funcionan igual; solo cambian los nombres de las entidades.

Si la señal no alcanza hasta el buzón, la solución barata es un router Zigbee a mitad de camino: un ESP32-C6 flasheado como router, enchufado cerca de la puerta. Que es, convenientemente, la misma placa de este tutorial.

Variantes y mejoras

1. Detectar también el retiro, con un segundo reed. El montaje tal como está no sabe cuándo vaciaste el buzón: lo resuelve el toque en la tarjeta o el reseteo nocturno. Con un segundo reed en la puerta de retiro conectado a otro GPIO del mismo ESP32-C6, la automatización apaga el input_boolean sola. Son cuatro líneas más en el YAML de ESPHome y un segundo bloque binary_sensor; el hardware extra cuesta lo que cuesta un reed.

2. Diferenciar correspondencia de publicidad por la hora. El sistema no distingue una carta de un folleto, y la repartición de propaganda del sábado también dispara. Como el reparto formal tiene horarios bastante estables, una condición de hora en la automatización (o un mensaje distinto fuera del horario habitual) filtra la mayor parte del ruido sin hardware adicional.

3. Versión a batería con deep sleep. con su letra chica. El ESP32-C6 puede despertar por GPIO desde deep sleep, así que en teoría un par de pilas AA lo mantendrían meses. En la práctica hay un costo: al despertar tiene que reconectarse a WiFi, y esos 3 a 8 segundos de handshake consumen mucho más que el sueño que ahorraste. Si de verdad quieres meses de autonomía sin cable, el protocolo correcto es Zigbee o ESP NOW, no WiFi. y ahí el contacto Zigbee comercial, con dos pilas AAA y un año de duración, gana por diseño. Nuestra recomendación: si puedes llevar 5V hasta el buzón o dejar la placa dentro de la casa, usa la versión con cable de este tutorial. Si no puedes, usa Zigbee.

Personalización para Chile

Los componentes de este proyecto están entre los más básicos del catálogo de MechatronicStore:

  • Placa ESP32-C6 DevKit. el cerebro. Si no necesitas la opción Zigbee a futuro, cualquier ESP32 DevKit o ESP32-C3 del catálogo cumple exactamente la misma función en la versión WiFi; solo cambia la línea board: de la configuración.
  • Sensor reed magnético con imán. el sensor propiamente tal. Suele venderse tanto como módulo en carcasa para puerta/ventana como en formato de tubo de vidrio suelto; para el buzón, el de carcasa es mucho más fácil de fijar.
  • Imán de neodimio. el de repuesto, por si la tapa no cierra lo suficiente. Barato y resuelve el problema de alineación más común.
  • Jumpers hembra hembra 20 cm. para el cableado del reed a la placa. Si vas a dejar la placa fuera del buzón, reemplázalos por cable de dos hilos del largo que necesites.
  • Cable USB-A a USB-C y fuente USB 5V. la alimentación. Un cargador de celular común sirve perfectamente acá: el consumo es de algunos cientos de miliamperes.

El tutorial original compara precios contra el mercado alemán, donde el sensor Zigbee sale bajo cinco euros en AliExpress. En Chile la comparación relevante es otra: importar un sensor Zigbee sin marca significa tres a seis semanas de espera y un modelo que puede no coincidir con el de la publicación, mientras que el ESP32-C6 y el reed los tienes en días y con la certeza de qué llegó. Sumado a que el ESP32-C6 te sirve después como router Zigbee, la versión local sale ganando incluso si el precio unitario es algo mayor.

Los precios y SKU varían; revisa la ficha de cada producto en el catálogo antes de comprar.

Recursos

Versión chilena con componentes en stock local, inspirada en el trabajo de raspberry.tips.