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.
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étodo
POST
Recurso
/telemetry
Payload
CBOR (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:
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:
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).
Haz el POST al recurso de telemetry sobre CoAPS:
Ventana de terminal
coap-client-mpost\
-u'psk-identity-d7b1c0e2'\
-k's3cr3t-pre-shared-key'\
-tapplication/cbor\
-freading.cbor\
'coaps://coap.kronoxdata.com:5684/telemetry'
Un POST exitoso devuelve una respuesta 2.04 Changed. La lectura ya está
normalizada y de camino por el pipeline.
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).
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.