Changes for page ThingsBoard

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

From version 204.1
edited by Dilisi S
on 2025/04/21 16:49
Change comment: April 21 edits - part 1
To version 203.1
edited by Dilisi S
on 2025/04/21 16:48
Change comment: Uploaded new attachment "data-converters-list.png", version {1}

Summary

Details

Page properties
Content
... ... @@ -164,18 +164,37 @@
164 164  [[image:ins1.png||height="310" width="500"]]
165 165  
166 166  
167 += 3. Creating Devices (Optional) =
167 167  
168 -= 3. Data Converters =
169 +{{info}}
170 +**The following procedure is optional. If you haven't created any device in ThingsBoard first, ThingsBoard will automatically create a device for you based on the integration settings (the device name defined in the uplink decoder) just after it receives the first uplink from your device.**
171 +{{/info}}
169 169  
173 +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**.
176 +In the left navigation, click **Entities -> Devices**.
174 174  
178 +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 ==
180 +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  
182 +Click the **Add** button.
178 178  
184 +Skip the **connectivity testing** by clicking the **Close** button.
185 +
186 +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.
187 +
188 +
189 += 4. Data Converters =
190 +
191 +
192 +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.
193 +
194 +
195 +== 4.1 Uplink ==
196 +
197 +
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.
204 +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.
211 +The **Add data converter** window will appear.
193 193  
194 -Name it ‘**MQTT Uplink Converter**’ and select the Type as **Uplink**.
213 +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.
217 +Modify the default TBEL function to match with your device as described below:
199 199  
200 200  
220 +* Uncomment** line 11**:
221 +
222 +//var data = decodeToJson(payload)//
223 +
224 +
225 +* **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.
226 +* From **line 38**: Modify the telemetry section to allow parsed data to be assigned to the fields.
227 +
228 +//telemetry: {
229 + temperature: data.temperature,
230 + humidity: data.humidity,
231 + rawData: payloadStr
232 + }//
233 +
234 +
235 +The modified uplink decoder function to match with **Device A** is shown below.
236 +
201 201  {{code language="JavaScript"}}
238 +// Decode an uplink message from a buffer
239 +// payload - array of bytes
240 +// metadata - key/value object
241 +
242 +/** Decoder **/
243 +
244 +// decode payload to string
245 +var payloadStr = decodeToString(payload);
246 +
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
249 +
250 +var deviceName = 'Device A';
251 +var deviceType = 'thermostat';
252 +var customerName = 'Customer C';
253 +var groupName = 'thermostat devices';
254 +var manufacturer = 'Example corporation';
255 +// use assetName and assetType instead of deviceName and deviceType
256 +// to automatically create assets instead of devices.
257 +// var assetName = 'Asset A';
258 +// var assetType = 'building';
259 +
260 +// Result object with device/asset attributes/telemetry data
261 +var result = {
262 +// Use deviceName and deviceType or assetName and assetType, but not both.
263 + deviceName: deviceName,
264 + deviceType: deviceType,
265 +// assetName: assetName,
266 +// assetType: assetType,
267 +// customerName: customerName,
268 + groupName: groupName,
269 + attributes: {
270 + model: 'Model A',
271 + serialNumber: 'SN111',
272 + integrationName: metadata['integrationName'],
273 + manufacturer: manufacturer
274 + },
275 + telemetry: {
276 + temperature: data.temperature,
277 + humidity: data.humidity,
278 + rawData: payloadStr
279 + }
252 252  };
281 +
282 +/** Helper functions 'decodeToString' and 'decodeToJson' are already built-in **/
283 +
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  
292 +[[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  
298 +[[image:ul-data-converter-added.png||height="257"]]
267 267  
268 -[[image:data-converters-list.png]]
269 269  
270 270  
271 -= 4. Add Integration =
302 += 5. Add Integration =
272 272  
273 273  
274 274  In the left navigation, click **Integrations center**, and then click **Integrations**.
... ... @@ -370,10 +370,10 @@
370 370  
371 371  
372 372  
373 -= 5. Verifying the receipt of data from virtual devices =
404 += 6. Verifying the receipt of data from virtual devices =
374 374  
375 375  
376 -== 5.1 How does it work? ==
407 +== 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 ==
438 +== 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 =
489 += 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