Este tema describe cómo enviar datos enviados por un dispositivo a un grupo de DingTalk mediante una regla de reenvío de datos. En este ejemplo se utiliza un termo-higrómetro.
Escenario
Los datos enviados por los termo-higrómetros de las oficinas deben enviarse a un chatbot de DingTalk.
Proceso

Paso 1: Crear un producto y un dispositivo
Inicie sesión en la consola de IoT Platform.
En la página Overview, busque la instancia que desea gestionar y haga clic en el ID o el nombre de la instancia.
-
En el panel de navegación izquierdo, seleccione Products y cree un producto llamado thermo-hygrometer. Al crear el producto, establezca el parámetro Node Type en Directly Connected Device.
Utilice los valores predeterminados para los demás parámetros. Para obtener más información, consulte Create a product.
-
Haga clic en Create TSL. En la pestaña Define Feature, haga clic en Edit Draft. En la sección Default Module, agregue funciones personalizadas al producto.
En este ejemplo, se agregan las propiedades de temperatura y humedad al producto. Para obtener más información, consulte Add a TSL model manually.

-
En el panel de navegación izquierdo, seleccione . Cree un dispositivo llamado TH_sensor bajo el producto thermo-hygrometer. Para obtener más información, consulte Create a device.
En el cuadro de diálogo The devices have been added, haga clic en Learn More para obtener el certificado del dispositivo que contiene ProductKey, DeviceName y DeviceSecret. Debe guardar el certificado del dispositivo en un lugar seguro. El certificado es una credencial clave para la comunicación entre el dispositivo e IoT Platform.
-
En la pestaña Device List, busque el dispositivo que creó y haga clic en View en la columna Actions. Aparecerá la página de device details. En la sección Tag Information, haga clic en Edit para agregar etiquetas al dispositivo.
En este ejemplo, se agregan las etiquetas descritas en la siguiente tabla. Para obtener más información, consulte Tags.
Clave
Valor
Descripción
tag
Room 00XS, Floor F, Building X, YY Town
La ubicación del dispositivo.
deviceISN
T20180102X
El número de serie (SN) del dispositivo.
Paso 2: Configurar Function Compute
Function Compute es un servicio de cómputo totalmente gestionado y basado en eventos. Function Compute admite Java, Node.js y Python. Para obtener más información, consulte How to use Function Compute.
-
Especifique la URL del webhook de un chatbot de DingTalk.
Inicie sesión en DingTalk en su PC.
En la ventana de chat de DingTalk, haga clic en el icono
. En el panel que aparece, haga clic en Group Assistant.Haga clic en Add Robot y luego haga clic en el icono
.Haga clic en Custom y luego haga clic en Add.
Configure los parámetros Chatbot name y Security Settings, seleccione I have read and accepted <DingTalk Custom Robot Service Terms of Service> y luego haga clic en Finished.
Haga clic en Copy para guardar la URL del webhook en su PC.
-
Escriba un script de Function Compute.
En este ejemplo se utiliza el entorno de ejecución de Node.js. La función obtiene datos del dispositivo desde IoT Platform, procesa los datos según el formato de mensajes de DingTalk especificado y luego envía los datos a la URL del webhook del chatbot de DingTalk especificado mediante el método HTTPS POST. Los datos del dispositivo incluyen la ubicación del dispositivo, el SN del dispositivo, datos de temperatura y humedad en tiempo real, y la hora en que el dispositivo envía los datos a IoT Platform.
Después de escribir el script, asigne al archivo del script el nombre index.js y luego comprima el archivo en un paquete llamado index.zip. El siguiente código de ejemplo muestra un script de referencia.
Debe reemplazar accessToken con el valor del parámetro access_token en la URL del webhook.
const https = require('https'); const accessToken = 'Specify the value of the access_token parameter in the webhook URL.' module.exports.handler = function(event, context, callback) { var eventJson = JSON.parse(event.toString()); // DingTalk message format const postData = JSON.stringify({ "msgtype": "markdown", "markdown": { "title": "Thermo-hygrometer", "text": "#### Temperature and humidity details\n" + "> Device location: " + eventJson.tag + "\n\n" + "> Device SN: " + eventJson.isn+ "\n\n" + "> Temperature: " + eventJson.temperature + "℃\n\n" + "> Humidity: " + eventJson.humidity + "%\n\n" + "> ###### " + eventJson.time + " published by [IoT Platform](https://www.aliyun.com/product/iot) \n" }, "at": { "isAtAll": false } }); const options = { hostname: 'oapi.dingtalk.com', port: 443, path: '/robot/send?access_token=' + accessToken, method: 'POST', headers: { 'Content-Type': 'application/json', 'Content-Length': Buffer.byteLength(postData) } }; const req = https.request(options, (res) => { res.setEncoding('utf8'); res.on('data', (chunk) => {}); res.on('end', () => { callback(null, 'success'); }); }); // Return an error. req.on('error', (e) => { callback(e); }); // Write the data. req.write(postData); req.end(); }; -
Cree un servicio y una función.
Active Alibaba Cloud Function Compute. Para obtener más información, consulte Activate Function Compute.
Inicie sesión en la consola de Function Compute. En el panel de navegación izquierdo, haga clic en Services & Functions.
Haga clic en Create Service, establezca el parámetro Name en IoT_Service y luego haga clic en OK.
En la página Services, haga clic en IoT_Service y luego haga clic en Create Function.
En la página Create Function, seleccione Use Built-in Runtime.
-
Configure los parámetros que se muestran en las siguientes figuras. Utilice los valores predeterminados para los demás parámetros. Luego, haga clic en Create.
-
Basic Settings
Establezca el parámetro Function Name en pushData2DingTalk y el parámetro Request Type en Event Requests, como se muestra en la siguiente figura.

-
Code
Seleccione Node.js 14 en la lista desplegable Runtime Environments y luego cargue el archivo index.zip que creó, como se muestra en la siguiente figura.

-
Paso 3: Reenviar datos a Function Compute
Configure una regla de reenvío de datos para enviar los datos de temperatura y humedad enviados por el dispositivo TH_sensor a la función pushData2DingTalk.
-
Vaya a la consola de IoT Platform consola de IoT Platform y luego vaya a la página de detalles de su instancia. En el panel de navegación izquierdo, seleccione Data Forwarding y luego haga clic en Create Rule. Introduzca el nombre de regla Temperature_humidity_forwarding y haga clic en OK.
ImportanteSi aparece la página Data Forwarding de la versión más reciente, haga clic en Back to Previous Version en la esquina superior derecha de la página. Cuando aparezca la página Data Forwarding de la versión anterior, haga clic en Create Rule.
-
En la página Data Forwarding Rules, haga clic en Write SQL Statement para escribir la sentencia SQL utilizada para procesar datos.
En este ejemplo, se especifican los siguientes campos para filtrar datos:
Los campos que especifican la información del dispositivo: deviceName, tag y deviceISN.
Los campos que especifican los datos enviados: temperature y humidity.
Sentencia SQL de ejemplo:
SELECT deviceName() as deviceName, attribute('tag') as tag, attribute('deviceISN') as isn, items.temperature.value as temperature, items.humidity.value as humidity, timestamp('yyyy-MM-dd HH:mm:ss') as time FROM "/g5j3o***/TH_sensorthing/event/property/post"
-
En la página Data Forwarding Rules, haga clic en Add Operation para reenviar datos a Function Compute.
En este ejemplo, se seleccionan el servicio IoT_Service y la función pushData2DingTalk. Para obtener más información, consulte Forward data to Function Compute (FC).

En la página Data Forwarding, busque la regla Temperature_humidity_forwarding que creó y haga clic en Start en la columna Actions para habilitar la regla.
Paso 4: Conectar el dispositivo termo-higrómetro a IoT Platform y enviar los datos de temperatura y humedad
Conecte el dispositivo a IoT Platform mediante Message Queuing Telemetry Transport (MQTT) utilizando el certificado del dispositivo. Luego, simule el envío de los datos de temperatura y humedad.
Descargue e instale Node.js en el sistema operativo Windows o Linux. En este ejemplo se utiliza Windows 10 (64 bits). Descargue el paquete de instalación node-v14.15.1-x64.msi.
-
Abra una ventana del Símbolo del sistema y ejecute el siguiente comando para ver la versión de node:
node --versionSi el paquete está instalado, aparecerá el siguiente número de versión:
v14.15.1 -
Cree un archivo JavaScript, como iot_device.js, en su PC para almacenar el código de ejemplo de Node.js.
El siguiente código de ejemplo de Node.js muestra cómo conectar el dispositivo a IoT Platform y enviar los datos.
const mqtt = require('aliyun-iot-mqtt'); // 1. Specify the device certificate information. var options = { productKey: "g18l***", deviceName: "TH_sensor", deviceSecret: "b2e6e4f102458d84***", host: "iot-cn-***.mqtt.iothub.aliyuncs.com" }; // 2. Establish an MQTT connection. const client = mqtt.getAliyunIotMqttClient(options); // Subscribe to the topic that is used to receive commands from IoT Platform. client.subscribe(`/${options.productKey}/${options.deviceName}/user/get`) client.on('message', function(topic, message) { console.log("topic " + topic) console.log("message " + message) }) setInterval(function() { // 3. Submit the temperature and humidity data at a specified interval. client.publish(`/sys/${options.productKey}/${options.deviceName}/thing/event/property/post`, getPostData(), { qos: 0 }); }, 5 * 1000); function getPostData() { const payloadJson = { id: Date.now(), version: "1.0", params: { temperature: Math.floor((Math.random() * 20) + 10), humidity: Math.floor((Math.random() * 20) + 10) }, method: "thing.event.property.post" } console.log("payloadJson " + JSON.stringify(payloadJson)) return JSON.stringify(payloadJson); }Parámetro
Ejemplo
Descripción
productKey
g18l***
La información del certificado del dispositivo que guardó después de crear el dispositivo.
Puede consultar la información en la página Device Details del dispositivo TH_sensor en la consola de IoT Platform.
deviceName
TH_sensor
deviceSecret
b2e6e4f102458d84***
host
iot-cn-***.mqtt.iothub.aliyuncs.com
El endpoint que utiliza el dispositivo para acceder a IoT Platform mediante MQTT.
Para obtener información sobre cómo conseguir el endpoint, consulte Manage instance endpoints.
-
Abra la ventana del Símbolo del sistema y ejecute el comando
cdpara ir al directorio donde reside el archivo iot_device.js. En este directorio, ejecute el comandonpmpara descargar la biblioteca aliyun-iot-mqtt. La siguiente figura muestra el archivo de biblioteca descargado.npm install aliyun-iot-mqtt -S
-
Una vez descargada la biblioteca MQTT, introduzca el siguiente comando en la ventana del Símbolo del sistema y ejecute el código iot_device.js para iniciar el dispositivo:
node iot_device.js
Resultado
La siguiente respuesta indica que el dispositivo está conectado a IoT Platform y que los datos se han enviado correctamente:
payloadJson {"id":161848***,"version":"1.0","params":{"temperature":22,"humidity":15},"method":"thing.event.property.post"}
La siguiente figura muestra el mensaje recibido por el chatbot de DingTalk.
