¿Cuántas veces se te apagó la luz del escritorio mientras leías un PDF sin moverte? Le pasa a cualquiera que haya probado un sensor de movimiento PIR para automatizar su espacio de trabajo: el sensor solo ve cuerpos que se desplazan, y una persona concentrada frente al teclado, para él, no existe. Con el teletrabajo instalado en muchas casas chilenas, el problema se repite con la calefacción: o queda encendida en una pieza vacía, o la prendes tarde y pasas la primera hora con frío.
Este tutorial resuelve eso con un sensor de presencia por radar de ondas milimétricas (mmWave) integrado en Home Assistant. Vas a armar cuatro automatizaciones para el escritorio (luz según presencia y oscuridad, calefacción que sube cuando te sientas, alerta para ventilar cuando el aire se pone pesado y un botón de "no molestar") más un contador de horas frente al computador. Lo vas a poder montar por dos caminos: con un sensor comercial Zigbee, el ThirdReality Smart Presence Sensor R3, que es el que usó el autor del artículo original, o con una versión hecha por ti con un radar LD2410 y un ESP32 corriendo ESPHome, que funciona en tu red local sin depender de un fabricante.
Por qué un radar y no un PIR
Para entender por qué este proyecto funciona, conviene mirar cómo "ve" cada sensor.
Un PIR (sensor infrarrojo pasivo) tiene un elemento piroeléctrico doble detrás de una lente de Fresnel. Cuando una fuente de calor, como tu cuerpo, cruza de una zona de la lente a otra, los dos elementos reciben distinta radiación y aparece una diferencia de voltaje. La clave está en la palabra cruza: si te quedas quieto, la radiación se equilibra, la señal desaparece y a los pocos segundos el sensor declara la pieza vacía. Por eso un PIR funciona perfecto en un pasillo y fatal en un escritorio.
Un sensor de presencia mmWave funciona al revés: emite una señal de radio y analiza el eco. Los radares de este tipo (FMCW, de onda continua modulada en frecuencia) miden la distancia al objeto y detectan cambios muy pequeños en esa distancia, del orden de milímetros. Respirar, mover los dedos sobre el teclado o ajustar la postura alcanza para mantener la detección. La frecuencia importa: el R3 trabaja en 60 GHz y el LD2410 en 24 GHz. A mayor frecuencia, longitud de onda más corta y mejor resolución para los micromovimientos; a cambio, el haz se atenúa más rápido y atraviesa peor los obstáculos.
En la prueba del artículo original, el R3 mantuvo a una persona sentada escribiendo como "presente" durante 26 minutos seguidos sin una sola caída, con la sensibilidad de fábrica (nivel 3). Esa estabilidad es lo que permite construir todo lo demás.

Las dos rutas del proyecto
| Ruta A: ThirdReality R3 (Zigbee) | Ruta B: LD2410 + ESP32 (ESPHome) | |
|---|---|---|
| Radar | 60 GHz | 24 GHz |
| Conexión | Zigbee, necesita coordinador | WiFi, API nativa de ESPHome |
| Extras incluidos | Luz RGB, sensor de luz (lux), sensor TVOC | Lo que tú agregues (por ejemplo un BH1750 para lux) |
| Alimentación | USB-C | USB al ESP32, que entrega 5 V al radar |
| Armado | Enchufar y emparejar | Soldar o cablear cuatro conexiones y cargar un YAML |
| Ventaja principal | Todo en una caja, también refuerza la red Zigbee | Barato, local y modificable |
Las automatizaciones de Home Assistant son las mismas en las dos rutas: lo único que cambia es de dónde sale la entidad de ocupación. El texto sigue el montaje del original con el R3, y en cada punto donde la ruta B difiere, lo vas a ver indicado.
Qué hay dentro del R3
ThirdReality metió cuatro funciones en un gabinete compacto alimentado por USB-C, que además trabaja como router dentro de la red Zigbee:
| Función | Lo que recibe Home Assistant | Para qué se usa aquí |
|---|---|---|
| Radar de presencia 60 GHz | Ocupación sí/no, sensibilidad 1 a 6 (equivale a alcance de 1 a 6 m) | Luz, calefacción, tiempo de trabajo |
| Luz RGB | Color, temperatura de color de 2000 a 6500 K, brillo | Luz de escritorio, rojo de "no molestar", confirmaciones |
| Sensor de luz | Iluminancia en lux | Encender la luz solo si está oscuro |
| Sensor TVOC | Compuestos orgánicos volátiles totales en ppb, con umbral de alarma | Alerta de ventilación |
Un sensor de presencia a batería sería mala idea en un escritorio: el radar consume de forma continua y en el puesto de trabajo siempre hay un puerto USB a mano. El autor midió en el enchufe 0,8 W con la luz apagada y 1,4 W con la luz encendida, incluyendo el cargador, lo que equivale a entre siete y doce kWh al año.
Lo que necesitas
Ruta A (como el original):
- El sensor ThirdReality Smart Presence Sensor R3.
- Opcional: el botón Zigbee ThirdReality para la tecla de concentración. Sin él, la luz, la calefacción y la alerta de ventilación funcionan igual; el botón es la parte de comodidad.
- Un coordinador Zigbee conectado a Home Assistant, por ejemplo un dongle USB tipo SONOFF ZBDongle-E.
- Un cable USB-C y un espacio libre en el escritorio con vista a la silla.
Ruta B (hazlo tú):
- Una placa ESP32 DevKit (cualquier ESP32 con dos pines libres para UART sirve).
- Un sensor radar mmWave LD2410 (la versión B o C trae pines de 2,54 mm, más fáciles de cablear).
- Opcional: un sensor de luz BH1750 por I2C para reemplazar el sensor de lux del R3.
- Cables dupont hembra hembra y un cargador USB de 5 V.
Para las dos rutas:
- Un servidor con Home Assistant (una Raspberry Pi 4 o 5 es la opción más común).
- Para la automatización de calefacción, un equipo que aparezca en Home Assistant como entidad de clima (
climate.*) con temperatura objetivo. En el original es un termostato de radiador Homematic IP controlado a través de Better Thermostat, pero cualquier modelo con temperatura objetivo funciona igual. En la sección para Chile vas a ver cómo adaptarlo a las estufas que se usan acá.
Ruta A: emparejar el R3 con Home Assistant
Al recibir corriente por USB, el R3 entra directo en modo de emparejamiento. En Home Assistant abre Ajustes → Dispositivos y servicios → Zigbee Home Automation → Añadir dispositivo y el sensor aparece en pocos segundos. Si no lo logras en tres minutos, mantén presionado el botón Reset del equipo por más de cinco segundos: vuelve a valores de fábrica y arranca otra vez en modo de emparejamiento. Con Zigbee2MQTT es lo mismo usando Permit join; tanto el R3 como el botón están en su lista de dispositivos compatibles.
Un detalle que confunde a mucha gente: antes de emparejarlo, el R3 se comporta como luz nocturna. Con presencia enciende su luz solo, y el color indica la calidad del aire. Después de emparejarlo, la presencia deja de encender la luz y las decisiones pasan a tus automatizaciones. Es intencional, y es la razón por la que la luz queda apagada justo después de integrarlo.

Ruta B: el LD2410 con ESP32 y ESPHome
Si prefieres no depender de un equipo comercial, el LD2410 de Hi Link es un radar de 24 GHz que entrega por UART si hay alguien, si ese alguien se mueve o está quieto, y a qué distancia. ESPHome trae un componente oficial para él, así que no hace falta programar en C++.
Conexiones
El LD2410 se alimenta con 5 V, pero sus pines de datos trabajan a 3,3 V, así que se conecta directo al ESP32 sin adaptador de niveles:
| LD2410 | ESP32 DevKit |
|---|---|
| VCC | 5V (VIN) |
| GND | GND |
| TX | GPIO16 (RX2) |
| RX | GPIO17 (TX2) |
Si agregas el BH1750, va al bus I2C: SDA a GPIO21, SCL a GPIO22, VCC a 3V3 y GND a GND.
Se usa el UART2 (GPIO16 y GPIO17) para dejar el UART0 libre para los logs por USB. Fíjate en que TX del radar va a RX del ESP32 y al revés: es el error más común, y el síntoma es que ESPHome compila y arranca, pero las entidades del radar nunca cambian de estado.
Configuración de ESPHome
Este YAML crea el dispositivo escritorio-presencia con la ocupación, los indicadores de objetivo en movimiento y quieto, la distancia de detección y la iluminancia del BH1750. Las credenciales van en tu archivo secrets.yaml de ESPHome. Si no usas el BH1750, borra el bloque i2c: y la entrada bh1750 de sensor:.
esphome:
name: escritorio-presencia
friendly_name: Escritorio presencia
esp32:
board: esp32dev
framework:
type: arduino
logger:
api:
encryption:
key: !secret api_key
ota:
- platform: esphome
password: !secret ota_password
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
uart:
id: uart_ld2410
tx_pin: GPIO17
rx_pin: GPIO16
baud_rate: 256000
parity: NONE
stop_bits: 1
ld2410:
uart_id: uart_ld2410
i2c:
sda: GPIO21
scl: GPIO22
binary_sensor:
- platform: ld2410
has_target:
name: "Ocupación"
has_moving_target:
name: "Objetivo en movimiento"
has_still_target:
name: "Objetivo quieto"
sensor:
- platform: ld2410
detection_distance:
name: "Distancia de detección"
- platform: bh1750
name: "Iluminancia"
address: 0x23
update_interval: 10s
Detalles que conviene saber:
- 256000 baudios es la velocidad de fábrica del LD2410. Si alguna vez la cambiaste con la aplicación del fabricante, ajusta
baud_rate. - El radar divide su alcance en compuertas (gates) de 0,75 m, y cada una tiene su propio umbral de energía para movimiento y para quietud. ESPHome puede exponer esos umbrales como entidades
number; si el sensor "ve" el pasillo detrás de la puerta, sube el umbral de las compuertas lejanas en vez de bajar la sensibilidad general. - El LD2410 original trae pines de 1,27 mm, que no calzan con los cables dupont comunes. Las versiones B y C usan 2,54 mm y además se pueden configurar por Bluetooth con la aplicación HLKRadarTool.
Que las automatizaciones del original funcionen sin tocarlas
Las automatizaciones de abajo usan las entidades del R3 del autor, con nombres en alemán. Con ESPHome, tu ocupación va a llamarse algo como binary_sensor.escritorio_presencia_ocupacion (revisa la página del dispositivo para ver el nombre exacto). Tienes dos caminos:
- Reemplazar el
entity_iden cada automatización. - Renombrar la entidad en Home Assistant (Ajustes → Entidades → la entidad → ID de entidad) para que coincida con la del original. Así puedes pegar el YAML tal cual.
Esta tabla te sirve en las dos rutas para saber qué es cada entidad:
| Entidad del original | Qué es |
|---|---|
binary_sensor.schreibtisch_sensor_belegung |
Ocupación del escritorio |
sensor.schreibtisch_sensor_beleuchtungsstarke |
Iluminancia en lux |
sensor.schreibtisch_sensor_gesamt_vocs |
VOC totales en ppb (solo R3) |
light.schreibtisch_sensor |
Luz RGB del R3 o tu lámpara de escritorio |
input_boolean.schreibtisch_fokus |
Ayudante "modo concentración" |
input_boolean.schreibtisch_automatik_pause |
Ayudante "pausa de la automatización" |
input_number.schreibtisch_lueftungsschwelle |
Ayudante con el umbral de ventilación |
climate.heizung_buro_philipp |
Calefacción de la oficina |
notify.mobile_app_dein_handy |
Notificación a tu celular (app de Home Assistant) |
Dónde poner el sensor y cuánto alcance darle
El R3 va sobre la mesa y detecta hacia adelante, así que su frente debe apuntar a la silla. El fabricante recomienda alejarlo de objetos metálicos y no poner dos radares enfrentados (lo mismo vale para el LD2410: dos radares que se miran se interfieren). En el R3, la sensibilidad de 1 a 6 no es un ajuste fino: es el alcance en metros, y el nivel 3 de fábrica equivale a tres metros. Para un escritorio donde el sensor queda a un metro de la silla alcanza con nivel 3 o 4 (el autor usa 4). Si no quieres que detecte también el pasillo con la puerta abierta, baja el nivel en vez de subirlo.
El nivel se cambia con el botón Level del equipo o directamente en Home Assistant, en el campo de sensibilidad del sensor de presencia.

El botón Level ajusta el alcance; Reset, con una pulsación corta, activa o desactiva la alarma roja de aire, y con una pulsación larga restablece el equipo.
Los campos de configuración del R3
Home Assistant crea, además de los tres sensores y la luz, una tarjeta de configuración completa. Casi todo se puede dejar como viene; lo único que de verdad hay que tocar es la sensibilidad:
| Campo | Significado | Recomendación |
|---|---|---|
| Sensibilidad del sensor de presencia (1 a 6) | Alcance del radar en metros | 3 a 4 en un escritorio |
| Retardo de ocupado a libre (s) | Cuánto sigue informando "ocupado" tras la última detección | 0: el tiempo de espera lo manejan las automatizaciones |
| Retardo de libre a ocupado (s) | Cuánto tiempo debe haber alguien antes de informar "ocupado" | 0 |
| Umbral de aire (ppb) | Desde este valor de TVOC la luz parpadea en rojo; rango de 3000 a 50000 | 49999; si no, parpadea todas las tardes (ver la alerta de ventilación) |
| Brillo y temperatura de color al encender | Estado de la luz cuando recibe "encender" sin parámetros | Da lo mismo: las automatizaciones envían brillo y color |
| Comportamiento al volver la energía | Estado de la luz después de un corte | "Valor anterior" (fábrica) sirve; "apagado" si quieres que quede oscura |
| Calibrar sensor TVOC | Inicia la calibración del sensor de aire | Solo con valores claramente erróneos |

Los tres ayudantes
Para controlar todo necesitas tres ayudantes (Ajustes → Dispositivos y servicios → Ayudantes → Crear ayudante):
- Dos de tipo interruptor (toggle):
schreibtisch_fokus, para el "no molestar", yschreibtisch_automatik_pause, que suspende toda la automatización, por ejemplo cuando en una videollamada quieres que la luz quede encendida diga lo que diga el sensor. - Uno de tipo número:
schreibtisch_lueftungsschwelle, de 500 a 20000, en pasos de 100 y con unidad ppb, para la alerta de ventilación.
Mientras la pausa está activa, la rama "libre" tampoco apaga nada. Es a propósito, y por eso hay una automatización extra que quita la pausa todas las mañanas a las siete: un disparador de hora y una acción input_boolean.turn_off. Así una pausa olvidada no queda para siempre.
Automatización 1: luz del escritorio según presencia
La luz del R3 hace de lámpara de escritorio: blanco cálido al 40 % cuando hay alguien sentado y hay menos de 20 lux, y apagada cuando pasan cinco minutos sin nadie. Si tienes una lámpara real integrada en Home Assistant, solo cambia la entidad de luz. En la ruta B, esa lámpara es justamente lo que vas a controlar, ya que el LD2410 no trae luz propia.
La automatización tiene tres disparadores para que también reaccione si oscurece cuando ya estás sentado:
alias: "Schreibtisch: Licht bei Anwesenheit"
mode: single
triggers:
- id: anwesend
trigger: state
entity_id: binary_sensor.schreibtisch_sensor_belegung
to: "on"
- id: dunkel
trigger: numeric_state
entity_id: sensor.schreibtisch_sensor_beleuchtungsstarke
below: 20
- id: frei
trigger: state
entity_id: binary_sensor.schreibtisch_sensor_belegung
to: "off"
for:
minutes: 5
conditions:
- condition: state
entity_id: input_boolean.schreibtisch_automatik_pause
state: "off"
actions:
- choose:
- conditions:
- condition: trigger
id:
- anwesend
- dunkel
- condition: state
entity_id: input_boolean.schreibtisch_fokus
state: "off"
- condition: state
entity_id: binary_sensor.schreibtisch_sensor_belegung
state: "on"
- condition: or
conditions:
- condition: numeric_state
entity_id: sensor.schreibtisch_sensor_beleuchtungsstarke
below: 20
- condition: state
entity_id: light.schreibtisch_sensor
state: "on"
sequence:
- action: light.turn_on
target:
entity_id: light.schreibtisch_sensor
data:
brightness_pct: 40
color_temp_kelvin: 3000
- conditions:
- condition: trigger
id: frei
sequence:
- action: light.turn_off
target:
entity_id: light.schreibtisch_sensor
- action: input_boolean.turn_off
target:
entity_id: input_boolean.schreibtisch_fokus
Dos detalles de diseño que vale la pena entender:
- La condición "menos de 20 lux o la luz ya encendida" evita un bucle clásico: la propia luz sube la lectura del sensor por encima del umbral y la automatización se bloquearía sola. Con la ruta B y un BH1750, ubica el sensor de luz de modo que no reciba de lleno la lámpara, por la misma razón.
- Al dejar el puesto, la rama "libre" también apaga el modo concentración, para que la luz roja no quede encendida protegiendo a alguien que ya no está.

Automatización 2: calefacción a 22 grados cuando te sientas
Es la parte de la que más se espera en invierno. El termostato de la oficina queda fijo en 18 grados. Si alguien pasa tres minutos sentado, Home Assistant sube la temperatura objetivo a 22 grados; si el puesto queda vacío 30 minutos, vuelve al modo eco. Los tres minutos evitan que entrar un momento a buscar algo encienda la calefacción, y los 30 minutos cubren la pausa del café.
En el original, el termostato Homematic está detrás de Better Thermostat; la automatización solo cambia el modo preestablecido y la temperatura objetivo, y el regulador hace el resto. El autor armó todo en septiembre (fines de verano en Alemania) con la calefacción apagada, así que los 30 minutos de espera todavía no estaban probados en temporada de frío.
alias: "Schreibtisch: Heizung bei Anwesenheit"
mode: single
triggers:
- id: anwesend
trigger: state
entity_id: binary_sensor.schreibtisch_sensor_belegung
to: "on"
for:
minutes: 3
- id: frei
trigger: state
entity_id: binary_sensor.schreibtisch_sensor_belegung
to: "off"
for:
minutes: 30
conditions:
- condition: state
entity_id: input_boolean.schreibtisch_automatik_pause
state: "off"
- condition: state
entity_id: climate.heizung_buro_philipp
state: heat
actions:
- choose:
- conditions:
- condition: trigger
id: anwesend
sequence:
- action: climate.set_preset_mode
target:
entity_id: climate.heizung_buro_philipp
data:
preset_mode: none
- action: climate.set_temperature
target:
entity_id: climate.heizung_buro_philipp
data:
temperature: 22
- conditions:
- condition: trigger
id: frei
sequence:
- action: climate.set_preset_mode
target:
entity_id: climate.heizung_buro_philipp
data:
preset_mode: eco

La condición sobre el modo de calefacción (state: heat) hace que la automatización no haga nada en verano mientras el termostato está en "apagado". Si tu equipo no tiene el modo eco, cambia la última acción por un climate.set_temperature con 18 grados. Lo que el sensor no puede hacer, por definición, es precalentar antes de que llegues: para eso sigue siendo mejor un horario o el calendario.

Automatización 3: alerta de ventilación por calidad del aire (solo R3)
El sensor TVOC del R3 mide compuestos orgánicos volátiles: desde lo que exhalamos hasta productos de limpieza o el pegamento de un mueble nuevo, y entrega un valor total en ppb. ThirdReality lo divide en cuatro niveles: bueno hasta 2000 ppb, ventilar hasta 4000, advertencia hasta 6000 y peligro sobre eso. Desde el valor del campo "umbral de aire", la luz del R3 parpadea en rojo por su cuenta, algo que se desactiva con una pulsación corta del botón Reset.
Antes de automatizar sobre ese número, conviene saber qué mide de verdad. El autor dejó el R3 dos días junto a un Airthings View Plus, que mide VOC, CO₂ y material particulado:
| Situación | TVOC R3 | VOC Airthings | CO₂ Airthings | PM2,5 Airthings |
|---|---|---|---|---|
| Living vacío, de día | 250 a 400 ppb | 60 a 160 ppb | 570 ppm | 2 a 9 µg/m³ |
| De noche, una persona, ventana cerrada | 5.000 a 10.000 ppb, subiendo hasta la mañana | 450 a 930 ppb, bajando desde las 20:00 | 700 → 1.100 ppm, subiendo hasta la mañana | 2 a 5 µg/m³ |
| Aspirando 20 minutos | 520 → 885 ppb | 76 → 104 ppb | Sin cambio | 9 → 230 µg/m³ |
La curva del R3 sigue a la del CO₂, no a la de VOC del Airthings: las dos suben cuando hay alguien en la pieza y se quedan arriba toda la noche. La explicación está en el tipo de sensor. Un sensor de óxido metálico (MOX) tiene una capa calefaccionada cuya resistencia cambia cuando gases reductores (hidrógeno, etanol, acetona y otros compuestos que exhalamos y emanamos) reaccionan en su superficie. En una pieza cerrada esos gases se acumulan al mismo ritmo que el CO₂. El Airthings, en cambio, aplica una corrección de línea base que va bajando un valor alto sostenido durante horas, y de ahí la caída desde las 20:00. El R3 tampoco ve el polvo: al aspirar reaccionó al aire caliente del motor, no a las partículas.
En resumen: el TVOC del R3 es un indicador útil de aire viciado, casi como un sensor de CO₂, pero el número en sí y los cuatro niveles del fabricante no sirven como referencia. Con una persona en la pieza, de noche marca entre diez y veinte veces el valor del día, y la luz parpadearía en rojo desde 6000 ppb todas las tardes; por eso el autor subió el umbral de aire a 49999.
La automatización, entonces, no usa un número fijo sino el ayudante de umbral, y solo avisa si hay alguien sentado y es de día. La alerta se levanta cuando el valor pasa 20 minutos bajo el umbral:
alias: "Schreibtisch: Lüftungsalarm"
mode: single
triggers:
- id: dick
trigger: numeric_state
entity_id: sensor.schreibtisch_sensor_gesamt_vocs
above: input_number.schreibtisch_lueftungsschwelle
for:
minutes: 10
- id: gut
trigger: numeric_state
entity_id: sensor.schreibtisch_sensor_gesamt_vocs
below: input_number.schreibtisch_lueftungsschwelle
for:
minutes: 20
conditions:
- condition: state
entity_id: binary_sensor.schreibtisch_sensor_belegung
state: "on"
- condition: time
after: "07:00:00"
before: "22:00:00"
actions:
- choose:
- conditions:
- condition: trigger
id: dick
sequence:
- action: notify.mobile_app_dein_handy
data:
title: "Schreibtisch: lüften"
message: >-
{{ states('sensor.schreibtisch_sensor_gesamt_vocs') }} ppb TVOC,
seit 10 Minuten über deiner Schwelle von
{{ states('input_number.schreibtisch_lueftungsschwelle') }} ppb.
- conditions:
- condition: trigger
id: gut
sequence:
- action: notify.mobile_app_dein_handy
data:
title: "Schreibtisch: Luft wieder gut"
message: "TVOC seit 20 Minuten unter der Schwelle."

En el gráfico, el R3 (turquesa) sube a 10.000 ppb desde las 19:30 con una persona en la pieza y se queda ahí hasta la mañana, mientras el VOC del Airthings (naranjo) se ve plano en esa escala. Abajo aparece el peak de PM2,5 de la aspiradora a las 11:10, y arriba la presencia, que marca "libre" toda la noche porque el sensor no apuntaba al sillón.
Cómo elegir tu umbral: después de una semana, mira en el historial dónde queda el valor tras una mañana en el escritorio con la ventana cerrada y fija el ayudante bastante más arriba, por ejemplo en una vez y media ese valor. En el living del autor serían unos 8000 ppb; en una oficina más chica el número va a ser otro. Si después de ventilar el valor no baja claramente en media hora, la causa no eres tú sino algo en la pieza, como pintura fresca o productos de limpieza.
En la ruta B no hay sensor TVOC, así que esta automatización no aplica tal cual. En "Variantes y mejoras" tienes la alternativa.
Automatización 4: el botón de concentración
El botón Zigbee de ThirdReality reconoce tres gestos: pulsación corta, doble y larga. En ZHA llegan como evento zha_event con los comandos single, double y hold. La dirección Zigbee del botón aparece en su página de dispositivo y reemplaza, en el YAML de abajo, la dirección del botón del autor. En Zigbee2MQTT las pulsaciones llegan en el atributo action; los valores exactos están en la página del botón en Zigbee2MQTT.
Lo que hace cada gesto:
- Corta: activa el modo concentración y la luz se pone roja: "no molestar" para cualquiera que pase por la oficina.
- Corta otra vez: desactiva el modo concentración y vuelve la luz de escritorio.
- Doble: activa o desactiva la pausa de la automatización. La luz confirma durante un segundo y medio en verde ("pausa activada") o en rojo ("pausa desactivada") y luego vuelve al estado anterior.
- Larga: luz de lectura, 100 % blanco neutro, y modo concentración apagado.

alias: "Schreibtisch: Taste"
mode: queued
triggers:
- id: kurz
trigger: event
event_type: zha_event
event_data:
device_ieee: "ff:ff:b4:0e:06:09:af:06"
command: single
- id: doppelt
trigger: event
event_type: zha_event
event_data:
device_ieee: "ff:ff:b4:0e:06:09:af:06"
command: double
- id: lang
trigger: event
event_type: zha_event
event_data:
device_ieee: "ff:ff:b4:0e:06:09:af:06"
command: hold
actions:
- choose:
# kurz, Fokus war aus: Fokus an, Licht rot
- conditions:
- condition: trigger
id: kurz
- condition: state
entity_id: input_boolean.schreibtisch_fokus
state: "off"
sequence:
- action: input_boolean.turn_on
target:
entity_id: input_boolean.schreibtisch_fokus
- action: light.turn_on
target:
entity_id: light.schreibtisch_sensor
data:
brightness_pct: 60
rgb_color: [255, 0, 0]
# kurz, Fokus war an: Fokus aus, zurück zum Schreibtischlicht
- conditions:
- condition: trigger
id: kurz
- condition: state
entity_id: input_boolean.schreibtisch_fokus
state: "on"
sequence:
- action: input_boolean.turn_off
target:
entity_id: input_boolean.schreibtisch_fokus
- action: light.turn_on
target:
entity_id: light.schreibtisch_sensor
data:
brightness_pct: 40
color_temp_kelvin: 3000
# doppelt: Automatik-Pause umschalten, kurz quittieren, Licht wiederherstellen
- conditions:
- condition: trigger
id: doppelt
sequence:
- action: scene.create
data:
scene_id: schreibtisch_licht_vorher
snapshot_entities:
- light.schreibtisch_sensor
- action: input_boolean.toggle
target:
entity_id: input_boolean.schreibtisch_automatik_pause
- if:
- condition: state
entity_id: input_boolean.schreibtisch_automatik_pause
state: "on"
then:
- action: light.turn_on
target:
entity_id: light.schreibtisch_sensor
data:
brightness_pct: 100
rgb_color: [0, 255, 0]
else:
- action: light.turn_on
target:
entity_id: light.schreibtisch_sensor
data:
brightness_pct: 100
rgb_color: [255, 0, 0]
- delay:
seconds: 1.5
- action: scene.turn_on
target:
entity_id: scene.schreibtisch_licht_vorher
# lang: Leselicht, Fokus aus
- conditions:
- condition: trigger
id: lang
sequence:
- action: input_boolean.turn_off
target:
entity_id: input_boolean.schreibtisch_fokus
- action: light.turn_on
target:
entity_id: light.schreibtisch_sensor
data:
brightness_pct: 100
color_temp_kelvin: 4000
La confirmación del doble clic usa scene.create: Home Assistant guarda una foto del estado de la luz, parpadea en el color y scene.turn_on restaura el estado anterior, ya sea que la luz estuviera apagada, en blanco cálido o en rojo. El modo queued hace que pulsaciones rápidas seguidas se procesen una tras otra sin interrumpirse. En el botón del autor cada clic llegó como exactamente un evento; si no necesitas el doble clic, desactívalo en la tarjeta del dispositivo ("desactivar doble clic") y el botón reacciona al instante en cada pulsación.

¿Haces la ruta B y no tienes botón Zigbee? Los mismos interruptores (schreibtisch_fokus y schreibtisch_automatik_pause) se manejan desde el panel de Home Assistant o desde el celular.
Panel y tiempo de trabajo
Un ayudante de tipo estadísticas del historial (history stats) convierte la ocupación en un número: entidad de ocupación, estado "on", tipo "tiempo", inicio {{ today_at() }} y fin {{ now() }}. El autor lo llamó "Escritorio hoy", y la primera tarde marcó 2 horas y 56 minutos.
En un panel pequeño se pueden juntar la presencia, el modo concentración, la pausa, la luz con control de brillo, el TVOC con su tendencia, la calefacción con su temperatura objetivo y un historial de 24 horas.

Lo que mostró el montaje en el uso diario
- La reacción es inmediata: entre la pulsación del botón y la luz roja, el registro (trace) mostró un cuarto de segundo.
- El radar retiene la ocupación mientras haya alguien dentro de su campo. Para la luz y la calefacción, esa inercia es justo lo que se busca.
- El campo de detección es un cono hacia adelante, no una visión en 360°. En el living, junto al Airthings y sin apuntar al sillón, el R3 no vio a una persona en toda la tarde, aunque sus sensores de aire sí la registraron. En el borde del alcance, la ocupación parpadea en tramos de cinco a diez segundos en vez de quedarse estable. El sensor va con el frente hacia la silla, no en cualquier rincón del estante.
- Una persona durmiendo también está "presente" para un radar. Si piensas usarlo como luz nocturna junto a la cama, un PIR es mejor opción.
- Cambiar la sensibilidad reinicia el sensor. En el modelo hermano de 24 GHz del mismo fabricante, el R2, la ocupación pasó de inmediato a "apagado" y tardó uno a dos minutos en volver a informar; si pruebas niveles, espera después de cada cambio. Además, en el R2 los metros declarados resultaron optimistas: el nivel 4 no alcanzó para detectar a una persona sentada a tres metros, y con el nivel 5 sí. Para el R3 en un escritorio no importa, porque está a un metro de la silla.
- El R3 es router Zigbee: refuerza la red para equipos a batería cercanos. Por lo mismo, necesita corriente permanente; si lo desenchufas, los equipos que se enrutaban por él pierden la conexión un momento hasta encontrar otro camino.
Errores comunes y cómo resolverlos
- La luz se apaga aunque estás sentado: revisa hacia dónde apunta el sensor; si estás en el borde del alcance, sube un nivel. Con el LD2410, mira la entidad de distancia de detección para ver a cuántos metros te ubica.
- La luz nunca se enciende: revisa que el ayudante de pausa esté en "off" y que el valor de lux realmente baje de 20 cuando oscurece. Si el sensor de luz recibe la luz de la pantalla, puede no bajar nunca de ese valor.
- El LD2410 no entrega datos: casi siempre son TX y RX cruzados al revés, o una velocidad distinta de 256000. Revisa también que reciba 5 V y no 3,3 V.
- El sensor detecta a alguien en el pasillo: baja el alcance (R3) o sube el umbral de las compuertas más lejanas (LD2410).
Variantes y mejoras
- Medir CO₂ real en vez de TVOC: si el TVOC del R3 termina siguiendo al CO₂, ¿por qué no medir CO₂ directamente? Un sensor NDIR como el SCD40 o el SCD41 por I2C, agregado al mismo ESP32 de la ruta B, entrega ppm reales. Ahí sí puedes usar umbrales con sentido (sobre 1000 ppm, ventilar) y la automatización 3 funciona cambiando solo la entidad del sensor y el ayudante de umbral.
- Recordatorio de pausa activa: con la misma ocupación puedes avisarte cuando llevas mucho rato sentado. Este disparador se activa cuando la ocupación lleva 50 minutos seguidos en "on" (si te levantas, el conteo vuelve a cero):
alias: "Escritorio: pausa activa"
mode: single
triggers:
- trigger: state
entity_id: binary_sensor.schreibtisch_sensor_belegung
to: "on"
for:
minutes: 50
conditions:
- condition: state
entity_id: input_boolean.schreibtisch_automatik_pause
state: "off"
actions:
- action: notify.mobile_app_dein_handy
data:
title: "Escritorio: pausa"
message: "Llevas 50 minutos sentado. Levántate y estira las piernas."
- Pantalla en el mismo ESP32: una pantalla OLED SSD1306 por I2C, en el mismo bus que el BH1750, puede mostrar las horas de trabajo del día o el estado de concentración, leyendo las entidades de Home Assistant desde ESPHome con la plataforma
homeassistant.
Personalización para Chile
La calefacción. El original controla un radiador con válvula termostática, algo poco común en las casas chilenas. Acá lo habitual es una estufa eléctrica, un aire acondicionado split con bomba de calor o una estufa a parafina o a gas. Las opciones para que la automatización 2 te sirva:
- Aire acondicionado split: si tu equipo se integra a Home Assistant (por WiFi o con un emisor infrarrojo), ya aparece como entidad
climatecon temperatura objetivo y modo eco o similar, y la automatización funciona cambiando solo elentity_id. - Estufa eléctrica en un enchufe inteligente: el ayudante termostato genérico (generic thermostat) de Home Assistant combina el enchufe con un sensor de temperatura y crea una entidad
climateque la automatización puede usar sin cambios. - Estufas a gas o a parafina: no las automatices. Encender a distancia un equipo de combustión es un riesgo de incendio y de monóxido de carbono. Úsalas con una persona presente y una ventilación adecuada.
Los componentes. El R3 y el botón Zigbee no se venden en Chile por ahora, y por eso la ruta B tiene sentido acá. En MechatronicStore encuentras lo necesario para armarla:
- Placa ESP32 DevKit: el cerebro de la ruta B; corre ESPHome y se conecta por WiFi a Home Assistant.
- Sensor radar mmWave LD2410: el reemplazo del radar del R3, con detección de personas quietas hasta unos 6 m.
- Sensor de luz BH1750: reemplaza el sensor de lux del R3 para la automatización de luz.
- Cables dupont hembra hembra y un cargador USB de 5 V con su cable, para alimentar el ESP32 y el radar.
- Raspberry Pi 4 o 5: si todavía no tienes un servidor para Home Assistant.
- Módulo coordinador Zigbee USB: si vas por la ruta A o quieres sumar otros sensores Zigbee a tu casa.
- Sensor de calidad de aire por I2C: para recuperar la alerta de ventilación en la ruta B (ver "Variantes y mejoras").
Si en el tutorial original usan el ThirdReality R3, el LD2410 con un ESP32 cumple la misma función de presencia; la luz RGB la reemplaza cualquier lámpara integrada a Home Assistant.
Recursos
- Tutorial original (alemán): Präsenzmelder in Home Assistant: der smarte Schreibtisch, de Philipp Schweizer en raspberry.tips. Esta guía está basada en ese artículo e inspirada en su montaje.
- Componente LD2410 de ESPHome: documentación oficial
- Integración ZHA de Home Assistant: documentación
- Estadísticas del historial (history stats): documentación
- Better Thermostat: repositorio en GitHub
- Código de este tutorial: las cuatro automatizaciones del original, la configuración de ESPHome para el LD2410 y el recordatorio de pausa activa, todo en los bloques YAML de arriba.
Versión chilena con componentes en stock local.




