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

场景说明

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

数据流转流程图

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

步骤一:创建产品和设备

  1. 登录物联网平台控制台
  2. 在左侧导航栏,选择设备管理 > 产品,创建一个直连设备类型的产品:温湿度传感器
    参数设置直接使用默认值。具体操作,请参见创建产品
  3. 单击前往定义物模型,在功能定义页签,单击编辑草稿,然后在默认模块,为产品添加自定义功能。
    本文示例为产品添加温度和湿度两个属性,请参见单个添加物模型物模型
  4. 在左侧导航栏,选择设备管理 > 设备,在温湿度传感器产品下,创建一个具体的设备:TH_sensor,请参见单个创建设备
    创建设备完成后,在弹出的添加完成对话框,单击前往查看,获取设备证书(ProductKey、DeviceName和DeviceSecret)。设备证书是设备后续与物联网平台交流的重要凭证,请妥善保管。
  5. 设备列表页签,单击设备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 6.x上传代码代码包上传。单击右侧上传代码,上传步骤2中保存的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,请参见数据转发到函数计算转发数据
  4. 在数据流转规则列表中,单击规则温湿度数据流转对应的启动,启用该规则。

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

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

  1. 在Windows系统或Linux系统下载并安装Node.js。本文以windows系统为例。
    node --version
  2. 在本地计算机创建一个JavaScript文件(例如iot_device.js),用来存放Node.js示例代码。
    Node.js示例代码如下所示:
    const mqtt = require('aliyun-iot-mqtt');
    // 1. 设备身份信息
    var options = {
        productKey: "a1***",
        deviceName: "TH_sensor",
        deviceSecret: "9JtvE***",
        regionId: 'cn-shanghai'
    };
    // 1. 建立连接
    const client = mqtt.getAliyunIotMqttClient(options);
    // 2. 监听云端指令
    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 });
    }, 6 * 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 a1*** 设备所属产品ProductKey。可在控制台设备详情页查看。
    deviceName TH_sensor 设备名称。可在控制台设备详情页查看。
    deviceSecret 9JtvE*** 设备密钥。可在控制台设备详情页查看。
    regionId cn-shanghai MQTT设备所在地域代码。地域代码表达方法,请参见地域和可用区
  3. 打开CMD窗口,使用cd命令找到iot_device.js文件所在路径,在该路径下使用NPM命令下载阿里云IoT的MQTT库。
    npm install aliyun-iot-mqtt -S

    下载后的MQTT库文件如下图所示。

    MQTT库
  4. 在CMD窗口输入如下命令,运行iot_device.js代码,启动设备,并上报数据。
    node iot_device.js

执行结果

设备接入脚本运行结果如下。上报数据

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

钉钉机器人