Device Provisioning

Tự động đăng ký thiết bị với ThingsBoard không cần cấu hình thủ công từng thiết bị

Device Provisioning

Device Provisioning cho phép thiết bị tự đăng ký với VieLang IoT mà không cần admin tạo thủ công trước. Phù hợp triển khai fleet lớn hàng nghìn thiết bị.

Cách hoạt động

Thiết bị mới xuất xưởng ↓ Thiết bị gửi Provisioning Request (với provisioning key + secret) ↓ VieLang IoT xác thực → Tạo device + credentials ↓ Thiết bị nhận Access Token → Bắt đầu gửi dữ liệu

Cấu hình trong Device Profile

Mở Device Profiles > [profile] > Device provisioning:

Allow to create new devices

Cho phép thiết bị mới tự đăng ký:

Provisioning type: Allow to create new devices Provisioning device key: abc123xyz Provisioning device secret: secret456def

Mỗi profile có key + secret riêng. Thiết bị xuất xưởng được nạp sẵn 2 giá trị này.

Check pre-provisioned devices

Chỉ cho phép thiết bị đã được tạo sẵn (có tên) đăng ký:

Provisioning type: Check pre-provisioned devices

Admin tạo device trước (không có credentials), thiết bị sẽ nhận credentials khi provisioning.

X.509 Certificate Chain

Xác thực bằng certificate thay vì key/secret:

Provisioning type: X.509 Certificate Chain Certificate Value: [CA Certificate PEM]

MQTT Provisioning Request

Thiết bị gửi request qua MQTT:

# Topic /provision/request # Payload { "deviceName": "ESP32-001", "provisionDeviceKey": "abc123xyz", "provisionDeviceSecret": "secret456def" }

Response thành công:

{ "credentialsType": "ACCESS_TOKEN", "credentialsValue": "device_access_token_here", "status": "SUCCESS" }

Response thất bại:

{ "errorMsg": "Provision request rejected!", "status": "FAILURE" }

HTTP Provisioning Request

POST /api/v1/provision Content-Type: application/json { "deviceName": "ESP32-001", "provisionDeviceKey": "abc123xyz", "provisionDeviceSecret": "secret456def" }

CoAP Provisioning Request

POST coap://host/api/v1/provision Payload: {"deviceName": "ESP32-001", "provisionDeviceKey": "...", "provisionDeviceSecret": "..."}

Firmware ESP32 mẫu

#include <WiFi.h> #include <PubSubClient.h> #include <ArduinoJson.h> const char* PROVISION_KEY = "abc123xyz"; const char* PROVISION_SECRET = "secret456def"; const char* DEVICE_NAME = "ESP32-" + String(ESP.getEfuseMac(), HEX); void provision() { StaticJsonDocument<256> doc; doc["deviceName"] = DEVICE_NAME; doc["provisionDeviceKey"] = PROVISION_KEY; doc["provisionDeviceSecret"] = PROVISION_SECRET; String payload; serializeJson(doc, payload); client.publish("/provision/request", payload.c_str()); } void onProvisionResponse(char* topic, byte* message, unsigned int length) { // Parse response StaticJsonDocument<256> doc; deserializeJson(doc, message, length); if (doc["status"] == "SUCCESS") { String token = doc["credentialsValue"]; saveTokenToFlash(token); // Reconnect với token mới connectWithToken(token); } }

Xác thực bằng X.509

Thiết bị dùng certificate (không cần provisioning key):

Provisioning type: X.509 Certificate Chain → Thiết bị gửi CSR (Certificate Signing Request) → Platform verify với CA certificate → Tạo device credentials tự động

Lợi ích

Phương pháp thủ côngProvisioning tự động
Tạo từng device trên UIThiết bị tự đăng ký
Sao chép token thủ côngToken tự động cấp
Không scaleScale hàng triệu thiết bị
Lỗi nhân công caoQuy trình chuẩn hóa