Tu casa ya sabe cuándo se abrió una puerta, cuándo subió la temperatura del living o cuándo detectó movimiento en la entrada. La pregunta es: cuando eso pasa, ¿cómo te enteras si estás en la pega o en la calle? Hay apps de notificaciones, alertas por correo y avisos por voz, pero ninguna es tan cómoda ni tan inmediata como Telegram.

En este tutorial vas a convertir un bot de Telegram en el control remoto de tu Home Assistant. No solo para recibir avisos: vas a poder mandar comandos desde el chat, escribir frases tipo "buenas noches" para que la casa reaccione, y armar botones interactivos que disparan acciones con un toque. Todo corriendo sobre un Raspberry Pi como servidor, sin VPN, sin abrir puertos y sin pagar una sola suscripción.

Raspberry Pi conectado a un celular con Telegram y Home Assistant

Por qué Telegram y no otra cosa

Antes de meter mano, vale la pena entender la decisión técnica. Telegram tiene tres ventajas concretas para domótica casera:

  1. Es gratis y multiplataforma: corre en el celular, en el computador y en la web. La misma cuenta recibe tus alertas en todos lados.
  2. Funciona en modo Polling: Home Assistant abre una conexión saliente hacia los servidores de Telegram y se queda escuchando. Eso significa que NO necesitas IP pública, ni redireccionar puertos en el router, ni exponer tu casa a internet. Para una red doméstica chilena con IP dinámica de tu proveedor, esto es justo lo que quieres.
  3. El canal es bidireccional: a diferencia de un correo, acá la casa te habla y tú le respondes. Esa ida y vuelta es la que transforma un simple aviso en un panel de control.

Lo que necesitas

  • Home Assistant OS (o Supervised), idealmente versión 2025.7 o superior. Desde esa versión la integración de Telegram se configura entera por la interfaz, sin tocar archivos YAML a mano.
  • Un Raspberry Pi 5 (o un servidor equivalente) corriendo como host de Home Assistant.
  • Una cuenta de Telegram en tu celular.
  • Acceso a internet para Home Assistant, o al menos que esté en la misma red local.

Si todavía no tienes Home Assistant instalado, primero resuelve eso y después vuelve acá. El bot asume que ya tienes entidades funcionando (sensores, luces, clima).

Paso 1: crear el bot con BotFather

Abre Telegram y busca la cuenta @BotFather. Es el bot oficial de Telegram para fabricar bots, y tiene el tilde azul de verificado.

Buscar la cuenta @BotFather en Telegram

Inicia el chat y manda:

Text
/newbot

BotFather te va a pedir un nombre para mostrar (por ejemplo "Mi Casa") y un nombre de usuario único, que obligatoriamente tiene que terminar en _bot (por ejemplo micasa_bot). Cuando termines, te entrega un token de API con esta pinta:

Text
1234567890:ABCdefGhIJKlmNoPQRsTUVwxYZ

Ese token es la llave del bot: cualquiera que lo tenga puede controlarlo, así que cópialo y guárdalo en un lugar seguro. Lo vas a usar en un par de minutos.

Conversación con BotFather creando el bot y recibiendo el token

Paso 2: encontrar tu Chat ID

Home Assistant necesita saber a qué chat mandar los mensajes. Primero escríbele cualquier cosa a tu bot (un "Hola" basta) para que el chat exista. Después abre esta URL en el navegador, reemplazando EUER_TOKEN por tu token:

Text
https://api.telegram.org/botEUER_TOKEN/getUpdates

En la respuesta JSON, dentro de result[0].message.chat.id, vas a ver tu Chat ID: un número como 123456789 si es tu chat personal, o un número negativo si es un grupo. Anótalo. A veces tarda unos segundos en aparecer, así que si sale vacío, mándale otro mensaje al bot y recarga.

Respuesta JSON de getUpdates con el chat.id resaltado

Paso 3: configurar la integración en Home Assistant

Desde HA 2025.7 ya no hay que editar configuration.yaml a mano: todo se hace por la interfaz. Anda a:

Ajustes → Dispositivos y servicios → Agregar integración → busca "Telegram Bot"

Pantalla de Home Assistant agregando la integración Telegram Bot

Elige el tipo de bot "Polling" (el recomendado para redes domésticas sin IP pública). Ingresa tu token de API y pon tu Chat ID en el campo "Allowed Chat IDs". Al guardar, aparece una nueva entidad de notificación en Home Assistant.

La integración crea automáticamente un servicio de notificación que vas a usar en tus automatizaciones. El nombre del servicio sigue el esquema telegram_bot.send_message.

Paso 4: mandar el primer mensaje de prueba

En Home Assistant anda a Ajustes → Herramientas para desarrolladores → Acciones, elige el servicio telegram_bot.send_message y manda un mensaje de prueba:

YAML
message: "Home Assistant ist verbunden!"

Si el mensaje aparece en tu chat de Telegram, está todo bien configurado y puedes seguir con la parte entretenida.

Herramientas para desarrolladores de Home Assistant enviando un mensaje de prueba

Paso 5: notificaciones push con 5 ejemplos listos para usar

El caso más simple: Home Assistant te manda un mensaje cuando pasa algo. Acá van cinco automatizaciones que puedes copiar directo. Para que disparen necesitas sensores; más abajo, en la sección de Chile, te cuento qué hardware del catálogo local cumple cada rol.

1. Se activa el sensor de movimiento. Sirve un sensor de movimiento Zigbee. Como coordinador Zigbee para Home Assistant necesitas un dongle USB que reciba esas señales.

YAML
alias: Telegram - Bewegung erkannt
trigger:
  - platform: state
    entity_id: binary_sensor.bewegungsmelder_eingang
    to: "on"
action:
  - service: notify.telegram_smarthome
    data:
      message: >
        Bewegung erkannt!
        Eingang – {{ now().strftime('%H:%M Uhr') }}

2. Ventana o puerta abierta demasiado tiempo. Combina con un sensor de contacto de puerta y ventana Zigbee. La gracia del bloque for: es que solo avisa si la condición se mantiene 20 minutos, no en el instante en que se abre.

YAML
alias: Telegram - Fenster offen (20 Min)
trigger:
  - platform: state
    entity_id: binary_sensor.fenster_wohnzimmer
    to: "on"
    for:
      minutes: 20
action:
  - service: notify.telegram_smarthome
    data:
      message: >
        Fenster Wohnzimmer ist seit 20 Minuten offen!
        Bitte schließen oder Heizung reduzieren.

3. Aviso de temperatura. El valor de temperatura lo entrega, por ejemplo, un sensor Zigbee de temperatura y humedad enlazado directo a Home Assistant, sin nube de por medio.

YAML
alias: Telegram - Keller zu warm
trigger:
  - platform: numeric_state
    entity_id: sensor.temperatur_keller
    above: 28
action:
  - service: notify.telegram_smarthome
    data:
      message: >
        Temperaturalarm Keller!
        Aktuell: {{ states('sensor.temperatur_keller') }} °C

4. Sensor de agua / alarma de inundación. Un sensor de agua Zigbee (idealmente IP67) avisa apenas detecta una fuga, antes de que el problema crezca.

YAML
alias: Telegram - Wasseralarm
trigger:
  - platform: state
    entity_id: binary_sensor.wassermelder_keller
    to: "on"
action:
  - service: notify.telegram_smarthome
    data:
      message: >
        ALARM: Wassermelder hat angesprochen!
        Sofort prüfen – {{ now().strftime('%d.%m.%Y %H:%M') }}

5. Enviar foto de la cámara al tocar el timbre. Si tienes una cámara en la puerta, Home Assistant saca una foto y te la manda cuando alguien toca el timbre.

YAML
alias: Telegram - Türklingel mit Foto
trigger:
  - platform: state
    entity_id: binary_sensor.tuerklingel
    to: "on"
action:
  - service: camera.snapshot
    target:
      entity_id: camera.haustuer
    data:
      filename: /config/www/snapshot_tuer.jpg
  - delay:
      seconds: 1
  - service: telegram_bot.send_photo
    data:
      chat_id: "123456789"
      file: /config/www/snapshot_tuer.jpg
      caption: "Jemand an der Tür – {{ now().strftime('%H:%M Uhr') }}"

Paso 6: enviar comandos a Home Assistant

Acá se pone realmente útil: tú le mandas mensajes al bot y Home Assistant ejecuta acciones. Los comandos de Telegram empiezan con /. Home Assistant escucha el evento telegram_command.

/status: resumen de la casa por mensaje.

YAML
alias: Telegram - /status Abfrage
trigger:
  - platform: event
    event_type: telegram_command
    event_data:
      command: "/status"
action:
  - service: notify.telegram_smarthome
    data:
      message: >
        Haus-Status {{ now().strftime('%H:%M') }}:
        Temperatur Wohnzimmer: {{ states('sensor.temperatur_wohnzimmer') }} °C
        Heizung: {{ states('climate.heizung') }}
        Alle Lichter aus: {{ is_state('light.alle_lichter', 'off') }}
        Fenster offen: {{ states('binary_sensor.fenster_wohnzimmer') }}

/licht_aus: apagar todas las luces.

YAML
alias: Telegram - /licht_aus
trigger:
  - platform: event
    event_type: telegram_command
    event_data:
      command: "/licht_aus"
action:
  - service: light.turn_off
    target:
      area_id: all
  - service: notify.telegram_smarthome
    data:
      message: "Alle Lichter ausgeschaltet."

/alarm_an y /alarm_aus: controlar la alarma.

YAML
alias: Telegram - /alarm_an
trigger:
  - platform: event
    event_type: telegram_command
    event_data:
      command: "/alarm_an"
action:
  - service: alarm_control_panel.alarm_arm_away
    target:
      entity_id: alarm_control_panel.haus
  - service: notify.telegram_smarthome
    data:
      message: "Alarmanlage scharf gestellt."

Paso 7: reconocer texto libre con palabras clave

Además de los /comandos formales, Home Assistant también reacciona a texto libre. El evento se llama telegram_text y entrega el texto del mensaje en trigger.event.data.text. Con eso armas disparadores en lenguaje natural.

"Voy llegando a la casa": modo bienvenida.

YAML
alias: Telegram - Ankunft erkennen
trigger:
  - platform: event
    event_type: telegram_text
condition:
  - condition: template
    value_template: >
      {{ 'nach hause' in trigger.event.data.text | lower or
         'komme heim' in trigger.event.data.text | lower }}
action:
  - service: climate.set_temperature
    target:
      entity_id: climate.heizung
    data:
      temperature: 21
  - service: light.turn_on
    target:
      entity_id: light.eingang
  - service: notify.telegram_smarthome
    data:
      message: "Willkommen! Heizung auf 21°C gestellt, Licht im Eingang an."

"Buenas noches": activar modo nocturno.

YAML
alias: Telegram - Gute Nacht Modus
trigger:
  - platform: event
    event_type: telegram_text
condition:
  - condition: template
    value_template: >
      {{ 'gute nacht' in trigger.event.data.text | lower or
         'schlafenszeit' in trigger.event.data.text | lower }}
action:
  - service: light.turn_off
    target:
      area_id: all
  - service: climate.set_temperature
    target:
      entity_id: climate.heizung
    data:
      temperature: 18
  - service: alarm_control_panel.alarm_arm_home
    target:
      entity_id: alarm_control_panel.haus
  - service: notify.telegram_smarthome
    data:
      message: "Gute Nacht! Alle Lichter aus, Heizung auf 18°C, Alarm im Heimodus."

El truco está en el filtro | lower: con eso la automatización reacciona igual a "Gute Nacht", "gute nacht" o "GUTE NACHT". Las mayúsculas y minúsculas dejan de importar, lo que evita el típico problema de que el comando no dispare porque escribiste distinto.

Varias palabras clave en una misma automatización. Puedes combinar todas las que quieras e incluso verificar quién mandó el mensaje, para que no cualquier Chat ID dispare tus automatizaciones:

YAML
condition:
  - condition: template
    value_template: >
      {{ trigger.event.data.chat_id == 123456789 and
         ('heizung aus' in trigger.event.data.text | lower or
          'alles aus' in trigger.event.data.text | lower) }}

Paso 8: botones interactivos (inline buttons)

El plato fuerte: Home Assistant manda un mensaje con botones directo en el chat. Tocas un botón y la casa ejecuta la acción correspondiente. Ideal para confirmar alarmas o para control rápido.

Mensaje de alarma con Confirmar / Ignorar.

YAML
alias: Telegram - Alarm mit Buttons
trigger:
  - platform: state
    entity_id: binary_sensor.bewegungsmelder_eingang
    to: "on"
action:
  - service: telegram_bot.send_message
    data:
      chat_id: "123456789"
      message: "Bewegung im Eingang! Was möchtest du tun?"
      inline_keyboard:
        - - ["Licht an", "/licht_eingang_an"]
          - ["Ignorieren", "/ignorieren"]
        - - ["Kamerabild anzeigen", "/snapshot_eingang"]

Por cada botón necesitas una automatización separada que reaccione al evento telegram_callback_query:

YAML
alias: Telegram - Button Licht Eingang
trigger:
  - platform: event
    event_type: telegram_callback_query
    event_data:
      data: "/licht_eingang_an"
action:
  - service: telegram_bot.answer_callback_query
    data:
      callback_query_id: "{{ trigger.event.data.id }}"
      message: "Licht eingeschaltet!"
  - service: light.turn_on
    target:
      entity_id: light.eingang

El answer_callback_query no es opcional: confirma al cliente de Telegram que el toque se procesó. Si lo omites, el botón se queda girando con la ruedita de carga para siempre. A nivel de protocolo, Telegram espera ese acuse de recibo, y mientras no llega, el callback queda "pendiente" en su lado.

Seguridad: solo chats autorizados

Tu bot es público: en principio cualquiera que conozca su nombre podría mandarle mensajes. Home Assistant ya filtra los mensajes entrantes mediante "Allowed Chat IDs" en la integración. Aun así, conviene verificar el Chat ID dentro de las automatizaciones críticas:

YAML
value_template: "{{ trigger.event.data.chat_id == 123456789 }}"

Como capa extra, puedes poner el bot en modo "privado" desde @BotFather (/setprivacy y luego enable): así solo procesa mensajes directos de usuarios que ya iniciaron el bot.

Variantes y mejoras

Una vez que tengas lo básico andando, estas tres extensiones te suben el proyecto de nivel (ninguna viene en el tutorial original):

  • Menú permanente con /menu: en lugar de recordar cada comando de memoria, arma un único comando /menu que devuelve un teclado inline con los botones más usados (Estado, Apagar luces, Alarma ON, Alarma OFF). Reutiliza la estructura de inline_keyboard del Paso 8 apuntando cada botón a un /comando que ya tengas.
  • Grupo familiar: agrega el bot a un grupo de Telegram y pon el Chat ID negativo del grupo en Home Assistant. Así toda la familia recibe las mismas alertas y cualquiera puede mandar comandos, útil si quieres que más de una persona pueda apagar la alarma.
  • Reportes programados: combina el servicio notify.telegram_smarthome con un disparador de tiempo (platform: time) para recibir cada mañana a las 8:00 un resumen del estado de la casa, o un aviso si dejaste alguna ventana abierta antes de dormir.

Personalización para Chile

El gran cuello de botella de este proyecto no es el software (es gratis), sino el hardware de sensores. En Chile puedes armar la base en MechatronicStore:

  • Módulo Coordinador Red ZigBee CC2531 (Domótica Home Assistant), SKU GL2-9, alrededor de $9.690. Este es el equivalente local del dongle Zigbee que recomienda el tutorial: se conecta por USB al Raspberry Pi y actúa como coordinador para recibir todos los sensores Zigbee (movimiento, contacto, temperatura, agua). Es la pieza clave que conecta los sensores con Home Assistant.
  • Raspberry Pi 5: es el cerebro que hospeda Home Assistant. En MechatronicStore figura en el catálogo, aunque suele agotarse rápido; si no hay stock al momento de armar tu proyecto, cualquier mini PC o servidor equivalente cumple el rol de host.
  • Sensores Zigbee (movimiento, contacto de puerta/ventana, temperatura y humedad, fuga de agua): son los que disparan las automatizaciones del Paso 5. El tutorial usa sensores de la familia Aqara y SONOFF; cualquier sensor Zigbee compatible con ZHA o Zigbee2MQTT funciona con el coordinador CC2531 sin necesidad de un hub propietario.

La gracia es que, teniendo el coordinador Zigbee andando, vas sumando sensores de a poco según tu presupuesto: parte con uno de movimiento, después agrega el de temperatura, y así.

Cierre

El bot de Telegram es mucho más que un canal de avisos. Con comandos controlas Home Assistant directo desde el chat, con reconocimiento de palabras clave la casa reacciona a frases naturales, y con botones inline el celular se transforma en un dashboard de control completo para cuando estás afuera, sin VPN ni puertos abiertos. La combinación de notificación push con botones de acción clicables es la que de verdad hace la diferencia en el día a día.

Recursos

Versión chilena basada en el tutorial de raspberry.tips, con hardware en stock local en MechatronicStore.