0. 背景介绍
场景:办公室中曾经布点的温湿度计设施上报数据到钉钉群机器人。
思路:温湿度计通过 MQTT 协定连贯到 IoT 套件,规定引擎针对数据上报 Topic 配置转发到函数计算 (FunctionComputer) 中编写好的函数 pushData2DingTalk,函数 Nodejs 脚本解决数据,post 到钉钉群机器人的 Webhook,配置了温湿度机器人的钉钉群组即可收到音讯。
1. 钉钉群机器人配置
钉钉 PC 端
①、登录钉钉电脑版;
②、群聊天窗口右上角找到机器人? 图标,点击图标。
③、抉择自定义 Webhook 机器人, 按指引增加名字和图标,并确认实现。
增加实现后,对应的机器人设置页面如下,其中红框中的 webhook 地址曾经蕴含了拜访用的 accessToken
2. 函数计算脚本编写
2.1 开明阿里云函数计算服务
函数计算,是一个事件驱动的全托管计算服务,目前反对的语言 Java、NodeJS、Python 等语言,详见。
2.2 编写函数脚本
这里咱们抉择 Nodejs 执行环境,从上游 IoT 套件处获取到设施地位,设施编号,实时温度,相对湿度和上报工夫,根据钉钉音讯格局组装,并用 https 模块 post 数据到钉钉群机器人的 webhook 接口。
2.2.1 创立函数
咱们抉择华东 2 区, 创立服务 IoT_Service,新建空白 Nodejs 函数 pushData2DingTalk。
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 用于身份验证,
③、给设施增加两个设施属性
3.2 创立并订阅 Topic
这里咱们抉择温湿度计产品,在左侧音讯通信下创立一个 Topic 为 /productKey/${deviceName}/data,设施操作权限设置:公布。
3.3 创立并启用规定引擎
一条残缺的规定包含根本信息,解决数据,转发数据三局部,其中转发数据反对配置多个转发动作。
3.3.1 配置数据处理脚本
规定引擎 SQL 脚本反对特定 SQL 和函数查问:
咱们从设施自身信息中抽取设施名 (deviceName), 自定义属性中获取:标签(tag) 和序列号 (deviceISN),
从温湿度采集设施上报数据音讯的 payload 中获取温度值 (temperature) 和湿度值(humidity)。
具体 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 配置转发动作到函数计算
3.3.3 残缺规定如下
咱们定义好的规定 toFC 残缺信息如下:
3.3.4 启用规定引擎
这里找到咱们定义好的规定 toFC,并启用。
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
5.2 钉钉群音讯成果:
物联网平台产品介绍详情:https://www.aliyun.com/product/iot/iot_instc_public_cn
阿里云物联网平台客户交换群