HTTP es la forma más sencilla de conectar un dispositivo a CORE-M. Un dispositivo que
pueda hacer una petición POST autenticada puede enviar telemetry — sin broker, sin
conexión persistente, sin biblioteca cliente especial. Cualquier otro protocolo de esta
sección termina normalizándose al mismo TelemetryPoint interno que el endpoint HTTP
acepta directamente.
El endpoint está fronteado por el gateway de CORE-M, que autentica la petición,
aplica el límite de tasa por tenant y la reenvía al servicio de telemetry. El
tenant se deriva de la credencial — nunca colocas el tenant_id en un lugar
donde un cliente pueda falsificarlo.
En caso de éxito el endpoint devuelve 200 con un acuse de ingesta que cuenta cuántos
puntos aceptó:
{
"accepted": 1,
"rejected": 0
}
El acuse es por punto, no por petición: en un lote, los puntos malformados o de
dispositivo desconocido incrementan rejected mientras que el resto se acepta igualmente.
Para amortizar la sobrecarga de conexión y autenticación, envía muchos puntos en una sola
petición. El cuerpo del lote envuelve los puntos en un array points:
La ingesta HTTP es unidireccional. Para mensajes servidor→dispositivo (envíos de atributos
compartidos, peticiones RPC, entrega de comandos), un dispositivo abre un flujo de larga
duración de Server-Sent Events y lee los downlinks a medida que llegan. Cada evento es
una sola línea data: que transporta un downlink codificado en JSON, terminada por una
línea en blanco según la especificación SSE:
El dispositivo mantiene el flujo abierto y reacciona a cada evento; si no hay ningún flujo
conectado, los downlinks se encolan hasta que lo haya. Las respuestas (por ejemplo, una
respuesta RPC) se envían de vuelta como uplinks autenticados normales.
sequenceDiagram
participant Dev as Dispositivo
participant GW as Gateway :8080
participant Tel as Servicio de telemetry
participant RP as Redpanda telemetry.raw.{tenant}
Dev->>GW: POST /api/v1/telemetry (Bearer key, JSON)
GW->>GW: Autenticar + límite de tasa
alt credencial inválida
GW-->>Dev: 401 (payload no publicado)
else autenticado
GW->>Tel: IngestTelemetry(points)
Tel->>Tel: Normalizar a TelemetryPoint(s)
Tel->>RP: Publicar puntos aceptados
Tel-->>GW: { accepted, rejected }
GW-->>Dev: 200 { accepted, rejected }
end
Una vez que aterriza el primer punto, el dispositivo pasa a online. Si deja de enviar
durante más tiempo que el umbral de inactividad (120 segundos por defecto), se marca de
nuevo como offline.
El dispositivo tiene una pila TCP/TLS normal y un cliente HTTP.
La telemetry es periódica (cada pocos segundos o más lenta), no un flujo de alta frecuencia.
Quieres la menor cantidad posible de piezas móviles — sin broker, sin DTLS, sin sesión.
Estás haciendo un prototipo o integrando desde un backend, un script o una función serverless.
Si necesitas sesiones persistentes, push del servidor a escala o QoS, mira
MQTT. Para dispositivos limitados en batería y
ancho de banda sobre UDP, ver CoAP.