Changes for page ThingsBoard

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

From version 205.1
edited by Dilisi S
on 2025/04/21 16:52
Change comment: Uploaded new attachment "add-integration-part-1.png", version {1}
To version 193.1
edited by Dilisi S
on 2025/03/27 23:31
Change comment: Mar 27 edits - part 2

Summary

Details

Page properties
Content
... ... @@ -164,18 +164,34 @@
164 164  [[image:ins1.png||height="310" width="500"]]
165 165  
166 166  
167 += 3. Creating Devices =
167 167  
168 -= 3. Data Converters =
169 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.
170 170  
171 -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.
172 172  
173 -**In this section, you will create a universal uplink data converter for all Dragino NB-IoT devices. The uplink decoder converts any MQTT message coming from a device into key-value pairs that can be used to display and visualize data using various widgets on the dashboard**.
173 +In the left navigation, click Entities -> Devices.
174 174  
175 +Click the **Add Device** button (the button with the **+** sign), and from the dropdown menu, click **Add new device**.
175 175  
176 -== 3.1 Uplink ==
177 +In the **Add new device** dialog box, enter the device name in the **Name** text box. For example, we will use **Device A**.
177 177  
179 +Click the **Add** button.
178 178  
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 +
179 179  In the left navigation, click **Integrations center**, and then click **Data converters**.
180 180  
181 181  
... ... @@ -182,7 +182,7 @@
182 182  [[image:data-converters-list-empty.png]]
183 183  
184 184  
185 -On the **Data converters** page, click on the ‘**+**’ button, and then click on **Create new converter** from the dropdown menu.
201 +On the **Data converters** page, click on the ‘**+**’ button, and then click on the **Create new converter** from the dropdown menu.
186 186  
187 187  
188 188  
... ... @@ -189,67 +189,79 @@
189 189  [[image:create-new-converter-menu.png||height="259" width="500"]]
190 190  
191 191  
192 -The **Add data converter** window appears.
208 +The **Add data converter** window will appear.
193 193  
194 -Name it ‘**MQTT Uplink Converter**’ and select the Type as **Uplink**.
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**.
195 195  
196 196  Click on the **TBEL** button if it has not been selected by default.
197 197  
198 -Replace the default TBEL decoder function with the following universal TBEL decoder function, which decodes MQTT payload from any Dragino NB-IoT device.
214 +Modify the default TBEL function to match with your device as described below:
199 199  
200 200  
217 +* Uncomment** line 11**:
218 +
219 +//var data = decodeToJson(payload)//
220 +
221 +
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.
224 +
225 +//telemetry: {
226 + temperature: data.temperature,
227 + humidity: data.humidity,
228 + rawData: payloadStr
229 + }//
230 +
231 +
232 +The modified uplink decoder function to match with **Device A** is shown below.
233 +
201 201  {{code language="JavaScript"}}
235 +// Decode an uplink message from a buffer
236 +// payload - array of bytes
237 +// metadata - key/value object
238 +
239 +/** Decoder **/
240 +
241 +// decode payload to string
242 +var payloadStr = decodeToString(payload);
243 +
202 202  // decode payload to JSON
203 -var pattern = "yyyy/MM/dd HH:mm:ss";
204 -var objdata = {};
205 -var obj1 = {};
206 206  var data = decodeToJson(payload);
207 -var deviceName = data.IMEI;
208 -data.remove("IMEI");
209 -var modelname = "Dragino "+ data.Model;
210 -//var mod = data.mod
211 -data.remove("Model");
212 -//delete data.mod
213 -var timestamp = new Date().getTime();
214 -foreach (entry: data.entrySet()) {
215 - var key = entry.getKey();
216 - var value = entry.getValue();
217 - //objdata[key] = data[key]
218 - if(key.matches("^-?\\d+$")){ //is number
219 - obj1[key]=data[key];
220 - var index = obj1[key].length-1;
221 - obj1[key][index]=new Date(obj1[key][index],pattern).getTime();
222 - }
223 - else if (key==="bat"||key==="BAT"){
224 - objdata["battery"] = data[key];
225 - }
226 - else{
227 - objdata[key] = data[key];
228 -}}
229 -var listdata = [{"ts":timestamp,"values":objdata}];
230 -foreach ( entry1: obj1.entrySet()){
231 - var key1 = entry1.getKey();
232 - var value1 = entry1.getValue();
233 - var index = obj1[key1].length-1;
234 - var ts = obj1[key1][index];
235 - if (modelname=="Dragino RS485-NB"){
236 - listdata.push({"ts":ts,"values":{"Payload":obj1[key1][0]}});
237 - }
238 - else{
239 - listdata.push({"ts":ts,"values":{"values":obj1[key1]}});
240 - }
241 -}
242 - var result = {
243 - deviceName: deviceName,
244 - deviceType: modelname,
245 - attributes: {
246 - model: modelname
247 - //customerName: "NB-CB",
248 - //groupName: "NB-CB",
249 - //integrationName: metadata['integrationName']
250 - },
251 - telemetry: listdata
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 + }
252 252  };
278 +
279 +/** Helper functions 'decodeToString' and 'decodeToJson' are already built-in **/
280 +
253 253  return result;
254 254  {{/code}}
255 255  
... ... @@ -257,18 +257,18 @@
257 257  Once you modify the decoder function, click on the **Add** button.
258 258  
259 259  
260 -[[image:mqtt-uplink-converter.png||height="498" width="500"]]
261 261  
289 +[[image:ul-data-converter-device-a.png||height="524" width="500"]]
262 262  
263 263  
264 264  You should see that the newly added **MQTT Uplink converter **NB/CB is listed on the **Data Converters** page.
265 265  
266 266  
295 +[[image:ul-data-converter-added.png||height="257"]]
267 267  
268 -[[image:data-converters-list.png]]
269 269  
270 270  
271 -= 4. Add Integration =
299 += 5. Add Integration =
272 272  
273 273  
274 274  In the left navigation, click **Integrations center**, and then click **Integrations**.
... ... @@ -290,7 +290,7 @@
290 290  * **Integration type**: MQTT
291 291  * **Name**: MQTT integration - Device A
292 292  * **Enable integration**: YES
293 -* **Allow create devices or assets**: YES
321 +* **Allows create devices or assets**: YES
294 294  
295 295  Click **Next** button.
296 296  
... ... @@ -336,6 +336,7 @@
336 336  * **Topic: device/a** (The topic can be anything; you can even use just the device name.)
337 337  * **QoS:** 0-At most once
338 338  
367 +
339 339  [[image:add-integartion-connection.png||height="505" width="500"]]
340 340  
341 341  
... ... @@ -370,10 +370,10 @@
370 370  
371 371  
372 372  
373 -= 5. Verifying the receipt of data from virtual devices =
402 += 6. Verifying the receipt of data from virtual devices =
374 374  
375 375  
376 -== 5.1 How does it work? ==
405 +== 6.1 How does it work? ==
377 377  
378 378  
379 379  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.
... ... @@ -404,7 +404,7 @@
404 404  [[image:integration-active.png]]
405 405  
406 406  
407 -== 5.3 Viewing messages ==
436 +== 6.3 Viewing messages ==
408 408  
409 409  
410 410  Go back to the **Integrations** page.
... ... @@ -455,7 +455,7 @@
455 455  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.
456 456  
457 457  
458 -= 6. Creating a Dashboard =
487 += 7. Creating a Dashboard =
459 459  
460 460  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.
461 461  
... ... @@ -465,7 +465,7 @@
465 465  
466 466  First simulate a few messages using MQTT. This time, we have added the 'humidity' field to the payload. Eg:
467 467  
468 -{{code language="none"}}mosquitto_pub -d -q 1 -h 011731f7928xxxxx.s1.eu.hivemq.cloud -p 8883 -u "xxxxx" -P "xxxxx" -t "device/a" -m '{"IMEI":"350693903995577", "temperature":22, "humidity":80, "pressure":1005}'{{/code}}
497 +{{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}}
469 469  
470 470  
471 471  In **ThingsBoard**, from the left navigation menu, click **Dashboards**. Then, click the **+** button and select **Create new dashboard** from the dropdown menu.
... ... @@ -503,19 +503,15 @@
503 503  
504 504  Configure the **Time series chart** widget as follows:
505 505  
506 -* **Datasource** - select **Device A** device you provisioned.
535 +* **Datasource** - select S31B-NB device you provisioned.
507 507  * **Series**:
508 508  ** **temperature** - you can see this key by default.
509 509  ** **humidity** - Click **Add series** button. Then add the **humidity** for the key and then type **%** as its unit.
510 510  * Click on the **Add** button.
511 511  
512 -{{info}}
513 -You can add only the relevant fields from the device's payload to display data on a widget. These fields are called 'keys'.
514 -{{/info}}
541 +[[image:timeseries-1.png||height="491" width="700"]]
515 515  
516 -[[image:Screenshot 2025-03-31 at 06.51.15.png||height="485" width="700"]]
517 517  
518 -
519 519  The time-series chart will appear in edit mode. Resize it by clicking and dragging the lower-right corner.
520 520  
521 521  Click the **Save** button to add the widget to the dashboard.
... ... @@ -528,11 +528,12 @@
528 528  
529 529  
530 530  {{code language="none"}}
531 -mosquitto_pub -d -q 1 -h 011731f7928xxxxx.s1.eu.hivemq.cloud -p 8883 -u "xxxxx" -P "xxxxx" -t "device/a" -m '{"IMEI":"350693903995577", "temperature":22, "humidity":70, "pressure":1005}'
556 +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}'
532 532  
533 -mosquitto_pub -d -q 1 -h 011731f7928xxxxx.s1.eu.hivemq.cloud -p 8883 -u "xxxxx" -P "xxxxx" -t "device/a" -m '{"IMEI":"350693903995577", "temperature":27, "humidity":72, "pressure":1005}'
558 +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}'
534 534  
535 -mosquitto_pub -d -q 1 -h 011731f7928xxxxx.s1.eu.hivemq.cloud -p 8883 -u "xxxxx" -P "xxxxx" -t "device/a" -m '{"IMEI":"350693903995577", "temperature":19, "humidity":80, "pressure":1005}'
560 +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}'
561 +
536 536  {{/code}}
537 537  
538 538  The chart will update with the values in realtime, as shown in the below image.
... ... @@ -541,7 +541,7 @@
541 541  [[image:timeseries-4.png||height="316" width="700"]]
542 542  
543 543  
544 -= 8. Configure Physical NB-IoT Sensor =
570 += 8. Configure NB-IoT Sensor =
545 545  
546 546  
547 547  Now, let's experiment with sending data to ThingsBoard using a real NB-IoT device. For example, we will use the **TS01-NB**.
... ... @@ -563,7 +563,10 @@
563 563  
564 564  
565 565  
566 -The following image shows the uplink payload of a real Dragino device. The publish topic is '**TS01-NB' that contains fields in the payload, IMEI, IMSI, Model, temperature, etc**. Note that we have created a device named **TS01-NB** in the **Devices** section in advance.
592 +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**.
567 567  
594 +{{info}}
595 +The ThingsBoard uses the device's IMEI number included in the payload to create a device in the Devices section.
596 +{{/info}}
568 568  
569 569  [[image:image-4.png]]
Screenshot 2025-03-31 at 06.51.15.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.pradeeka
Size
... ... @@ -1,1 +1,0 @@
1 -179.5 KB
Content
add-integration-part-1.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.pradeeka
Size
... ... @@ -1,1 +1,0 @@
1 -48.6 KB
Content
data-converters-list.png
Size
... ... @@ -1,1 +1,1 @@
1 -19.0 KB
1 +212.2 KB
Content
mqtt-uplink-converter.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.pradeeka
Size
... ... @@ -1,1 +1,0 @@
1 -75.3 KB
Content