Ir al contenido

← Todas las funcionalidades

Riego agrícola automatizadoRaspberry Pi (Docker)TelegramAlertas

Un bot de Telegram para alertas y control remoto del riego

El campo está a 40 minutos en coche; el móvil, en tu bolsillo. Este flujo de Node-RED usa node-red-contrib-telegrambot en una Raspberry Pi para enviar notificaciones de alarma y aceptar comandos remotos: /estado para un resumen de estado en vivo, /regar para forzar un ciclo, /parar para una parada de emergencia. Solo se obedece a un chat id de la lista blanca y el token vive en una variable de entorno. Es la capa exacta de control remoto de un despliegue real de riego automatizado.

Comandos de entrada, una función para gobernarlos todos

Un nodo receptor de telegram alimenta una función de parseo que valida el chat id contra la lista blanca (variable de entorno TELEGRAM_CHAT_ID) y normaliza el texto a /estado, /regar, /parar o /alarmas. Cualquier otra cosa se enruta a una respuesta de ayuda. Los chats desconocidos se descartan y se registran — el bot simplemente no existe para desconocidos, algo que importa cuando puede arrancar una bomba.

Estado construido desde el contexto de flujo

La respuesta de /estado se monta con valores que las otras pestañas ya publican en el contexto de flujo: si hay un ciclo en marcha, el último excedente fotovoltaico de la pestaña de Fronius y la previsión de lluvia y helada de la pestaña de OpenWeather. Sin sondeos extra — el bot es una ventana al estado que el sistema mantiene de todos modos, así que las respuestas son instantáneas incluso con conexiones rurales lentas.

Las alarmas se envían solas

Cuando una entrada digital supervisada se dispara, el mismo mensaje que se inserta en el histórico de MySQL se formatea y se envía al chat autorizado con el nombre de la entrada, el mensaje y la hora local. El agricultor se entera de un fallo térmico de la bomba en segundos, no en la siguiente visita al campo — normalmente antes incluso de que la presión del agua se haya estabilizado.

Un fragmento de la implementación

Tal cual del ejemplo desplegado en el Raspberry Pi (Docker) — cópialo libremente:

const AUTHORIZED_CHAT = Number(env.get("TELEGRAM_CHAT_ID"));

const chatId = msg.payload.chatId;
const text = (msg.payload.content || "").trim().toLowerCase();

if (chatId !== AUTHORIZED_CHAT) {
    // Unknown chat: ignore it and leave a trace in the log
    node.warn(`Command rejected from unauthorized chat: ${chatId}`);
    return null;
}

const COMMANDS = ["/status", "/irrigate", "/stop", "/alarms"];
msg.cmd = COMMANDS.includes(text.split("@")[0]) ? text.split("@")[0] : "help";
msg.chatId = chatId;
return msg;


// ===========================================================================
// FUNCTION B — "Reply with status"
// Reads from context the latest values published by the other tabs.
// ===========================================================================
/*
const irrigationActive = flow.get("irrigation_active") || false;
const weather = flow.get("last_weather") || {};
const photovoltaic = flow.get("last_pv") || {};   // from the Fronius tab

const lines = [
    irrigationActive ? "🟢 Irrigation RUNNING" : "⚪ Irrigation stopped",
    `PV: ${photovoltaic.generated_w || "?"} W generated, ` +
        `${photovoltaic.surplus_w || "?"} W of surplus`,

El ejemplo completo es un programa entero — cabecera de conexionado, setup y bucle principal — listo para adaptar a tu aplicación.

Preguntas frecuentes

¿Cómo creo el bot y consigo el token?

Habla con @BotFather en Telegram, crea un bot nuevo y copia el token en la variable de entorno TELEGRAM_TOKEN del contenedor de Node-RED. Configura el nodo de credenciales de telegrambot para leerlo del entorno en lugar de pegarlo.

¿Cómo averiguo mi chat id para la lista blanca?

Envía cualquier mensaje a tu bot nuevo e inspecciona msg.payload.chatId en un nodo debug, o consulta el endpoint getUpdates de la Bot API. Pon ese número en TELEGRAM_CHAT_ID y el parser rechazará cualquier otro chat.

¿Es Telegram lo bastante fiable para alarmas críticas?

Trátalo como un canal de notificación, no como una capa de seguridad. Las protecciones cableadas (relés térmicos, presostatos) siguen actuando en local; Telegram le cuenta al humano lo que ya ha pasado y le permite parar o arrancar ciclos a distancia.

Funcionalidades relacionadas