乐趣区

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

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​​

            阿里云物联网平台客户交换群
退出移动版