Hide last authors
Dilisi S 1.1 1 **Table of Contents:**
2
3 {{toc/}}
4
Dilisi S 16.1 5 {{warning}}
6 Draft Document
7 {{/warning}}
Dilisi S 1.1 8
9 = Introduction =
10
Dilisi S 2.1 11 This document guides you on integrating Dragino -NB and -CB series devices with ThingsBoard. For this guide, we use ThingsBoard Cloud, which is one of the ThingsBoard versions that allows you to try it for free.
12
Dilisi S 17.1 13 For example, the following devices fall into the -NB and -CB series:
Dilisi S 11.1 14
Dilisi S 17.1 15 (% style="width:556px" %)
16 |(% style="width:261px" %)**NB Series**|(% style="width:293px" %)**CB Series**
17 |(% style="width:261px" %)S31B-NB|(% style="width:293px" %)S31-CB
18 |(% style="width:261px" %) |(% style="width:293px" %)
19
20
21
Dilisi S 11.1 22 = Add New Device =
23
24 In the left navigation, click **Entities** and then click **Devices**.
25
26
27 [[image:ThingsBoard-Device.png]]
28
29
30 On the ‘**Devices**’ page, click on the ‘**+**’ button, and then click on the ‘**Add new device**’ from the dropdown menu.
31
32
33 [[image:ThingsBoard-add-new-device.png||height="279" width="500"]]
34
35
36
37 = Data Converters =
38
39
40 == Uplink ==
41
42 In the left navigation, click ‘Integrations center’, and then click ‘Data converters’.
43
44
45 [[image:ThingsBoard-Data-Converters.png]]
46
47
48 On the ‘Data converters’ page, click on the ‘+’ button, and then click on the ‘Create new converter’ from the dropdown menu.
49
50
51 [[image:ThingsBoard-new-data-converter.png||height="282" width="500"]]
52
53
54 The ‘Add data converter’ window will appear. Name it ‘**UDP Uplink Converter NB/CB**’ and select the Type as ‘Uplink’.
55
56 Click on the ‘JavaScript’ button. Now copy and paste the following script to the ‘Decoder function’ section:
57
58 {{code language="JavaScript"}}
59 //Version: 0.1
60 // decode payload to string
61 var payloadStr = decodeToString(payload);
62
63 // decode payload to JSON
64 var objdata = {};
65 var obj1 = {};
66 var data = decodeToJson(payload);
67 var deviceName = data.IMEI;
68 delete data.IMEI;
69 var modelname = "Dragino " + data.Model;
70 //var mod = data.mod
71 delete data.Model;
72 //delete data.mod
73 var timestamp = new Date().getTime();
74
75 for (var key in data) {
76
77 if (Number(key)) {
78 obj1[key] = data[key];
79 obj1[key][obj1[key].length - 1] = Number(new Date(
80 obj1[key][obj1[key].length - 1]));
81
82 }
83 //Alec submitted25/02/25
84 //turn old key into new
85 else if (key === "Reading") {
86 objdata["reading"] = data[key];
87 } else if (key === "work mode") {
88 objdata["work_mode"] = data[key];
89 } else if (key === "hum") {
90 objdata["humidity"] = data[key];
91 }else if (key === "hum2") {
92 objdata["humidity2"] = data[key];
93 } else if (key === "hum3") {
94 objdata["humidity3"] = data[key];
95 } else if (key === "tem") {
96 objdata["temperature"] = data[key];
97 } else if (key === "tem2") {
98 objdata["temperature2"] = data[key];
99 } else if (key === "tem3") {
100 objdata["temperature3"] = data[key];
101 } else if (key === "DS18B20_Temp") {
102 objdata["temperature_pro"] = data[key];
103 } else if (key === "ds18b20_temperature") {
104 objdata["temperature_pro"] = data[key];
105 } else if (key === "DS18B20_temperature_pro") {
106 objdata["temperature_pro"] = data[key];
107 } else if (key === "tdc send flag") {
108 objdata["tdc_send_flag"] = data[key];
109 } else if (key === "trigger mode") {
110 objdata["trigger_mode"] = data[key];
111 } else if (key === "soil dielectric constant") {
112 objdata["soil_dielectric_constant"] = data[key];
113 } else if (key === "door open num") {
114 objdata["door_open_num"] = data[key];
115 } else if (key === "door duration") {
116 objdata["door_duration"] = data[key];
117 } else if (key === "count time") {
118 objdata["count_time"] = data[key];
119 } else if (key === "last open time2") {
120 objdata["last_open_time2"] = data[key];
121 } else if (key === "last open time3") {
122 objdata["last_open_time3"] = data[key];
123 }
124 //Alec submitted25/02/25
125 else {
126 objdata[key] = data[key]
127 }
128 }
129 var listdata = [{
130 "ts": timestamp,
131 "values": objdata
132 }]
133 for (var key1 in obj1) {
134 if (modelname == "Dragino RS485-NB") {
135 listdata.push({
136 "ts": obj1[key1][obj1[key1].length - 1],
137 "values": {
138 "Payload": obj1[key1][0],
139 }
140 })
141 } else {
142 listdata.push({
143 "ts": obj1[key1][obj1[key1].length - 1],
144 "values": {
145 "values": obj1[key1]
146 },
147 })
148 }
149 }
150 var result = {
151
152 deviceName: deviceName,
153 deviceType: modelname,
154 attributes: {
155 model: modelname,
156 //customerName: "NB-CB",
157 //groupName: "NB-CB",
158 //integrationName: metadata['integrationName']
159
160 },
161 telemetry: listdata
162 }
163
164 function decodeToString(payload) {
165 return String.fromCharCode.apply(String, payload);
166 }
167
168 function decodeToJson(payload) {
169 // covert payload to string.
170 var str = decodeToString(payload);
171
172 // parse string to JSON
173 var data = JSON.parse(str);
174 return data;
175 }
176
177 return result;
178
179 {{/code}}
180
181 Click on the ‘Add’ button.
182
183
184 [[image:ThingsBoard-add-data-converter-uplink.png||width="500"]]
185
186
187 The uplink data converter is added to ThingsBoard and appears on the ‘Data Converters’ page
188
189
190 == Downlink ==
191
192 On the ‘Data converters’ page, click on the ‘+’ button, and then click on the ‘Create new converter’ from the dropdown menu.
193
194
195 [[image:ThingsBoard-new-data-converter.png||height="282" width="500"]]
196
197
198 The ‘**Add data converter**’ window will appear. Name it ‘**UDP Downlink Converter NB/CB**’ and select the Type as ‘**Downlink**’.
199
200 Click on the ‘**JavaScript**’ button. Now copy and paste the following script to the ‘**Encoder function**’ section:
201
202
203 {{code language="JavaScript"}}
204 function hexToBase64(hexString) {
205 // 将16进制字符串两个字符转换为一个字节
206 var bytes = hexString.match(/.{2}/g);
207 // 对每个字节进行解析,并转换为对应的字符
208 var binaryString = bytes.map(function(byte) {
209 return String.fromCharCode(parseInt(byte, 16));
210 }).join('');
Dilisi S 1.1 211
Dilisi S 11.1 212 // 使用btoa进行base64编码
213 return btoa(binaryString);
214 }
215
216 // Result object with encoded downlink payload
217 var result = {
218 // downlink data content type: JSON, TEXT or BINARY (base64 format)
219 contentType: "BINARY",
220
221 // downlink data
222 data:hexToBase64(metadata.shared_value)
223
224 // Optional metadata object presented in key/value format
225 //metadata: {}
226
227 };
228
229 return result;
230 {{/code}}
231
232
233 Click on the **Add** button.
234
235
236 [[image:ThingsBoard-add-data-converter-downlink.png||height="532" width="500"]]
237
238
239 = Add Integration =
240
241 In the left navigation, click ‘Integrations center’, and then click ‘Integrations’.
242
243 On the ‘Integrations’ page, click on the “+” button.
244
245
246 [[image:ThingsBoard-add-integration.png]]
247
248
249 The ‘Add integration’ window appears.
250
251 In the Add Integration window, configure the following settings:
252
253 **Basic settings:**
254
255 * **Integration type**: UDP
256 * **Name**: UDP Integration NB/CB
257
258 Click **Next** button.
259
260
Dilisi S 16.1 261 [[image:add-integration-basic-settings.png||height="511" width="500"]]
Dilisi S 11.1 262
263
Dilisi S 16.1 264 **Uplink data converter:**
Dilisi S 11.1 265
Dilisi S 16.1 266 * Click on the ‘**Select existing**’ button.
267 * Uplink data converter: Select ‘**UDP Uplink Converter NB/CB**’ from the dropdown list.
268
269 Click **Next** button.
270
271
272 [[image:add-integration-uplink-data-converter.png||height="511" width="500"]]
273
274
275 **Downlink data converter:**
276
277 * Click on the ‘**Select existing**’ button.
278 * Downlink data converter: Select ‘**UDP Downlink Converter NB/CB**’ from the dropdown list.
279
280 Click **Next** button.
281
282
283 [[image:add-integration-downlink-data-converter.png||height="512" width="500"]]
284
285
286 **Connection:**
287
288 **Port**: 11582
289
290 **Size of the buffer for inbound socket (in KB)**: 64
291
292 **Cache Size**: 10000000
293
294 **Cache time to live in minutes**: 1440
295
296
297 Copy the two keys, **Integration key** and **Integration secret** into a text editor, as you will need them in the section ‘xxxxx’.
298
299 Click on the **Add** button.
300
301
302 [[image:add-integration-connection.png||height="511" width="500"]]
303
304
305
306 = Verifying the receipt of data from the device =
307
308 Connect **S31B-NB** to transfer information. If the integration was performed without errors, after the transmission of the first telemetry, a new device with the name “xxxxx” will appear in the Devices → All. Also, you can verify the input and output data, respectively, before and after conversion in Data converters → UDP Uplink Converter NB/CB → Events.
309
310
Dilisi S 11.1 311
Copyright ©2010-2024 Dragino Technology Co., LTD. All rights reserved
Dragino Wiki v2.0