<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: VuforiaStudio请求服务器数据 in Vuforia Studio</title>
    <link>https://www.ptcusercommunity.com/t5/Vuforia-Studio/VuforiaStudio%E8%AF%B7%E6%B1%82%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%95%B0%E6%8D%AE/m-p/999496#M12902</link>
    <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://www.ptcusercommunity.com/t5/user/viewprofilepage/user-id/561353"&gt;@FY_10283333&lt;/a&gt;&amp;nbsp;,&lt;/P&gt;
&lt;DIV&gt;To your points:&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt; Provide a piece of js code that meets the following conditions:&amp;nbsp;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt; Your Question 1. request server data - what kind of server /Thingworx server . And what kind of data ?&amp;nbsp;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt; Answer: Currently because there is CORS resticion you could contact only as server located on the same domain The code will differs depending on that , what kind of server object you need to access . PTC supports only server request where data is requested but access depend on that what is the server database /Things and properties what need to be requested and if there are specific requirements.&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt; 2. use inside Home.js in vuforia studio - &lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt;Answer any JS code could be used there so far It is supported on the mobile platforms&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt; 3. how the requested data is parsed and then bound to different text to be displayed on the 2D UI&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt; - you do not need to parse /that what&amp;nbsp; in terms of Javascript/&amp;nbsp; but to convert it&amp;nbsp; to string (JSON.stringify() when it is a json object) or .toString() methoded if you have an object which supports that method and then you could display it on widget wich support the text property&amp;nbsp;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt;&lt;SPAN&gt;example:&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;LI-CODE lang="markup"&gt;$scope.myText="any text there";
$scope.setWidgetProp("myLabel-1","text",$scope.myText);&lt;/LI-CODE&gt;&lt;/DIV&gt;</description>
    <pubDate>Thu, 20 Feb 2025 07:58:48 GMT</pubDate>
    <dc:creator>RolandRaytchev</dc:creator>
    <dc:date>2025-02-20T07:58:48Z</dc:date>
    <item>
      <title>VuforiaStudio请求服务器数据</title>
      <link>https://www.ptcusercommunity.com/t5/Vuforia-Studio/VuforiaStudio%E8%AF%B7%E6%B1%82%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%95%B0%E6%8D%AE/m-p/999468#M12899</link>
      <description>&lt;P&gt;&lt;SPAN&gt;提供一段js代码，满足以下条件：1、请求服务器数据 2、在vuforia studio的Home.js里面使用3.请求的数据如何解析后绑定不同的文本显示在2D&amp;nbsp; UI上&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Thu, 20 Feb 2025 04:27:57 GMT</pubDate>
      <guid>https://www.ptcusercommunity.com/t5/Vuforia-Studio/VuforiaStudio%E8%AF%B7%E6%B1%82%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%95%B0%E6%8D%AE/m-p/999468#M12899</guid>
      <dc:creator>FY_10283333</dc:creator>
      <dc:date>2025-02-20T04:27:57Z</dc:date>
    </item>
    <item>
      <title>Re: VuforiaStudio请求服务器数据</title>
      <link>https://www.ptcusercommunity.com/t5/Vuforia-Studio/VuforiaStudio%E8%AF%B7%E6%B1%82%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%95%B0%E6%8D%AE/m-p/999476#M12900</link>
      <description>&lt;P&gt;Hi &lt;SPAN style="background: var(--ck-color-mention-background); color: var(--ck-color-mention-text);"&gt;&lt;a href="https://www.ptcusercommunity.com/t5/user/viewprofilepage/user-id/561353"&gt;@FY_10283333&lt;/a&gt;&lt;/SPAN&gt;,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Thank you for your &lt;A href="https://community.ptc.com/t5/Vuforia-Studio/VuforiaStudio%E8%AF%B7%E6%B1%82%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%95%B0%E6%8D%AE/m-p/999468#M12899" target="_blank"&gt;question&lt;/A&gt; regarding the JavaScript code for Vuforia Studio. To better assist you, please add more context to your topic.&lt;BR /&gt;Possibly on the below points?&lt;BR /&gt;&amp;nbsp;&lt;/P&gt;
&lt;OL&gt;
 &lt;LI&gt;Could you specify the type of data you are requesting from the server and the API endpoint you are using?&lt;/LI&gt;
 &lt;LI&gt;Are there any specific requirements or constraints for using the code within the Home.js file in Vuforia Studio?&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;This information will help the community members understand your requirements more clearly and provide a more accurate and helpful response.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Regards,&lt;/P&gt;
&lt;P&gt;Vivek N&lt;BR /&gt;Community Moderation Team.&lt;/P&gt;</description>
      <pubDate>Thu, 20 Feb 2025 04:44:45 GMT</pubDate>
      <guid>https://www.ptcusercommunity.com/t5/Vuforia-Studio/VuforiaStudio%E8%AF%B7%E6%B1%82%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%95%B0%E6%8D%AE/m-p/999476#M12900</guid>
      <dc:creator>vnamboodheri</dc:creator>
      <dc:date>2025-02-20T04:44:45Z</dc:date>
    </item>
    <item>
      <title>Re: VuforiaStudio请求服务器数据</title>
      <link>https://www.ptcusercommunity.com/t5/Vuforia-Studio/VuforiaStudio%E8%AF%B7%E6%B1%82%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%95%B0%E6%8D%AE/m-p/999482#M12901</link>
      <description>&lt;P&gt;你好&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; 1.请求到的数据类型是Json字符串&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; 2.特定要求没有，就是注意一下请求的链接错误，超时等给出提示即可&lt;/P&gt;&lt;P&gt;Best Regards!&lt;/P&gt;</description>
      <pubDate>Thu, 20 Feb 2025 05:44:53 GMT</pubDate>
      <guid>https://www.ptcusercommunity.com/t5/Vuforia-Studio/VuforiaStudio%E8%AF%B7%E6%B1%82%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%95%B0%E6%8D%AE/m-p/999482#M12901</guid>
      <dc:creator>FY_10283333</dc:creator>
      <dc:date>2025-02-20T05:44:53Z</dc:date>
    </item>
    <item>
      <title>Re: VuforiaStudio请求服务器数据</title>
      <link>https://www.ptcusercommunity.com/t5/Vuforia-Studio/VuforiaStudio%E8%AF%B7%E6%B1%82%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%95%B0%E6%8D%AE/m-p/999496#M12902</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://www.ptcusercommunity.com/t5/user/viewprofilepage/user-id/561353"&gt;@FY_10283333&lt;/a&gt;&amp;nbsp;,&lt;/P&gt;
&lt;DIV&gt;To your points:&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt; Provide a piece of js code that meets the following conditions:&amp;nbsp;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt; Your Question 1. request server data - what kind of server /Thingworx server . And what kind of data ?&amp;nbsp;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt; Answer: Currently because there is CORS resticion you could contact only as server located on the same domain The code will differs depending on that , what kind of server object you need to access . PTC supports only server request where data is requested but access depend on that what is the server database /Things and properties what need to be requested and if there are specific requirements.&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt; 2. use inside Home.js in vuforia studio - &lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt;Answer any JS code could be used there so far It is supported on the mobile platforms&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt; 3. how the requested data is parsed and then bound to different text to be displayed on the 2D UI&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt; - you do not need to parse /that what&amp;nbsp; in terms of Javascript/&amp;nbsp; but to convert it&amp;nbsp; to string (JSON.stringify() when it is a json object) or .toString() methoded if you have an object which supports that method and then you could display it on widget wich support the text property&amp;nbsp;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt;&lt;SPAN&gt;example:&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;LI-CODE lang="markup"&gt;$scope.myText="any text there";
$scope.setWidgetProp("myLabel-1","text",$scope.myText);&lt;/LI-CODE&gt;&lt;/DIV&gt;</description>
      <pubDate>Thu, 20 Feb 2025 07:58:48 GMT</pubDate>
      <guid>https://www.ptcusercommunity.com/t5/Vuforia-Studio/VuforiaStudio%E8%AF%B7%E6%B1%82%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%95%B0%E6%8D%AE/m-p/999496#M12902</guid>
      <dc:creator>RolandRaytchev</dc:creator>
      <dc:date>2025-02-20T07:58:48Z</dc:date>
    </item>
    <item>
      <title>Re: VuforiaStudio请求服务器数据</title>
      <link>https://www.ptcusercommunity.com/t5/Vuforia-Studio/VuforiaStudio%E8%AF%B7%E6%B1%82%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%95%B0%E6%8D%AE/m-p/999498#M12903</link>
      <description>&lt;P&gt;你好&lt;/P&gt;&lt;P&gt;就像MQTT服务器，在同一个局域网内，但不经过Thingworx，直接在Home.js里面去写脚本来连接服务器获取消息，怎么写&lt;/P&gt;&lt;P&gt;谢谢&lt;/P&gt;</description>
      <pubDate>Thu, 20 Feb 2025 08:06:45 GMT</pubDate>
      <guid>https://www.ptcusercommunity.com/t5/Vuforia-Studio/VuforiaStudio%E8%AF%B7%E6%B1%82%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%95%B0%E6%8D%AE/m-p/999498#M12903</guid>
      <dc:creator>FY_10283333</dc:creator>
      <dc:date>2025-02-20T08:06:45Z</dc:date>
    </item>
    <item>
      <title>Re: VuforiaStudio请求服务器数据</title>
      <link>https://www.ptcusercommunity.com/t5/Vuforia-Studio/VuforiaStudio%E8%AF%B7%E6%B1%82%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%95%B0%E6%8D%AE/m-p/999513#M12905</link>
      <description>&lt;P&gt;That could work but only when the MQTT server is running on the same server where you installed the Experience Service.&amp;nbsp;The best will be when you have some MQTT server which could be access via REST API so that you can use the standard rest API in Home.js and you do not need to use any additional libraries. I think the best approach is to install every thing in node.js server on the same location where you Experience Service is running . So you can install there also you MQTT clients etc and integrate in a WebServer which you can access then vom Studio where the standard REST api calls are supported.&amp;nbsp; But all that is is not part of the supported functionality. I di not have examples for that - Possibly somebody else could provide a help&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Here is samples for the node.js server npm - MQTT.js&amp;nbsp; e.g. what I found when I searched&lt;/P&gt;
&lt;P&gt;&lt;A href="https://www.npmjs.com/package/mqtt#example" target="_blank" rel="noopener"&gt;https://www.npmjs.com/package/mqtt#example&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="https://stackoverflow.com/questions/58852141/showing-mqtt-response-on-a-node-server-api" target="_blank" rel="noopener"&gt;https://stackoverflow.com/questions/58852141/showing-mqtt-response-on-a-node-server-api&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="https://stackoverflow.com/questions/66506976/sending-mqtt-data-via-api" target="_blank" rel="noopener"&gt;https://stackoverflow.com/questions/66506976/sending-mqtt-data-via-api&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="https://iot.stackexchange.com/questions/5828/how-to-make-a-mqtt-broker-and-a-rest-api-communicate" target="_blank" rel="noopener"&gt;https://iot.stackexchange.com/questions/5828/how-to-make-a-mqtt-broker-and-a-rest-api-communicate&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Also a test in chat AI tools&lt;SUP&gt;&lt;EM&gt;DeepSeek&lt;/EM&gt;&lt;/SUP&gt;&amp;nbsp; whiere simple I tested ,&amp;nbsp;did provide the following resuts (below):&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="markup"&gt;Could you provide a code what access a MQTT brocker and will provide an node.js server where I could request the MQTT invormaton via REST api requests&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Here's a Node.js example that connects to an MQTT broker and provides REST API endpoints to access MQTT information:&lt;/P&gt;
&lt;DIV class="md-code-block"&gt;
&lt;DIV class="md-code-block-banner-wrap"&gt;
&lt;DIV class="md-code-block-banner"&gt;
&lt;DIV class="md-code-block-infostring"&gt;javascript&lt;/DIV&gt;
&lt;DIV class="md-code-block-action"&gt;
&lt;DIV class="ds-markdown-code-copy-button"&gt;Copy&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;PRE&gt;&lt;SPAN class="token function"&gt;require&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token string"&gt;'dotenv'&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;.&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;config&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;
&lt;SPAN class="token keyword"&gt;const&lt;/SPAN&gt; express &lt;SPAN class="token operator"&gt;=&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;require&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token string"&gt;'express'&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;
&lt;SPAN class="token keyword"&gt;const&lt;/SPAN&gt; mqtt &lt;SPAN class="token operator"&gt;=&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;require&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token string"&gt;'mqtt'&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;
&lt;SPAN class="token keyword"&gt;const&lt;/SPAN&gt; cors &lt;SPAN class="token operator"&gt;=&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;require&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token string"&gt;'cors'&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;

&lt;SPAN class="token comment"&gt;// Initialize Express app&lt;/SPAN&gt;
&lt;SPAN class="token keyword"&gt;const&lt;/SPAN&gt; app &lt;SPAN class="token operator"&gt;=&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;express&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;
&lt;SPAN class="token keyword"&gt;const&lt;/SPAN&gt; port &lt;SPAN class="token operator"&gt;=&lt;/SPAN&gt; process&lt;SPAN class="token punctuation"&gt;.&lt;/SPAN&gt;env&lt;SPAN class="token punctuation"&gt;.&lt;/SPAN&gt;&lt;SPAN class="token constant"&gt;SERVER_PORT&lt;/SPAN&gt; &lt;SPAN class="token operator"&gt;||&lt;/SPAN&gt; &lt;SPAN class="token number"&gt;3000&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;

&lt;SPAN class="token comment"&gt;// MQTT Configuration&lt;/SPAN&gt;
&lt;SPAN class="token keyword"&gt;const&lt;/SPAN&gt; mqttUrl &lt;SPAN class="token operator"&gt;=&lt;/SPAN&gt; process&lt;SPAN class="token punctuation"&gt;.&lt;/SPAN&gt;env&lt;SPAN class="token punctuation"&gt;.&lt;/SPAN&gt;&lt;SPAN class="token constant"&gt;MQTT_URL&lt;/SPAN&gt; &lt;SPAN class="token operator"&gt;||&lt;/SPAN&gt; &lt;SPAN class="token string"&gt;'mqtt://broker.hivemq.com'&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;
&lt;SPAN class="token keyword"&gt;const&lt;/SPAN&gt; mqttTopics &lt;SPAN class="token operator"&gt;=&lt;/SPAN&gt; process&lt;SPAN class="token punctuation"&gt;.&lt;/SPAN&gt;env&lt;SPAN class="token punctuation"&gt;.&lt;/SPAN&gt;&lt;SPAN class="token constant"&gt;MQTT_TOPICS&lt;/SPAN&gt; &lt;SPAN class="token operator"&gt;?&lt;/SPAN&gt; process&lt;SPAN class="token punctuation"&gt;.&lt;/SPAN&gt;env&lt;SPAN class="token punctuation"&gt;.&lt;/SPAN&gt;&lt;SPAN class="token constant"&gt;MQTT_TOPICS&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;.&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;split&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token string"&gt;','&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt; &lt;SPAN class="token operator"&gt;:&lt;/SPAN&gt; &lt;SPAN class="token punctuation"&gt;[&lt;/SPAN&gt;&lt;SPAN class="token string"&gt;'test/topic'&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;]&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;
&lt;SPAN class="token keyword"&gt;const&lt;/SPAN&gt; mqttOptions &lt;SPAN class="token operator"&gt;=&lt;/SPAN&gt; &lt;SPAN class="token punctuation"&gt;{&lt;/SPAN&gt;
  &lt;SPAN class="token literal-property property"&gt;clientId&lt;/SPAN&gt;&lt;SPAN class="token operator"&gt;:&lt;/SPAN&gt; &lt;SPAN class="token template-string"&gt;&lt;SPAN class="token template-punctuation string"&gt;`&lt;/SPAN&gt;&lt;SPAN class="token string"&gt;mqtt_&lt;/SPAN&gt;&lt;SPAN class="token interpolation"&gt;&lt;SPAN class="token interpolation-punctuation punctuation"&gt;${&lt;/SPAN&gt;Math&lt;SPAN class="token punctuation"&gt;.&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;random&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;.&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;toString&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token number"&gt;16&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;.&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;substr&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token number"&gt;2&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;,&lt;/SPAN&gt; &lt;SPAN class="token number"&gt;8&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt;&lt;SPAN class="token interpolation-punctuation punctuation"&gt;}&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN class="token template-punctuation string"&gt;`&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;,&lt;/SPAN&gt;
  &lt;SPAN class="token literal-property property"&gt;clean&lt;/SPAN&gt;&lt;SPAN class="token operator"&gt;:&lt;/SPAN&gt; &lt;SPAN class="token boolean"&gt;true&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;,&lt;/SPAN&gt;
  &lt;SPAN class="token literal-property property"&gt;connectTimeout&lt;/SPAN&gt;&lt;SPAN class="token operator"&gt;:&lt;/SPAN&gt; &lt;SPAN class="token number"&gt;4000&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;,&lt;/SPAN&gt;
  &lt;SPAN class="token literal-property property"&gt;reconnectPeriod&lt;/SPAN&gt;&lt;SPAN class="token operator"&gt;:&lt;/SPAN&gt; &lt;SPAN class="token number"&gt;1000&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;,&lt;/SPAN&gt;
&lt;SPAN class="token punctuation"&gt;}&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;

&lt;SPAN class="token comment"&gt;// Store received MQTT messages&lt;/SPAN&gt;
&lt;SPAN class="token keyword"&gt;const&lt;/SPAN&gt; mqttDataStore &lt;SPAN class="token operator"&gt;=&lt;/SPAN&gt; &lt;SPAN class="token punctuation"&gt;{&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;}&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;

&lt;SPAN class="token comment"&gt;// Connect to MQTT Broker&lt;/SPAN&gt;
&lt;SPAN class="token keyword"&gt;const&lt;/SPAN&gt; mqttClient &lt;SPAN class="token operator"&gt;=&lt;/SPAN&gt; mqtt&lt;SPAN class="token punctuation"&gt;.&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;connect&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;mqttUrl&lt;SPAN class="token punctuation"&gt;,&lt;/SPAN&gt; mqttOptions&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;

mqttClient&lt;SPAN class="token punctuation"&gt;.&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;on&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token string"&gt;'connect'&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;,&lt;/SPAN&gt; &lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt; &lt;SPAN class="token operator"&gt;=&amp;gt;&lt;/SPAN&gt; &lt;SPAN class="token punctuation"&gt;{&lt;/SPAN&gt;
  console&lt;SPAN class="token punctuation"&gt;.&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;log&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token string"&gt;'Connected to MQTT Broker'&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;
  mqttClient&lt;SPAN class="token punctuation"&gt;.&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;subscribe&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;mqttTopics&lt;SPAN class="token punctuation"&gt;,&lt;/SPAN&gt; &lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token parameter"&gt;err&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt; &lt;SPAN class="token operator"&gt;=&amp;gt;&lt;/SPAN&gt; &lt;SPAN class="token punctuation"&gt;{&lt;/SPAN&gt;
    &lt;SPAN class="token keyword"&gt;if&lt;/SPAN&gt; &lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token operator"&gt;!&lt;/SPAN&gt;err&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt; &lt;SPAN class="token punctuation"&gt;{&lt;/SPAN&gt;
      console&lt;SPAN class="token punctuation"&gt;.&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;log&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token template-string"&gt;&lt;SPAN class="token template-punctuation string"&gt;`&lt;/SPAN&gt;&lt;SPAN class="token string"&gt;Subscribed to topics: &lt;/SPAN&gt;&lt;SPAN class="token interpolation"&gt;&lt;SPAN class="token interpolation-punctuation punctuation"&gt;${&lt;/SPAN&gt;mqttTopics&lt;SPAN class="token punctuation"&gt;.&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;join&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token string"&gt;', '&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt;&lt;SPAN class="token interpolation-punctuation punctuation"&gt;}&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN class="token template-punctuation string"&gt;`&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;
    &lt;SPAN class="token punctuation"&gt;}&lt;/SPAN&gt;
  &lt;SPAN class="token punctuation"&gt;}&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;
&lt;SPAN class="token punctuation"&gt;}&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;

mqttClient&lt;SPAN class="token punctuation"&gt;.&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;on&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token string"&gt;'message'&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;,&lt;/SPAN&gt; &lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token parameter"&gt;topic&lt;SPAN class="token punctuation"&gt;,&lt;/SPAN&gt; message&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt; &lt;SPAN class="token operator"&gt;=&amp;gt;&lt;/SPAN&gt; &lt;SPAN class="token punctuation"&gt;{&lt;/SPAN&gt;
  console&lt;SPAN class="token punctuation"&gt;.&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;log&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token template-string"&gt;&lt;SPAN class="token template-punctuation string"&gt;`&lt;/SPAN&gt;&lt;SPAN class="token string"&gt;Received message on &lt;/SPAN&gt;&lt;SPAN class="token interpolation"&gt;&lt;SPAN class="token interpolation-punctuation punctuation"&gt;${&lt;/SPAN&gt;topic&lt;SPAN class="token interpolation-punctuation punctuation"&gt;}&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN class="token string"&gt;: &lt;/SPAN&gt;&lt;SPAN class="token interpolation"&gt;&lt;SPAN class="token interpolation-punctuation punctuation"&gt;${&lt;/SPAN&gt;message&lt;SPAN class="token punctuation"&gt;.&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;toString&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt;&lt;SPAN class="token interpolation-punctuation punctuation"&gt;}&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN class="token template-punctuation string"&gt;`&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;
  mqttDataStore&lt;SPAN class="token punctuation"&gt;[&lt;/SPAN&gt;topic&lt;SPAN class="token punctuation"&gt;]&lt;/SPAN&gt; &lt;SPAN class="token operator"&gt;=&lt;/SPAN&gt; &lt;SPAN class="token punctuation"&gt;{&lt;/SPAN&gt;
    &lt;SPAN class="token literal-property property"&gt;message&lt;/SPAN&gt;&lt;SPAN class="token operator"&gt;:&lt;/SPAN&gt; message&lt;SPAN class="token punctuation"&gt;.&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;toString&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;,&lt;/SPAN&gt;
    &lt;SPAN class="token literal-property property"&gt;timestamp&lt;/SPAN&gt;&lt;SPAN class="token operator"&gt;:&lt;/SPAN&gt; &lt;SPAN class="token keyword"&gt;new&lt;/SPAN&gt; &lt;SPAN class="token class-name"&gt;Date&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;.&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;toISOString&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt;
  &lt;SPAN class="token punctuation"&gt;}&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;
&lt;SPAN class="token punctuation"&gt;}&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;

mqttClient&lt;SPAN class="token punctuation"&gt;.&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;on&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token string"&gt;'error'&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;,&lt;/SPAN&gt; &lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token parameter"&gt;err&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt; &lt;SPAN class="token operator"&gt;=&amp;gt;&lt;/SPAN&gt; &lt;SPAN class="token punctuation"&gt;{&lt;/SPAN&gt;
  console&lt;SPAN class="token punctuation"&gt;.&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;error&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token string"&gt;'MQTT Error:'&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;,&lt;/SPAN&gt; err&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;
&lt;SPAN class="token punctuation"&gt;}&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;

&lt;SPAN class="token comment"&gt;// Express middleware&lt;/SPAN&gt;
app&lt;SPAN class="token punctuation"&gt;.&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;use&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;cors&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;
app&lt;SPAN class="token punctuation"&gt;.&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;use&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;express&lt;SPAN class="token punctuation"&gt;.&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;json&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;

&lt;SPAN class="token comment"&gt;// REST API Endpoints&lt;/SPAN&gt;
app&lt;SPAN class="token punctuation"&gt;.&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;get&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token string"&gt;'/api/mqtt'&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;,&lt;/SPAN&gt; &lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token parameter"&gt;req&lt;SPAN class="token punctuation"&gt;,&lt;/SPAN&gt; res&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt; &lt;SPAN class="token operator"&gt;=&amp;gt;&lt;/SPAN&gt; &lt;SPAN class="token punctuation"&gt;{&lt;/SPAN&gt;
  res&lt;SPAN class="token punctuation"&gt;.&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;json&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;{&lt;/SPAN&gt;
    &lt;SPAN class="token literal-property property"&gt;status&lt;/SPAN&gt;&lt;SPAN class="token operator"&gt;:&lt;/SPAN&gt; &lt;SPAN class="token string"&gt;'success'&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;,&lt;/SPAN&gt;
    &lt;SPAN class="token literal-property property"&gt;data&lt;/SPAN&gt;&lt;SPAN class="token operator"&gt;:&lt;/SPAN&gt; mqttDataStore
  &lt;SPAN class="token punctuation"&gt;}&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;
&lt;SPAN class="token punctuation"&gt;}&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;

app&lt;SPAN class="token punctuation"&gt;.&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;get&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token string"&gt;'/api/mqtt/:topic'&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;,&lt;/SPAN&gt; &lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token parameter"&gt;req&lt;SPAN class="token punctuation"&gt;,&lt;/SPAN&gt; res&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt; &lt;SPAN class="token operator"&gt;=&amp;gt;&lt;/SPAN&gt; &lt;SPAN class="token punctuation"&gt;{&lt;/SPAN&gt;
  &lt;SPAN class="token keyword"&gt;const&lt;/SPAN&gt; topic &lt;SPAN class="token operator"&gt;=&lt;/SPAN&gt; req&lt;SPAN class="token punctuation"&gt;.&lt;/SPAN&gt;params&lt;SPAN class="token punctuation"&gt;.&lt;/SPAN&gt;topic&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;
  &lt;SPAN class="token keyword"&gt;if&lt;/SPAN&gt; &lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;mqttDataStore&lt;SPAN class="token punctuation"&gt;[&lt;/SPAN&gt;topic&lt;SPAN class="token punctuation"&gt;]&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt; &lt;SPAN class="token punctuation"&gt;{&lt;/SPAN&gt;
    res&lt;SPAN class="token punctuation"&gt;.&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;json&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;{&lt;/SPAN&gt;
      &lt;SPAN class="token literal-property property"&gt;status&lt;/SPAN&gt;&lt;SPAN class="token operator"&gt;:&lt;/SPAN&gt; &lt;SPAN class="token string"&gt;'success'&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;,&lt;/SPAN&gt;
      &lt;SPAN class="token literal-property property"&gt;data&lt;/SPAN&gt;&lt;SPAN class="token operator"&gt;:&lt;/SPAN&gt; mqttDataStore&lt;SPAN class="token punctuation"&gt;[&lt;/SPAN&gt;topic&lt;SPAN class="token punctuation"&gt;]&lt;/SPAN&gt;
    &lt;SPAN class="token punctuation"&gt;}&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;
  &lt;SPAN class="token punctuation"&gt;}&lt;/SPAN&gt; &lt;SPAN class="token keyword"&gt;else&lt;/SPAN&gt; &lt;SPAN class="token punctuation"&gt;{&lt;/SPAN&gt;
    res&lt;SPAN class="token punctuation"&gt;.&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;status&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token number"&gt;404&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;.&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;json&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;{&lt;/SPAN&gt;
      &lt;SPAN class="token literal-property property"&gt;status&lt;/SPAN&gt;&lt;SPAN class="token operator"&gt;:&lt;/SPAN&gt; &lt;SPAN class="token string"&gt;'error'&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;,&lt;/SPAN&gt;
      &lt;SPAN class="token literal-property property"&gt;message&lt;/SPAN&gt;&lt;SPAN class="token operator"&gt;:&lt;/SPAN&gt; &lt;SPAN class="token string"&gt;'Topic not found'&lt;/SPAN&gt;
    &lt;SPAN class="token punctuation"&gt;}&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;
  &lt;SPAN class="token punctuation"&gt;}&lt;/SPAN&gt;
&lt;SPAN class="token punctuation"&gt;}&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;

&lt;SPAN class="token comment"&gt;// Start server&lt;/SPAN&gt;
app&lt;SPAN class="token punctuation"&gt;.&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;listen&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;port&lt;SPAN class="token punctuation"&gt;,&lt;/SPAN&gt; &lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt; &lt;SPAN class="token operator"&gt;=&amp;gt;&lt;/SPAN&gt; &lt;SPAN class="token punctuation"&gt;{&lt;/SPAN&gt;
  console&lt;SPAN class="token punctuation"&gt;.&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;log&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token template-string"&gt;&lt;SPAN class="token template-punctuation string"&gt;`&lt;/SPAN&gt;&lt;SPAN class="token string"&gt;REST API server running on port &lt;/SPAN&gt;&lt;SPAN class="token interpolation"&gt;&lt;SPAN class="token interpolation-punctuation punctuation"&gt;${&lt;/SPAN&gt;port&lt;SPAN class="token interpolation-punctuation punctuation"&gt;}&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN class="token template-punctuation string"&gt;`&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;
&lt;SPAN class="token punctuation"&gt;}&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;

process&lt;SPAN class="token punctuation"&gt;.&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;on&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token string"&gt;'SIGINT'&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;,&lt;/SPAN&gt; &lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt; &lt;SPAN class="token operator"&gt;=&amp;gt;&lt;/SPAN&gt; &lt;SPAN class="token punctuation"&gt;{&lt;/SPAN&gt;
  mqttClient&lt;SPAN class="token punctuation"&gt;.&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;end&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;
  process&lt;SPAN class="token punctuation"&gt;.&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;exit&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;
&lt;SPAN class="token punctuation"&gt;}&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;&lt;/PRE&gt;
&lt;/DIV&gt;
&lt;P&gt;To use this code:&lt;/P&gt;
&lt;OL start="1"&gt;
&lt;LI&gt;
&lt;P&gt;Install required dependencies:&lt;/P&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;DIV class="md-code-block"&gt;
&lt;DIV class="md-code-block-banner-wrap"&gt;
&lt;DIV class="md-code-block-banner"&gt;
&lt;DIV class="md-code-block-infostring"&gt;bash&lt;/DIV&gt;
&lt;DIV class="md-code-block-action"&gt;
&lt;DIV class="ds-markdown-code-copy-button"&gt;Copy&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;PRE&gt;&lt;SPAN class="token function"&gt;npm&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;install&lt;/SPAN&gt; express mqtt dotenv cors&lt;/PRE&gt;
&lt;/DIV&gt;
&lt;OL start="2"&gt;
&lt;LI&gt;
&lt;P&gt;Create a&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;CODE&gt;.env&lt;/CODE&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;file with your configuration:&lt;/P&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;DIV class="md-code-block"&gt;
&lt;DIV class="md-code-block-banner-wrap"&gt;
&lt;DIV class="md-code-block-banner"&gt;
&lt;DIV class="md-code-block-infostring"&gt;env&lt;/DIV&gt;
&lt;DIV class="md-code-block-action"&gt;
&lt;DIV class="ds-markdown-code-copy-button"&gt;Copy&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;PRE&gt;MQTT_URL=mqtt://your-broker-url
MQTT_TOPICS=topic1,topic2,topic3
SERVER_PORT=3000&lt;/PRE&gt;
&lt;/DIV&gt;
&lt;OL start="3"&gt;
&lt;LI&gt;
&lt;P&gt;Start the server:&lt;/P&gt;
&lt;/LI&gt;
&lt;/OL&gt;
&lt;DIV class="md-code-block"&gt;
&lt;DIV class="md-code-block-banner-wrap"&gt;
&lt;DIV class="md-code-block-banner"&gt;
&lt;DIV class="md-code-block-infostring"&gt;bash&lt;/DIV&gt;
&lt;DIV class="md-code-block-action"&gt;
&lt;DIV class="ds-markdown-code-copy-button"&gt;Copy&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;PRE&gt;&lt;SPAN class="token function"&gt;node&lt;/SPAN&gt; server.js&lt;/PRE&gt;
&lt;/DIV&gt;
&lt;P&gt;Key features:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;P&gt;Connects to MQTT broker and subscribes to specified topics&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Stores last received message for each topic&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Provides REST API endpoints:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;P&gt;GET&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;CODE&gt;/api/mqtt&lt;/CODE&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;- Get all stored MQTT messages&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;GET&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;CODE&gt;/api/mqtt/:topic&lt;/CODE&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;- Get message for specific topic&lt;/P&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Handles MQTT connection errors and reconnections&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Uses environment variables for configuration&lt;/P&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Example usage with curl:&lt;/P&gt;
&lt;DIV class="md-code-block"&gt;
&lt;DIV class="md-code-block-banner-wrap"&gt;
&lt;DIV class="md-code-block-banner"&gt;
&lt;DIV class="md-code-block-infostring"&gt;bash&lt;/DIV&gt;
&lt;DIV class="md-code-block-action"&gt;
&lt;DIV class="ds-markdown-code-copy-button"&gt;Copy&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;PRE&gt;&lt;SPAN class="token comment"&gt;# Get all messages&lt;/SPAN&gt;
&lt;SPAN class="token function"&gt;curl&lt;/SPAN&gt; http://localhost:3000/api/mqtt

&lt;SPAN class="token comment"&gt;# Get specific topic&lt;/SPAN&gt;
&lt;SPAN class="token function"&gt;curl&lt;/SPAN&gt; http://localhost:3000/api/mqtt/your/topic&lt;/PRE&gt;
&lt;/DIV&gt;
&lt;P&gt;To test with MQTT publishing (using mosquitto_pub):&lt;/P&gt;
&lt;DIV class="md-code-block"&gt;
&lt;DIV class="md-code-block-banner-wrap"&gt;
&lt;DIV class="md-code-block-banner"&gt;
&lt;DIV class="md-code-block-infostring"&gt;bash&lt;/DIV&gt;
&lt;DIV class="md-code-block-action"&gt;
&lt;DIV class="ds-markdown-code-copy-button"&gt;Copy&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;PRE&gt;mosquitto_pub &lt;SPAN class="token parameter variable"&gt;-h&lt;/SPAN&gt; broker.hivemq.com &lt;SPAN class="token parameter variable"&gt;-t&lt;/SPAN&gt; &lt;SPAN class="token string"&gt;"test/topic"&lt;/SPAN&gt; &lt;SPAN class="token parameter variable"&gt;-m&lt;/SPAN&gt; &lt;SPAN class="token string"&gt;"Hello World"&lt;/SPAN&gt;&lt;/PRE&gt;
&lt;/DIV&gt;
&lt;P&gt;Potential improvements you could add:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;P&gt;Authentication for both MQTT and REST API&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;History storage (not just last message)&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;WebSocket support for real-time updates&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;QoS configuration for MQTT&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Message validation&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Rate limiting for API endpoints&lt;/P&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Remember to:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;P&gt;Keep your MQTT broker secure&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Handle sensitive data appropriately&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Add proper error handling for production use&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Implement proper CORS configuration for your needs&lt;/P&gt;
&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;Add request validation for the API endpoints&lt;/P&gt;
&lt;/LI&gt;
&lt;/UL&gt;</description>
      <pubDate>Thu, 20 Feb 2025 09:15:28 GMT</pubDate>
      <guid>https://www.ptcusercommunity.com/t5/Vuforia-Studio/VuforiaStudio%E8%AF%B7%E6%B1%82%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%95%B0%E6%8D%AE/m-p/999513#M12905</guid>
      <dc:creator>RolandRaytchev</dc:creator>
      <dc:date>2025-02-20T09:15:28Z</dc:date>
    </item>
    <item>
      <title>Re: VuforiaStudio请求服务器数据</title>
      <link>https://www.ptcusercommunity.com/t5/Vuforia-Studio/VuforiaStudio%E8%AF%B7%E6%B1%82%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%95%B0%E6%8D%AE/m-p/999515#M12906</link>
      <description>&lt;P&gt;你好&lt;/P&gt;&lt;P&gt;Thank you very much!&lt;/P&gt;&lt;P&gt;Best regards!&lt;/P&gt;</description>
      <pubDate>Thu, 20 Feb 2025 09:25:40 GMT</pubDate>
      <guid>https://www.ptcusercommunity.com/t5/Vuforia-Studio/VuforiaStudio%E8%AF%B7%E6%B1%82%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%95%B0%E6%8D%AE/m-p/999515#M12906</guid>
      <dc:creator>FY_10283333</dc:creator>
      <dc:date>2025-02-20T09:25:40Z</dc:date>
    </item>
    <item>
      <title>Re: VuforiaStudio请求服务器数据</title>
      <link>https://www.ptcusercommunity.com/t5/Vuforia-Studio/VuforiaStudio%E8%AF%B7%E6%B1%82%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%95%B0%E6%8D%AE/m-p/1001105#M12912</link>
      <description>&lt;P&gt;Hello &lt;SPAN style="background: var(--ck-color-mention-background); color: var(--ck-color-mention-text);"&gt;&lt;a href="https://www.ptcusercommunity.com/t5/user/viewprofilepage/user-id/561353"&gt;@FY_10283333&lt;/a&gt;&lt;/SPAN&gt;,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;It looks like you have some responses from some community members. If any of these replies helped you solve &lt;A href="https://community.ptc.com/t5/Vuforia-Studio/VuforiaStudio%E8%AF%B7%E6%B1%82%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%95%B0%E6%8D%AE/m-p/999468#M12899" target="_blank"&gt;your question&lt;/A&gt; please mark the appropriate reply as the Accepted Solution.&amp;nbsp;&lt;BR /&gt;Of course, if you have more to share on your issue, please let the Community know so other community members can continue to help you.&lt;BR /&gt;&lt;BR /&gt;Thanks,&lt;BR /&gt;Vivek N.&lt;BR /&gt;Community Moderation Team.&lt;/P&gt;</description>
      <pubDate>Thu, 27 Feb 2025 03:29:41 GMT</pubDate>
      <guid>https://www.ptcusercommunity.com/t5/Vuforia-Studio/VuforiaStudio%E8%AF%B7%E6%B1%82%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%95%B0%E6%8D%AE/m-p/1001105#M12912</guid>
      <dc:creator>vnamboodheri</dc:creator>
      <dc:date>2025-02-27T03:29:41Z</dc:date>
    </item>
  </channel>
</rss>

