📡 KissTelegram

(Keep It Simple St***** Telegram)

Primera Librería para ESP32 Telegram con CERO Pérdida de Datos y SSL

v1.0.0 | ESP32 | Open Source MIT
0 fallos en 16K+ mensajes
99.7% tasa de entrega
44% más rápido (SSL secure)
uptime (millis safe)

✨ ¿Por Qué KissTelegram?

Con años de experiencia en firmware crítico. Probado en 60 hectáreas de producción agrícola 24/7. No es un proyecto hobby, es una solución industrial lista para producción al alcance de los makers.

🏆

Experiencia Real

Desarrollador del firmware Tomato RAF para routers (2008-2014). Miles de instalaciones worldwide.

🔬

Probado en Campo

60 hectáreas agrícolas monitorizadas 24/7 sin pérdida de datos ni fallos.

📊

Métricas Reales

16,000+ mensajes procesados, 99.8% tasa entrega, 0 memory leaks.

🛠️

Sin Dependencias

No ArduinoJson, no librerías externas. Todo char[], cero String.

🎯 Casos de Uso Reales

🛠️ Para Makers

  • Estación meteorológica: Notificaciones críticas aunque pierda WiFi durante tormentas
  • Sistema de riego: Control remoto + histórico completo sin pérdidas
  • Monitor hogar: Alertas priorizadas (alarma > movimiento > temperatura)
  • Alimentadores agricolas: Pesos, Identificadores por VIA de alimentación incluso con cortes de luz
  • Invernadero: Datos de sensores, VPD, Irrigación Inteligente y datos persistentes 24/7
  • Proyectos educativos: OTA remoto sin visitas al laboratorio

🏢 Para Empresas

  • Agricultura intensiva: 60ha monitorizadas, 0 pérdida datos climáticos/plagas/energía
  • Ganadería: Sensores remotos en campo con actualizaciones OTA sin técnico in-situ
  • Industrial IoT: Alertas críticas de producción, VIA, Mantenimiento, con prioridades de datos
  • Smart Buildings: 50+ sensores, gestión centralizada vía Telegram
  • Domótica: Tu hogar en tú móvil con Telegram
  • Energía: Monitorización solar/eólica con datos históricos persistentes
  • Ahorro: Por tres cafés tienes tu ESP32S3 conectado a Internet con encriptación sin fallos de comunicación y transmitiendo los datos de tu IoT

⚡ Quick Start (2 minutos)

1

Descarga

git clone https://github.com/Victek/KissTelegram

O descarga ZIP desde GitHub

2

Incluye

#include "KissTelegram.h"

Copia a Arduino/libraries/

3

Configura

credentials.setBotToken("TOKEN");

WiFi y Chat ID también

4

¡Listo!

bot->queueMessage(chat_id, "Hola");

Nunca se pierde un mensaje

Pruébalo Gratis

MIT License · Open Source · Sin restricciones

📥 Descargar KissTelegram

❌ El Problema

Las librerías tradicionales de Telegram (UniversalTelegramBot, CTBot) tienen limitaciones críticas para proyectos IoT de producción:

  • Pérdida de mensajes cuando cae la conexión WiFi (100% pérdida)
  • Sin persistencia - los datos se pierden al reiniciar o fallo de energía
  • Reconexión SSL costosa en cada mensaje (~300-500ms overhead)
  • Sin gestión de rate-limit de Telegram (error 429 = crash)
  • OTA manual o inexistente (visita técnica obligatoria)
  • Fugas de memoria por uso de String (crash cada 2-7 días)
  • Millis overflow tras 49 días (reinicio manual necesario)
  • Sin priorización de mensajes críticos (alarmas perdidas)

✅ La Solución: KissTelegram

Una librería completa diseñada para IoT industrial y domótico donde la pérdida de datos no es aceptable.

💾

Persistencia LittleFS

Mensajes almacenados en flash, sobreviven reinicios y cortes de energía. JSONL eficiente.

📊

Cola con Prioridades

CRITICAL > HIGH > NORMAL > LOW. Alarmas siempre primero. Sistema inteligente.

🔗

Conexión Keep-Alive

Reutiliza SSL, reduce latencia 10x vs reconexión. 44% más rápido en secure mode.

📲

OTA Seguro

PIN/PUK, backup automático, rollback si falla, detección boot-loop, dual-bank.

🔋

Power Management

6 modos de energía (BOOT/LOW/IDLE/ACTIVE/TURBO/MAINT) para optimizar batería.

Rate-Limit Handling

Manejo automático del error 429 de Telegram con retry inteligente y backoff.

🔒

SSL Híbrido Inteligente

Boot rápido inseguro, upgrade automático a secure tras NTP sync.

⏱️

Millis Overflow Safe

Funciona correctamente sin reiniciar por más de 49 días. SAFE_TIME_DIFF.

⚔️ KissTelegram vs Otros

Comparación técnica objetiva con las librerías más populares:

Característica Universal
TelegramBot
CTBot KissTelegram
Pérdida mensajes WiFi down ❌ 100% ❌ 100% ✅ 0% (LittleFS)
Persistencia tras reinicio ❌ No ❌ No ✅ NVS + FS
SSL Keep-Alive ❌ Reconecta cada msg ❌ No ✅ Reutiliza (10x)
Rate-limit handling (429) ❌ Crash ❌ No ✅ Retry inteligente
OTA remoto seguro ❌ No ❌ No ✅ PIN/PUK + rollback
Priorización mensajes ❌ No ❌ No ✅ 4 niveles
Fugas memoria (String) ⚠️ Frecuentes ⚠️ Ocasionales ✅ 0 (char[] only)
Millis overflow (49 días) ❌ Crash ❌ Crash ✅ Safe handling
Power management ❌ No ❌ No ✅ 6 modos
Dependencias externas ⚠️ ArduinoJson ⚠️ ArduinoJson ✅ Ninguna
Uptime producción 2-7 días ~15 días ∞ Infinito
RAM estable (secure) ❌ Degrada ⚠️ Fragmenta ✅ 222KB fijo

🗃️ Arquitectura Modular

arquitectura.txt
┌─────────────────────────────────────────────────┐
│                  Tu sketch                      │
└──────────────────────┬──────────────────────────┘
                      │
┌─────────────────────▼─────────────────────────────┐
│              KissTelegram (Core)                │
│  • Envío/Recepción mensajes                     │
│  • Cola con prioridades                         │
│  • Persistencia LittleFS			  │
│  • WiFi					  │
│  • Power Management                             │
└──┬─────────┬──────────┬──────────┬───────────────┘
   │         │          │          │
┌──▼───  ┌────▼────┐ ┌───▼───┐ ┌───▼────┐
│Kiss │  │  Kiss   │ │ Kiss  │ │  Kiss  │
│ SSL │  │   OTA   │ │ Time  │ │ Config │
└─────┘  └─────────┘ └───────┘ └────────┘
   │          │          │          │
┌──▼──────────▼──────────▼──────────▼─────────────┐
│           KissCredentials (NVS)                 │
└─────────────────────────────────────────────────┘
Módulo Función
KissTelegramCore: mensajes, cola, callbacks, power mgmt
KissSSLConexión SSL keep-alive + modo híbrido
KissOTAActualización remota segura dual-bank
KissTimeSincronización NTP + validación SSL
KissConfigConfiguración persistente en NVS
KissCredentialsCredenciales seguras en NVS
Sin librerías externasNo depende de ArduinoJson ni similares

🔄 Guía de Migración

Desde UniversalTelegramBot

UniversalTelegramBot_Example.ino
#include <UniversalTelegramBot.h>

WiFiClientSecure client;
UniversalTelegramBot bot(BOT_TOKEN, client);

void setup() {
  client.setInsecure();
  WiFi.begin(SSID, PASS);
  while (WiFi.status() != WL_CONNECTED) delay(500);
}

void loop() {
  // Polling manual
  int n = bot.getUpdates(bot.last_message_received + 1);

  for (int i = 0; i < n; i++) {
    String text = bot.messages[i].text;
    String chat_id = bot.messages[i].chat_id;

    if (text == "/start") {
      bot.sendMessage(chat_id, "Hola!", "");
    }
  }

  // ⚠️ SE PIERDE SI NO HAY WIFI
  bot.sendMessage(CHAT_ID, String(analogRead(A0)), "");
}
KissTelegram_Example.ino
#include "KissTelegram.h"
#include "KissCredentials.h"

KissCredentials credentials;
KissTelegram* bot;

void handleMessage(const char* chat_id, const char* text,
                   const char* command, const char* param) {
  if (strcmp(command, "/start") == 0) {
    bot->sendMessage(chat_id, "Hola!");
  }
}

void setup() {
  WiFi.begin(credentials.getWifiSSID(), 
               credentials.getWifiPassword());
  while (WiFi.status() != WL_CONNECTED) delay(500);

  bot = new KissTelegram(credentials.getBotToken());
  bot->setWifiStable();
  bot->enable();
}

void loop() {
  bot->checkMessages(handleMessage);
  bot->processQueue();

  // ✅ NUNCA SE PIERDE - Se encola si no hay WiFi
  char msg[32];
  snprintf(msg, sizeof(msg), "Sensor: %d", analogRead(A0));
  bot->queueMessage(credentials.getChatId(), msg,
                    KissTelegram::PRIORITY_NORMAL);
}

Cambios Clave

Credenciales Centralizadas

De #define BOT_TOKEN "..." a KissCredentials con almacenamiento NVS persistente y fallback automático.

Envío con Cola Persistente

De bot.sendMessage() directo a bot->queueMessage() con prioridad y persistencia en LittleFS JSONL.

Recepción con Callback

De polling manual con parsing a callback handleMessage(chat_id, text, command, param) con comando ya parseado sin String.

Prioridades de Mensajes

Nuevo: PRIORITY_CRITICAL, PRIORITY_HIGH, PRIORITY_NORMAL, PRIORITY_LOW

OTA Integrado

Nuevo: Comandos /ota, /otapin, /otapuk, /otaok, /otacancel para actualización remota segura dual-bank con rollback.

📚 API Rápida

Inicialización

setup_configuration.ino
KissTelegram* bot = new KissTelegram(token);
bot->setWifiStable();
bot->enable();

Envío de Mensajes

message_sending.ino
// Con cola (recomendado para IoT)
bot->queueMessage(chat_id, texto, 
                  KissTelegram::PRIORITY_NORMAL);

// Directo (fallback a cola si falla)
bot->sendMessage(chat_id, texto, 
                  KissTelegram::PRIORITY_HIGH);

Loop Principal

main_loop.ino
void loop() {
  // Recibir mensajes
  bot->checkMessages(handleMessage);
  
  // Enviar pendientes
  bot->processQueue();
  
  // Auto-save cada 5 min
  bot->autoSave();
}

Callbacks Disponibles

callbacks_configuration.ino
// Mensajes de texto
void onMessage(const char* chat_id, const char* text,
               const char* command, const char* param);

// Archivos recibidos (para OTA)
bot->onFileReceived(onFile);

// Cambios de power mode
bot->onPowerModeChange(onPowerChange);

// Eventos del sistema
bot->onSystemEvent(onEvent);

❓ Preguntas Frecuentes

¿Funciona sin WiFi?

Sí. Los mensajes se encolan automáticamente en LittleFS cuando no hay WiFi y se envían cuando la conexión vuelve. Sobreviven a reinicios y cortes de luz.

¿Cuántos mensajes puedo tener en cola?

Dinámico según espacio FS disponible. Típicamente 3500+ mensajes. El sistema monitoriza el espacio y usa priorización inteligente.

¿Necesito PSRAM para OTA?

Sí para OTA remoto. El sistema lo detecta automáticamente y valida antes de iniciar. Si falla el OTA, rollback automático al firmware anterior.

¿Compatible con ESP32-S3/C3?

Sí. Probado en ESP32 clásico y ESP32-S3. Cualquier placa con >4MB Flash. Requiere Arduino Core 2.0.0+.

¿Por qué char[] en vez de String?

String causa fragmentación de heap y memory leaks en ESP32. KissTelegram usa solo char[] para uptime infinito sin degradación de RAM.

¿Cómo funciona el SSL híbrido?

Boot en modo inseguro (rápido), auto-upgrade a secure tras NTP sync. Paradójicamente, el modo secure es 44% más rápido por optimizaciones del sistema.

¿Qué pasa si el dispositivo se queda sin luz durante OTA?

Dual-bank con backup automático. Si se interrumpe OTA, al siguiente boot detecta el estado y limpia. Si el nuevo firmware falla, rollback automático al anterior.

¿Licencia? ¿Puedo usar en proyectos comerciales?

MIT License - 100% libre para uso personal y comercial sin restricciones. Solo pedimos reconocimiento si redistribuyes.

¿Puedes personalizarlo para mi producto?

Por supuesto, contacta con nosotros y te ayudamos.