LwM2M (Lightweight M2M) añade una gestión completa de dispositivos sobre CoAP/DTLS:
objetos estandarizados, registro del ciclo de vida, observe iniciado por el servidor y
ejecución remota. Donde el CoAP simple solo
ingiere telemetry, LwM2M permite a CORE-M gestionar el dispositivo — leer y escribir sus
recursos, observar sensores, ejecutar actualizaciones de firmware y disparar acciones —
usando el modelo de objetos de OMA.
sequenceDiagram
participant Dev as Cliente LwM2M (dispositivo)
participant BS as Bootstrap server
participant SRV as adaptador LwM2M de CORE-M :5684
participant RP as Redpanda telemetry.raw.{tenant}
Dev->>BS: Petición de bootstrap
BS-->>Dev: Configuración de servidor + seguridad
Dev->>SRV: Register (endpoint name = urn:imei:123)
SRV->>SRV: Mapear endpoint name → device_id, marcar online
SRV-->>Dev: 2.01 Created (registration id)
SRV->>Dev: Observe /3303/0/5700 (temperature)
Dev-->>SRV: Notify /3303/0/5700 = 22.5
SRV->>RP: Publicar TelemetryPoint numeric_values.temperature=22.5
Note over SRV,Dev: Más tarde: Execute /3/0/4 (reboot)<br/>entregado como un RPC de dispositivo
SRV->>Dev: Execute /3/0/4
Dev-->>SRV: 2.04 Changed (estado del RPC actualizado)
Bootstrap — el dispositivo contacta con el bootstrap server y recibe su
configuración de conexión al servidor y de seguridad. (Los dispositivos preconfigurados
con el servidor pueden saltarse esto y hacer register directamente.)
Register — el dispositivo se registra con el adaptador LwM2M de CORE-M usando su
endpoint name (por ejemplo urn:imei:123). El adaptador mapea ese endpoint name al
device_id de la plataforma, marca el dispositivo como online y registra
last_seen.
Observe — el adaptador observa los recursos mapeados a métricas. Cada
notificación se convierte en un TelemetryPoint y se publica en
telemetry.raw.{tenant_id}.
Execute — las acciones iniciadas por el servidor (reboot, aplicación de firmware,
comandos personalizados) se entregan al dispositivo como operaciones Execute de LwM2M,
impulsadas por el mecanismo de RPC de dispositivo de CORE-M.
Un dispositivo se registra con un endpoint name, no con un UUID de CORE-M. El
adaptador mantiene el mapeo para que toda la telemetry, el estado y los comandos se
resuelvan al dispositivo correcto:
Endpoint name de LwM2M
device_id de CORE-M
urn:imei:123
d7b1c0e2-3f44-4a91-9b2e-2c5a1f0e9d33
El mapeo se establece en el momento del provisioning. Al hacer register, el adaptador
busca el endpoint name, adjunta el device_id resuelto y publica un evento
device.status que marca el dispositivo como online.
LwM2M expone los datos como /objectID/instance/resourceID. El device profile mapea
cada ruta de recurso a un nombre de métrica de CORE-M; las notificaciones de observe en
esas rutas se convierten en numeric_values (o string_values) del punto de telemetry.
Ruta de recurso
Objeto / recurso OMA
Métrica de CORE-M
/3303/0/5700
IPSO Temperature → Sensor Value
temperature
/3304/0/5700
IPSO Humidity → Sensor Value
humidity
/3323/0/5700
IPSO Pressure → Sensor Value
pressure
/3/0/9
Device → Battery Level
battery_level
Por ejemplo, una notificación de observe que lleva /3303/0/5700 = 22.5 produce un
TelemetryPoint con numeric_values.temperature = 22.5. Añade o cambia mapeos en el
device profile — sin necesidad de cambiar el firmware.
Un RPC servidor→dispositivo de CORE-M se mapea a un Execute de LwM2M sobre un
recurso. El ejemplo clásico es reboot:
Método RPC
Ruta de Execute de LwM2M
reboot
/3/0/4 (Device → Reboot)
factory_reset
/3/0/5 (Device → Factory Reset)
Un operador (o una regla) emite un RPC — method="reboot" — para el dispositivo.
El adaptador LwM2M lo traduce a un Execute sobre el recurso mapeado (/3/0/4)
y se lo envía al dispositivo.
La respuesta del dispositivo actualiza el estado del RPC, para que quien lo invocó
pueda ver si la acción tuvo éxito.
Así es como las acciones de gestión de dispositivos permanecen agnósticas al protocolo en
la capa de la API: la misma interfaz RPC impulsa Execute en LwM2M, un topic de comandos en
MQTT, o un downlink SSE en
HTTP.