Changes for page ThingsBoard

Last modified by Dilisi S on 2025/04/23 19:23

From version 115.1
edited by Dilisi S
on 2025/03/08 20:11
Change comment: Uploaded new attachment "hivemq-8.png", version {1}
To version 189.1
edited by Dilisi S
on 2025/03/27 22:54
Change comment: Mar 27 edits - part 1

Summary

Details

Page properties
Content
... ... @@ -17,149 +17,286 @@
17 17  The **NB series** devices end with the suffix **-NB**, and the **CB series** devices end with the suffix **-CB**. For example, **S31B-NB** is an **NB device**, and **S31-CB** is a **CB device**.
18 18  
19 19  
20 += 2. Prerequisites =
20 20  
22 +To complete this tutorial, you need to have the following:
21 21  
24 +* ThingsBoard cloud account
25 +* MQTT Broker (public or private) such as,
26 +** **[[HiveMQ Cloud>>https://www.hivemq.com]] - You can create a free account to try it or subscribe for a paid account. - We use HiveMQ Cloud as the MQTT broker to build example in this tutorial.**
27 +** [[emqx>>https://www.emqx.com/zh/mqtt/public-mqtt5-broker]] - The public MQTT server is only used for MOTT learning and testing, and should not be used in the production environment.
28 +** [[lns1.thingseye.io>>http://lns1.thingseye.io/]] - This is Dragino's MQTT broker, which requires a CA certificate to use.
22 22  
23 -= 2. Data Converters =
30 +== 2.1 ThingsBoard Cloud ==
24 24  
25 25  
26 -In **ThingsBoard**, **Data Converters** are components used to transform incoming or outgoing data between different formats, typically to convert raw telemetry data from devices into a structured format that ThingsBoard can understand, or vice versa.
33 +Go to [[https:~~/~~/thingsboard.io/>>https://thingsboard.io/]]
27 27  
35 +Click on the **Try it now**.
28 28  
29 -== 2.1 Uplink ==
30 30  
38 +[[image:thingsboard-1.png]]
31 31  
32 -In the left navigation, click **Integrations center**, and then click **Data converters**.
33 33  
41 +Select either the **North America** or **Europe** region. Here, we use the Europe region.
34 34  
43 +[[image:thingsboard-2.png]]
35 35  
36 -[[image:data-converters-list-empty.png]]
37 37  
46 +You can sign up with your **Google**, **GitHub**, **Facebook**, or **Apple** account. If not you can create an account with providing your **name**, **email address** and a **password**.
38 38  
39 -On the **Data converters** page, click on the **+**’ button, and then click on the **Create new converter** from the dropdown menu.
48 +Click on the **Sign up** button.
40 40  
50 +[[image:thingsboard-3.png||height="651" width="500"]]
41 41  
42 42  
43 -[[image:create-new-converter-menu.png||height="259" width="500"]]
53 +You will be navigated to the following page.
44 44  
55 +[[image:thingsboard-5.png||height="109" width="500"]]
45 45  
46 -The **Add data converter** window will appear. Name it ‘**MQTT Uplink Converter NB/CB**’ and select the Type as **Uplink**.
47 47  
48 -Click on the **TBEL** button if not selected it by default. Delete the existing decoder function in the code editor. Now copy and paste the following decoder function written in **TBEL (ThingsBoard Expression Language)** in to the **code editor**. This decoder function is compatible for both NB and CB series devices.
58 +simultaneously, you will receive an email to confirm your email address. Click on the **Activate Your Account** button.
49 49  
50 -{{code language="JavaScript"}}
51 -/** Decoder **/
52 52  
53 -// decode payload to string
54 -var payloadStr = decodeToString(payload);
55 -var data = JSON.parse(payloadStr);
61 +[[image:thingsboard-4.png||height="249" width="500"]]
56 56  
57 -var deviceName = metadata.topic.split("/")[3];
58 -// decode payload to JSON
59 -var deviceType = 'sensor';
60 60  
61 -// Result object with device attributes/telemetry data
62 -var result = {
63 - deviceName: deviceName,
64 - deviceType: deviceType,
65 - attributes: {
66 - integrationName: metadata['integrationName'],
67 - },
68 - telemetry: {
69 - temperature: data.temperature,
70 - humidity: data.humidity,
71 - }
72 -};
64 +Now losing to the account using your credentials:
73 73  
74 -/** Helper functions 'decodeToString' and 'decodeToJson' are already built-in **/
75 75  
76 -return result;
77 -{{/code}}
67 +[[image:thingsboard-6.png||height="244" width="500"]]
78 78  
79 79  
80 -Click on the **Add** button.
70 +== 2.2 HiveMQ Cloud ==
81 81  
72 +=== 2.2.1 HiveMQ Cloud ===
82 82  
83 83  
84 -[[image:add-uplink-data-converter.png||height="529" width="500"]]
75 +Go to [[https:~~/~~/www.hivemq.com>>https://www.hivemq.com]]
85 85  
77 +Click on the **Start Free** button.
86 86  
87 -You should see that the newly added **MQTT Uplink converter **NB/CB is listed on the **Data Converters** page.
79 +[[image:hivwmq-1.png]]
88 88  
89 -[[image:data-converter-list-showing-uplink-dc.png]]
90 90  
82 +Click on the **Sign Up FREE Now** button in the **HIVEMQ CLOUD** section.
91 91  
84 +[[image:hivemq-2.png]]
92 92  
93 -== 3.2 Downlink ==
94 94  
87 +Click on the **Sign Up** button.
95 95  
89 +You can sign up with HiveMQ using your **GitHub**, **Google**, or **LinkedIn** account.
90 +
91 +If not, provide your **email address** and a **password** to create an account by clicking on the **Sign Up** button.
92 +
93 +
94 +[[image:hivemq-3.png]]
95 +
96 +
97 +You will receive an email to verify your email address. Click on the **Confirm my account** button.
98 +
99 +
100 +[[image:hivemq-4.jpg||height="889" width="400"]]
101 +
102 +
103 +You will be redirected to a page asking you to complete your profile. Once done, click the **Continue** button.
104 +
105 +
106 +[[image:hivemq-5.png||height="655" width="700"]]
107 +
108 +
109 +Select the CloudMQ Cloud plan you need. For testing purposes, select the **Serverless FREE** plan by clicking on the **Create Serverless Cluster** button.
110 +
111 +
112 +[[image:hivemq-6.png]]
113 +
114 +
115 +You will be navigated to the **Your Clusters** page. Click on the **Manage Cluster** button.
116 +
117 +[[image:hivemq-7.png]]
118 +
119 +
120 +In your cluster page, you can find some useful parameters you need to create a MQTT connection.
121 +
122 +**URL**: This is the host name. Click on the copy button to copy it.
123 +
124 +**Port**: 8883
125 +
126 +
127 +Click on the **Getting Started** tab to setup the username and the password as the connection credentials.
128 +
129 +
130 +[[image:hivemq-8.png]]
131 +
132 +
133 +In the '**Create Connection Credentials**' section, provide a **username** and **password**, then click the **Add** button.
134 +
135 +
136 +[[image:hivemq-9.png]]
137 +
138 +
139 +
140 +If everything is successful, you will see the following message.
141 +
142 +
143 +[[image:hivemq-10.png||height="206" width="500"]]
144 +
145 +
146 +You will need these MQTT connection parameters when configuring the MQTT integration in the '**Add Integration**' section.
147 +
148 +
149 +=== 2.2.2 emqx ===
150 +
151 +
152 +The [[emqx>>https://www.emqx.com/zh/mqtt/public-mqtt5-broker]] public MQTT server is only used for MOTT learning and testing, and should not be used in the production environment.
153 +
154 +
155 +[[image:emqx.png||height="420" width="500"]]
156 +
157 +
158 +=== 2.2.3 Ins1.thingseye.io ===
159 +
160 +[[lns1.thingseye.io>>http://lns1.thingseye.io/]] is the Dragino's MQTT broker, which requires a CA certificate file, Certificate file, and the Private key file to use.
161 +
162 +If customers need to use this MQTT connection with ThingsBoard, they need to contact the TE team to obtain three license files.
163 +
164 +[[image:ins1.png||height="310" width="500"]]
165 +
166 +
167 += 3. Creating Devices =
168 +
169 +
170 +First, you need to create devices in ThingsBoard to represent your physical devices. For example, you can name it **Device A**, and the second device could be **Device B** or any name you prefer. The device name should be unique within the **Devices** space.
171 +
172 +
173 +In the left navigation, click Entities -> Devices.
174 +
175 +Click the **Add Device** button (the button with the **+** sign), and from the dropdown menu, click **Add new device**.
176 +
177 +In the **Add new device** dialog box, enter the device name in the **Name** text box. For example, we will use **Device A**.
178 +
179 +Click the **Add** button.
180 +
181 +Skip the **connectivity testing** by clicking the **Close** button.
182 +
183 +The device is created and listed on the **Devices** page. Note that its initial state is **Inactive** because it has not received any data yet.
184 +
185 +
186 += 4. Data Converters =
187 +
188 +
189 +In **ThingsBoard**, **Data Converters** are components used to transform incoming or outgoing data between different formats, typically to convert raw telemetry data from devices into a structured format that ThingsBoard can understand, or vice versa.
190 +
191 +
192 +== 4.1 Uplink ==
193 +
194 +
195 +In the left navigation, click **Integrations center**, and then click **Data converters**.
196 +
197 +
198 +[[image:data-converters-list-empty.png]]
199 +
200 +
96 96  On the **Data converters** page, click on the ‘**+**’ button, and then click on the **Create new converter** from the dropdown menu.
97 97  
98 98  
99 -[[image:create-new-converter-menu.png||width="500"]]
100 100  
205 +[[image:create-new-converter-menu.png||height="259" width="500"]]
101 101  
102 102  
103 -The **Add data converter** window will appear. Name it ‘**MQTT Downlink Converter NB/CB**’ and select the Type as **Downlink**.
208 +The **Add data converter** window will appear.
104 104  
105 -Click on the **TBEL** button if not selected it by default. Now copy and paste the following encoder function written in **TBEL (ThingsBoard Expression Language)** in to the **code editor**. This encoder function is compatible for both NB and CB series devices.
210 +Let's create an uplink data converter for the device named '**Device A**'. Name it**MQTT Uplink Converter - Device A**’ and select the Type as **Uplink**.
106 106  
212 +Click on the **TBEL** button if it has not been selected by default.
107 107  
108 -{{code language="JavaScript"}}
109 -// Encode downlink data from incoming Rule Engine message
214 +Modify the default TBEL function to match with your device as described below:
110 110  
111 -// msg - JSON message payload downlink message json
112 -// msgType - type of message, for ex. 'ATTRIBUTES_UPDATED', 'POST_TELEMETRY_REQUEST', etc.
113 -// metadata - list of key-value pairs with additional data about the message
114 -// integrationMetadata - list of key-value pairs with additional data defined in Integration executing this converter
115 115  
116 -/** Encoder **/
217 +* Uncomment** line 11**:
117 117  
118 -var data = {};
219 +//var data = decodeToJson(payload)//
119 119  
120 -// Process data from incoming message and metadata
121 121  
122 -data.tempFreq = msg.temperatureUploadFrequency;
123 -data.humFreq = msg.humidityUploadFrequency;
222 +* **Line 13**: Assign your device name to the **deviceName** field. - We used **Device A** as it is to match with our device, **Device A **in the Devices section.
223 +* From **line 38**: Modify the telemetry section to allow parsed data to be assigned to the fields.
124 124  
125 -data.devSerialNumber = metadata['ss_serialNumber'];
225 +//telemetry: {
226 + temperature: data.temperature,
227 + humidity: data.humidity,
228 + rawData: payloadStr
229 + }//
126 126  
127 -// Result object with encoded downlink payload
128 -var result = {
129 129  
130 - // downlink data content type: JSON, TEXT or BINARY (base64 format)
131 - contentType: "JSON",
232 +The modified uplink decoder function to match with **Device A** is shown below.
132 132  
133 - // downlink data
134 - data: JSON.stringify(data),
234 +{{code language="JavaScript"}}
235 +// Decode an uplink message from a buffer
236 +// payload - array of bytes
237 +// metadata - key/value object
135 135  
136 - // Optional metadata object presented in key/value format
137 - metadata: {
138 - topic: metadata['deviceType']+'/'+metadata['deviceName']+'/upload'
139 - }
239 +/** Decoder **/
140 140  
241 +// decode payload to string
242 +var payloadStr = decodeToString(payload);
243 +
244 +// decode payload to JSON
245 +var data = decodeToJson(payload);
246 +
247 +var deviceName = 'Device A';
248 +var deviceType = 'thermostat';
249 +var customerName = 'Customer C';
250 +var groupName = 'thermostat devices';
251 +var manufacturer = 'Example corporation';
252 +// use assetName and assetType instead of deviceName and deviceType
253 +// to automatically create assets instead of devices.
254 +// var assetName = 'Asset A';
255 +// var assetType = 'building';
256 +
257 +// Result object with device/asset attributes/telemetry data
258 +var result = {
259 +// Use deviceName and deviceType or assetName and assetType, but not both.
260 + deviceName: deviceName,
261 + deviceType: deviceType,
262 +// assetName: assetName,
263 +// assetType: assetType,
264 +// customerName: customerName,
265 + groupName: groupName,
266 + attributes: {
267 + model: 'Model A',
268 + serialNumber: 'SN111',
269 + integrationName: metadata['integrationName'],
270 + manufacturer: manufacturer
271 + },
272 + telemetry: {
273 + temperature: data.temperature,
274 + humidity: data.humidity,
275 + rawData: payloadStr
276 + }
141 141  };
142 142  
279 +/** Helper functions 'decodeToString' and 'decodeToJson' are already built-in **/
280 +
143 143  return result;
144 144  {{/code}}
145 145  
146 146  
147 -Click on the **Add** button.
285 +Once you modify the decoder function, click on the **Add** button.
148 148  
149 149  
150 150  
151 -[[image:add-downlink-data-converter.png||height="529" width="500"]]
289 +[[image:ul-data-converter-device-a.png||height="524" width="500"]]
152 152  
153 153  
154 -You should see that the newly added **MQTT Downlink** Converter NB/CB is listed on the **Data Converters** page.
292 +You should see that the newly added **MQTT Uplink converter **NB/CB is listed on the **Data Converters** page.
155 155  
156 156  
157 -[[image:data-converters-list.png]]
295 +[[image:ul-data-converter-added.png||height="257"]]
158 158  
159 -(% class="wikigeneratedid" %)
160 160  
161 161  
162 -= 3. Add Integration =
299 += 5. Add Integration =
163 163  
164 164  
165 165  In the left navigation, click **Integrations center**, and then click **Integrations**.
... ... @@ -179,7 +179,7 @@
179 179  **Basic settings:**
180 180  
181 181  * **Integration type**: MQTT
182 -* **Name**: MQTT integration NB/CB
319 +* **Name**: MQTT integration - Device A
183 183  * **Enable integration**: YES
184 184  * **Allows create devices or assets**: YES
185 185  
... ... @@ -186,10 +186,11 @@
186 186  Click **Next** button.
187 187  
188 188  
326 +[[image:add-integration-basic-settings.png||height="504" width="500"]]
189 189  
190 -[[image:add-integration-basic-settings.png||height="511" width="500"]]
191 191  
192 192  
330 +
193 193  **Uplink data converter:**
194 194  
195 195  * Click on the **Select existing** button.
... ... @@ -198,41 +198,43 @@
198 198  Click **Next** button.
199 199  
200 200  
339 +[[image:add-integration-ul-data-converter.png||height="505" width="500"]]
201 201  
202 -[[image:add-integration-uplink-data-converter.png||height="511" width="500"]]
203 203  
204 204  
205 205  **Downlink data converter:**
206 206  
207 -* Click on the **Select existing** button.
208 -* **Downlink data converter**: Select **MQTT Downlink Converter NB/CB **from the dropdown list.
345 +Dragino NB/CB devices don't require a downlink data converter to decode their payloads, so you can skip this step.
209 209  
210 -Click **Next** button.
347 +* Click on the **Skip **button in the Downlink data converter section.
211 211  
349 +Click **Skip** button.
212 212  
213 213  
214 -[[image:add-integration-downlink-data-converter.png||height="511" width="500"]]
352 +[[image:integration-dl-skip.png||height="511" width="500"]]
215 215  
216 216  
355 +
217 217  **Connection:**
218 218  
219 -* **Host**: Cluster URL (Eg. 011731f7928541588a6cdfbbedfc63f4.s1.eu.hivemq.cloud)
358 +* **Host**: Host URL (Eg. **//011731f7xxxxxxxxxxxfbbedfc63f4.s1.eu.hivemq.cloud//**)
220 220  * **Port**: 8883
221 -* **Credentials**: Basic
222 -* **Enable SSL**: YES
360 +* **Credentials type**: Basic
223 223  * **Username**: Username (from your HiveMQ Cloud Cluster with your credentials)
224 224  * **Password:** Password (from your HiveMQ Cloud Cluster with your credentials)
225 -* **Topic:** tb/mqtt-integration-tutorial/sensors/+/telemetry (the + replaces any 'device name' and creates devices in the Entities -> Devices)
363 +* **Enable SSL**: YES
364 +* **Topic: device/a** (The topic can be anything; you can even use just the device name.)
226 226  * **QoS:** 0-At most once
227 227  
228 228  
229 -[[image:add-integration-connection.png||height="511" width="500"]]
230 230  
369 +[[image:add-integartion-connection.png||height="505" width="500"]]
231 231  
371 +
232 232  Click on the **Advanced settings** button.
233 233  
234 -* **Clean session:** NO
235 -* **Retained**: NO
374 +* **Clean session:** YES
375 +* **Retained**: YES
236 236  
237 237  [[image:add-integration-connection-advanced-settings.png||height="510" width="500"]]
238 238  
... ... @@ -240,11 +240,10 @@
240 240  Click on the **Check connection** button to verify the MQTT connection using the provided parameters.
241 241  
242 242  
243 -
244 244  [[image:check-connection.png||height="83" width="300"]]
245 245  
246 246  
247 -If the connection is successful, you will see the **Connected** message.
386 +If the connection is successful, you will see the **Connected** message. If not, check your connection parameters again.
248 248  
249 249  
250 250  [[image:connection-success.png||height="511" width="500"]]
... ... @@ -252,22 +252,205 @@
252 252  
253 253  Click on the **Add** button.
254 254  
255 -
256 -
257 257  You should see that the newly added integration is listed on the **Integrations** page.
258 258  
259 259  Since we haven't received data from a device yet, the integration **Status** is shown as **Pending.**
260 260  
261 -[[image:integrations-list-added-pending.png]]
262 262  
399 +[[image:new-integration-pending.png]]
263 263  
264 -= 5. Verifying the receipt of data from the device =
265 265  
402 += 6. Verifying the receipt of data from virtual devices =
266 266  
267 -On the terminal, issue the following MQTT command which simulates the device S31B-NB.
268 268  
405 +== 6.1 How does it work? ==
406 +
407 +
408 +We use the Mosquitto MQTT client to simulate MQTT messages, acting as a virtual device. First, install the Mosquitto client on your computer from [[this link>>url:https://mosquitto.org/download/]]. The Mosquitto client publishes messages to the MQTT broker (HiveMQ) on a specified MQTT topic. ThingsBoard subscribes to these messages using the same topic.
409 +
410 +The Mosquitto client publishes messages (payloads) on the topic **/device/a**. Of course, you can use any topic for testing.
411 +
412 +(% id="cke_bm_37386S" style="display:none" %) (%%)The MQTT payload format is as follows:
413 +
269 269  {{code language="none"}}
270 -mosquitto_pub -d -q 1 -h mqtt.eu.thingsboard.cloud -p 1883 -t v1/devices/S31B-NB/telemetry -u "24vk3w9h7sqdld1me5eh" -m "{temperature:20}"
415 +{"IMEI": "350693903995577", "temperature":25, "humidity":80, "pressure":1005}
271 271  {{/code}}
272 272  
273 -If the integration was performed without errors, after the transmission of the first telemetry, a new device with the name “S31B-NB” will appear in the Devices → All. Also, you can verify the input and output data, respectively, before and after conversion in Data converters → UDP Uplink Converter NB/CB → Events.
418 +Once ThingsBoard receives this message, it forwards this payload to the matching device through the integration.
419 +
420 +
421 +== 5.2 Sending messages ==
422 +
423 +
424 +On the terminal, issue the following MQTT command which simulates the device S31B-NB. The message payload contains the fields temperature and humidity, which hold the values S31B-NB and 27, respectively. This payload is also (technically) known as telemetry.
425 +
426 +{{code language="none"}}
427 +mosquitto_pub -d -q 1 -h 011731f7928xxxxx.s1.eu.hivemq.cloud -p 8883 -u "xxxxx" -P "xxxxx" -t "device/a" -m '{"IMEI":"350693903995577", "temperature":30, "humidity":80, "pressure":1005}'
428 +{{/code}}
429 +
430 +If the integration was performed without errors, the status of the integration changes to 'Active' after the first telemetry transmission.
431 +
432 +
433 +[[image:integration-active.png]]
434 +
435 +
436 +
437 +
438 +== 6.3 Viewing messages ==
439 +
440 +
441 +Go back to the **Integrations** page.
442 +
443 +Click on the **MQTT integration NB/CB** in the **Integrations** page to see its details.
444 +
445 +Click on the **Edit** button (//**pen icon**//).
446 +
447 +Click on the **Disabled** button in the upper-right corner.
448 +
449 +Turn on the **All messages (15 min)** option. This will enable displaying all messages in the **Events** tab. This setting will expire in 15 minutes, and you will need to repeat the same steps if you want to view the messages in the Events tab later.
450 +
451 +Click on the **Apply** button.
452 +
453 +Then click on the **Apply changes** (//**tick icon**//) button.
454 +
455 +
456 +[[image:Screenshot 2025-03-18 at 09.23.10.png]]
457 +
458 +
459 +Now go to the **Events** tab.
460 +
461 +Select the Event type as **Debug** from the dropdown list.
462 +
463 +Now you can see all the Uplink messages you are simulating through the MQTT broker. The status should be **OK **if there is no errors in your integration.
464 +
465 +
466 +[[image:Screenshot 2025-03-26 at 19.49.31.png]]
467 +
468 +
469 +
470 +
471 +Then click on the **three dots (...)** in the **Message** column. You can see the uplink message's **payload** in the **Message** window.
472 +
473 +
474 +[[image:Screenshot 2025-03-26 at 19.47.52.png]]
475 +
476 +
477 +
478 +
479 +Now, you have successfully tested your integration with a simulated uplink payload and verified that it is received by ThingsBoard, and the device is provisioned.
480 +
481 +
482 += 7. Creating a Dashboard =
483 +
484 +ThingsBoard **Dashboards** provide a powerful way to visualize and monitor real-time and historical data from connected devices. They allow users to create interactive, customizable panels displaying telemetry data, device status, and other key metrics. With a variety of widgets, including charts, maps, and tables, dashboards help users gain insights, track trends, and manage IoT deployments efficiently.
485 +
486 +
487 +This section guides you on how to create a dashboard to display temperature and humidity data from the device on a time-series chart. You may also use other widgets in ThingsBoard to display data according to your requirements.
488 +
489 +
490 +First simulate a few messages using MQTT. This time, we have added the 'humidity' field to the payload. Eg:
491 +
492 +{{code language="none"}}mosquitto_pub -d -q 1 -h 011731f7928xxxxx.s1.eu.hivemq.cloud -p 8883 -t "v1/devices/me/telemetry" -u "xxxxx" -P "xxxxx" -m '{"IMEI": "S31B-NB", "temperature": 22, "humidity":80}'{{/code}}
493 +
494 +
495 +In **ThingsBoard**, from the left navigation menu, click **Dashboards**. Then, click the **+** button and select **Create new dashboard** from the dropdown menu.
496 +
497 +
498 +[[image:dashboard-1.png]]
499 +
500 +
501 +In the **Title** text box, enter **NB/CB Test Dashboard** as the title of the dashboard.
502 +
503 +Click on the **Add** button.
504 +
505 +
506 +[[image:dashboard-2.png||height="526" width="500"]]
507 +
508 +
509 +Click on the **Add widget / Add new widget** button.
510 +
511 +
512 +[[image:dashboard-3.png]]
513 +
514 +
515 +In the **Select widgets bundle** window, click **Charts**.
516 +
517 +
518 +[[image:dashboard-4.png||height="537" width="700"]]
519 +
520 +
521 +
522 +In the **Charts: select widget** window, click **Time series chart**.
523 +
524 +
525 +[[image:dashboard-5.png||height="525" width="700"]]
526 +
527 +
528 +Configure the **Time series chart** widget as follows:
529 +
530 +* **Datasource** - select S31B-NB device you provisioned.
531 +* **Series**:
532 +** **temperature** - you can see this key by default.
533 +** **humidity** - Click **Add series** button. Then add the **humidity** for the key and then type **%** as its unit.
534 +* Click on the **Add** button.
535 +
536 +[[image:timeseries-1.png||height="491" width="700"]]
537 +
538 +
539 +The time-series chart will appear in edit mode. Resize it by clicking and dragging the lower-right corner.
540 +
541 +Click the **Save** button to add the widget to the dashboard.
542 +
543 +
544 +[[image:timeseries-3.png||height="347" width="700"]]
545 +
546 +
547 +Now send the following MQTT messages from the terminal to simulate the data.
548 +
549 +
550 +{{code language="none"}}
551 +mosquitto_pub -d -q 1 -h 011731f7928xxxxx.s1.eu.hivemq.cloud -p 8883 -t "v1/devices/me/telemetry" -u "xxxxx" -P "xxxxx" -m '{"IMEI": "S31B-NB", "temperature": 22, "humidity":70}'
552 +
553 +mosquitto_pub -d -q 1 -h 011731f7928xxxxx.s1.eu.hivemq.cloud -p 8883 -t "v1/devices/me/telemetry" -u "xxxxx" -P "xxxxx" -m '{"IMEI": "S31B-NB", "temperature": 27, "humidity":72}'
554 +
555 +mosquitto_pub -d -q 1 -h 011731f7928xxxxx.s1.eu.hivemq.cloud -p 8883 -t "v1/devices/me/telemetry" -u "xxxxx" -P "xxxxx" -m '{"IMEI": "S31B-NB", "temperature": 19, "humidity":80}'
556 +
557 +{{/code}}
558 +
559 +The chart will update with the values in realtime, as shown in the below image.
560 +
561 +
562 +[[image:timeseries-4.png||height="316" width="700"]]
563 +
564 +
565 += 8. Configure NB-IoT Sensor =
566 +
567 +
568 +Now, let's experiment with sending data to ThingsBoard using a real NB-IoT device. For example, we will use the **TS01-NB**.
569 +
570 +First, configure the NB-IoT device with the necessary MQTT settings using AT commands. Below is a list of AT commands you can use.
571 +
572 +
573 +**AT Commands**
574 +
575 +* **AT+PRO=3,3    **~/~/ Use MQTT to connect to ThingsBoard. Payload Type set to 3.
576 +* **AT+SUBTOPIC=<MQTT subscribe topic> Eg: TS01-NB**
577 +* **AT+PUBTOPIC=<MQTT publish topic> Eg: TS01-NB**
578 +* **AT+CLIENT=null**
579 +* **AT+UNAME=<MQTT Username>**
580 +* **AT+PWD=<MQTT Password>**
581 +* **AT+SERVADDR=<Broker address, Port>**
582 +
583 +Test your uplink by pressing the ACT button for 1 second.
584 +
585 +
586 +
587 +The following image shows the uplink payload of a real Dragino device. The publish topic is **TS01-NB**, and the device name is **861275077962896**, which is represented by the **IMEI**.
588 +
589 +{{info}}
590 +The ThingsBoard uses the device's IMEI number included in the payload to create a device in the Devices section.
591 +{{/info}}
592 +
593 +[[image:image-4.png]]
594 +
595 +
add-integration-basic-settings.png
Size
... ... @@ -1,1 +1,1 @@
1 -122.5 KB
1 +123.8 KB
Content
add-integration-connection.png
Size
... ... @@ -1,1 +1,1 @@
1 -124.4 KB
1 +158.1 KB
Content
hivemq-8.png
Size
... ... @@ -1,1 +1,1 @@
1 -304.7 KB
1 +268.7 KB
Content
Screenshot 2025-03-16 at 18.38.59.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.pradeeka
Size
... ... @@ -1,0 +1,1 @@
1 +221.2 KB
Content
Screenshot 2025-03-16 at 18.39.12.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.pradeeka
Size
... ... @@ -1,0 +1,1 @@
1 +211.9 KB
Content
Screenshot 2025-03-18 at 09.23.10.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.pradeeka
Size
... ... @@ -1,0 +1,1 @@
1 +78.7 KB
Content
Screenshot 2025-03-26 at 18.15.08.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.pradeeka
Size
... ... @@ -1,0 +1,1 @@
1 +92.2 KB
Content
Screenshot 2025-03-26 at 19.47.52.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.pradeeka
Size
... ... @@ -1,0 +1,1 @@
1 +168.4 KB
Content
Screenshot 2025-03-26 at 19.49.31.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.pradeeka
Size
... ... @@ -1,0 +1,1 @@
1 +133.0 KB
Content
add-integartion-connection.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.pradeeka
Size
... ... @@ -1,0 +1,1 @@
1 +110.3 KB
Content
add-integartion-connetcion.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.pradeeka
Size
... ... @@ -1,0 +1,1 @@
1 +146.0 KB
Content
add-integration-ul-data-converter.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.pradeeka
Size
... ... @@ -1,0 +1,1 @@
1 +121.2 KB
Content
dashboard-1.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.pradeeka
Size
... ... @@ -1,0 +1,1 @@
1 +271.1 KB
Content
dashboard-2.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.pradeeka
Size
... ... @@ -1,0 +1,1 @@
1 +112.2 KB
Content
dashboard-3.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.pradeeka
Size
... ... @@ -1,0 +1,1 @@
1 +141.3 KB
Content
dashboard-4.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.pradeeka
Size
... ... @@ -1,0 +1,1 @@
1 +803.7 KB
Content
dashboard-5.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.pradeeka
Size
... ... @@ -1,0 +1,1 @@
1 +476.1 KB
Content
device-provision-1.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.pradeeka
Size
... ... @@ -1,0 +1,1 @@
1 +265.7 KB
Content
device-provision-2.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.pradeeka
Size
... ... @@ -1,0 +1,1 @@
1 +213.9 KB
Content
emqx.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.pradeeka
Size
... ... @@ -1,0 +1,1 @@
1 +39.1 KB
Content
hivemq-10.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.pradeeka
Size
... ... @@ -1,0 +1,1 @@
1 +82.7 KB
Content
hivemq-9.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.pradeeka
Size
... ... @@ -1,0 +1,1 @@
1 +303.7 KB
Content
image-4.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.pradeeka
Size
... ... @@ -1,0 +1,1 @@
1 +96.0 KB
Content
ins1.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.pradeeka
Size
... ... @@ -1,0 +1,1 @@
1 +28.8 KB
Content
integration-active.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.pradeeka
Size
... ... @@ -1,0 +1,1 @@
1 +64.2 KB
Content
integration-dl-skip.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.pradeeka
Size
... ... @@ -1,0 +1,1 @@
1 +105.5 KB
Content
mqtt-uplink.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.pradeeka
Size
... ... @@ -1,0 +1,1 @@
1 +175.1 KB
Content
new-device.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.pradeeka
Size
... ... @@ -1,0 +1,1 @@
1 +143.3 KB
Content
telemetry-1.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.pradeeka
Size
... ... @@ -1,0 +1,1 @@
1 +191.9 KB
Content
telemetry-2.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.pradeeka
Size
... ... @@ -1,0 +1,1 @@
1 +185.1 KB
Content
thingsboard-1.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.pradeeka
Size
... ... @@ -1,0 +1,1 @@
1 +1.9 MB
Content
thingsboard-2.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.pradeeka
Size
... ... @@ -1,0 +1,1 @@
1 +901.1 KB
Content
thingsboard-3.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.pradeeka
Size
... ... @@ -1,0 +1,1 @@
1 +146.3 KB
Content
thingsboard-4.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.pradeeka
Size
... ... @@ -1,0 +1,1 @@
1 +122.1 KB
Content
thingsboard-5.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.pradeeka
Size
... ... @@ -1,0 +1,1 @@
1 +106.7 KB
Content
thingsboard-6.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.pradeeka
Size
... ... @@ -1,0 +1,1 @@
1 +119.3 KB
Content
timeseries-1.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.pradeeka
Size
... ... @@ -1,0 +1,1 @@
1 +179.1 KB
Content
timeseries-3.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.pradeeka
Size
... ... @@ -1,0 +1,1 @@
1 +174.2 KB
Content
timeseries-4.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.pradeeka
Size
... ... @@ -1,0 +1,1 @@
1 +159.0 KB
Content
ul-data-converter-added.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.pradeeka
Size
... ... @@ -1,0 +1,1 @@
1 +189.4 KB
Content
ul-data-converter-device-a.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.pradeeka
Size
... ... @@ -1,0 +1,1 @@
1 +168.3 KB
Content