<
From version < 156.1 >
edited by Dilisi S
on 2025/03/17 00:34
To version < 157.1 >
edited by Dilisi S
on 2025/03/17 01:45
>
Change comment: There is no comment for this version

Summary

Details

Page properties
Content
... ... @@ -67,7 +67,6 @@
67 67  [[image:thingsboard-6.png||height="244" width="500"]]
68 68  
69 69  
70 -(% class="wikigeneratedid" %)
71 71  == 2.2 HiveMQ Cloud ==
72 72  
73 73  === 2.2.1 HiveMQ Cloud ===
... ... @@ -177,7 +177,6 @@
177 177  In the left navigation, click **Integrations center**, and then click **Data converters**.
178 178  
179 179  
180 -
181 181  [[image:data-converters-list-empty.png]]
182 182  
183 183  
... ... @@ -190,34 +190,130 @@
190 190  
191 191  The **Add data converter** window will appear. Name it ‘**MQTT Uplink Converter NB/CB**’ and select the Type as **Uplink**.
192 192  
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.
191 +Click on the **JavaScript** button.
194 194  
195 -{{code language="JavaScript"}}
196 -/** Decoder **/
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.
197 197  
195 +
196 +{{code language="JavaScript"}}
197 +//Version: 0.1
198 198  // decode payload to string
199 199  var payloadStr = decodeToString(payload);
200 -var data = JSON.parse(payloadStr);
201 201  
202 -var deviceName = metadata.topic.split("/")[3];
203 203  // decode payload to JSON
204 -var deviceType = 'sensor';
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();
205 205  
206 -// Result object with device attributes/telemetry data
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 +}
207 207  var result = {
289 +
208 208   deviceName: deviceName,
209 - deviceType: deviceType,
291 + deviceType: modelname,
210 210   attributes: {
211 - integrationName: metadata['integrationName'],
293 + model: modelname,
294 + //customerName: "NB-CB",
295 + //groupName: "NB-CB",
296 + //integrationName: metadata['integrationName']
297 +
212 212   },
213 - telemetry: {
214 - temperature: data.temperature,
215 - humidity: data.humidity,
216 - }
217 -};
299 + telemetry: listdata
300 +}
218 218  
219 -/** Helper functions 'decodeToString' and 'decodeToJson' are already built-in **/
302 +function decodeToString(payload) {
303 + return String.fromCharCode.apply(String, payload);
304 +}
220 220  
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 +
221 221  return result;
222 222  {{/code}}
223 223  
... ... @@ -225,16 +225,16 @@
225 225  Click on the **Add** button.
226 226  
227 227  
322 +[[image:mqtt-uplink.png||width="500"]]
228 228  
229 -[[image:add-uplink-data-converter.png||height="529" width="500"]]
230 230  
231 231  
232 232  You should see that the newly added **MQTT Uplink converter **NB/CB is listed on the **Data Converters** page.
233 233  
328 +
234 234  [[image:data-converter-list-showing-uplink-dc.png]]
235 235  
236 236  
237 -
238 238  == 3.2 Downlink ==
239 239  
240 240  
... ... @@ -292,7 +292,6 @@
292 292  Click on the **Add** button.
293 293  
294 294  
295 -
296 296  [[image:add-downlink-data-converter.png||height="529" width="500"]]
297 297  
298 298  
... ... @@ -302,7 +302,6 @@
302 302  [[image:data-converters-list.png]]
303 303  
304 304  
305 -
306 306  = 4. Add Integration =
307 307  
308 308  
... ... @@ -330,7 +330,6 @@
330 330  Click **Next** button.
331 331  
332 332  
333 -
334 334  [[image:add-integration-basic-settings.png||height="511" width="500"]]
335 335  
336 336  
... ... @@ -342,7 +342,6 @@
342 342  Click **Next** button.
343 343  
344 344  
345 -
346 346  [[image:add-integration-uplink-data-converter.png||height="511" width="500"]]
347 347  
348 348  
... ... @@ -354,19 +354,18 @@
354 354  Click **Next** button.
355 355  
356 356  
357 -
358 358  [[image:add-integration-downlink-data-converter.png||height="511" width="500"]]
359 359  
360 360  
361 361  **Connection:**
362 362  
363 -* **Host**: Cluster URL (Eg. 011731f7928541588a6cdfbbedfc63f4.s1.eu.hivemq.cloud)
452 +* **Host**: Cluster URL (Eg. 011731f7xxxxxxxxxxxfbbedfc63f4.s1.eu.hivemq.cloud)
364 364  * **Port**: 8883
365 365  * **Credentials**: Basic
366 366  * **Enable SSL**: YES
367 367  * **Username**: Username (from your HiveMQ Cloud Cluster with your credentials)
368 368  * **Password:** Password (from your HiveMQ Cloud Cluster with your credentials)
369 -* **Topic:** tb/mqtt-integration-tutorial/sensors/+/telemetry (the + replaces any 'device name' and creates devices in the Entities -> Devices)
458 +* **Topic: v1/devices/+/telemetry** (the + replaces any 'device name' will create a device in the Entities -> Devices)
370 370  * **QoS:** 0-At most once
371 371  
372 372  [[image:add-integration-connection.png||height="511" width="500"]]
Copyright ©2010-2024 Dragino Technology Co., LTD. All rights reserved
Dragino Wiki v2.0