Changes for page ThingsBoard
Last modified by Dilisi S on 2025/04/23 19:23
Summary
-
Page properties (1 modified, 0 added, 0 removed)
-
Attachments (1 modified, 0 added, 2 removed)
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 createa universal uplink data converterfor all Dragino NB-IoT devices. The uplinkdecoder converts any MQTT message coming from a device into key-value pairs that can beusedtodisplay and visualizedata usingvarious widgetson 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.1Uplink==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 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 appear s.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 - Replacethe default TBELdecoderfunctionwiththefollowinguniversalTBELdecoderfunction,whichdecodesMQTT payload from any Dragino NB-IoTdevice.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,8 @@ 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 + 368 + 339 339 [[image:add-integartion-connection.png||height="505" width="500"]] 340 340 341 341 ... ... @@ -366,16 +366,15 @@ 366 366 Since we haven't received data from a device yet, the integration **Status** is shown as **Pending.** 367 367 368 368 369 -[[image:integration- added.png]]399 +[[image:new-integration-pending.png]] 370 370 371 371 402 += 6. Verifying the receipt of data from virtual devices = 372 372 373 -= 5. Verifying the receipt of data from virtual devices = 374 374 405 +== 6.1 How does it work? == 375 375 376 -== 5.1 How does it work? == 377 377 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. 380 380 381 381 The Mosquitto client publishes messages (payloads) on the topic **/device/a**. Of course, you can use any topic for testing. ... ... @@ -392,7 +392,7 @@ 392 392 == 5.2 Sending messages == 393 393 394 394 395 -On your computer'sterminal, issue the following MQTT command which simulates the device'**Device A'**. The message payload contains the fieldsIMEI,temperature,humidity,and pressure,which hold the values 350693903995577,30, 80,and1005respectively. This payload is also (technically) known as telemetry.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. 396 396 397 397 {{code language="none"}} 398 398 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}' ... ... @@ -404,9 +404,11 @@ 404 404 [[image:integration-active.png]] 405 405 406 406 407 -== 5.3 Viewing messages == 408 408 409 409 438 +== 6.3 Viewing messages == 439 + 440 + 410 410 Go back to the **Integrations** page. 411 411 412 412 Click on the **MQTT integration NB/CB** in the **Integrations** page to see its details. ... ... @@ -422,28 +422,21 @@ 422 422 Then click on the **Apply changes** (//**tick icon**//) button. 423 423 424 424 425 -[[image: debug-enabled.png||height="301"width="700"]]456 +[[image:Screenshot 2025-03-18 at 09.23.10.png]] 426 426 427 427 428 - 429 - 430 430 Now go to the **Events** tab. 431 431 432 -Select the **Event type**as **Debug** from the dropdown list.461 +Select the Event type as **Debug** from the dropdown list. 433 433 434 - Publish anothermessage (of course,you canrepeatthe previousmessagebypressing theUParrowonyourkeyboardandthen pressEnter key) toyourMQTT brokerfromyour terminal, for example: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. 435 435 436 -{{code language="none"}} 437 -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}' 438 -{{/code}} 439 439 440 -Now you can see that uplink message in the **Events** tab (Click the **refresh** button if you didn't see any messages in the Events tab). The status should be **OK **if there is no errors in your integration. 441 - 442 - 443 443 [[image:Screenshot 2025-03-26 at 19.49.31.png]] 444 444 445 445 446 446 470 + 447 447 Then click on the **three dots (...)** in the **Message** column. You can see the uplink message's **payload** in the **Message** window. 448 448 449 449 ... ... @@ -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 =482 += 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}}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}} 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 **DeviceA**device you provisioned.530 +* **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}} 536 +[[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}'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}' 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}'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}' 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}' 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 + 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 PhysicalNB-IoT Sensor =565 += 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,12 @@ 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 fieldsinthepayload, IMEI, IMSI, Model, temperature, etc**. Note that we have created a device named**TS01-NB** in the**Devices**sectioninadvance.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**. 567 567 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}} 568 568 569 569 [[image:image-4.png]] 594 + 595 +
- 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
- data-converters-list.png
-
- Size
-
... ... @@ -1,1 +1,1 @@ 1 -1 9.0KB1 +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