<
From version < 10.1 >
edited by Dilisi S
on 2025/03/03 02:31
To version < 11.1 >
edited by Dilisi S
on 2025/03/03 02:31
>
Change comment: Mar 2 edits - part 1

Summary

Details

Page properties
Content
... ... @@ -7,4 +7,247 @@
7 7  
8 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 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('');
10 10  
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