白皮书
车联网设计与实现:搭建可靠、高效、符合行业需求的车联网平台 →

1.9.3 发布:数据模拟功能提升开发测试效率|MQTTX Newsletter 202305

MQTTX Team
2023-6-1
1.9.3 发布:数据模拟功能提升开发测试效率|MQTTX Newsletter 202305

MQTTX 是一个功能强大的跨平台 MQTT 5.0 桌面和命令行客户端工具,帮助用户简单快速的学习、探索和开发 MQTT 应用。它作为一个全面的 MQTT 客户端工具箱,为开发人员和用户提供了友好的界面和一系列强大的功能。

社区:https://mqttx.app/zh

GitHub: MQTTX: Powerful cross-platform MQTT 5.0 Desktop, CLI, and WebSocket client tools

在五月中旬,MQTTX 团队发布了全新的 1.9.3 版本。此版本正式将 MQTT X 更名为 MQTTX,进一步统一品牌标识。与此同时,MQTTX 命令行客户端中引入了一项物联网场景数据模拟的新功能,该功能允许开发者根据自身的测试场景需求来模拟数据,从而显著提升开发和测试效率。在 Docker 镜像方面,我们通过优化实现了显著的体积减小,为用户节省了宝贵的存储空间。MQTTX 一直致力于提供最佳的用户体验,为全球 MQTT 服务和应用的开发者提供最佳客户端工具。

最新版本下载地址:Release v1.9.3 · emqx/MQTTX

命令行客户端

物联网场景数据模拟

在这次的 1.9.3 版本中,MQTTX 命令行客户端增加了一个名为 simulate 的新命令,用于模拟特定场景下的 MQTT 发布消息。这个功能对于开发者进行系统测试尤为重要,它允许开发者根据自身的测试场景需求来模拟数据,比如模拟各类设备发送的数据,从而显著提升了开发和测试效率。这个命令基本上与发布基准(benchmark pub)命令有着相同的选项,以下只列出了新的或改变的选项。

用户可以通过运行 help 命令获取更多信息:

mqttx simulate --help

此功能的主要参数有:

  • -sc, --scenario:模拟内置场景的名称
  • -f, --file:本地自定义场景脚本的文件路径
  • -t, --topic:消息主题,可选,支持变量,如%u(用户名),%c(客户端id),%i(索引),%sc(场景)。默认主题格式是 mqttx/simulate/%sc/%c

必须指定 --scenario--file 参数中的一个,如果两者都指定,则优先考虑 --file 参数。

开发者可以编写自定义的物联网数据脚本来模拟特定的场景。例如,下面这段脚本生成了随机的温度和湿度数据:

function generator (faker, options) {
  return {
    message: JSON.stringify({
      temp: faker.datatype.number({ min: 20, max: 80 }),  // Generate a random temperature between 20 and 80.
      hum: faker.datatype.number({ min: 40, max: 90 }),   // Generate a random humidity between 40 and 90.
    })
  }
}
module.exports = {
  name: 'myScenario',  // Name of the scenario
  generator,          // Generator function
}

更多的例子和详细的编辑指南可以参考 MQTTX 的 GitHub 仓库中的 scripts-example 文件夹,或查看如何使用 faker.js 生成各种类型的随机数据。

MQTTX 命令行客户端内置了一些常见的场景,可以通过 --scenario 参数来指定。例如,运行 mqttx simulate --scenario tesla 即可模拟特斯拉汽车的数据。你也可以使用mqttx ls --scenarios 命令列出所有的内置场景。这个命令将输出一个表格,显示每个内置场景的名称和描述,如果你想在 simulat e命令中使用其中一个场景,只需要在 --scenario 选项中指定场景名称即可:

mqttx simulate --scenario <SCENARIO_NAME>

内置的场景包括:

  • tesla:模拟特斯拉汽车数据
  • IEM:模拟工业能源监控数据
  • smart_home:模拟智能家居数据
  • weather:模拟气象站数据

最后,新增了 ls 命令提供了可用资源的概览,不过当前,它支持列出内置的场景。

mqttx ls --help

例如,假设你想模拟一个场景,其中 10 个智能家庭设备正在向指定的主题发布数据。你可以运行以下命令:

mqttx simulate -sc smart_home -c 10 -h broker.emqx.io -t testtopic/smart_home

这个命令将启动 10 个模拟器(由 -c 10 参数指定),它们都将向 testtopic/smart_home 主题(由 -t testtopic/smart_home 参数指定)发布数据,模拟智能家庭设备的行为。这个数据将由内置的 smart_home 场景生成(由 -sc smart_home 参数指定)。同时,这些模拟器将连接到 broker.emqx.io 服务器(由 -h broker.emqx.io 参数指定)。在订阅了这个主题后,我们就能看到以下这样的数据:

{"home_id":"e5ee7759-464f-4df8-9b68-2afc906da39a","owner_name":"Dustin Hessel","address":"8850 Ona Circle","rooms":[{"room_type":"living room","temperature":19,"humidity":45,"lights_on":true,"window_open":false},{"room_type":"bedroom","temperature":23,"humidity":33,"lights_on":true,"window_open":false,"bed_occupancy":false},{"room_type":"kitchen","temperature":23,"humidity":50,"lights_on":false,"window_open":false,"fridge_temperature":5,"oven_on":true},{"room_type":"bathroom","temperature":23,"humidity":46,"lights_on":true,"window_open":true,"water_tap_running":false,"bath_water_level":68}],"timestamp":1684810770255}

此数据展示了一个智能家庭环境的状态,包含各个房间的温度、湿度、灯光状态等信息。

Docker 镜像优化,提升部署效率

在 MQTTX 1.9.3 版本中,我们同时对 MQTTX CLI 和 MQTTX Web 客户端的 Docker 镜像进行了显著的优化。我们采用了多阶段构建(Multi-stage builds)技术,并切换到了基于 Alpine Linux 的 Node.js 环境(node:16-alpine)。这两项改动显著地减少了约 81.3% 左右的 Docker 镜像的体积。具体来说,MQTTX CLI Docker 镜像的大小从原来的 1.07GB 减少到了 200.52MB,而 MQTTX Web 客户端的 Docker 镜像体积也从原来的 886.75MB 减少到了 146.4MB。

这些优化不仅大幅度减少了用户的存储使用,也加快了镜像的下载速度,从而降低了用户的使用成本。优化后的镜像保持了功能完整,同时也提升了其运行效率。此外,这一改进也降低了网络传输的压力,使得在 Docker 环境下私有化部署 MQTTX Web 客户端更为简便、高效。

MQTTX CLI Docker

MQTTX Web Docker

桌面客户端

自动重连功能

连接默认开启了自动重连的功能。如果由于网络问题或其他原因,MQTTX 桌面客户端与 MQTT 服务器的连接中断,那么客户端将会尝试自动重新连接。

连接状态下禁止编辑

在连接状态下,为了防止误操作和确保数据的一致性,我们禁止了用户进行编辑。

修复 Ubuntu 启动问题

我们修复了在 Ubuntu 系统上无法启动 MQTTX 的问题。现在 Ubuntu 用户可以正常使用我们的桌面客户端了。

Logo 更新

我们优化了应用的标志,将 MQTT X 改为了 MQTTX,使其更加简洁和更具识别性。

MQTTX

New Logo Preview

未来规划

  • 将物联网场景数据模拟功能同步到桌面客户端中
  • 提升对于特殊数据格式,如 JSON 在显示消息框内的高亮显示
  • 支持 Protobuf 的消息格式
  • 支持 Sparkplug B
  • 可配置忽略 QoS 0 的消息存储,以减少存储空间的占用
  • MQTT Debug 功能
  • 接收到的消息可以进行自动图表绘制
  • 插件功能(协议扩展 CoAP,MQTT-SN 等)
  • 脚本测试自动化(Flow)
立即体验 MQTTX
免费下载 →

推荐阅读

2021-2-23Shifan Yu
MQTTX 脚本功能使用教程

MQTT X 在 v1.4.2 版本后加入了脚本功能,用户可使用脚本对 Payload 进行自定义转换,本文将通过两个简单的实例来介绍脚本功能的使用。

2021-9-3Shifan Yu
MQTT.js 入门教程

本文介绍了 MQTT.js 一些常用 API 的使用方法,及使用过程中的一些经验分享,帮助用户快速在 JavaScript 项目中使用 MQTT。