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
阿里云物联网平台客户交换群