写点什么

温湿度计设备通过阿里云 IoT 物联网套件上报数据到钉钉群机器人实践——数据价值类

作者:阿里云AIoT
  • 2023-03-17
    浙江
  • 本文字数:2097 字

    阅读完需:约 7 分钟

0. 背景介绍

场景:办公室中已经布点的温湿度计设备上报数据到钉钉群机器人。

思路:温湿度计通过 MQTT 协议连接到 IoT 套件,规则引擎针对数据上报 Topic 配置转发到函数计算(FunctionComputer)中编写好的函数 pushData2DingTalk,函数 Nodejs 脚本处理数据,post 到钉钉群机器人的 Webhook,配置了温湿度机器人的钉钉群组即可收到消息。


关系图.png


1. 钉钉群机器人配置

钉钉 PC 端

①、登录钉钉电脑版;

②、群聊天窗口右上角找到机器人?图标,点击图标。

③、选择自定义 Webhook 机器人,按指引添加名字和图标,并确认完成。

添加完成后,对应的机器人设置页面如下,其中红框中的 webhook 地址已经包含了访问用的 accessToken


钉钉群机器人配置.png


2. 函数计算脚本编写

2.1 开通阿里云函数计算服务

函数计算,是一个事件驱动的全托管计算服务,目前支持的语言 Java、NodeJS、Python 等语言,详见

2.2 编写函数脚本

这里我们选择 Nodejs 执行环境,从上游 IoT 套件处获取到设备位置,设备编号,实时温度,相对湿度和上报时间,依据钉钉消息格式组装,并用 https 模块 post 数据到钉钉群机器人的 webhook 接口。

2.2.1 创建函数

我们选择华东 2 区,创建服务 IoT_Service,新建空白 Nodejs 函数 pushData2DingTalk。


函数计算.png


2.2.2 函数 pushData2DingTalk 完整脚本如下:

const https = require('https');const accessToken = '此处填写钉钉机器人webhook的accessToken';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. IoT 套件配置

首先我们要开通物联网套件服务

3.1 创建产品和设备

①、我们现在物联网套件控制台创建温湿度计产品,系统会生成 productKey②、在温湿度计产品创建一个具体设备,获得 deviceName 和 deviceSecret 用于身份验证,③、给设备添加两个设备属性


设备信息.png


3.2 创建并订阅 Topic

这里我们选择温湿度计产品,在左侧消息通信下创建一个 Topic 为/productKey/${deviceName}/data,设备操作权限设置:发布。


topic设置.png


3.3 创建并启用规则引擎

一条完整的规则包括基本信息,处理数据,转发数据三部分,其中转发数据支持配置多个转发动作。

3.3.1 配置数据处理脚本

规则引擎 SQL 脚本支持特定SQL和函数查询:我们从设备本身信息中抽取设备名(deviceName),自定义属性中获取:标签(tag)和序列号(deviceISN),从温湿度采集设备上报数据消息的 payload 中获取温度值(temperature)和湿度值(humidity)。


规则引擎SQL.png


具体 SQL 如下:

SELECT deviceName() as deviceName, attribute('tag') as tag, attribute('deviceISN') as isn, temperature, humidity,timestamp('yyyy-MM-dd HH:mm:ss') as time FROM "/此处为产品productKey/+/data"
复制代码

3.3.2 配置转发动作到函数计算


FC转发配置.png


3.3.3 完整规则如下

我们定义好的规则 toFC 完整信息如下:

一条规则引擎.png


3.3.4 启用规则引擎

这里找到我们定义好的规则 toFC,并启用。

规则引擎启用.png


4. 温湿度计设备

为了方便联调我们先用 Nodejs 程序模拟温湿度计,上报采集到的数据。这里依赖了aliyun-iot-mqtt库demo.js 完整代码如下:

const mqtt = require('aliyun-iot-mqtt');
const client = mqtt.getAliyunIotMqttClient({ productKey: "产品productKey", deviceName: "设备deviceName", deviceSecret: "设备的secret"});const topic = '添加了转发函数计算规则的Topic';
const data = { temperature: 18, humidity: 63,};
client.publish(topic, JSON.stringify(data));
复制代码

5. 完整演示

5.1 程序模拟发送数据:

$ npm install$ node demo.js
复制代码


执行.png


5.2 钉钉群消息效果:


钉钉群效果.png


物联网平台产品介绍详情:https://www.aliyun.com/product/iot/iot_instc_public_cn


阿里云物联网平台客户交流群

用户头像

阿里云AIoT

关注

物联网内容搬运者 2022-04-22 加入

还未添加个人简介

评论

发布
暂无评论
温湿度计设备通过阿里云IoT物联网套件上报数据到钉钉群机器人实践——数据价值类_JavaScript_阿里云AIoT_InfoQ写作社区