Changes for page ThingsBoard
Last modified by Dilisi S on 2025/04/02 02:09
Summary
-
Page properties (1 modified, 0 added, 0 removed)
Details
- Page properties
-
- Content
-
... ... @@ -67,6 +67,7 @@ 67 67 [[image:thingsboard-6.png||height="244" width="500"]] 68 68 69 69 70 +(% class="wikigeneratedid" %) 70 70 == 2.2 HiveMQ Cloud == 71 71 72 72 === 2.2.1 HiveMQ Cloud === ... ... @@ -176,6 +176,7 @@ 176 176 In the left navigation, click **Integrations center**, and then click **Data converters**. 177 177 178 178 180 + 179 179 [[image:data-converters-list-empty.png]] 180 180 181 181 ... ... @@ -188,130 +188,34 @@ 188 188 189 189 The **Add data converter** window will appear. Name it ‘**MQTT Uplink Converter NB/CB**’ and select the Type as **Uplink**. 190 190 191 -Click on the ** JavaScript**button.193 +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. 192 192 193 -Delete the default decoder function in the code editor. Now copy and paste the following decoder function written in **JavaScript** in to the **code editor**. This decoder function is compatible for both NB and CB series devices. 194 - 195 - 196 196 {{code language="JavaScript"}} 197 -//Version: 0.1 196 +/** Decoder **/ 197 + 198 198 // decode payload to string 199 199 var payloadStr = decodeToString(payload); 200 +var data = JSON.parse(payloadStr); 200 200 202 +var deviceName = metadata.topic.split("/")[3]; 201 201 // decode payload to JSON 202 -var objdata = {}; 203 -var obj1 = {}; 204 -var data = decodeToJson(payload); 205 -var deviceName = data.IMEI; 206 -delete data.IMEI; 207 -var modelname = "Dragino " + data.Model; 208 -//var mod = data.mod 209 -delete data.Model; 210 -//delete data.mod 211 -var timestamp = new Date().getTime(); 204 +var deviceType = 'sensor'; 212 212 213 -for (var key in data) { 214 - 215 - if (Number(key)) { 216 - obj1[key] = data[key]; 217 - obj1[key][obj1[key].length - 1] = Number(new Date( 218 - obj1[key][obj1[key].length - 1])); 219 - 220 - } 221 -//Alec submitted25/02/25 222 -//turn old key into new 223 - else if (key === "Reading") { 224 - objdata["reading"] = data[key]; 225 - } else if (key === "work mode") { 226 - objdata["work_mode"] = data[key]; 227 - } else if (key === "hum") { 228 - objdata["humidity"] = data[key]; 229 - }else if (key === "hum2") { 230 - objdata["humidity2"] = data[key]; 231 - } else if (key === "hum3") { 232 - objdata["humidity3"] = data[key]; 233 - } else if (key === "tem") { 234 - objdata["temperature"] = data[key]; 235 - } else if (key === "tem2") { 236 - objdata["temperature2"] = data[key]; 237 - } else if (key === "tem3") { 238 - objdata["temperature3"] = data[key]; 239 - } else if (key === "DS18B20_Temp") { 240 - objdata["temperature_pro"] = data[key]; 241 - } else if (key === "ds18b20_temperature") { 242 - objdata["temperature_pro"] = data[key]; 243 - } else if (key === "DS18B20_temperature_pro") { 244 - objdata["temperature_pro"] = data[key]; 245 - } else if (key === "tdc send flag") { 246 - objdata["tdc_send_flag"] = data[key]; 247 - } else if (key === "trigger mode") { 248 - objdata["trigger_mode"] = data[key]; 249 - } else if (key === "soil dielectric constant") { 250 - objdata["soil_dielectric_constant"] = data[key]; 251 - } else if (key === "door open num") { 252 - objdata["door_open_num"] = data[key]; 253 - } else if (key === "door duration") { 254 - objdata["door_duration"] = data[key]; 255 - } else if (key === "count time") { 256 - objdata["count_time"] = data[key]; 257 - } else if (key === "last open time2") { 258 - objdata["last_open_time2"] = data[key]; 259 - } else if (key === "last open time3") { 260 - objdata["last_open_time3"] = data[key]; 261 - } 262 -//Alec submitted25/02/25 263 - else { 264 - objdata[key] = data[key] 265 - } 266 -} 267 -var listdata = [{ 268 - "ts": timestamp, 269 - "values": objdata 270 -}] 271 -for (var key1 in obj1) { 272 - if (modelname == "Dragino RS485-NB") { 273 - listdata.push({ 274 - "ts": obj1[key1][obj1[key1].length - 1], 275 - "values": { 276 - "Payload": obj1[key1][0], 277 - } 278 - }) 279 - } else { 280 - listdata.push({ 281 - "ts": obj1[key1][obj1[key1].length - 1], 282 - "values": { 283 - "values": obj1[key1] 284 - }, 285 - }) 286 - } 287 -} 206 +// Result object with device attributes/telemetry data 288 288 var result = { 289 - 290 290 deviceName: deviceName, 291 - deviceType: modelname,209 + deviceType: deviceType, 292 292 attributes: { 293 - model: modelname, 294 - //customerName: "NB-CB", 295 - //groupName: "NB-CB", 296 - //integrationName: metadata['integrationName'] 297 - 211 + integrationName: metadata['integrationName'], 298 298 }, 299 - telemetry: listdata 300 -} 213 + telemetry: { 214 + temperature: data.temperature, 215 + humidity: data.humidity, 216 + } 217 +}; 301 301 302 -function decodeToString(payload) { 303 - return String.fromCharCode.apply(String, payload); 304 -} 219 +/** Helper functions 'decodeToString' and 'decodeToJson' are already built-in **/ 305 305 306 -function decodeToJson(payload) { 307 - // covert payload to string. 308 - var str = decodeToString(payload); 309 - 310 - // parse string to JSON 311 - var data = JSON.parse(str); 312 - return data; 313 -} 314 - 315 315 return result; 316 316 {{/code}} 317 317 ... ... @@ -319,16 +319,16 @@ 319 319 Click on the **Add** button. 320 320 321 321 322 -[[image:mqtt-uplink.png||width="500"]] 323 323 229 +[[image:add-uplink-data-converter.png||height="529" width="500"]] 324 324 325 325 326 326 You should see that the newly added **MQTT Uplink converter **NB/CB is listed on the **Data Converters** page. 327 327 328 - 329 329 [[image:data-converter-list-showing-uplink-dc.png]] 330 330 331 331 237 + 332 332 == 3.2 Downlink == 333 333 334 334 ... ... @@ -386,6 +386,7 @@ 386 386 Click on the **Add** button. 387 387 388 388 295 + 389 389 [[image:add-downlink-data-converter.png||height="529" width="500"]] 390 390 391 391 ... ... @@ -395,6 +395,7 @@ 395 395 [[image:data-converters-list.png]] 396 396 397 397 305 + 398 398 = 4. Add Integration = 399 399 400 400 ... ... @@ -422,6 +422,7 @@ 422 422 Click **Next** button. 423 423 424 424 333 + 425 425 [[image:add-integration-basic-settings.png||height="511" width="500"]] 426 426 427 427 ... ... @@ -433,6 +433,7 @@ 433 433 Click **Next** button. 434 434 435 435 345 + 436 436 [[image:add-integration-uplink-data-converter.png||height="511" width="500"]] 437 437 438 438 ... ... @@ -444,18 +444,19 @@ 444 444 Click **Next** button. 445 445 446 446 357 + 447 447 [[image:add-integration-downlink-data-converter.png||height="511" width="500"]] 448 448 449 449 450 450 **Connection:** 451 451 452 -* **Host**: Cluster URL (Eg. 011731f7 xxxxxxxxxxxfbbedfc63f4.s1.eu.hivemq.cloud)363 +* **Host**: Cluster URL (Eg. 011731f7928541588a6cdfbbedfc63f4.s1.eu.hivemq.cloud) 453 453 * **Port**: 8883 454 454 * **Credentials**: Basic 455 455 * **Enable SSL**: YES 456 456 * **Username**: Username (from your HiveMQ Cloud Cluster with your credentials) 457 457 * **Password:** Password (from your HiveMQ Cloud Cluster with your credentials) 458 -* **Topic: v1/devices/+/telemetry**(the + replaces any 'device name'willcreateadevice in the Entities -> Devices)369 +* **Topic:** tb/mqtt-integration-tutorial/sensors/+/telemetry (the + replaces any 'device name' and creates devices in the Entities -> Devices) 459 459 * **QoS:** 0-At most once 460 460 461 461 [[image:add-integration-connection.png||height="511" width="500"]]