В этой статье мы обсудим, как мы можем реализовать динамическую регистрацию устройств Интернета вещей (IoT) бессерверным способом, используя Alibaba Cloud Function Compute.
На приведенном выше рисунке показан только основной процесс динамической регистрации устройств через API, но производственная среда должна добавить логику проверки безопасности в зависимости от ситуации на предприятии, чтобы обеспечить безопасность идентификации устройств.
Техническая реализация
- Устройство активировано и несет deviceId (уникальный идентификатор устройства) для инициирования HTTPS-запроса к FC.
- FC вызывает интерфейс RegåisterDevice платформы IoT и передает productKey и deviceId.
- Если это удастся, верните тройки устройств
- В случае сбоя вызовите интерфейс QueryDeviceDetail платформы IoT, передайте productKey и deviceId и получите тройки устройств.
- После получения тройки устройство подключается к платформе 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.