Changes for page ThingsBoard

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

From version 203.1
edited by Dilisi S
on 2025/04/21 16:48
Change comment: Uploaded new attachment "data-converters-list.png", version {1}
To 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}

Summary

Details

Page properties
Content
... ... @@ -164,37 +164,18 @@
164 164  [[image:ins1.png||height="310" width="500"]]
165 165  
166 166  
167 -= 3. Creating Devices (Optional) =
168 168  
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}}
168 += 3. Data Converters =
172 172  
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.
174 174  
175 -
176 -In the left navigation, click **Entities -> Devices**.
177 -
178 -Click the **Add Device** button (the button with the **+** sign), and from the dropdown menu, click **Add new device**.
179 -
180 -In the **Add new device** dialog box, enter the device name in the **Name** text box. For example, we will use **Device A**.
181 -
182 -Click the **Add** button.
183 -
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 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 193  
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**.
194 194  
195 -== 4.1 Uplink ==
196 196  
176 +== 3.1 Uplink ==
197 197  
178 +
198 198  In the left navigation, click **Integrations center**, and then click **Data converters**.
199 199  
200 200  
... ... @@ -201,7 +201,7 @@
201 201  [[image:data-converters-list-empty.png]]
202 202  
203 203  
204 -On the **Data converters** page, click on the ‘**+**’ button, and then click on the **Create new converter** from the dropdown menu.
185 +On the **Data converters** page, click on the ‘**+**’ button, and then click on **Create new converter** from the dropdown menu.
205 205  
206 206  
207 207  
... ... @@ -208,79 +208,67 @@
208 208  [[image:create-new-converter-menu.png||height="259" width="500"]]
209 209  
210 210  
211 -The **Add data converter** window will appear.
192 +The **Add data converter** window appears.
212 212  
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**.
194 +Name it ‘**MQTT Uplink Converter**’ and select the Type as **Uplink**.
214 214  
215 215  Click on the **TBEL** button if it has not been selected by default.
216 216  
217 -Modify the default TBEL function to match with your device as described below:
198 +Replace the default TBEL decoder function with the following universal TBEL decoder function, which decodes MQTT payload from any Dragino NB-IoT device.
218 218  
219 219  
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 -
237 237  {{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 -
247 247  // decode payload to JSON
203 +var pattern = "yyyy/MM/dd HH:mm:ss";
204 +var objdata = {};
205 +var obj1 = {};
248 248  var data = decodeToJson(payload);
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 - }
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
280 280  };
281 -
282 -/** Helper functions 'decodeToString' and 'decodeToJson' are already built-in **/
283 -
284 284  return result;
285 285  {{/code}}
286 286  
... ... @@ -288,18 +288,18 @@
288 288  Once you modify the decoder function, click on the **Add** button.
289 289  
290 290  
260 +[[image:mqtt-uplink-converter.png||height="498" width="500"]]
291 291  
292 -[[image:ul-data-converter-device-a.png||height="524" width="500"]]
293 293  
294 294  
295 295  You should see that the newly added **MQTT Uplink converter **NB/CB is listed on the **Data Converters** page.
296 296  
297 297  
298 -[[image:ul-data-converter-added.png||height="257"]]
299 299  
268 +[[image:data-converters-list.png]]
300 300  
301 301  
302 -= 5. Add Integration =
271 += 4. Add Integration =
303 303  
304 304  
305 305  In the left navigation, click **Integrations center**, and then click **Integrations**.
... ... @@ -401,10 +401,10 @@
401 401  
402 402  
403 403  
404 -= 6. Verifying the receipt of data from virtual devices =
373 += 5. Verifying the receipt of data from virtual devices =
405 405  
406 406  
407 -== 6.1 How does it work? ==
376 +== 5.1 How does it work? ==
408 408  
409 409  
410 410  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.
... ... @@ -435,7 +435,7 @@
435 435  [[image:integration-active.png]]
436 436  
437 437  
438 -== 6.3 Viewing messages ==
407 +== 5.3 Viewing messages ==
439 439  
440 440  
441 441  Go back to the **Integrations** page.
... ... @@ -486,7 +486,7 @@
486 486  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.
487 487  
488 488  
489 -= 7. Creating a Dashboard =
458 += 6. Creating a Dashboard =
490 490  
491 491  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.
492 492  
add-integration-part-1.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.pradeeka
Size
... ... @@ -1,0 +1,1 @@
1 +48.6 KB
Content