有奖:语音产品征文挑战赛火热进行中> HOT

操作场景

物联网解决方案通常需要实时获取设备上报到物联网平台的数据、状态等信息,再结合各自场景的业务数据来完成整套物联网解决方案的闭环业务流程。本文档主要介绍如何使用平台的规则引擎消息转发至用户自建 HTTP 服务的能力,将设备数据、状态转发到用户自建的 HTTP 服务,用户可根据此文档中的代码示例快速了解并构建自己的 HTTP 服务。

准备工作

为了快速体验该业务功能,需要提前做好以下准备工作:
注册腾讯云账号,申请 物联网开发平台服务
参见 MQTT.fx 快速接入物联网开发平台,能够成功模拟设备连接平台,并能发布物模型消息至平台。
用户需提前注册开通 腾讯云 SCF 产品,通过 SCF 产品托管 HTTP 服务,将对应的 HTTP 服务接收地址准备好配置到规则引擎转发服务中。

操作步骤

使用 SCF 部署 HTTP 服务

本文档使用腾讯云云函数(Serverless Cloud Function,SCF)产品快速搭建 Web 服务,来接收物联网平台规则引擎处理后的数据。本示例只展示如何接收物联网平台的数据,进一步使用数据需要用户根据实际业务场景去处理。

在 SCF 平台基于 Express 快速搭建 Node 服务示例

1. 登录 SCF 控制台,选择 Serveless 应用,单击新建应用

2. 选择 Web 应用下的 Express 框架模板,单击下一步

3. 按下图所示输入应用名,选择环境、地域,上传方式。配置结束后单击完成

4. 
等待部署完成后进入应用,在 API 网关中可以看到 URL
。此 URL 就是您要在规则引擎中填写的 API 地址,假设此 URL 地址为:https://iot-api/,那么在本示例中您的 API 地址为 URL 加上接口路由,即:https://iot-api/test。单击函数名称,进入函数服务。

5. 在函数服务中,可以看到如下图所示的对应的代码模板。单击 app.js,复制示例代码到 app.js 文件中,注意无需全覆盖。

需要将下述代码复制到 app.js 的代码,请覆盖原 app.js 中的 const 开头的3行代码,原 app.js 中的 app.get 方法无需覆盖。
const express = require('express')
const path = require('path')
const bodyParser = require('body-parser');
const sha1 = require('js-sha1');
const app = express()
app.use(bodyParser.json());
// 鉴权信息校验的代码在上文已经解释过,这里使用Middleware来简化代码
function checkSignatureMiddleware(req, res, next) {
const token = 'test';
const { signature, timestamp, nonce } = req.headers;
let tmpStr = [token, timestamp, nonce].sort().join('');
tmpStr = sha1(tmpStr);
if (tmpStr === signature) {
next(); // 身份校验通过,继续执行后续的中间件和路由处理器
} else {
res.status(403).send('Forbidden'); // 身份校验失败,返回403 Forbidden 状态码
}
}

app.get('/test', checkSignatureMiddleware, (req, res) => {
const { echostr } = req.headers;
res.set('Content-Type', 'text/plain; charset=utf-8');
res.send(echostr);
});

// 注意接收规则引擎转发的数据接口为 POST 类型
app.post('/test', checkSignatureMiddleware, (req, res) => {
const params = req.body.payload.params;
console.log(params); // { body_temperature: 36 }
res.end();
});
6. 上述步骤完成后,需要引入两个依赖包,分别是 body-parser 与 js-sha1。在代码编辑器的上方选择终端 > 新建终端,然后在底部终端中输入命令: cd src进入 src 目录,接着分别输入命令npm install body-parser npm install js-sha1 安装两个依赖包。


7. 等待依赖安装完成之后,单击下图红色线框中的部署,即可成功部署 Web 服务,SCF 会自动启动该 Web 服务,约5秒 - 10秒后系统会提示“部署成功”。


控制台操作

创建规则引擎

1. 登录 物联网开发平台控制台,选择平台默认开通的公共实例或用户购买的企业实例
2. 进入某个项目,单击左侧菜单基础服务 > 规则引擎,再次单击规则引擎列表页的新建规则
规则名称:输入“HTTP_Forward”或其他内容。
规则描述:输入转发某类产品下设备数据的备注信息。



3. 规则基本信息填写完成后,单击确定,即可完成规则的创建。

配置规则引擎

筛选数据

1. 在规则引擎列表选择刚创建成功的规则 HTTP_Forward,单击规则名称或操作列的管理,进入规则引擎配置页面。
2. 单击下图筛选数据右侧的编辑,选择要转发的设备数据源。



3. 在编辑规则页面,输入或选择如下信息。
字段:输入"*" ,表示将设备上报的所有 JSON 数据进行转发。
Topic:首先选择对应的产品。建议选择“MQTT.fx 快速接入平台”中所创建的产品智能灯;第二步选择设备,请选择全部设备,表示规格引擎将转发该产品下所有的设备;最后一步选择转发的数据,请选择物模型属性上报



4. 单击确定按钮,将返回配置规则页面,系统自动生成如下图所示对应的 TOPIC 及筛选数据 SQL。




配置规则引擎

行为操作配置
1. 在规则引擎列表选择刚创建成功的规则 HTTP_Forward,单击规则名称或操作列的管理链接,进入规则引擎配置页面。



2. 下图行为类型选择“数据转发到第三方服务(Forward)”、选择 API 地址类型选择“使用已有 HTTP 服务地址”。HTTP 地址则为 此步骤 中复制 SCF 自动生成的 URL 地址,并在最后加上/test。类似https://service.*****.apigw.tencenttcs.com/release/test



3. 请勾选 “增加鉴权 Token”,且输入 test ,该 Token 必须与 SCF 函数服务中 app.js 里定义的 Token 值一致。
4. 单击保存,完成规则行为配置。
5. 返回规则引擎列表,将该规则的状态设置为启用

模拟验证

1. 参见 MQTT.fx 快速接入物联网开发平台,模拟设备上报物模型消息。注意上报的数据相关产品需要与规则引擎删选的目标产品、设备保持一致。若不一致 SCF 日志查询将无法打印输出数据。
2. 进入 SCF 的函数服务,单击日志查询,可查看到 SCF 打印的日志,可完整打印出设备上报的物模型属性。