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