Ir al contenido

Device profiles

Un device profile es un paquete reutilizable de valores por defecto y políticas que los dispositivos heredan en el momento en que se crean. En lugar de configurar cada dispositivo a mano, defines un profile una vez —“Temperature Sensor v2”— y lo adjuntas durante el registro manual, la reclamación de clave o la importación masiva. Cada dispositivo que lo referencia arranca de forma consistente.

Los profiles tienen alcance de tenant. Mutarlos requiere el permiso profiles (admin del tenant). Se gestionan vía DeviceRegistryService en /api/v1/device-profiles.

Un profile define los siguientes valores por defecto y políticas:

CampoQué establece
default_tagsTags aplicados a cada dispositivo que use el profile (p. ej. region=eu)
default_configConfiguración de estado deseado entregada al dispositivo al conectar
telemetry_schemaClaves y tipos de telemetry requeridos usados para validar los puntos entrantes
protocol_configValores por defecto del transporte (p. ej. límites de tasa, ajustes específicos del transporte)
anchoring_policyModo de anchoring en blockchain por defecto — Merkle batch, por evento o cadena de hash
credentials_policyQué tipo de credencial reciben los dispositivos nuevos — API key, PSK o certificado X.509
offline_threshold_secondsSegundos sin telemetry antes de marcar el dispositivo como offline (valor por defecto de la plataforma 120)
ota_policyComportamiento de rollout OTA por defecto para los dispositivos que usen el profile

El telemetry_schema es el campo más importante operativamente: es lo que impide que datos malformados contaminen tu telemetry. El esquema declara qué claves debe contener un punto de telemetry y sus tipos.

Cuando un dispositivo envía un punto al que le falta una clave numérica requerida, la plataforma rechaza ese punto con INVALID_ARGUMENT e incrementa corem_telemetry_schema_rejections_total{profile="…"}. El resto de los puntos válidos del dispositivo no se ven afectados — la validación es por punto.

Los ajustes efectivos de un dispositivo se resuelven superponiendo tres fuentes, de menor a mayor prioridad:

flowchart LR
  A["Valor por defecto del tenant"] --> B["Valores por defecto del profile"] --> C["Campos explícitos del dispositivo"]
  C --> R[["Ajustes efectivos del dispositivo"]]
  1. Valor por defecto del tenant — la política base que la plataforma aplica cuando no hay nada más establecido.
  2. Profile — los valores por defecto del profile sobrescriben el valor por defecto del tenant para cualquier campo que el profile especifique.
  3. Campos explícitos del dispositivo — los valores establecidos directamente en el dispositivo (en el payload de registro o una actualización posterior) sobrescriben el profile, donde la sobrescritura esté permitida.

Así que si el modo de anchoring por defecto del tenant es Merkle batch, un profile lo establece a por evento, y un dispositivo concreto se registra con anchor_mode cadena de hash, ese dispositivo ancla vía cadena de hash — gana el valor más específico.

Un profile para sensores de temperatura de almacenamiento refrigerado:

{
"profile_id": "p_temp_sensor_v2",
"name": "Temperature Sensor v2",
"type": "temp-sensor",
"description": "Cold-store temperature probes, EU region",
"default_tags": { "region": "eu", "class": "cold-store" },
"default_config": { "report_interval_s": 60 },
"telemetry_schema": {
"required": {
"temperature": "number",
"battery": "number"
}
},
"protocol_config": { "rate_limit_per_minute": 120 },
"anchoring_policy": { "mode": "ANCHOR_MODE_MERKLE_BATCH" },
"credentials_policy": { "type": "api_key" },
"offline_threshold_seconds": 180,
"ota_policy": { "canary_percent": 5, "failure_threshold_percent": 10 }
}

Un dispositivo creado con profile_id: "p_temp_sensor_v2" arranca entonces su vida etiquetado region=eu/class=cold-store, reportando cada 60s, validado contra el esquema temperature + battery, anclado en Merkle batches, autenticando con una API key, marcado como offline tras 180s de silencio y elegible para la política de rollout OTA del profile — todo sin configuración por dispositivo.