From c9b0ad26c25f843af2ff3c535a3ae934193ebb1e Mon Sep 17 00:00:00 2001 From: Wraithers <4705057+Wraithers@users.noreply.github.com> Date: Mon, 13 May 2024 21:04:30 +0530 Subject: [PATCH 1/8] Create docker-compose.yml --- apps/mqttx/docker-compose.yml | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 apps/mqttx/docker-compose.yml diff --git a/apps/mqttx/docker-compose.yml b/apps/mqttx/docker-compose.yml new file mode 100644 index 0000000000..fb308c164c --- /dev/null +++ b/apps/mqttx/docker-compose.yml @@ -0,0 +1,13 @@ +version: '3.7' +services: + mqttx: + image: emqx/mqttx-web:v1.9.10 + container_name: 'mqttx' + restart: unless-stopped + volumes: + - ${APP_DATA_DIR}/data:/app/data + - /etc/localtime:/etc/localtime:ro + ports: + - ${APP_PORT}:80 + networks: + - tipi_main_network From 2f051549a8fd166382b2fff7595b4c8649975286 Mon Sep 17 00:00:00 2001 From: Wraithers <4705057+Wraithers@users.noreply.github.com> Date: Mon, 13 May 2024 21:12:38 +0530 Subject: [PATCH 2/8] Create config.json --- apps/mqttx/config.json | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 apps/mqttx/config.json diff --git a/apps/mqttx/config.json b/apps/mqttx/config.json new file mode 100644 index 0000000000..0407402901 --- /dev/null +++ b/apps/mqttx/config.json @@ -0,0 +1,21 @@ +{ + "name": "MQTTX", + "available": true, + "exposable": true, + "port": 8215, + "id": "mqttx", + "tipi_version": 1, + "version": "v1.9.10", + "categories": [ + "utilities" + ], + "description": "MQTTX Web is an open-source MQTT browser client and an online MQTT WebSocket client tool.", + "short_desc": "MQTT websocket browser client tool", + "author": "EMQX", + "source": "https://github.com/emqx/MQTTX/", + "form_fields": [], + "supported_architectures": [ + "arm64", + "amd64" + ] +} From af49ff924f0c89de807c32bc387dd40279a3c33c Mon Sep 17 00:00:00 2001 From: Wraithers <4705057+Wraithers@users.noreply.github.com> Date: Mon, 13 May 2024 21:20:21 +0530 Subject: [PATCH 3/8] Create description.md --- apps/mqttx/metadata/description.md | 105 +++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 apps/mqttx/metadata/description.md diff --git a/apps/mqttx/metadata/description.md b/apps/mqttx/metadata/description.md new file mode 100644 index 0000000000..c5938dd7ae --- /dev/null +++ b/apps/mqttx/metadata/description.md @@ -0,0 +1,105 @@ +MQTTX Logo + +[MQTTX](https://mqttx.app) is a cross-platform [MQTT 5.0](https://www.emqx.com/en/blog/introduction-to-mqtt-5) client tool open sourced by [EMQ](https://www.emqx.com/en), which can run on macOS, Linux and Windows, and supports formatting MQTT payload. + +[MQTTX](https://mqttx.app) simplifies test operation with the help of a familiar, chat-like interface. It’s easy and quick to create multiple, simultaneous online MQTT client connections, and can test the connection, publishing, and subscription functions of MQTT/TCP, MQTT/TLS, MQTT/WebSocket as well as other MQTT protocol features. + +> [MQTT](https://www.emqx.com/en/blog/the-easiest-guide-to-getting-started-with-mqtt) stands for MQ Telemetry Transport. It is a publish/subscribe, extremely simple and lightweight messaging protocol, designed for constrained devices and low-bandwidth, high-latency or unreliable networks. + +## Preview + +![mqttx-preview](https://github.com/emqx/MQTTX/blob/main/assets/mqttx-web-preview.png) + +## Usage + +See our [documentation](https://mqttx.app/docs) or [manual](./docs/manual.md) for details. + +1. Get MQTT Broker Ready. + + - If you do not need to deploy the MQTT Broker locally, you can use the [public MQTT 5.0 Broker](https://www.emqx.com/en/mqtt/public-mqtt5-broker) provided by [EMQX Cloud](https://www.emqx.com/en/cloud) for testing: + + ```shell + Broker IP: broker.emqx.io + Broker TCP Port: 1883 + Broker SSL Port: 8883 + ``` + + - To run MQTT Broker locally, [EMQX](https://www.emqx.com/en/products/emqx) is recommended: An Open-Source, Cloud-Native, Distributed MQTT Broker for IoT. + +2. Connection configuration. Click the `+` button in the left menu bar and fill in the corresponding required fields in the form. + +3. After the connection information is configured, click the `Connect` button in the upper right corner to create a connection and connect to MQTT Broker. + +4. After the MQTT is connected successfully, you can perform MQTT publish and subscription tests. + +![mqttx-gif](https://github.com/emqx/MQTTX/blob/main/assets/mqttx-gif.gif) + +## Get Involved + +- Follow [@EMQTech on Twitter](https://twitter.com/EMQTech). +- If you have a specific question, check out our [discussion forums](https://github.com/emqx/emqx/discussions). +- For general discussions, join us on the [official Discord](https://discord.gg/xYGf3fQnES) team. +- Keep updated on [EMQX YouTube](https://www.youtube.com/channel/UC5FjR77ErAxvZENEWzQaO5Q) by subscribing. + +## Develop + +Recommended version for Node environment: + +- v16.\*.\* + +``` shell +# Clone +git clone git@github.com:emqx/MQTTX.git + +# Install dependencies +cd MQTTX +yarn install + +# Compiles and hot-reloads for development +yarn run electron:serve + +# Compiles and minifies for production +yarn run electron:build +``` + +After the building is successful, the corresponding installation file for the successful build ing will appear in the `dist_electron` directory. + +If you need to package it as an installation package for an independent operating system, please refer to the following command: + +```shell +# For Windows +yarn run electron:build-win + +# For Linux +yarn run electron:build-linux + +# For macOS +yarn run electron:build-mac +``` + +## Contributing + +Please make sure to read the [Contributing Guide](https://github.com/emqx/MQTTX/blob/main/.github/CONTRIBUTING.md) before making a pull request. + +## Technology Stack + +- [Electron](https://electronjs.org/) +- [Vue](https://vuejs.org/) + [Element](https://element.eleme.io) +- [TypeScript](https://www.typescriptlang.org/) +- [TypeORM](https://github.com/typeorm/typeorm) +- [SQLite](https://github.com/mapbox/node-sqlite3) +- [MQTT.js](https://github.com/mqttjs/MQTT.js) + +## Resources + +- [MQTT Programming](https://www.emqx.com/en/blog/category/mqtt-programming) + + A series of blogs to help developers get started quickly with MQTT in PHP, Node.js, Python, Golang, and other programming languages. + +- [MQTT SDKs](https://www.emqx.com/en/mqtt-client-sdk) + + We have selected popular MQTT client SDKs in various programming languages and provided code examples to help you quickly understand the use of MQTT clients. + +## License + +Apache License 2.0, see [LICENSE](https://github.com/emqx/MQTTX/blob/main/LICENSE). From 28eff2357aa6d90cfe5d85172ee0db679694bffd Mon Sep 17 00:00:00 2001 From: Wraithers <4705057+Wraithers@users.noreply.github.com> Date: Mon, 13 May 2024 21:21:11 +0530 Subject: [PATCH 4/8] Remove logo at the top of description.md --- apps/mqttx/metadata/description.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/apps/mqttx/metadata/description.md b/apps/mqttx/metadata/description.md index c5938dd7ae..7de89c4415 100644 --- a/apps/mqttx/metadata/description.md +++ b/apps/mqttx/metadata/description.md @@ -1,5 +1,3 @@ -MQTTX Logo - [MQTTX](https://mqttx.app) is a cross-platform [MQTT 5.0](https://www.emqx.com/en/blog/introduction-to-mqtt-5) client tool open sourced by [EMQ](https://www.emqx.com/en), which can run on macOS, Linux and Windows, and supports formatting MQTT payload. [MQTTX](https://mqttx.app) simplifies test operation with the help of a familiar, chat-like interface. It’s easy and quick to create multiple, simultaneous online MQTT client connections, and can test the connection, publishing, and subscription functions of MQTT/TCP, MQTT/TLS, MQTT/WebSocket as well as other MQTT protocol features. From 014c5922fd4ce621586d7b285b7a6f57e5f878d6 Mon Sep 17 00:00:00 2001 From: Wraithers <4705057+Wraithers@users.noreply.github.com> Date: Mon, 13 May 2024 21:25:45 +0530 Subject: [PATCH 5/8] Upload logo --- apps/mqttx/metadata/logo1.jpg | Bin 0 -> 25944 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 apps/mqttx/metadata/logo1.jpg diff --git a/apps/mqttx/metadata/logo1.jpg b/apps/mqttx/metadata/logo1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..da67bd2de4a92505bbdcffe1f2ae9a9011efc34c GIT binary patch literal 25944 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 ZT>5C?==?=(rhwr83(5c2`;6ZQ{tI@V%?AJg literal 0 HcmV?d00001 From a5b39d48bebe4c60f8936689349de512eea899fe Mon Sep 17 00:00:00 2001 From: Wraithers <4705057+Wraithers@users.noreply.github.com> Date: Mon, 13 May 2024 21:26:56 +0530 Subject: [PATCH 6/8] Rename logo1.jpg to logo.jpg --- apps/mqttx/metadata/{logo1.jpg => logo.jpg} | Bin 1 file changed, 0 insertions(+), 0 deletions(-) rename apps/mqttx/metadata/{logo1.jpg => logo.jpg} (100%) diff --git a/apps/mqttx/metadata/logo1.jpg b/apps/mqttx/metadata/logo.jpg similarity index 100% rename from apps/mqttx/metadata/logo1.jpg rename to apps/mqttx/metadata/logo.jpg From d640d8768f8143e03fbf47646b31192410152806 Mon Sep 17 00:00:00 2001 From: Wraithers <4705057+Wraithers@users.noreply.github.com> Date: Mon, 13 May 2024 21:41:07 +0530 Subject: [PATCH 7/8] Update usage option for local Eclipse Mosquitto broker --- apps/mqttx/metadata/description.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/mqttx/metadata/description.md b/apps/mqttx/metadata/description.md index 7de89c4415..7d260e79dc 100644 --- a/apps/mqttx/metadata/description.md +++ b/apps/mqttx/metadata/description.md @@ -10,7 +10,7 @@ ## Usage -See our [documentation](https://mqttx.app/docs) or [manual](./docs/manual.md) for details. +See the MQTTX [documentation](https://mqttx.app/docs) or [manual](./docs/manual.md) for details. 1. Get MQTT Broker Ready. @@ -22,7 +22,7 @@ See our [documentation](https://mqttx.app/docs) or [manual](./docs/manual.md) fo Broker SSL Port: 8883 ``` - - To run MQTT Broker locally, [EMQX](https://www.emqx.com/en/products/emqx) is recommended: An Open-Source, Cloud-Native, Distributed MQTT Broker for IoT. + - To run MQTT Broker locally, use the [Eclipse Mosquitto](https://github.com/runtipi/runtipi-appstore/blob/master/apps/eclipse-mosquitto/) Tipi app. Follow the steps mentioned in its [description](https://github.com/runtipi/runtipi-appstore/blob/master/apps/eclipse-mosquitto/metadata/description.md) to turn on Websockets so that the MQTTX web client can connect to it. 2. Connection configuration. Click the `+` button in the left menu bar and fill in the corresponding required fields in the form. From 741d078c0d7a11d9b2c2e6eda20f1e491138d661 Mon Sep 17 00:00:00 2001 From: Wraithers <4705057+Wraithers@users.noreply.github.com> Date: Mon, 13 May 2024 22:54:25 +0530 Subject: [PATCH 8/8] Update port to unused The Google Doc listing ports (https://docs.google.com/spreadsheets/d/13U8MNCOiQjR4XohNCl9-CrmqS8_CA-oFEy3wrnJBJks/edit?usp=sharing) was outdated. The new table view in the Tipi Appstore helped me find the port clash. --- apps/mqttx/config.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/mqttx/config.json b/apps/mqttx/config.json index 0407402901..7ae70b4d39 100644 --- a/apps/mqttx/config.json +++ b/apps/mqttx/config.json @@ -2,7 +2,7 @@ "name": "MQTTX", "available": true, "exposable": true, - "port": 8215, + "port": 8217, "id": "mqttx", "tipi_version": 1, "version": "v1.9.10",