emqx / MQTTX

A Powerful and All-in-One MQTT 5.0 client toolbox for Desktop, CLI and WebSocket.
https://mqttx.app
Apache License 2.0
3.76k stars 435 forks source link

[Feature] Desktop supports mock data using Faker.js in scripts #1364

Open ysfscream opened 1 year ago

ysfscream commented 1 year ago

Ref: https://mqttx.app/docs/cli/get-started#simulate

Image

Motivation

In the current version of MQTTX Desktop, users can create scripts but there's no in-built support to generate mock data within these scripts. This can make it difficult for users to simulate realistic IoT scenarios where much varied data is required. Users may want to simulate various real-world data scenarios for testing or developing their MQTT applications.

Detailed Design

To resolve this issue, I propose enhancing MQTTX Desktop to support the generation of mock data in scripts using Faker.js, similar to CLI's simulate feature. This can be done by providing access to Faker.js methods within the scripting functionality of MQTTX Desktop.

Users should be able to create a script that generates mock data like in the following example:

/**
 * MQTTX Scenario file example
 * 
 * This script generates random temperature and humidity data.
 */
function generator (faker, options) {
  return {
    // If no topic is returned, use the topic in the command line parameters.
    // Topic format: 'mqttx/simulate/myScenario/' + clientId,
    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.
    })
  }
}
// Export the scenario module
module.exports = {
  name: 'myScenario',  // Name of the scenario
  generator,          // Generator function
}

This script generates random temperature and humidity data, simulating a basic IoT scenario. Users can then use these scripts to generate and publish data to MQTT topics, simulating data flow in various scenarios.

More examples and detailed editing guides should be made available in the MQTTX GitHub repository, or a reference on how to use faker.js to generate various types of random data.

Alternatives

An alternative solution could be to ignore this feature, but this would restrict users in terms of the variety and realism of the data they can generate for testing purposes. Another alternative could be to integrate with a different library for generating mock data, but Faker.js is widely used and provides a wide variety of data types, making it a good choice for this feature.

More detail (optional)

This feature would require changes in how MQTTX Desktop's scripting functionality is implemented and would require integration with Faker.js to provide the mock data generation capabilities. This feature aims to enhance user experience by providing a tool to easily generate varied mock data, enabling users to simulate realistic IoT data scenarios.

ysfscream commented 1 year ago

Actions: