推送设备上报数据到钉钉群

本文以温湿度传感器设备为例,介绍通过数据流转规则,将设备上报数据推送到钉钉群的操作步骤。

场景说明

将各办公室的温湿度传感器设备上报的数据上传到钉钉群机器人。

数据流转流程图

温湿度传感器流转数据流程

步骤一:创建产品和设备

  1. 登录物联网平台控制台

  2. 实例概览页面的全部环境下,找到对应的实例,单击实例ID或备注名称。

    实例概览
  3. 在左侧导航栏,选择设备管理 > 产品,创建一个直连设备类型的产品:温湿度传感器

    参数设置直接使用默认值。具体操作,请参见创建产品

  4. 单击前往定义物模型,在功能定义页签,单击编辑草稿,然后在默认模块,为产品添加自定义功能。

    本文示例为产品添加温度和湿度两个属性,请参见单个添加物模型物模型

  5. 在左侧导航栏,选择设备管理 > 设备,在温湿度传感器产品下,创建一个具体的设备:TH_sensor。具体操作,请参见单个创建设备

    创建设备完成后,在弹出的添加完成对话框,单击前往查看,获取设备证书(ProductKey、DeviceName和DeviceSecret)。设备证书是设备后续与物联网平台交流的重要凭证,请妥善保管。

  6. 设备列表页签,单击设备TH_sensor的查看,进入设备详情页面。在标签信息右侧,单击编辑,为设备添加标签。

    本文示例添加如下两个标签,具体操作,请参见标签

    Key

    Value

    描述

    tag

    YY小镇X号楼F层00XS

    设备所在位置。

    deviceISN

    T20180102X

    设备序列号。

步骤二:配置函数计算服务

函数计算,是一个事件驱动的全托管计算服务,目前支持的语言Java、Node.js、Python等语言,具体内容,请参见如何使用函数计算

  1. 配置钉钉机器人,获取Webhook地址。

    1. 登录电脑版钉钉。

    2. 单击钉钉群聊天窗口的群设置按钮群设置,然后单击智能群助手

    3. 单击添加机器人,然后单击按钮添加机器人

    4. 选择自定义,单击添加

    5. 设置机器人名字和安全设置,选中我已阅读并同意《自定义机器人服务及免责条款》复选框,然后单击完成

    6. 单击复制,保存Webhook地址到本地。

  2. 编写函数计算脚本。

    本文以Node.js运行环境为例编写函数脚本,从物联网平台获取设备位置、设备编号、实时温度、相对湿度和上报时间数据,按照钉钉消息格式组装,使用HTTPS协议将POST数据推送到钉钉机器人的Webhook接口。

    完成编写后,将脚本文件命名为index.js,并压缩为index.zip文件进行保存。完整代码脚本如下:

    您需将accessToken替换为Webhook地址中access_token的值。

    const https = require('https');
    const accessToken = '填写accessToken,即钉钉机器人Webhook的access_token值';
    module.exports.handler = function(event, context, callback) {
    var eventJson = JSON.parse(event.toString());
    //钉钉消息格式
    const postData = JSON.stringify({
    "msgtype": "markdown",
    "markdown": {
    "title": "温湿度传感器",
    "text": "#### 温湿度传感器上报\n" +
    "> 设备位置:" + eventJson.tag + "\n\n" +
    "> 设备编号:" + eventJson.isn+ "\n\n" +
    "> 实时温度:" + eventJson.temperature + "℃\n\n" +
    "> 相对湿度:" + eventJson.humidity + "%\n\n" +
    "> ###### " + eventJson.time + " 发布 by [物联网平台](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');
    });
    });
    // 异常返回
    req.on('error', (e) => {
    callback(e);
    });
    // 写入数据
    req.write(postData);
    req.end();
    };
  3. 创建服务和函数。

    1. 开通阿里云函数计算服务,请参见开通服务

    2. 登录函数计算控制台,在左侧导航栏选择服务及函数

    3. 单击创建服务,设置服务名称为IoT_Service,然后单击确定

    4. 服务列表单击IoT_Service,然后单击创建函数

    5. 创建函数页面,选择使用内置运行时创建

    6. 配置函数的基本信息,如下所示,其他参数使用默认设置,然后单击创建

      • 基本设置

        如下图所示,配置函数名称为pushData2DingTalk,选择处理事件请求

        基本设置
      • 函数代码

        如下图所示,选择运行环境为Node.js 14的版本,然后上传已保存的index.zip文件。

        函数代码

步骤三:配置数据流转到函数计算中

将设备TH_sensor上报的温度和湿度等数据转发至函数计算的函数pushData2DingTalk中。

  1. 返回物联网平台控制台,在对应实例下的左侧导航栏,选择消息转发 > 云产品流转,然后单击创建规则,输入规则名称:温湿度数据流转,单击确认

    重要

    若当前页面显示新版功能,先单击右上角返回旧版,进入旧版功能页面,再单击创建规则

  2. 数据流转规则页面,单击编写SQL,编辑处理数据的SQL。

    本文示例中,定义筛选的消息字段包含:

    • 设备信息中的设备名称(deviceName),自定义标签中的属性(tag)和序列号(deviceISN)。

    • 温湿度传感器上报数据消息payload中的温度值(temperature)和湿度值(humidity)。

    具体SQL语句如下:

    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"
    编写SQL
  3. 数据流转规则页面,单击添加操作,将数据转发到函数计算(FC)。

    本文示例选择已创建的服务IoT_Service和函数pushData2DingTalk。具体操作,请参见数据转发到函数计算(FC)转发数据

  4. 在数据流转规则列表中,单击规则温湿度数据流转对应的启动,启用该规则。

步骤四:接入设备和上报温湿度数据

使用设备证书(ProductKey、DeviceName和DeviceSecret),通过MQTT协议将设备接⼊物联网平台,并模拟上报温湿度数据。

  1. 在Windows系统或Linux系统下载并安装Node.js。本文以Windows 10(64位)系统为例,下载安装包node-v14.15.1-x64.msi。

  2. 安装成功后,打开CMD窗口,通过以下命令查看node版本。

    node --version

    显示如下版本号,表示安装成功。

    v14.15.1
  3. 在本地计算机创建一个JavaScript文件(例如iot_device.js),用来存放Node.js示例代码。

    Node.js示例代码如下所示:

    const mqtt = require('aliyun-iot-mqtt');
    // 1. 设备身份信息
    var options = {
        productKey: "g18l***",
        deviceName: "TH_sensor",
        deviceSecret: "b2e6e4f102458d84***",
        host: "iot-cn-***.mqtt.iothub.aliyuncs.com"
    };
    
    // 2. 建立MQTT连接
    const client = mqtt.getAliyunIotMqttClient(options);
    //订阅云端指令Topic
    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.定时上报温湿度数据
        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);
    }

    参数

    示例

    说明

    productKey

    g18l***

    您添加设备后,保存的设备证书信息。

    您可在控制台中设备TH_sensor设备详情页面查看。

    deviceName

    TH_sensor

    deviceSecret

    b2e6e4f102458d84***

    host

    iot-cn-***.mqtt.iothub.aliyuncs.com

    MQTT设备接入域名。

    获取接入域名的方法, 请参见管理实例终端节点

  4. 打开CMD窗口,使用cd命令找到iot_device.js文件所在路径,在该路径下使用npm命令下载阿里云IoT的MQTT库。下载后的MQTT库文件如下图所示。

    npm install aliyun-iot-mqtt -SMQTT库

  5. MQTT库下载完成后,在CMD窗口输入如下命令,运行iot_device.js代码,启动设备。

    node iot_device.js

执行结果

返回如下信息,表示设备接入成功,并上报数据。

payloadJson {"id":161848***,"version":"1.0","params":{"temperature":22,"humidity":15},"method":"thing.event.property.post"}

钉钉群机器人接收到消息如下。

钉钉机器人