<
From version < 157.1 >
edited by Dilisi S
on 2025/03/17 01:45
To version < 156.1 >
edited by Dilisi S
on 2025/03/17 00:34
>
Change comment: Uploaded new attachment "mqtt-uplink.png", version {1}

Summary

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. 011731f7xxxxxxxxxxxfbbedfc63f4.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' will create a device 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"]]
Copyright ©2010-2024 Dragino Technology Co., LTD. All rights reserved
Dragino Wiki v2.0