In this short tutorial, we will look at how we can easily implement dynamic IoT device registration using Function Compute and IoT Platform.

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

The device is activated and carries the deviceId (device unique identifier) to initiate the HTTPS request to FC FC calls the RegåisterDevice interface of the IoT Platform and passes the productKey and deviceId

If it succeeds, return the device trituples If it fails, call the QueryDeviceDetail interface of the IoT Platform, pass the productKey and deviceId, and obtain the device trituples 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