本文以温湿度传感器设备为例,介绍通过数据流转规则,将设备上报数据推送到钉钉群的操作步骤。
场景说明
将各办公室的温湿度传感器设备上报的数据上传到钉钉群机器人。
数据流转流程图
步骤一:创建产品和设备
登录物联网平台控制台。
在实例概览页面的全部环境下,找到对应的实例,单击实例ID或备注名称。
在左侧导航栏,选择 ,创建一个直连设备类型的产品:温湿度传感器。
参数设置直接使用默认值。具体操作,请参见创建产品。
单击前往定义物模型,在功能定义页签,单击编辑草稿,然后在默认模块,为产品添加自定义功能。
本文示例为产品添加温度和湿度两个属性,请参见单个添加物模型。
在左侧导航栏,选择单个创建设备。 ,在温湿度传感器产品下,创建一个具体的设备:TH_sensor。具体操作,请参见
创建设备完成后,在弹出的添加完成对话框,单击前往查看,获取设备证书(ProductKey、DeviceName和DeviceSecret)。设备证书是设备后续与物联网平台交流的重要凭证,请妥善保管。
在设备列表页签,单击设备TH_sensor的查看,进入设备详情页面。在标签信息右侧,单击编辑,为设备添加标签。
本文示例添加如下两个标签,具体操作,请参见标签。
Key
Value
描述
tag
YY小镇X号楼F层00XS
设备所在位置。
deviceISN
T20180102X
设备序列号。
步骤二:配置函数计算服务
函数计算,是一个事件驱动的全托管计算服务,目前支持的语言Java、Node.js、Python等语言,具体内容,请参见如何使用函数计算。
配置钉钉机器人,获取Webhook地址。
登录电脑版钉钉。
单击钉钉群聊天窗口的群设置按钮,然后单击智能群助手。
单击添加机器人,然后单击按钮。
选择自定义,单击添加。
设置机器人名字和安全设置,选中我已阅读并同意《自定义机器人服务及免责条款》复选框,然后单击完成。
单击复制,保存Webhook地址到本地。
编写函数计算脚本。
本文以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(); };
创建服务和函数。
步骤三:配置数据流转到函数计算中
将设备TH_sensor上报的温度和湿度等数据转发至函数计算的函数pushData2DingTalk中。
返回物联网平台控制台,在对应实例下的左侧导航栏,选择 ,然后单击创建规则,输入规则名称:温湿度数据流转,单击确认。
重要若当前页面显示新版功能,先单击右上角返回旧版,进入旧版功能页面,再单击创建规则。
在数据流转规则页面,单击编写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"
在数据流转规则页面,单击添加操作,将数据转发到函数计算(FC)。
本文示例选择已创建的服务IoT_Service和函数pushData2DingTalk。具体操作,请参见数据转发到函数计算(FC)。
在数据流转规则列表中,单击规则温湿度数据流转对应的启动,启用该规则。
步骤四:接入设备和上报温湿度数据
使用设备证书(ProductKey、DeviceName和DeviceSecret),通过MQTT协议将设备接⼊物联网平台,并模拟上报温湿度数据。
在Windows系统或Linux系统下载并安装Node.js。本文以Windows 10(64位)系统为例,下载安装包node-v14.15.1-x64.msi。
安装成功后,打开CMD窗口,通过以下命令查看node版本。
node --version
显示如下版本号,表示安装成功。
v14.15.1
在本地计算机创建一个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设备接入域名。
获取接入域名的方法, 请参见管理实例终端节点。
打开CMD窗口,使用
cd
命令找到iot_device.js文件所在路径,在该路径下使用npm
命令下载阿里云IoT的MQTT库。下载后的MQTT库文件如下图所示。npm install aliyun-iot-mqtt -S
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"}
钉钉群机器人接收到消息如下。