Ir al contenido

Conexión por CoAP

CoAP es el protocolo para los dispositivos más pequeños y limitados — sensores alimentados por batería en redes con pérdidas donde TCP y TLS son demasiado pesados. Funciona sobre UDP, usa payloads CBOR compactos y asegura el enlace con DTLS. CORE-M termina CoAP en el adaptador device-link, autentica el dispositivo a partir del handshake de DTLS, decodifica el cuerpo CBOR con el decodificador del device profile y publica un TelemetryPoint normal.

CoAP (simple)5683
CoAPS (DTLS)5684

Usa CoAPS en 5684 en producción. El puerto simple 5683 no lleva seguridad de transporte y es solo para pruebas locales.

Los dispositivos CoAP se autentican durante el handshake de DTLS, antes de que se procese cualquier petición CoAP. Se admiten dos modos:

  • DTLS-PSK — el dispositivo presenta una identidad PSK; el adaptador busca esa identidad para resolver el tenant, el dispositivo y la pre-shared key, y completa el handshake solo si los tres se resuelven. La suite de cifrado negociada es TLS_PSK_WITH_AES_128_CCM_8.
  • Certificado — el dispositivo presenta un certificado de cliente X.509 que se mapea a una identidad de dispositivo registrada.

Envía telemetry emitiendo un POST de CoAP al recurso de telemetry:

MétodoPOST
Recurso/telemetry
PayloadCBOR (application/cbor)

El payload es un objeto codificado en CBOR de pares métrica → valor. El decodificador de payload del device profile lo convierte en un TelemetryPoint, mapeando los campos numéricos a numeric_values y los campos de string a string_values. El contenido conceptual coincide con el JSON que enviarías por HTTP — solo que codificado en CBOR para ahorrar bytes en el cable:

{ "temperature": 22.5, "humidity": 65, "state": "running" }

El tenant y el dispositivo se rellenan a partir de la sesión autenticada por DTLS, así que el payload solo lleva las lecturas.

Usando coap-client de libcoap sobre DTLS-PSK. El flag -u es la identidad PSK, -k es la pre-shared key y el cuerpo CBOR se lee de un archivo:

  1. Prepara el payload CBOR. Por ejemplo, codifica {"temperature":22.5,"humidity":65} a reading.cbor con tu toolchain (la mayoría de las bibliotecas CBOR lo hacen en una sola llamada).

  2. Haz el POST al recurso de telemetry sobre CoAPS:

    Ventana de terminal
    coap-client -m post \
    -u 'psk-identity-d7b1c0e2' \
    -k 's3cr3t-pre-shared-key' \
    -t application/cbor \
    -f reading.cbor \
    'coaps://coap.kronoxdata.com:5684/telemetry'
  3. Un POST exitoso devuelve una respuesta 2.04 Changed. La lectura ya está normalizada y de camino por el pipeline.

sequenceDiagram
    participant Dev as Dispositivo
    participant DL as adaptador CoAP device-link :5684
    participant PSK as Almacén de credenciales
    participant RP as Redpanda telemetry.raw.{tenant}

    Dev->>DL: DTLS ClientHello (identidad PSK)
    DL->>PSK: Buscar identidad → tenant, dispositivo, key
    alt identidad desconocida
        DL-->>Dev: Handshake rechazado
    else resuelta
        DL-->>Dev: Handshake DTLS completado
        Dev->>DL: POST /telemetry (CBOR)
        DL->>DL: Decodificar CBOR vía decodificador del profile
        alt error de decodificación
            DL-->>Dev: 4.xx (métrica de rechazo +1, nada publicado)
        else decodificado
            DL->>RP: Publicar TelemetryPoint normalizado
            DL-->>Dev: 2.04 Changed
        end
    end

Comportamiento ante errores de decodificación

Sección titulada «Comportamiento ante errores de decodificación»

Si el cuerpo CBOR está malformado o no coincide con el decodificador del profile, el payload se rechaza: se incrementa la métrica de rechazo corem_protocol_payload_rejections_total{protocol="coap",reason="decode_error"} y no se publica telemetry en el bus. Un fallo de decodificación nunca produce un punto parcial. Inspecciona las muestras rechazadas en la interfaz de diagnóstico de protocolos para encontrar el campo problemático.

Tras la primera lectura aceptada el dispositivo pasa a online, y pasa a offline si deja de enviar durante más tiempo que el umbral de inactividad (120 segundos por defecto).

Recurre a CoAP cuando…

  • El dispositivo es limitado — RAM, CPU o batería reducidas.
  • La red es de bajo ancho de banda, con pérdidas o intermitente (NB-IoT, 6LoWPAN).
  • Quieres UDP + DTLS en lugar de una sesión TCP/TLS persistente.
  • Los payloads CBOR compactos importan para los presupuestos de energía y tiempo en aire.

Para dispositivos que además necesitan una gestión rica del dispositivo (actualización de firmware, observe, ejecución remota) en capas sobre CoAP/DTLS, usa LwM2M en su lugar.