Wiki source code of ThingsBoard

Version 16.1 by Dilisi S on 2025/03/03 02:45

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