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