How to Implement Dynamic Registration of IoT Devices Using Alibaba Cloud Function Compute

In this article, we will discuss how we can implement dynamic registration of Internet of Things (IoT) devices the serverless way using Alibaba Cloud Function Compute.

The figure above only demonstrates the core process of dynamically registering devices through the API, but the production environment must add security verification logic based on the enterprise situation to ensure the identity security of the devices.

Technical Implementation

  1. The device is activated and carries the deviceId (device unique identifier) to initiate the HTTPS request to FC
  2. FC calls the RegåisterDevice interface of the IoT Platform and passes the productKey and deviceId
  3. If it succeeds, return the device trituples
  4. If it fails, call the QueryDeviceDetail interface of the IoT Platform, pass the productKey and deviceId, and obtain the device trituples
  5. After obtaining the trituples, the device connects the Alibaba Cloud IoT Platform through MQTT.

This involves the use of the RegisterDevice and QueryDeviceDetail APIs.

RegisterDevice https://www.alibabacloud.com/help/doc-detail/69470.htm

QueryDeviceDetail https://www.alibabacloud.com/help/doc-detail/69594.htm

https://help.aliyun.com/document_detail/69594.html

Implementation on Function Compute

Node.js

const getRawBody = require('raw-body');
const co = require('co');
const RPCClient = require('@alicloud/pop-core'). RPCClient;
const options = {
accessKey: "AK of the cloud account",
accessKeySecret: "AK Secret of the cloud account",
};
//1. Create a client
const iotClient = new RPCClient({
accessKeyId: options.accessKey,
secretAccessKey: options.accessKeySecret,
endpoint: options.endpoint || 'https://iot.cn-shanghai.aliyuncs.com',
apiVersion: options.apiVersion || '2018-01-20'
});
const productKey = 'productKey of the product';module.exports.handler = function(req, resp, context) {

getRawBody(req, function(err, body) {
body = JSON.parse(decodeURIComponent(body.toString()));
const deviceId = body.deviceId;
co(function* () { try {
//Create a device
const registerResponse = yield iotClient.request('RegisterDevice', {
productKey: productKey,
deviceName: deviceId
});
resp.send(JSON.stringify({ success: true, data: registerResponse.Data }));
} catch (err) {
//The device already exists; check the device details
const queryResponse = yield iotClient.request('QueryDeviceDetail', {
productKey: productKey,
deviceName: deviceId
});
const returnJson = { success: true }
returnJson.data = {
DeviceName: queryResponse.Data.DeviceName,
ProductKey: queryResponse.Data.ProductKey,
DeviceSecret: queryResponse.Data.DeviceSecret,
IotId: queryResponse.Data.IotId
}
resp.send(JSON.stringify(returnJson));
}
}); });};

Triggering Function Compute from the Device

The device obtains the trituples by triggering Function Compute through HTTP POST Json

To learn more about Alibaba Cloud’s Internet of Things (IoT) Platform, visit https://www.alibabacloud.com/product/iot

Reference:https://www.alibabacloud.com/blog/how-to-implement-dynamic-registration-of-iot-devices-using-alibaba-cloud-function-compute_594345?spm=a2c41.12498790.0.0

Follow me to keep abreast with the latest technology news, industry insights, and developer trends.

Follow me to keep abreast with the latest technology news, industry insights, and developer trends.