В этой статье мы обсудим, как мы можем реализовать динамическую регистрацию устройств Интернета вещей (IoT) бессерверным способом, используя Alibaba Cloud Function Compute.

На приведенном выше рисунке показан только основной процесс динамической регистрации устройств через API, но производственная среда должна добавить логику проверки безопасности в зависимости от ситуации на предприятии, чтобы обеспечить безопасность идентификации устройств.

Техническая реализация

  1. Устройство активировано и несет deviceId (уникальный идентификатор устройства) для инициирования HTTPS-запроса к FC.
  2. FC вызывает интерфейс RegåisterDevice платформы IoT и передает productKey и deviceId.
  3. Если это удастся, верните тройки устройств
  4. В случае сбоя вызовите интерфейс QueryDeviceDetail платформы IoT, передайте productKey и deviceId и получите тройки устройств.
  5. После получения тройки устройство подключается к платформе Alibaba Cloud IoT через MQTT.

Это включает использование API RegisterDevice и QueryDeviceDetail.

Регистрация устройства 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

Реализация на вычислении функций

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));
            }
        });
    });
};

Запуск вычисления функции с устройства

Устройство получает тройки, запуская вычисление функции через HTTP POST Json.

Чтобы узнать больше о платформе Интернета вещей (IoT) Alibaba Cloud, посетите https://www.alibabacloud.com/product/iot.

Ссылка: https://www.alibabacloud.com/blog/how-to-implement-dynamic-registration-of-iot-devices-using-alibaba-cloud-function-compute_594345?spm=a2c41.12498790.0.0