一、前置准备
1.1 环境依赖安装
本次集成基于开源工具搭建,所有工具均可免费获取,直接复制对应命令安装即可:
- 操作系统要求:CentOS 7+/Ubuntu 20.04+/Windows 10+/macOS 12+
- 安装Docker:Linux执行命令
curl -fsSL https://get.docker.com | bash -s docker && sudo systemctl start docker
- 安装Node.js 16.x:Ubuntu执行
curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash - && sudo apt-get install -y nodejs,Windows直接下载安装包:https://nodejs.org/dist/v16.20.2/node-v16.20.2-x64.msi
- 安装MQTTX调试工具:下载地址:https://mqttx.app/zh/downloads
二、第一步:搭建双向通信通道
2.1 部署物联网接入平台(EMQX)
一键启动EMQX物联网接入服务,直接执行以下完整命令:
```
docker run -d --name emqx-archive -p 1883:1883 -p 18083:18083 emqx/emqx:5.3.0
```
启动完成后,通过浏览器访问 http://<服务器IP>:18083,使用默认账号 admin 密码 public 登录后台,按以下步骤配置转发规则:
- 进入「规则引擎」→「规则」,点击「创建」
- 规则SQL填写以下内容,筛选设备上报的档案数据:
SELECT FROM "device/+/archive"
- 添加响应动作,类型选择「WebHook」,请求URL填写:
http://<档案服务IP>:8080/api/archive/receive,请求方法选择POST
- 保存规则,完成物联网平台侧配置
2.2 开发档案系统侧接收接口
新建项目文件夹,执行以下命令初始化项目:
```
mkdir archive-iot-integration && cd archive-iot-integration && npm init -y && npm install express body-parser crypto --save
```
新建 app.js 文件,粘贴以下完整可运行代码:
```
const express = require('express');
const bodyParser = require('body-parser');
const crypto = require('crypto');
const app = express();
app.use(bodyParser.json());
// 配置共享密钥,物联网平台侧需保持一致
const APP_SECRET = 'your_own_secret_key_2024';
// 签名验证方法
function verifySign(params, secret) {
const sortedKeys = Object.keys(params).sort();
let str = '';
sortedKeys.forEach(key => {
if(key !== 'sign') str += `${key}=${params[key]}&`;
});
str += `secret=${secret}`;
return crypto.createHash('sha256').update(str).digest('hex');
}
// 接收物联网档案数据接口
app.post('/api/archive/receive', (req, res) => {
const sign = req.headers['x-sign'];
const calcSign = verifySign(req.body, APP_SECRET);
if(calcSign !== sign) {
return res.status(403).json({code: 403, msg: '签名验证失败'});
}
// 将接收到的数据插入档案管理系统数据库,替换为你自己的业务逻辑即可
console.log('收到物联网上报档案数据:', req.body);
res.json({code: 200, msg: '归档成功', data: null});
});
// 反向查询接口:档案系统查询物联网设备最新数据
app.get('/api/archive/query', (req, res) => {
const deviceId = req.query.deviceId;
// 此处添加调用物联网平台接口的逻辑,获取最新设备状态后更新档案
res.json({code: 200, msg: '查询成功', data: {deviceId, status: '运行正常'}});
});
app.listen(8080, () => {
console.log('档案集成服务已启动,监听端口8080');
});
```

启动服务执行命令:node app.js
三、第二步:配置字段映射与双向同步
物联网设备上报的字段需要和档案管理系统的档案字段一一对应,下表是标准映射关系,可根据实际业务调整:
| 物联网平台上报字段 |
档案管理系统目标字段 |
数据类型 |
| deviceId |
档案编号 |
字符串 |
| installTime |
归档日期 |
日期 |
| checkRecord |
检修内容 |
文本 |
| deviceLocation |
存放位置 |
字符串 |
| deviceStatus |
当前状态 |
字符串 |
完成映射后,在档案管理系统的档案详情页添加物联网状态同步按钮,绑定上文的/api/archive/query接口,即可拉取最新设备数据更新档案信息。
四、第三步:调试验证全流程
4.1 模拟设备上报档案数据
打开MQTTX的命令行工具,执行以下命令模拟设备上报档案数据:
```
连接EMQX服务,替换为你的服务器实际IP
mqttx connect --client-id test-archive-001 --host 192.168.1.100 --port 1883
发布档案数据,替换签名为计算后的正确值即可
mqttx publish -t "device/test-001/archive" -b '{"deviceId":"TEST-001","installTime":"2024-01-15","checkRecord":"2024年4月年检合格,运行正常","deviceLocation":"一号仓库A区03架","deviceStatus":"正常运行","sign":"替换为计算后的签名"}'
```
4.2 结果验证
执行上报后,查看档案服务的控制台输出,如果能打印出完整的上报档案数据,且EMQX规则引擎的监控显示转发成功,即表示上行集成完成。在档案系统点击同步按钮,能正常拉取到物联网设备的最新状态,即双向集成完整打通。
五、常见问题排查
- 接口转发失败:检查EMQX容器是否正常运行,服务器防火墙是否放行8080端口,档案服务是否已启动
- 签名验证不通过:检查参数是否按字典序排序,共享密钥是否两边一致,签名计算时是否遗漏参数
- 数据不入库:检查字段映射是否正确,JSON字段名大小写是否和约定一致,数据库字段长度是否满足要求