[{"data":1,"prerenderedAt":1431},["Reactive",2],{"blog-post-en-how-to-publish-and-receive-protobuf-messages-within-mqtt":3,"VEb9Nnn1YX":1187,"blog-posts-en":1210},{"slug":4,"title":5,"description":6,"date":7,"category":8,"cover":9,"version":-1,"coverWidth":-1,"coverHeight":-1,"updated":-1,"tags":10,"readingTime":13,"doc":14},"how-to-publish-and-receive-protobuf-messages-within-mqtt","How to Publish and Receive Protobuf Messages within MQTT?","This article will demonstrate how to define, publish, and receive Protobuf messages with MQTTX client.","2024-03-25","guides","https://assets.emqx.com/images/8c5e5764795a2b500deb4f429b1f7f64.jpg",[11,12],"Protobuf","MQTT",7,{"_path":15,"_dir":16,"_draft":17,"_partial":17,"_locale":18,"title":5,"description":6,"date":19,"category":8,"tags":20,"cover":9,"body":21,"_type":1180,"_id":1181,"_source":1182,"_file":1183,"_extension":1184,"readingTime":13,"sitemap":1185},"/blog/en/how-to-publish-and-receive-protobuf-messages-within-mqtt","en",false,"","2024-03-25T00:00:00.000Z",[11,12],{"type":22,"children":23,"toc":1164},"root",[24,33,50,72,78,92,99,131,156,162,175,181,186,485,490,496,501,509,514,516,570,722,728,733,739,744,983,989,994,1148,1154,1159],{"type":25,"tag":26,"props":27,"children":29},"element","h2",{"id":28},"mqtt-and-protobuf",[30],{"type":31,"value":32},"text","MQTT and Protobuf",{"type":25,"tag":34,"props":35,"children":36},"p",{},[37,39,48],{"type":31,"value":38},"Choosing the correct data serialization format becomes crucial in the increasingly complex data exchange environment. Protobuf has been widely adopted by major internet companies and various microservice projects due to its efficient serialization properties. At the same time, ",{"type":25,"tag":40,"props":41,"children":46},"a",{"href":42,"rel":43,"target":45},"https://www.emqx.com/en/blog/the-easiest-guide-to-getting-started-with-mqtt",[44,44],"noopener","_blank",[47],{"type":31,"value":12},{"type":31,"value":49},", a lightweight message transfer protocol based on the publish-subscribe model, evidently enhances the IoT data exchange experience when combined with Protobuf.",{"type":25,"tag":34,"props":51,"children":52},{},[53,55,61,63,70],{"type":31,"value":54},"Ensuring and testing the correct publishing and receiving of Protobuf messages within MQTT is crucial. ",{"type":25,"tag":40,"props":56,"children":58},{"href":57},"/",[59],{"type":31,"value":60},"MQTTX",{"type":31,"value":62},", an open-source, all-in-one ",{"type":25,"tag":40,"props":64,"children":67},{"href":65,"rel":66,"target":45},"https://www.emqx.com/en/blog/mqtt-client-tools",[44,44],[68],{"type":31,"value":69},"MQTT client",{"type":31,"value":71},", supports multiple formats, from JSON and Base64 to the present-day Protobuf. This article will demonstrate how to define, publish, and receive Protobuf messages with MQTTX.",{"type":25,"tag":26,"props":73,"children":75},{"id":74},"preparation",[76],{"type":31,"value":77},"Preparation",{"type":25,"tag":34,"props":79,"children":80},{},[81,83,90],{"type":31,"value":82},"This tutorial requires some preliminary work to ensure smooth communication with IoT devices. This includes installing an ",{"type":25,"tag":40,"props":84,"children":87},{"href":85,"rel":86,"target":45},"https://www.emqx.com/en/blog/the-ultimate-guide-to-mqtt-broker-comparison",[44,44],[88],{"type":31,"value":89},"MQTT Broker",{"type":31,"value":91}," and the MQTTX client. An MQTT Broker(we’ll use EMQX here) provides message transmission functionality for IoT devices, while MQTTX allows us to publish and subscribe to messages.",{"type":25,"tag":93,"props":94,"children":96},"h3",{"id":95},"install-emqx",[97],{"type":31,"value":98},"Install EMQX",{"type":25,"tag":34,"props":100,"children":101},{},[102,104,111,113,120,122,129],{"type":31,"value":103},"EMQX is a high-performance, scalable ",{"type":25,"tag":40,"props":105,"children":108},{"href":106,"rel":107,"target":45},"https://www.emqx.com/en/blog/mqtt-platform-essential-features-and-use-cases",[44,44],[109],{"type":31,"value":110},"MQTT platform",{"type":31,"value":112}," suitable for IoT, ",{"type":25,"tag":40,"props":114,"children":117},{"href":115,"rel":116,"target":45},"https://www.emqx.com/en/blog/industrial-iot-systems",[44,44],[118],{"type":31,"value":119},"Industrial IoT",{"type":31,"value":121},", and Vehicular network scenarios. We have chosen the 5.5.1 version of ",{"type":25,"tag":40,"props":123,"children":126},{"href":124,"rel":125,"target":45},"https://www.emqx.com/en/products/emqx",[44,44],[127],{"type":31,"value":128},"EMQX Enterprise",{"type":31,"value":130}," edition as its rule engine is capable of encoding and decoding with Protobuf, making it convenient for processing and validating Protobuf data.",{"type":25,"tag":132,"props":133,"children":134},"ul",{},[135,151],{"type":25,"tag":136,"props":137,"children":138},"li",{},[139,141],{"type":31,"value":140},"Installation using Docker:",{"type":25,"tag":142,"props":143,"children":145},"pre",{"code":144},"docker run -d --name emqx-enterprise -p 1883:1883 -p 8083:8083 -p 8084:8084 -p 8883:8883 -p 18083:18083 emqx/emqx-enterprise:5.5.1\n",[146],{"type":25,"tag":147,"props":148,"children":149},"code",{"__ignoreMap":18},[150],{"type":31,"value":144},{"type":25,"tag":136,"props":152,"children":153},{},[154],{"type":31,"value":155},"For non-Docker users, EMQX offers RPM or DEB packages. The EMQX 5.5.1 Installation Guide provides detailed installation instructions.",{"type":25,"tag":93,"props":157,"children":159},{"id":158},"install-mqttx",[160],{"type":31,"value":161},"Install MQTTX",{"type":25,"tag":34,"props":163,"children":164},{},[165,167,173],{"type":31,"value":166},"MQTTX provides desktop and CLI versions that support Protobuf message transmission. Visit the ",{"type":25,"tag":40,"props":168,"children":170},{"href":169},"/downloads",[171],{"type":31,"value":172},"MQTTX official website",{"type":31,"value":174}," to download the appropriate version based on your requirements.",{"type":25,"tag":26,"props":176,"children":178},{"id":177},"use-protobuf-messages-with-mqttx-desktop",[179],{"type":31,"value":180},"Use Protobuf Messages with MQTTX Desktop",{"type":25,"tag":34,"props":182,"children":183},{},[184],{"type":31,"value":185},"The MQTTX desktop client offers users a more efficient and personalized experience. We’ve optimized the Schema section in the latest version, especially with the newly added custom functions and Schema scripting capabilities. These enhancements make handling and viewing data in the Protobuf format much more accessible.",{"type":25,"tag":187,"props":188,"children":189},"ol",{},[190,230,279,332,410],{"type":25,"tag":136,"props":191,"children":192},{},[193,199,203,205,208,216],{"type":25,"tag":194,"props":195,"children":196},"strong",{},[197],{"type":31,"value":198},"Access the Schema Script Page",{"type":25,"tag":200,"props":201,"children":202},"br",{},[],{"type":31,"value":204},"Start the MQTTX client, click the “Scripts” icon in the left menu bar, then select the “Schema” tab. Upon entering this page, there’s a simple default example.",{"type":25,"tag":200,"props":206,"children":207},{},[],{"type":25,"tag":209,"props":210,"children":215},"img",{"alt":211,"src":212,"loading":213,"decoding":214},"Schema Script Page","https://assets.emqx.com/images/627d34f90a2d1dbdc72f3d5226bcb0ee.png?x-image-process=image/resize,w_1520/format,webp","lazy","async",[],{"type":25,"tag":217,"props":218,"children":219},"blockquote",{},[220],{"type":25,"tag":34,"props":221,"children":222},{},[223,228],{"type":25,"tag":194,"props":224,"children":225},{},[226],{"type":31,"value":227},"Note:",{"type":31,"value":229}," This example serves only as a placeholder. You have to save it before use.",{"type":25,"tag":136,"props":231,"children":232},{},[233,238,241,243,246,248,259,262,264,270,272,275],{"type":25,"tag":194,"props":234,"children":235},{},[236],{"type":31,"value":237},"Input or Import a .proto File",{"type":25,"tag":200,"props":239,"children":240},{},[],{"type":31,"value":242},"You can type the content of a proto file in the editor, as shown in the example below. Then click the “Save” button in the top-right corner. This way, you’ve successfully created a new proto Schema in MQTTX. If you already have a prepared .proto file, you can directly click the “Import .proto File” button in the top right to upload it.",{"type":25,"tag":200,"props":244,"children":245},{},[],{"type":31,"value":247},"Here’s a commonly used proto format in the IoT:",{"type":25,"tag":142,"props":249,"children":254},{"code":250,"language":251,"meta":18,"className":252},"syntax = \"proto3\";\n\npackage IoT;\n\nmessage SensorData {\n  string deviceId = 1;\n  string sensorType = 2;\n  double value = 3;\n  int64 timestamp = 4;\n}\n","protobuf",[253],"language-protobuf",[255],{"type":25,"tag":147,"props":256,"children":257},{"__ignoreMap":18},[258],{"type":31,"value":250},{"type":25,"tag":200,"props":260,"children":261},{},[],{"type":31,"value":263},"This proto file defines a ",{"type":25,"tag":147,"props":265,"children":267},{"className":266},[],[268],{"type":31,"value":269},"SensorData",{"type":31,"value":271}," message, including device ID, sensor type, sensor value, and timestamp.",{"type":25,"tag":200,"props":273,"children":274},{},[],{"type":25,"tag":209,"props":276,"children":278},{"alt":237,"src":277,"loading":213,"decoding":214},"https://assets.emqx.com/images/28da9a83a48cb8b340ddafebf2b2fc79.png?x-image-process=image/resize,w_1520/format,webp",[],{"type":25,"tag":136,"props":280,"children":281},{},[282,287,290,292,295,300,302,307,309,320,323,325,328],{"type":25,"tag":194,"props":283,"children":284},{},[285],{"type":31,"value":286},"Test Input and Output",{"type":25,"tag":200,"props":288,"children":289},{},[],{"type":31,"value":291},"At the bottom of the script editor, you can try entering data to verify whether the proto file you just wrote is correct. First, you can choose a data format, such as JSON, to test with.",{"type":25,"tag":200,"props":293,"children":294},{},[],{"type":25,"tag":194,"props":296,"children":297},{},[298],{"type":31,"value":299},"Example",{"type":31,"value":301},": Based on the ",{"type":25,"tag":147,"props":303,"children":305},{"className":304},[],[306],{"type":31,"value":269},{"type":31,"value":308}," definition, you can input the following JSON data alongside the Proto name for testing:",{"type":25,"tag":142,"props":310,"children":315},{"code":311,"language":312,"meta":18,"className":313},"{\n  \"deviceId\": \"123456789\",\n  \"sensorType\": \"Temperature\",\n  \"value\": 24.5,\n  \"timestamp\": 1678339200000\n}\n","json",[314],"language-json",[316],{"type":25,"tag":147,"props":317,"children":318},{"__ignoreMap":18},[319],{"type":31,"value":311},{"type":25,"tag":200,"props":321,"children":322},{},[],{"type":31,"value":324},"Once done, click the “Test” button. If there’s any mismatch between the input data and the proto file definition, the MQTTX client will show relevant error messages or prompts to assist in troubleshooting.",{"type":25,"tag":200,"props":326,"children":327},{},[],{"type":25,"tag":209,"props":329,"children":331},{"alt":286,"src":330,"loading":213,"decoding":214},"https://assets.emqx.com/images/ee171826b8602aeec287f6c3dc125261.png?x-image-process=image/resize,w_1520/format,webp",[],{"type":25,"tag":136,"props":333,"children":334},{},[335,340,343,345,348,352,354],{"type":25,"tag":194,"props":336,"children":337},{},[338],{"type":31,"value":339},"Run the Script",{"type":25,"tag":200,"props":341,"children":342},{},[],{"type":31,"value":344},"Once connected to EMQX, you can use the proto file you defined earlier for message encoding and decoding.",{"type":25,"tag":200,"props":346,"children":347},{},[],{"type":25,"tag":194,"props":349,"children":350},{},[351],{"type":31,"value":227},{"type":31,"value":353}," This tutorial will only focus on using the Schema scripts. While MQTTX does support custom functions, we will not cover that functionality here.",{"type":25,"tag":132,"props":355,"children":356},{},[357,374,384],{"type":25,"tag":136,"props":358,"children":359},{},[360,365,367,370],{"type":25,"tag":194,"props":361,"children":362},{},[363],{"type":31,"value":364},"Select Run Script",{"type":31,"value":366},": Click the dropdown in the connection page’s top right corner and choose “Run Script”.",{"type":25,"tag":200,"props":368,"children":369},{},[],{"type":25,"tag":209,"props":371,"children":373},{"alt":364,"src":372,"loading":213,"decoding":214},"https://assets.emqx.com/images/4f39d3ab1cbd6d0051b6c8a7f335a32d.png?x-image-process=image/resize,w_1520/format,webp",[],{"type":25,"tag":136,"props":375,"children":376},{},[377,382],{"type":25,"tag":194,"props":378,"children":379},{},[380],{"type":31,"value":381},"Apply to Publish or Subscribe",{"type":31,"value":383},": In the pop-up interface, you can decide whether to apply the Schema to message publishing, subscription, or both. For this example, we’ll choose the default “All.”",{"type":25,"tag":136,"props":385,"children":386},{},[387,392,394,400,402,405],{"type":25,"tag":194,"props":388,"children":389},{},[390],{"type":31,"value":391},"Select the Schema Script and Set the Proto Name",{"type":31,"value":393},": In the dropdown, choose the proto file you created or imported. In the “Proto Name” input box, enter the message name you defined in the proto file, such as ",{"type":25,"tag":147,"props":395,"children":397},{"className":396},[],[398],{"type":31,"value":399},"IoT.SensorData",{"type":31,"value":401},". Ensure all settings are correctly configured before confirming.",{"type":25,"tag":200,"props":403,"children":404},{},[],{"type":25,"tag":209,"props":406,"children":409},{"alt":407,"src":408,"loading":213,"decoding":214},"Select the Schema Script and Set the Proto Name:","https://assets.emqx.com/images/6ba83b3845e9693e8b87c633e6ca9481.png?x-image-process=image/resize,w_1520/format,webp",[],{"type":25,"tag":136,"props":411,"children":412},{},[413,418,421,423],{"type":25,"tag":194,"props":414,"children":415},{},[416],{"type":31,"value":417},"Publish and Receive Messages",{"type":25,"tag":200,"props":419,"children":420},{},[],{"type":31,"value":422},"After configuring the Protobuf Schema feature in the MQTTX client, you can verify its effectiveness by publishing and receiving messages.",{"type":25,"tag":132,"props":424,"children":425},{},[426,458,475],{"type":25,"tag":136,"props":427,"children":428},{},[429,434,436,445,448,450,456],{"type":25,"tag":194,"props":430,"children":431},{},[432],{"type":31,"value":433},"Publish a Message",{"type":31,"value":435},": In the message input box, input the desired JSON data, like:",{"type":25,"tag":142,"props":437,"children":440},{"code":438,"language":312,"meta":18,"className":439},"{\n  \"deviceId\": \"Device001\",\n  \"sensorType\": \"Temperature\",\n  \"value\": 23.5,\n  \"timestamp\": 1677328490320\n}\n",[314],[441],{"type":25,"tag":147,"props":442,"children":443},{"__ignoreMap":18},[444],{"type":31,"value":438},{"type":25,"tag":200,"props":446,"children":447},{},[],{"type":31,"value":449},"Next, subscribe to a topic named ",{"type":25,"tag":147,"props":451,"children":453},{"className":452},[],[454],{"type":31,"value":455},"testtopic/protobuf",{"type":31,"value":457}," and publish the above message to that topic.",{"type":25,"tag":136,"props":459,"children":460},{},[461,466,468,471],{"type":25,"tag":194,"props":462,"children":463},{},[464],{"type":31,"value":465},"Receive and View the Message",{"type":31,"value":467},": Ensure you subscribe to the mentioned topic. You can see the Protobuf message in the reception window when the message arrives. Selecting the JSON format will convert the Protobuf message into JSON for easier viewing.",{"type":25,"tag":200,"props":469,"children":470},{},[],{"type":25,"tag":209,"props":472,"children":474},{"alt":465,"src":473,"loading":213,"decoding":214},"https://assets.emqx.com/images/d4c9024c9534af0024ff1a59763ac416.png?x-image-process=image/resize,w_1520/format,webp",[],{"type":25,"tag":136,"props":476,"children":477},{},[478,483],{"type":25,"tag":194,"props":479,"children":480},{},[481],{"type":31,"value":482},"Verify Message Processing",{"type":31,"value":484},": At the top of each message, there’s a tag indicating whether the message underwent Schema. Ensure it means “Used with xx Schema”. If errors arise or the message format doesn’t match the expected proto format, the MQTTX client will provide relevant error prompts.",{"type":25,"tag":34,"props":486,"children":487},{},[488],{"type":31,"value":489},"After completing the above steps, you’ve successfully enabled the Protobuf Schema feature in the MQTTX client. This feature ensures that messages sent or received via MQTT are correctly serialized or deserialized according to the Protobuf format. To turn off this feature, click the “Stop Script” button at the top.",{"type":25,"tag":26,"props":491,"children":493},{"id":492},"use-protobuf-messages-with-mqttx-cli",[494],{"type":31,"value":495},"Use Protobuf Messages with MQTTX CLI",{"type":25,"tag":34,"props":497,"children":498},{},[499],{"type":31,"value":500},"The MQTTX CLI version offers comprehensive support. It utilizes Protobuf for message encoding and decoding within the MQTTX graphical desktop client, providing a more direct and efficient way for those familiar with console operations to operate.",{"type":25,"tag":34,"props":502,"children":503},{},[504],{"type":25,"tag":194,"props":505,"children":506},{},[507],{"type":31,"value":508},"Introduction to CLI Parameters for Protobuf",{"type":25,"tag":34,"props":510,"children":511},{},[512],{"type":31,"value":513},"When using the MQTTX CLI client to handle messages in the Protobuf format, you need to be aware of the following essential parameters:",{"type":31,"value":515},"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n",{"type":25,"tag":517,"props":518,"children":519},"table",{},[520,539],{"type":25,"tag":521,"props":522,"children":523},"thead",{},[524],{"type":25,"tag":525,"props":526,"children":527},"tr",{},[528,534],{"type":25,"tag":529,"props":530,"children":531},"th",{},[532],{"type":31,"value":533},"Parameter",{"type":25,"tag":529,"props":535,"children":536},{},[537],{"type":31,"value":538},"Description",{"type":25,"tag":540,"props":541,"children":542},"tbody",{},[543,557],{"type":25,"tag":525,"props":544,"children":545},{},[546,552],{"type":25,"tag":547,"props":548,"children":549},"td",{},[550],{"type":31,"value":551},"Pp",{"type":25,"tag":547,"props":553,"children":554},{},[555],{"type":31,"value":556},"Specifies the path to the .proto file for the Protobuf message format.",{"type":25,"tag":525,"props":558,"children":559},{},[560,565],{"type":25,"tag":547,"props":561,"children":562},{},[563],{"type":31,"value":564},"Pmn",{"type":25,"tag":547,"props":566,"children":567},{},[568],{"type":31,"value":569},"Defines the proto name of the Protobuf message. This name must match the definition in your .proto file.",{"type":25,"tag":187,"props":571,"children":572},{},[573,612,645,667],{"type":25,"tag":136,"props":574,"children":575},{},[576,581,583,589,591,594,596,601,603],{"type":25,"tag":194,"props":577,"children":578},{},[579],{"type":31,"value":580},"Prepare the",{"type":31,"value":582}," ",{"type":25,"tag":147,"props":584,"children":586},{"className":585},[],[587],{"type":31,"value":588},".proto",{"type":31,"value":590}," file.",{"type":25,"tag":200,"props":592,"children":593},{},[],{"type":31,"value":595},"First, ensure a well-defined ",{"type":25,"tag":147,"props":597,"children":599},{"className":598},[],[600],{"type":31,"value":588},{"type":31,"value":602}," file describing the Protobuf message format you wish to transmit.",{"type":25,"tag":142,"props":604,"children":607},{"code":605,"language":251,"meta":18,"className":606},"syntax = \"proto3\";\n\npackage IoT;\n\nmessage SensorData {\n string deviceId = 1;\n string sensorType = 2;\n double value = 3;\n int64 timestamp = 4;\n}\n",[253],[608],{"type":25,"tag":147,"props":609,"children":610},{"__ignoreMap":18},[611],{"type":31,"value":605},{"type":25,"tag":136,"props":613,"children":614},{},[615,620,623,625,632,634],{"type":25,"tag":194,"props":616,"children":617},{},[618],{"type":31,"value":619},"Subscribe to Messages Using Commands",{"type":25,"tag":200,"props":621,"children":622},{},[],{"type":31,"value":624},"To receive messages in the Protobuf format, you can subscribe to a specific ",{"type":25,"tag":40,"props":626,"children":629},{"href":627,"rel":628,"target":45},"https://www.emqx.com/en/blog/advanced-features-of-mqtt-topics",[44,44],[630],{"type":31,"value":631},"MQTT topic",{"type":31,"value":633},":",{"type":25,"tag":142,"props":635,"children":640},{"code":636,"language":637,"meta":18,"className":638},"mqttx sub -t 'testtopic/protobuf' -h 127.0.0.1 -Pp ./SensorData.proto -Pmn IoT.SensorData\n","shell",[639],"language-shell",[641],{"type":25,"tag":147,"props":642,"children":643},{"__ignoreMap":18},[644],{"type":31,"value":636},{"type":25,"tag":136,"props":646,"children":647},{},[648,653,656,658],{"type":25,"tag":194,"props":649,"children":650},{},[651],{"type":31,"value":652},"Publish Messages Using Commands",{"type":25,"tag":200,"props":654,"children":655},{},[],{"type":31,"value":657},"Based on the parameters introduced earlier, we can now publish a message in the Protobuf format:",{"type":25,"tag":142,"props":659,"children":662},{"code":660,"language":637,"meta":18,"className":661},"mqttx pub -t 'testtopic/protobuf' -Pp ./SensorData.proto -Pmn IoT.SensorData -h 127.0.0.1 -m '{\"deviceId\":\"123456\", \"sensorType\": \"Temperature\", \"value\": 22.5, \"timestamp\": 1675873900}'\n",[639],[663],{"type":25,"tag":147,"props":664,"children":665},{"__ignoreMap":18},[666],{"type":31,"value":660},{"type":25,"tag":136,"props":668,"children":669},{},[670,675,678,680,685,687,692,694,697,701,704,706,712,714,720],{"type":25,"tag":194,"props":671,"children":672},{},[673],{"type":31,"value":674},"View the Received Protobuf Messages",{"type":25,"tag":200,"props":676,"children":677},{},[],{"type":31,"value":679},"After a successful subscription, you will observe the Protobuf-formatted messages received in the command line from the ",{"type":25,"tag":147,"props":681,"children":683},{"className":682},[],[684],{"type":31,"value":455},{"type":31,"value":686}," topic. This message will be decoded according to the definition in your ",{"type":25,"tag":147,"props":688,"children":690},{"className":689},[],[691],{"type":31,"value":588},{"type":31,"value":693}," file and displayed in the command line.",{"type":25,"tag":200,"props":695,"children":696},{},[],{"type":25,"tag":209,"props":698,"children":700},{"alt":674,"src":699,"loading":213,"decoding":214},"https://assets.emqx.com/images/704c6168020d0faf05ae386ebecdfd01.png?x-image-process=image/resize,w_1520/format,webp",[],{"type":25,"tag":200,"props":702,"children":703},{},[],{"type":31,"value":705},"If you wish to view the message in JSON format, you can use the ",{"type":25,"tag":147,"props":707,"children":709},{"className":708},[],[710],{"type":31,"value":711},"--format",{"type":31,"value":713}," parameter and set it to ",{"type":25,"tag":147,"props":715,"children":717},{"className":716},[],[718],{"type":31,"value":719},"JSON",{"type":31,"value":721},". This will convert the Protobuf message into a more readable JSON format.",{"type":25,"tag":26,"props":723,"children":725},{"id":724},"validate-protobuf-messages-using-emqx",[726],{"type":31,"value":727},"Validate Protobuf Messages Using EMQX",{"type":25,"tag":34,"props":729,"children":730},{},[731],{"type":31,"value":732},"Lastly, to ensure the correctness of your messages, it’s recommended to use the encoding and decoding functionality of EMQX 5.5.1 Enterprise Edition for validation. Through decoding and encoding, the correctness of the messages is verified.",{"type":25,"tag":93,"props":734,"children":736},{"id":735},"decoding",[737],{"type":31,"value":738},"Decoding",{"type":25,"tag":34,"props":740,"children":741},{},[742],{"type":31,"value":743},"Devices publish messages encoded with Protobuf to the MQTT Broker. The EMQX rule engine captures and decodes this message based on the defined Protobuf Schema and then republishes it to a specified topic.",{"type":25,"tag":187,"props":745,"children":746},{},[747,827,914],{"type":25,"tag":136,"props":748,"children":749},{},[750,755,756],{"type":25,"tag":194,"props":751,"children":752},{},[753],{"type":31,"value":754},"Create Protobuf Schema",{"type":31,"value":633},{"type":25,"tag":132,"props":757,"children":758},{},[759,772,815],{"type":25,"tag":136,"props":760,"children":761},{},[762,764,770],{"type":31,"value":763},"In the EMQX Dashboard left navigation pane, choose ",{"type":25,"tag":147,"props":765,"children":767},{"className":766},[],[768],{"type":31,"value":769},"Integration -> Schema",{"type":31,"value":771},".",{"type":25,"tag":136,"props":773,"children":774},{},[775,777],{"type":31,"value":776},"Use the following parameters to create a Protobuf Schema:",{"type":25,"tag":132,"props":778,"children":779},{},[780,791,801],{"type":25,"tag":136,"props":781,"children":782},{},[783,785],{"type":31,"value":784},"Name: ",{"type":25,"tag":147,"props":786,"children":788},{"className":787},[],[789],{"type":31,"value":790},"protobuf_sensor",{"type":25,"tag":136,"props":792,"children":793},{},[794,796],{"type":31,"value":795},"Type: ",{"type":25,"tag":147,"props":797,"children":799},{"className":798},[],[800],{"type":31,"value":251},{"type":25,"tag":136,"props":802,"children":803},{},[804,806],{"type":31,"value":805},"Schema:",{"type":25,"tag":142,"props":807,"children":810},{"code":808,"language":251,"meta":18,"className":809},"syntax = \"proto3\";\npackage IoT;\nmessage SensorData {\n   string deviceId = 1;\n   string sensorType = 2;\n   double value = 3;\n   int64 timestamp = 4;\n}\n",[253],[811],{"type":25,"tag":147,"props":812,"children":813},{"__ignoreMap":18},[814],{"type":31,"value":808},{"type":25,"tag":136,"props":816,"children":817},{},[818,820,826],{"type":31,"value":819},"Click ",{"type":25,"tag":147,"props":821,"children":823},{"className":822},[],[824],{"type":31,"value":825},"Create",{"type":31,"value":771},{"type":25,"tag":136,"props":828,"children":829},{},[830,835,836],{"type":25,"tag":194,"props":831,"children":832},{},[833],{"type":31,"value":834},"Set Up Decoding Rule",{"type":31,"value":633},{"type":25,"tag":132,"props":837,"children":838},{},[839,852,868,881,893],{"type":25,"tag":136,"props":840,"children":841},{},[842,844,850],{"type":31,"value":843},"Choose ",{"type":25,"tag":147,"props":845,"children":847},{"className":846},[],[848],{"type":31,"value":849},"Integration -> Rules",{"type":31,"value":851}," in the left navigation bar.",{"type":25,"tag":136,"props":853,"children":854},{},[855,857],{"type":31,"value":856},"Enter the following in the SQL editor:",{"type":25,"tag":142,"props":858,"children":863},{"code":859,"language":860,"meta":18,"className":861},"SELECT\n  schema_decode('protobuf_sensor', payload, 'SensorData') as sensor_data, payload\nFROM\n  \"t/#\"\nWHERE\n  sensor_data.deviceId = 'Device123'\n","sql",[862],"language-sql",[864],{"type":25,"tag":147,"props":865,"children":866},{"__ignoreMap":18},[867],{"type":31,"value":859},{"type":25,"tag":136,"props":869,"children":870},{},[871,873,879],{"type":31,"value":872},"Select ",{"type":25,"tag":147,"props":874,"children":876},{"className":875},[],[877],{"type":31,"value":878},"Republish",{"type":31,"value":880}," from the action dropdown menu.",{"type":25,"tag":136,"props":882,"children":883},{},[884,886,892],{"type":31,"value":885},"Set the target topic as ",{"type":25,"tag":147,"props":887,"children":889},{"className":888},[],[890],{"type":31,"value":891},"sensor_data/${sensor_data.deviceId}",{"type":31,"value":771},{"type":25,"tag":136,"props":894,"children":895},{},[896,898,904,906,909],{"type":31,"value":897},"Use ",{"type":25,"tag":147,"props":899,"children":901},{"className":900},[],[902],{"type":31,"value":903},"${sensor_data}",{"type":31,"value":905}," as the Payload message template.",{"type":25,"tag":200,"props":907,"children":908},{},[],{"type":25,"tag":209,"props":910,"children":913},{"alt":911,"src":912,"loading":213,"decoding":214},"Rules Engine","https://assets.emqx.com/images/ccea83c52a1dfa37b08c1dc627bcbe4a.png?x-image-process=image/resize,w_1520/format,webp",[],{"type":25,"tag":136,"props":915,"children":916},{},[917,922,923],{"type":25,"tag":194,"props":918,"children":919},{},[920],{"type":31,"value":921},"Use MQTTX",{"type":31,"value":633},{"type":25,"tag":132,"props":924,"children":925},{},[926,931,944,964],{"type":25,"tag":136,"props":927,"children":928},{},[929],{"type":31,"value":930},"Use MQTTX as the MQTT client to connect to EMQX.",{"type":25,"tag":136,"props":932,"children":933},{},[934,936,942],{"type":31,"value":935},"Subscribe to the topic ",{"type":25,"tag":147,"props":937,"children":939},{"className":938},[],[940],{"type":31,"value":941},"sensor_data/#",{"type":31,"value":943}," in the subscription area",{"type":25,"tag":136,"props":945,"children":946},{},[947,949,954,956,962],{"type":31,"value":948},"Set the Schema script on the publishing side and send a Protobuf encoded ",{"type":25,"tag":147,"props":950,"children":952},{"className":951},[],[953],{"type":31,"value":269},{"type":31,"value":955}," message to the ",{"type":25,"tag":147,"props":957,"children":959},{"className":958},[],[960],{"type":31,"value":961},"t/1",{"type":31,"value":963}," topic.",{"type":25,"tag":136,"props":965,"children":966},{},[967,969,975,976,979],{"type":31,"value":968},"In the received MQTTX, you should see the decoded message with the topic ",{"type":25,"tag":147,"props":970,"children":972},{"className":971},[],[973],{"type":31,"value":974},"sensor_data/Device123",{"type":31,"value":771},{"type":25,"tag":200,"props":977,"children":978},{},[],{"type":25,"tag":209,"props":980,"children":982},{"alt":60,"src":981,"loading":213,"decoding":214},"https://assets.emqx.com/images/37b9aa3c001ce26b1f69dca42480c064.png?x-image-process=image/resize,w_1520/format,webp",[],{"type":25,"tag":93,"props":984,"children":986},{"id":985},"encoding",[987],{"type":31,"value":988},"Encoding",{"type":25,"tag":34,"props":990,"children":991},{},[992],{"type":31,"value":993},"Devices publish messages in JSON format to the MQTT Broker. The EMQX rule engine encodes it into Protobuf format based on the defined Protobuf Schema and republishes it to another topic.",{"type":25,"tag":187,"props":995,"children":996},{},[997,1006,1082],{"type":25,"tag":136,"props":998,"children":999},{},[1000,1005],{"type":25,"tag":194,"props":1001,"children":1002},{},[1003],{"type":31,"value":1004},"Use the previously created Schema",{"type":31,"value":771},{"type":25,"tag":136,"props":1007,"children":1008},{},[1009,1014,1015],{"type":25,"tag":194,"props":1010,"children":1011},{},[1012],{"type":31,"value":1013},"Set up Encoding Rule",{"type":31,"value":633},{"type":25,"tag":132,"props":1016,"children":1017},{},[1018,1028,1041,1052,1063],{"type":25,"tag":136,"props":1019,"children":1020},{},[1021,1022,1027],{"type":31,"value":843},{"type":25,"tag":147,"props":1023,"children":1025},{"className":1024},[],[1026],{"type":31,"value":849},{"type":31,"value":851},{"type":25,"tag":136,"props":1029,"children":1030},{},[1031,1032],{"type":31,"value":856},{"type":25,"tag":142,"props":1033,"children":1036},{"code":1034,"language":860,"meta":18,"className":1035},"SELECT\n  schema_encode('protobuf_sensor', json_decode(payload), 'SensorData') as protobuf_sensor\nFROM\n  \"t/#\"\n",[862],[1037],{"type":25,"tag":147,"props":1038,"children":1039},{"__ignoreMap":18},[1040],{"type":31,"value":1034},{"type":25,"tag":136,"props":1042,"children":1043},{},[1044,1045,1051],{"type":31,"value":843},{"type":25,"tag":147,"props":1046,"children":1048},{"className":1047},[],[1049],{"type":31,"value":1050},"Republish Message",{"type":31,"value":880},{"type":25,"tag":136,"props":1053,"children":1054},{},[1055,1056,1062],{"type":31,"value":885},{"type":25,"tag":147,"props":1057,"children":1059},{"className":1058},[],[1060],{"type":31,"value":1061},"protobuf_out",{"type":31,"value":771},{"type":25,"tag":136,"props":1064,"children":1065},{},[1066,1067,1073,1074,1077],{"type":31,"value":897},{"type":25,"tag":147,"props":1068,"children":1070},{"className":1069},[],[1071],{"type":31,"value":1072},"${protobuf_sensor}",{"type":31,"value":905},{"type":25,"tag":200,"props":1075,"children":1076},{},[],{"type":25,"tag":209,"props":1078,"children":1081},{"alt":1079,"src":1080,"loading":213,"decoding":214},"Create rule","https://assets.emqx.com/images/cee9344ef1f07996e0f2aae15a48ad90.png?x-image-process=image/resize,w_1520/format,webp",[],{"type":25,"tag":136,"props":1083,"children":1084},{},[1085,1090,1091],{"type":25,"tag":194,"props":1086,"children":1087},{},[1088],{"type":31,"value":1089},"Using MQTTX to Receive Protobuf Messages",{"type":31,"value":633},{"type":25,"tag":132,"props":1092,"children":1093},{},[1094,1099,1120,1125,1136],{"type":25,"tag":136,"props":1095,"children":1096},{},[1097],{"type":31,"value":1098},"Connect to EMQX using MQTTX.",{"type":25,"tag":136,"props":1100,"children":1101},{},[1102,1104,1109,1111],{"type":31,"value":1103},"In the publishing area, input the topic ",{"type":25,"tag":147,"props":1105,"children":1107},{"className":1106},[],[1108],{"type":31,"value":961},{"type":31,"value":1110}," and a specific JSON Payload, e.g.",{"type":25,"tag":142,"props":1112,"children":1115},{"code":1113,"language":312,"meta":18,"className":1114},"{\n  \"deviceId\": \"Device123\",\n  \"sensorType\": \"Temperature\",\n  \"value\": 24.5,\n  \"timestamp\": 1678339200000\n}\n",[314],[1116],{"type":25,"tag":147,"props":1117,"children":1118},{"__ignoreMap":18},[1119],{"type":31,"value":1113},{"type":25,"tag":136,"props":1121,"children":1122},{},[1123],{"type":31,"value":1124},"Click Publish.",{"type":25,"tag":136,"props":1126,"children":1127},{},[1128,1130,1135],{"type":31,"value":1129},"Set the Schema script on the receiving end and subscribe to the ",{"type":25,"tag":147,"props":1131,"children":1133},{"className":1132},[],[1134],{"type":31,"value":1061},{"type":31,"value":963},{"type":25,"tag":136,"props":1137,"children":1138},{},[1139,1141,1144],{"type":31,"value":1140},"In MQTTX, you should see the encoded Protobuf message.",{"type":25,"tag":200,"props":1142,"children":1143},{},[],{"type":25,"tag":209,"props":1145,"children":1147},{"alt":60,"src":1146,"loading":213,"decoding":214},"https://assets.emqx.com/images/775345cea4d97f4b80d7a8b2253d2832.png?x-image-process=image/resize,w_1520/format,webp",[],{"type":25,"tag":26,"props":1149,"children":1151},{"id":1150},"conclusion",[1152],{"type":31,"value":1153},"Conclusion",{"type":25,"tag":34,"props":1155,"children":1156},{},[1157],{"type":31,"value":1158},"With the rapid development of the IoT industry, efficient and compact data transmission has become increasingly important. Protobuf, as an efficient data serialization format, can be used in conjunction with MQTT to ensure fast, accurate, and secure data exchange.",{"type":25,"tag":34,"props":1160,"children":1161},{},[1162],{"type":31,"value":1163},"Especially in the industrial IoT domain, SparkplugB, a popular data transmission standard, adopts a message format centered around Protobuf. As such, MQTTX can effortlessly support SparkplugB message interactions through Protobuf. To further enhance performance in industrial applications, MQTTX plans to optimize support for SparkplugB in the future.",{"title":18,"searchDepth":1165,"depth":1165,"links":1166},2,[1167,1168,1173,1174,1175,1179],{"id":28,"depth":1165,"text":32},{"id":74,"depth":1165,"text":77,"children":1169},[1170,1172],{"id":95,"depth":1171,"text":98},3,{"id":158,"depth":1171,"text":161},{"id":177,"depth":1165,"text":180},{"id":492,"depth":1165,"text":495},{"id":724,"depth":1165,"text":727,"children":1176},[1177,1178],{"id":735,"depth":1171,"text":738},{"id":985,"depth":1171,"text":988},{"id":1150,"depth":1165,"text":1153},"markdown","content:blog:en:how-to-publish-and-receive-protobuf-messages-within-mqtt.md","content","blog/en/how-to-publish-and-receive-protobuf-messages-within-mqtt.md","md",{"loc":1186,"lastmod":7},"/blog/how-to-publish-and-receive-protobuf-messages-within-mqtt",{"items":1188,"meta":1207},[1189,1192,1195,1198,1201,1204],{"title":1190,"titleUrl":1191},"MQTT QoS 0、1、2 のクイックスタート","introduction-to-mqtt-qos",{"title":1193,"titleUrl":1194},"MQTT TopicとWildcardの初心者向けガイド","advanced-features-of-mqtt-topics",{"title":1196,"titleUrl":1197},"MQTT Broker：原理、人気のオプション、クイックスタート","the-ultimate-guide-to-mqtt-broker-comparison",{"title":1199,"titleUrl":1200},"ESP32におけるMQTT活用入門ガイド","esp32-connects-to-the-free-public-mqtt-broker",{"title":1202,"titleUrl":1203},"CAN Bus：機能、利点と課題、高速ローカル処理チュートリアル","can-bus-how-it-works-pros-and-cons",{"title":1205,"titleUrl":1206},"Python言語の「Paho」MQTTクライアントの使用法","how-to-use-mqtt-in-python",{"count":1208,"limit":1208,"page":1209},6,1,[1211,1219,1226,1232,1239,1246,1253,1259,1266,1273,1280,1287,1294,1295,1302,1309,1316,1323,1329,1336,1343,1350,1357,1364,1371,1378,1384,1391,1397,1404,1410,1417,1424],{"slug":1212,"title":1213,"description":1214,"date":1215,"category":1216,"cover":1217,"version":1218},"mqttx-1-13-2-released","MQTTX 1.13.2 Released: MQTTX Agent and Dashboard","MQTTX 1.13.2 uses MQTTX Agent to automate MQTT tests, compare messages, and investigate failures, with independent Dashboard views for telemetry.","2026-10-26","release-notes","/images/blog/mqttx-1-13-2-released.webp","1.13.2",{"slug":1220,"title":1221,"description":1222,"date":1223,"category":1224,"cover":1225,"version":-1},"introducing-mqttx-ai-agent-skill","Introducing the MQTTX AI Agent Skill","MQTTX CLI now ships with an Agent Skill that teaches AI coding agents to run MQTT checks, benchmarks, and simulations correctly.","2026-09-20","product","/images/blog/introducing-mqttx-ai-agent-skill.webp",{"slug":1227,"title":1228,"description":1229,"date":1223,"category":1216,"cover":1230,"version":1231},"mqttx-1-13-1-released","MQTTX 1.13.1 Released: AI Agent Skill & MQTT 5.0 Subscription Properties","MQTTX 1.13.1 adds a CLI Agent Skill, MQTT 5.0 subscription user properties, and improvements to data export, rendering security, and everyday debugging.","/images/blog/mqttx-1-13-1-released.webp","1.13.1",{"slug":1233,"title":1234,"description":1235,"date":1236,"category":1216,"cover":1237,"version":1238},"mqttx-1-13-0-released","MQTTX 1.13.0 Released: Payload Inspector & UI Improvements","This version introduces the new Payload Inspector feature, including Diff View and JSON Tree View, making message debugging more intuitive and efficient.","2026-02-03","https://assets.emqx.com/images/0e14974014915e21f0789dcb39bfe0c1.png","1.13.0",{"slug":1240,"title":1241,"description":1242,"date":1243,"category":1216,"cover":1244,"version":1245},"mqttx-1-12-1-release-notes","MQTTX 1.12.1 Released: SCRAM Authentication & Enhanced Security","MQTTX 1.12.1 brings SCRAM authentication, XSS vulnerability fixes, 2025 AI model updates, and major stability enhancements for secure, reliable performance.","2025-10-14","https://assets.emqx.com/images/949f66c444b9b00f5f5e0a865609987d.png","1.12.1",{"slug":1247,"title":1248,"description":1249,"date":1250,"category":1216,"cover":1251,"version":1252},"mqttx-1-12-0-release-notes","MQTTX 1.12.0 Released: Copilot 2.0 & Native MCP Integration","MQTTX 1.12.0 lands with Copilot 2.0 (Gemini 2.5 Pro, Claude-4, GPT-4.1, o3/o4-mini, Azure OpenAI) and native MCP integration for instant AI workflows.","2025-07-03","https://assets.emqx.com/images/121f632a5da928c70d8e2868e3a09b1c.jpg","1.12.0",{"slug":1254,"title":1255,"description":1256,"date":1257,"category":1224,"cover":1258,"version":-1},"enhancing-mqtt-toolbox-with-ai-capabilities","MQTTX + MCP: Enhancing MQTT Toolbox with AI Capabilities","MQTTX, the most popular MQTT client toolbox, has enhanced its capabilities in 1.12.0 beta by integrating the Model Context Protocol (MCP) into its Copilot AI feature.","2025-04-09","https://assets.emqx.com/images/863b289a14550fa39793fb8414837c04.jpg",{"slug":1260,"title":1261,"description":1262,"date":1263,"category":1216,"cover":1264,"version":1265},"mqttx-1-11-1-release-notes","MQTTX 1.11.1 Released: Enhanced Visualization","This release enhances MQTTX's visualization capabilities with improved Topic Tree features and real-time traffic monitoring.","2024-12-19","https://assets.emqx.com/images/878e3b58243c4f4e50034ad5604a8951.jpg","1.11.1",{"slug":1267,"title":1268,"description":1269,"date":1270,"category":1216,"cover":1271,"version":1272},"mqttx-1-11-0-release-notes","MQTTX 1.11.0 Released: Topic Tree and Avro Schema","This release introduces Topic Tree visualization, a powerful new way to organize and monitor MQTT topics hierarchically.","2024-10-29","https://assets.emqx.com/images/dba4e395e4043265d635384c6670c206.jpg","1.11.0",{"slug":1274,"title":1275,"description":1276,"date":1277,"category":1216,"cover":1278,"version":1279},"mqttx-1-10-1-release-notes","MQTTX 1.10.1 Released: One-Click CLI Installation via Desktop","This release focuses on enhancing the user experience with several key updates. The highlight is the one-click installation for MQTTX CLI via the Desktop application.","2024-07-24","https://assets.emqx.com/images/7a7961ab5f29584b8b157b967e6fe0b2.jpg","1.10.1",{"slug":1281,"title":1282,"description":1283,"date":1284,"category":1216,"cover":1285,"version":1286},"mqttx-1-10-0-release-notes","MQTTX 1.10.0 Released: Advanced File Management and Configuration in CLI","This release significantly enhances file management and configuration capabilities, particularly in the CLI version.","2024-06-17","https://assets.emqx.com/images/fd939c89609cdc8af6cdc93346ce58da.jpg","1.10.0",{"slug":1288,"title":1289,"description":1290,"date":1291,"category":1216,"cover":1292,"version":1293},"mqttx-1-9-10-release-notes","MQTTX 1.9.10 Released: Enhanced Diagnostic Insights","This release features crucial Faker.js updates, better diagnostic insights for disconnections and subscription issues, and new CLI and UI enhancements. It aims to simplify user workflows and enhance troubleshooting.","2024-04-15","https://assets.emqx.com/images/c6a16836537c82bc580e738ca0534d5c.jpg","1.9.10",{"slug":4,"title":5,"description":6,"date":7,"category":8,"cover":9,"version":-1},{"slug":1296,"title":1297,"description":1298,"date":1299,"category":1216,"cover":1300,"version":1301},"mqttx-1-9-9-release-notes","MQTTX 1.9.9 Released: Debug Logging and UI Flexibility","MQTTX 1.9.9 is now available with critical updates: improved connection events, CBOR data format support, customizable log levels for debugging, and enhanced UI flexibility.","2024-03-04","https://assets.emqx.com/images/b1f147c49bded5c95a52d2a4d212fb59.png","1.9.9",{"slug":1303,"title":1304,"description":1305,"date":1306,"category":1216,"cover":1307,"version":1308},"mqttx-1-9-8-release-notes","MQTTX 1.9.8 Released: CLI Debug Mode and Copilot Enhancements","MQTTX 1.9.8 is now available, introducing a new CLI Debug Mode. This feature greatly enhances developers' troubleshooting and analysis capabilities.","2024-01-15","https://assets.emqx.com/images/7598cdfaaad358b469b840dd93d95893.png","1.9.8",{"slug":1310,"title":1311,"description":1312,"date":1313,"category":1216,"cover":1314,"version":1315},"mqttx-1-9-7-release-notes","MQTTX 1.9.7: Introducing Copilot - Your AI-Powered MQTT Assistant","A significant highlight of this release is the introduction of MQTTX Copilot, our innovative MQTT AI assistant, specially designed to offer crucial convenience to users.","2023-12-18","https://assets.emqx.com/images/8f8d0aa2b0e70f2c28b71f846e21f68b.png","1.9.7",{"slug":1317,"title":1318,"description":1319,"date":1320,"category":1216,"cover":1321,"version":1322},"mqttx-v-1-9-6-release-notes","MQTTX 1.9.6 Released: ALPN Protocol Support, Optimized Publish Options Interface","This update prioritizes the improvement of connection protocols and user interface for a better experience.","2023-09-30","https://assets.emqx.com/images/2f2554241e1fbe1e6d11a066e5e61a20.png","1.9.6",{"slug":1324,"title":1325,"description":1326,"date":1327,"category":8,"cover":1328,"version":-1},"demonstrate-mqtt-5-0-features-using-mqttx-cli","Explore New Features of MQTT 5.0: Usage Examples Based on MQTTX CLI","This blog will introduce each new feature introduced in 5.0 in turn, and use the MQTTX CLI tool to demonstrate how we can use these features in EMQX.","2023-09-07","https://assets.emqx.com/images/c566cf1994ec1e29c6fea3b33270f535.png",{"slug":1330,"title":1331,"description":1332,"date":1333,"category":1216,"cover":1334,"version":1335},"mqttx-1-9-5-released-json-message-highlighting-and-more","MQTTX 1.9.5 Released: JSON Message Highlighting and More!","In this version, we have mainly enhanced the error message prompts for JSON syntax in the desktop client and added support for JSON highlighting in messages.","2023-08-17","https://assets.emqx.com/images/beefc011aa3bda44261a33f7adaef669.png","1.9.5",{"slug":1337,"title":1338,"description":1339,"date":1340,"category":1216,"cover":1341,"version":1342},"mqttx-v-1-9-4-release-notes","MQTTX 1.9.4: Empowering High-Frequency MQTT Testing with Protobuf Integration","This update brings significant improvements to user experience, including more efficient support for Protobuf message transmission and optimized automatic update functionality.","2023-07-19","https://assets.emqx.com/images/6d6aab33de33c914d87f7fd6a4d86153.png","1.9.4",{"slug":1344,"title":1345,"description":1346,"date":1347,"category":1216,"cover":1348,"version":1349},"mqttx-1-9-3-introduces-powerful-iot-scenario-data-simulation-feature","Boosting Development Efficiency: MQTTX 1.9.3 Introduces Powerful IoT Scenario Data Simulation","MQTTX 1.9.3 introduced a valuable enhancement to its command-line client: It empowers developers to simulate IoT scenario data, catering to their specific testing needs.","2023-05-29","https://assets.emqx.com/images/657ba5a04f29a7b318206a642223db8f.png","1.9.3",{"slug":1351,"title":1352,"description":1353,"date":1354,"category":1216,"cover":1355,"version":1356},"mqttx-v-1-9-2-release-notes","MQTTX 1.9.2 Released: The Best MQTT Client Toolbox Is Even Better","v1.9.2 supports the output mode of the command-line tool, allowing users to customize data pipelines according to their needs and thus more conveniently and efficiently process output data.","2023-04-27","https://assets.emqx.com/images/44cad865821d28706395fd74e8bd766a.png","1.9.2",{"slug":1358,"title":1359,"description":1360,"date":1361,"category":1216,"cover":1362,"version":1363},"mqttx-v-1-9-1-release-notes","MQTTX 1.9.1 is Released: Resource Utilization Reduced by 80%, and Stability Greatly Improved","MQTT X 1.9.1 has significantly reduced CPU and memory usage by 80% compared to the previous version, resulting in greatly optimized overall performance and reduced risk of system crashes.","2023-02-16","https://assets.emqx.com/images/754c43fbfce927d7b9f41f98e9c47338.png","1.9.1",{"slug":1365,"title":1366,"description":1367,"date":1368,"category":1216,"cover":1369,"version":1370},"mqttx-v-1-9-0-release-notes","MQTTX 1.9.0 released with an Out-of-the-box bench command, making your MQTT test even easier","Recently, MQTT X 1.9.0 has been released. For the command-line client, the bench command has been added to help users easily complete MQTT service performance testing.","2022-11-15","https://assets.emqx.com/images/8381cbe50e0aa19dcf36020b11de6fba.png","1.9.0",{"slug":1372,"title":1373,"description":1374,"date":1375,"category":1216,"cover":1376,"version":1377},"mqttx-v-1-8-3-release-notes","MQTTX v1.8.3 Release Notes","Recently, MQTT X released the latest version 1.8.3, The main optimization of function usage and the various problems encountered in the process of use are fixed.","2022-11-01","https://assets.emqx.com/images/ad183ef26fc1dfaf6c33b46256c04e16.png","1.8.3",{"slug":1379,"title":1380,"description":1381,"date":1382,"category":1224,"cover":1383,"version":-1},"powerful-and-easy-to-use-mqtt-5-command-line-tool","MQTTX CLI: A Powerful and Easy-to-Use MQTT CLI","In order to provide more choices and convenience for users to implement MQTT connection tests, MQTT X v1.8.0 adds the command line as a form of interaction - the MQTT X CLI.","2022-08-11","https://assets.emqx.com/images/5cd78ca578543888ebfc50ced158dcd0.png",{"slug":1385,"title":1386,"description":1387,"date":1388,"category":1216,"cover":1389,"version":1390},"mqttx-v-1-7-1-release-notes","MQTTX v1.7.1 Release Note","MQTT X v1.7.1 release note: Support MQTT 5.0 subscription Identifier, expose more MQTT 5.0 properties on display.","2022-01-28","https://assets.emqx.com/images/0fd941ba646695f51f019da65a693087.png","1.7.1",{"slug":1392,"title":1393,"description":1394,"date":1388,"category":1216,"cover":1395,"version":1396},"mqttx-v-1-7-2-release-notes","MQTTX v1.7.2 Release Note","MQTT X v1.7.2 release note: Shared subscriptions support topic color markers, add more ARM builds.","https://assets.emqx.com/images/8cedad1520b432cc23fe3cf73df87586.png","1.7.2",{"slug":1398,"title":1399,"description":1400,"date":1401,"category":1216,"cover":1402,"version":1403},"mqttx-v-1-7-0-release-notes","MQTTX v1.7.0 released: the desktop client that supports MQTT 5.0 most","Recently, MQTT X v1.7.0 was officially released, from this version, MQTT X will further support many new features of MQTT 5.0.","2022-01-04","https://assets.emqx.com/images/b670f636cd22144ede7d122af5127319.png","1.7.0",{"slug":1405,"title":1406,"description":1407,"date":1408,"category":8,"cover":1409,"version":-1},"mqttx-script-function-tutorial","MQTTX Script Function Tutorial","MQTT X has added a script function since v1.4.2. This article will introduce the use of the script function with two simple instances.","2021-03-01","https://assets.emqx.com/images/188cd490ad41a00c2eb797256cd3145a.png",{"slug":1411,"title":1412,"description":1413,"date":1414,"category":1216,"cover":1415,"version":1416},"mqttx-v-1-4-2-release-notes","MQTTX v1.4.2 released with script features","MQTT X v1.4.2 released with script features, automatically append a timestamp to Client ID and optimize some functions.","2021-01-27","https://assets.emqx.com/images/06011d34d8e9b805d2d03b3a546648ee.png","1.4.2",{"slug":1418,"title":1419,"description":1420,"date":1421,"category":1216,"cover":1422,"version":1423},"mqttx-v-1-3-1-release-notes","MQTTX v1.3.1 release notes - MQTT 5.0 client tool","MQTT 5.0 client tool - MQTT X v1.3.1, which adds an enable item of strictly validating certificate and supports for more attributes of MQTT 5.0.","2020-05-21","https://assets.emqx.com/images/240e432d5797596aa555d2fdf9640dd5.png","1.3.1",{"slug":1425,"title":1426,"description":1427,"date":1428,"category":1216,"cover":1429,"version":1430},"mqttx-v1-3-0-was-officially-released-an-elegant-cross-platform-mqtt5-desktop-test-client","MQTTX v1.3.0 was officially released - Cross-platform MQTT 5.0 desktop test client","MQTT X is a cross-platform MQTT 5.0 desktop test client provided by the world's leading open source IoT middleware provider EMQ , which supports macOS, Linux, Windows. The user interface of MQTT X simplifies the operation logic of the page with the pattern of chatting software. Users can quickly create multiple simultaneous-online MQTT clients to test the connection/publish/subscribe functions of MQTT/TCP, MQTT/TLS and other MQTT protocol features.","2020-03-19","https://assets.emqx.com/images/dbb7d0024d3462edf7ad617978679fbb.png","1.3.0",1793585631729]