找回密码
 立即注册

QQ登录

只需一步,快速开始

lucas.Yan
超级版主   /  发表于:2024-11-8 11:30  /   查看:265  /  回复:0
本帖最后由 lucas.Yan 于 2024-11-8 12:12 编辑

image.png95350035.png
看着中间部分拓扑图一片空白是否感到头大,还在为了设计好的拓扑图没有数据感到苦恼吗?还在为了设置了条件格式化后没有办法测试是否生效感到着急吗?
阅读这篇教程帮你拿捏MQTT数据推送!


背景介绍:

        为了在本地环境中充分测试Wyn的拓扑图功能,特别是要验证数据的动态变化效果以及条件格式化的设置情况,我们面临着一个挑战——缺乏适当的物理设备或软件来实时发送数据。为了解决这一问题并确保测试的有效性,我们可以采用开源的MQTT客户端工具,利用其强大的数据模拟能力,向Wyn平台发送定制的模拟数据流。这样做不仅能够帮助我们克服当前的技术限制,还能确保对Wyn的各项功能进行全面而深入的测试,从而优化最终的应用体验。

效果展示:
Honeycam 2024-11-08 10-15-17.gif

使用步骤:
一、数据准备
Windows环境(易用)

Windows环境有良好的GUI界面和指引,使用较为简单。但是如果长时间运行的话可能因为系统策略,消息发送频率会减慢或停止。
1. 下载安装MQTTX命令行工具(https://mqttx.app/zh/downloads),后续要用到的MQTT broker可以使用默认服务或者注册账号申请对应的服务器(https://www.emqx.com/zh/mqtt/public-mqtt5-broker)。


2. 配置MQTT链接设置
image.png427505187.png
3. 填写topic和发送内容
  1. {"data":[{"设备名称":"镭刻机","温度":60.62288507107859,"状态":"运行中"},{"设备名称":"印刷机","温度":69.71607874708126,"状态":"运行中"},{"设备名称":"SPI","温度":67.38936220477623,"状态":"运行中"},{"设备名称":"接驳机","温度":76.28262984225007,"状态":"运行中"},{"设备名称":"贴片机","温度":72.03938503653075,"状态":"运行中"},{"设备名称":"缓存机","温度":62.966724480837975,"状态":"运行中"},{"设备名称":"AOI 机器","温度":67.13708375323688,"状态":"运行中"}]}
复制代码
4. 同时我们可以使用自定义函数对发送内容进行修改或者将其设置为随机数,从而产生动态数据。每次我们发送数据的时候输入内容都会通过自定义函数的将输入内容进行修饰。
image.png153811034.png
  1. /**
  2. * @description: default script
  3. * @param {any} value - Payload
  4. * @param {string} msgType - Message type, value is 'received' or 'publish'
  5. * @param {number} index - Index of the message, valid only when script is used in the publish message and timed message is enabled
  6. * @return {any} - Payload after script processing
  7. */
  8. function handlePayload(value, msgType, index) {
  9.         const devices = [
  10.                 "镭刻机",
  11.                 "印刷机",
  12.                 "SPI",
  13.                 "接驳机",
  14.                 "贴片机",
  15.                 "缓存机",
  16.                 "AOI 机器"
  17.         ];

  18.         const data = devices.map(device => ({
  19.                 "设备名称": device,
  20.                 "温度": 60 + Math.random() * 20, // 在 60 到 80 之间生成随机温度
  21.                 "状态": "运行中"
  22.         }));

  23.         return JSON.stringify({
  24.                 data: data
  25.         }
  26.         )
  27. }

  28. execute(handlePayload)
复制代码
5 使用定时消息功能,按照设定时间间隔来连续发送,形成动态拓扑图。
image.png301519469.png

linux(自定义能力强):
CLI文档:https://mqttx.app/zh/docs/cli/get-started
1 首先我们阅读文档确认自己需要的链接和发送方式
此处我们使用mqttx simulate命令来利用脚本发送我们的模拟数据
  1. mqttx simulate pub -f ./a.js   -c 1 -im 1000 -t 'SMT贴片数据采集'  -l 'mqtts' -u 'xxxx' -P '123456' -h 'asd.emqxsl.com' -p 8883
复制代码
./a.js 运行脚本地址

其中-h参数是注册的云服务地址
-u 用户名
-P 密码
-t 发送的Topic

-p 端口号
-im 发送间隔
2 创建对应脚本
我们可以创建一个新的文件夹来放置上面的脚本文件和后需要生成的日志文件来方便我们进行错误分析
  1. /**
  2. * MQTTX 场景文件示例
  3. *
  4. * 此脚本生成随机的设备数据,包括设备名称、温度和状态。
  5. */
  6. function generator(faker, options) {
  7.         const devices = [
  8.           "镭刻机",
  9.           "印刷机",
  10.           "SPI",
  11.           "接驳机",
  12.           "贴片机",
  13.           "缓存机",
  14.           "AOI 机器"
  15.         ];
  16.         
  17.         const data = devices.map(device => ({
  18.           "设备名称": device,
  19.           "温度": faker.number.float({ min: 60, max: 80, precision: 0.1 }), // 在 60 到 80 之间生成随机温度
  20.           "状态": "运行中"
  21.         }));
  22.   
  23.         return {
  24.           message: JSON.stringify({ data }),
  25.         };
  26.   }
  27.   
  28.   // 导出场景模块
  29.   module.exports = {
  30.         name: 'deviceScenario', // 场景名称
  31.         generator, // 生成器函数
  32.   };
复制代码

./a.js脚本文件内容
3 我们需要利用linux的screen指令和&符 来帮助我们将任务放置在后台持续运行

后台任务说明:https://blog.csdn.net/Pan_peter/article/details/128875714
首先使用screen -S test 创建一个视窗
接着执行下方命令,将返回的输出记录在a.log文件中.

  1. mqttx simulate pub -f ./a.js -c 1 -im 1000 -t 'SMT贴片数据采集' -l 'mqtts' -u 'xxxx' -P '123456' -h 'asd.emqxsl.com' -p 8883 > a.log &
复制代码

二、数据展示
数据的展示流程需要借助强大的BI工具Wyn来实现。
可以尝试导入下面示例,并修改对应的连接信息即可使用
image.png700111694.png
image.png754735717.png

wyn-export-20241108033330.zip (19.67 MB, 下载次数: 19)

0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部