Inicio Blog OpenPAYGO
OpenPAYGO · Firmware Embebido

Integrar OpenPAYGO Token en hardware embebido: del algoritmo a la producción

Marzo 2025 10 min lectura Hexadecimal SL
OpenPAYGO Token hardware embebido energía solar

El acceso a energía eléctrica fiable sigue siendo uno de los mayores desafíos en mercados emergentes. Los sistemas Pay-As-You-Go (PAYG) han demostrado ser la palanca más efectiva para masificar kits solares domésticos en África subsahariana, Asia del Sur y América Latina: el usuario paga créditos de uso mediante tokens enviados por SMS o app, y el dispositivo se activa o desactiva en función del saldo. OpenPAYGO es el estándar abierto que define cómo funcionan esos tokens. En este artículo explicamos cómo implementarlo correctamente en un microcontrolador.

Qué es OpenPAYGO y por qué importa

OpenPAYGO Token es un estándar open source mantenido por Enactus y la comunidad PAYG que define el algoritmo de generación y validación de tokens para sistemas de control de acceso energético. Su objetivo es permitir interoperabilidad entre hardware de distintos fabricantes y plataformas de gestión de clientes (como PAYG OPS).

El estándar resuelve un problema concreto: cómo enviar al dispositivo, sin conexión a internet, instrucciones de activación verificables y no falsificables. La respuesta es un token numérico de 9 dígitos generado mediante criptografía simétrica, que el dispositivo puede validar offline con su clave secreta.

Open source: la implementación de referencia está disponible en GitHub bajo la organización EnAccess. Hay implementaciones en C, Python y JavaScript. Este artículo se basa en la implementación en C para microcontroladores de recursos limitados.

El algoritmo bajo el capó: SipHash-2-4

OpenPAYGO Token usa SipHash-2-4 como función pseudoaleatoria. SipHash fue diseñado específicamente para ser rápido en hardware de 32 bits con poca memoria RAM, resiste ataques de extensión de longitud y produce salidas de 64 bits que se truncan a los dígitos del token.

El proceso de generación de un token tiene tres entradas:

El servidor calcula SipHash(clave, contador || valor), toma los primeros 20 bits del resultado, los convierte a 9 dígitos decimales mediante un esquema de encoding y los envía al usuario. El dispositivo realiza el mismo cálculo y compara.

Implementación en C para microcontroladores

El núcleo de la implementación en firmware son tres funciones principales:

/* 1. Inicialización: cargar clave desde flash protegida */
void payg_init(uint8_t *secret_key_16bytes) {
    memcpy(g_payg_key, secret_key_16bytes, 16);
    g_token_count = flash_read_token_count();  /* recuperar de NVM */
    g_credit_remaining = flash_read_credit();
}

/* 2. Validación de token recibido del usuario */
payg_result_t payg_validate_token(uint32_t token_9digits) {
    /* Probar los próximos MAX_LOOKAHEAD contadores */
    for (int i = 1; i <= PAYG_MAX_LOOKAHEAD; i++) {
        uint32_t candidate_count = g_token_count + i;
        uint32_t expected = payg_generate(g_payg_key, candidate_count,
                                          extract_value(token_9digits));
        if (expected == token_9digits) {
            g_token_count = candidate_count;
            flash_write_token_count(g_token_count);
            return payg_apply_credit(extract_value(token_9digits));
        }
    }
    return PAYG_INVALID_TOKEN;
}

/* 3. Tarea cíclica de gestión de crédito (llamar cada hora) */
void payg_tick_hour(void) {
    if (g_credit_remaining > 0) {
        g_credit_remaining--;
        flash_write_credit(g_credit_remaining);
    }
    if (g_credit_remaining == 0 && !g_is_unlocked) {
        payg_disable_output();  /* cortar carga */
    }
}

El parámetro PAYG_MAX_LOOKAHEAD (típicamente 30–50) permite que el dispositivo acepte tokens generados en el futuro cuando el usuario ha comprado varios créditos de antemano sin haberlos introducido todos.

Gestión de estados y créditos en firmware

Un dispositivo OpenPAYGO puede estar en cuatro estados:

ACTIVO
Crédito disponible. Salida habilitada. Contador decrementando.
INACTIVO
Sin crédito. Salida cortada. Esperando token válido.
GRACIA
Crédito agotado pero período de gracia activo (configurable).
DESBLOQUEADO
Token de activación permanente recibido. Sin límite de tiempo.

La transición a estado INACTIVO es la parte más crítica: el corte de la carga debe ser suave (aviso previo al usuario) y el estado debe persistirse en memoria no volátil para sobrevivir a cortes de alimentación. Un dispositivo que pierde el crédito por un reset inesperado destruye la confianza del usuario.

Importante para producción: usa siempre memoria NVM con verificación de escritura (checksum o doble escritura). La pérdida de datos de crédito por un write incompleto es el fallo más frecuente en campo.

Comunicación con el servidor: PAYG OPS

PAYG OPS (Open PAYG Server) es la plataforma de gestión de clientes y generación de tokens compatible con OpenPAYGO. El flujo de integración con el servidor sigue estos pasos:

  1. Registro del dispositivo: en fabricación se genera un par (ID de dispositivo, clave secreta de 128 bits). La clave se graba en flash y se registra en PAYG OPS.
  2. Venta de crédito: el agente de ventas introduce el pago en PAYG OPS, que calcula el token correspondiente (valor en días × tipo de acción × contador actual del dispositivo).
  3. Envío al cliente: el token de 9 dígitos se envía por SMS o se muestra en app móvil. El cliente lo introduce en el teclado del dispositivo.
  4. Validación offline: el dispositivo valida el token localmente. No necesita conectividad en este momento.
  5. Sincronización opcional: si el dispositivo tiene GSM/WiFi, puede reportar su estado (crédito restante, contador, telemetría de consumo) a PAYG OPS para auditoría y soporte.

Pruebas antes de producción

Antes de lanzar un lote de dispositivos, valida obligatoriamente estos escenarios:

Conclusión

OpenPAYGO Token es un protocolo robusto, bien documentado y open source que ha demostrado su madurez en millones de dispositivos desplegados. Su implementación en microcontroladores de gama baja (STM32, ESP32, AVR, PIC) es directa si se siguen las guías de referencia y se cuida especialmente la persistencia del estado en NVM.

En Hexadecimal hemos implementado OpenPAYGO Token en hardware propio para clientes del sector de acceso energético en África y Asia. Si estás desarrollando un producto PAYG y necesitas soporte en el firmware o la integración con PAYG OPS, contacta con nuestro equipo de desarrollo embebido.

PAYG OPS · Desarrollo Embebido

¿Desarrollas hardware para mercados PAYG?

Diseñamos y certificamos hardware con OpenPAYGO Token integrado. Firmware embebido, integración con PAYG OPS y soporte para producción en serie.

Hablar con nuestro equipo
Ver todos los artículos