Wiki source code of Connect Devices to ThingsEye

Last modified by Hera Guo on 2025/09/25 09:23

Show last authors
1
2
3 **Table of Contents:**
4
5 {{toc/}}
6
7
8 = 1. Overview =
9
10 This instructions will show you how to connect a device that has been registered to the server to the Thingseye platform.
11
12
13 = 2. UDP Procotol  ~-~- Directly Connection =
14
15 == 2.1 UDP Interface ==
16
17 * Server Address: server1.thingseye.io
18 * Port: 11560
19
20 The data sent to above UDP interface will not go directly to client's database.
21
22 Please contact ThingsEye team for detail how to forward data to client.
23
24 **Note:Currently udp connections require port forwarding, please contact the ThingsEye team to inform them of your device's IMEI before connecting.**
25
26
27 ----
28
29 == 2.2 Test with Dragino NB device ==
30
31 === 2.2.1 Configure NB-IoT End Node ===
32
33 Device here is **[[S31-NB>>https://www.dragino.com/products/temperature-humidity-sensor/item/288-s31-nb-s31b-nb.html]]** : and have been configure below
34
35 * Set to use ThingsEye UDP server: **AT+SERVADDR=server1.thingseye.io,11560**
36 * Use UDP Uplink & Json protocol:** AT+PRO=2,5**
37 * Equip with a NB-IoT SIM Card to access to NB-IoT Network.
38
39 The S31-NB's cellular module has the IMEI: **863663062789483**
40
41 === 2.2.2 Check Uplink Data ===
42
43 Turn on debug mod
44
45 [[image:1758762334133-608.png||height="494" width="1003"]]
46
47 ----
48
49 Re-activate the S31-NB, and we can see it in the debug window:
50
51 [[image:1758762371290-726.png||height="528" width="1005"]]
52
53 [[image:1728378218744-800.png||_mstalt="295269" height="431" width="1003"]]
54
55 ----
56
57 === 2.2.4 Auto-Create Device ===
58
59 The default **Tenant UDP Server** has already been configured to decode the Dragino -NB / -CB NB-IoT node. So once each end node sends a data to server. Tenant will auto create the device in the server.
60
61 [[image:1728378968101-683.png||_mstalt="297154" height="210" width="1005"]]
62
63 [[image:1728379050044-764.png||_mstalt="295282" height="326" width="1009"]]
64
65
66 ----
67
68 = 3.  Connect to The Things Stack =
69
70 == 3.1 Network Structure ==
71
72 The network diagram below illustrates the connection between the devices and The Things Stack, as well as how the data can be integrated with the ThingsEye IoT platform.
73
74 [[image:1732679444539-853.jpg||_mstalt="296933" height="388" width="1452"]]
75
76 == 3.2 Creat Integration for The Things Stack. ==
77
78 (% class="lead" %)
79 Add Integration
80
81 [[image:1728535775119-971.png||_mstalt="297661" height="423" width="1007"]]
82
83
84 (% class="lead" %)
85 Choose Connection Type
86
87 [[image:1728535857345-950.png||_mstalt="297154" height="257" width="403"]]
88
89
90 (% class="lead" %)
91 Input Uplink Data Converter Code
92
93 [[image:1728535941851-388.png||_mstalt="297856" height="466" width="398"]]
94
95 Demo JavaScript Code: [[https:~~/~~/raw.githubusercontent.com/ThingsEye-io/te-platform/refs/heads/main/Data%20Converters/The_Things_Network_MQTT_Uplink_Converter.js >>https://raw.githubusercontent.com/ThingsEye-io/te-platform/refs/heads/main/Data%20Converters/The_Things_Network_MQTT_Uplink_Converter.js]]
96
97
98 (% class="lead" %)
99 Input Downlink Converter
100
101 [[image:1728536142721-488.png||_mstalt="296127" height="470" width="407"]]
102
103 Example Javascript Code as below: [[https:~~/~~/raw.githubusercontent.com/ThingsEye-io/te-platform/refs/heads/main/Data%20Converters/The_Things_Network_MQTT_Downlink_Converter.js>>https://raw.githubusercontent.com/ThingsEye-io/te-platform/refs/heads/main/Data%20Converters/The_Things_Network_MQTT_Downlink_Converter.js]]
104
105
106 (% class="lead" %)
107 Set up Connection to The Things Network application
108
109 [[image:1728536305503-380.png||_mstalt="293254" height="431" width="1019"]]
110
111
112
113 (% class="lead" %)
114 Test Connection & Add iIntegration
115
116 [[image:1728536374214-962.png||_mstalt="295893" height="380" width="1024"]]
117
118 After add , we can see the integration here:
119
120 [[image:1728536420275-153.png||_mstalt="293748" height="152" width="1026"]]
121
122
123 == 3.3 Test Uplink ==
124
125 We can use Simulate Uplink to simulate an uplink in the things stack. Then we should be able to see the message in ThingsEye
126
127 [[image:1728536524638-768.png||_mstalt="298870" height="473" width="1028"]]
128
129
130 [[image:1728536541040-814.png||_mstalt="293215" height="424" width="1026"]]
131
132
133 ----
134
135 = 4.Connect chirpstack to Thingseye by way of MQTT =
136
137 * **How to connect chirpstack to Thingseye by way of MQTT? The following tutorial will show you**
138
139 == 4.1 Network Structure ==
140
141 The network diagram below illustrates the connection between the devices andchirpstack, as well as how the data can be integrated with the ThingsEye IoT platform.
142
143 [[image:1732679647697-982.jpg||_mstalt="299884" height="399" width="1492"]]
144
145 == 4.2 Thingseye adds MQTT integration ==
146
147 Go to the Integrations page in the Integrations center section. Click the plus button to start adding a new integration. Select the type "MQTT" integration and click "Next";
148
149 [[image:1758762634175-353.png||height="783" width="1020"]]
150
151 == 4.3 Add an uplink and downlink data converter ==
152
153 In the function decoder field, specify the uplink script to parse and transform the data.
154
155 [[image:1758763061703-634.png||height="783" width="1020"]]
156
157 * **Uplink——JavaScript:**
158
159 var data = decodeToJson(payload);
160
161 var deviceName = data.deviceInfo.deviceName;
162
163 var deviceType = data.applicationName;
164
165 var devEui = data.deviceInfo.devEui
166
167 var label = data.deviceInfo.devEui
168
169 var model = {};
170
171 var data2 = data.object;
172
173 var flg = data.fPort
174
175 for (var key in data2) {
176
177 ~/~/ 将属性名存入新对象中
178
179 model[key] = data2[key];
180
181 }
182
183 ~/~/var obj = {"devid":deviceName}
184
185 var result = {
186
187 deviceName: deviceName,
188
189 deviceType: deviceType,
190
191 telemetry: model,
192
193 groupName: "Case Study",
194
195 ~/~/label:label,
196
197 attributes:{"devEui":devEui,
198
199 ~/~/"timevalue":"test",
200
201 "inactivityTimeout":1260000
202
203 ~/~/ "High_humidity_alarm":"not set",
204
205 ~/~/ "High_temperature_alarm":"not set",
206
207 ~/~/ "Low_humidity_alarm":"not set",
208
209 ~/~/ "Low_temperature_alarm":"not set",
210
211 ~/~/ "Low_voltage_alarm":"not set"
212
213 ~/~/"customerName": "Civionic Engineering & Consulting (2014) Inc."
214
215 }
216
217 };
218
219 function decodeToString(payload) {
220
221 return String.fromCharCode.apply(String, payload);
222
223 }
224
225 function decodeToJson(payload) {
226
227 var str = decodeToString(payload);
228
229 var data = JSON.parse(str);
230
231 return data;
232
233 }
234
235 return result;
236
237 ----
238
239 In the function decoder field, specify the downlink script to parse and transform the data.
240
241 [[image:1758763019466-819.png||height="787" width="1022"]]
242
243 * **Dowblink——JavaScript:**
244
245 ~/~/ Encode downlink data from incoming Rule Engine message
246
247 ~/~/ msg - JSON message payload downlink message json
248
249 ~/~/ msgType - type of message, for ex. 'ATTRIBUTES_UPDATED', 'POST_TELEMETRY_REQUEST', etc.
250
251 ~/~/ metadata - list of key-value pairs with additional data about the message
252
253 ~/~/ integrationMetadata - list of key-value pairs with additional data defined in Integration executing this converter
254
255 ~/~/ /~*~* Encoder ~*~*/
256
257 ~/~/var data = {"value":99};
258
259 ~/~/ ~/~/ Process data from incoming message and metadata
260
261 ~/~/ data.tempFreq = msg.temperatureUploadFrequency;
262
263 ~/~/ data.humFreq = msg.humidityUploadFrequency;
264
265 ~/~/ data.devSerialNumber = metadata['ss_serialNumber'];
266
267 ~/~/ ~/~/ Result object with encoded downlink payload
268
269 var result = {
270
271 ~/~/ downlink data content type: JSON, TEXT or BINARY (base64 format)
272
273 contentType: "TEXT",
274
275 ~/~/ downlink data
276
277 data: msg.shared_value ,~/~/JSON.stringify(data),
278
279 ~/~/ Optional metadata object presented in key/value format
280
281 metadata: {
282
283 topic: '/test/down/'+metadata.deviceName
284
285 }
286
287 };
288
289 return result;
290
291 ----
292
293 == 4.4 Configure the connection ==
294
295 Generate MQTT certificate integrated on chirpstack
296
297 Chirpstack generates CA certificate, TLS certificate, and TLS key respectively
298
299 They correspond to the CA certificate file, Certificate file, and Private key file on thingseye
300
301 [[image:图片4.png||_mstalt="5131737" height="504" width="1016"]]
302
303 [[image:图片5.png||_mstalt="5131854" height="505" width="1017"]]
304
305 * Copy the contents of the certificates and paste them into the linked file below, a total of three certificates are required
306
307 **Integrated Certificate File demo Download Address:**
308
309 [[https:~~/~~/github.com/ThingsEye-io/te-platform/tree/main/chirpstack>>https://github.com/ThingsEye-io/te-platform/tree/main/chirpstack]]
310
311 Enter the server address Host: lns1.thingseye.io on the Connection configuration
312
313 Port: 8883
314
315 Credentials type: PEM
316
317 Upload the certificate and key file
318
319 [[image:图片6.png||_mstalt="5131971" height="509" width="1026"]]
320
321 [[image:图片7.png||_mstalt="5132088" height="509" width="1025"]]
322
323 ----
324
325 The default for Topic is:
326
327 application/**chirpstack application id**/device/+/event/up
328
329 [[image:图片8.png||_mstalt="5132205" height="508" width="1024"]]
330
331
332 (% class="wikigeneratedid" %)
333 [[image:屏幕截图 2024-11-25 095805.png||_mstalt="10831028" height="301" width="1024"]]
334
335 ----
336
337 == 4.5 Check the connection ==
338
339 [[image:图片9.png||_mstalt="5132322" height="509" width="1025"]]
340
341 [[image:图片10.png||_mstalt="5142449" height="509" width="1026"]]
342
343
344 ----
345
346 = 5. Check Data Uplink Log =
347
348 User can check the devices log in Intergration.
349
350 [[image:1729562069134-315.png||_mstalt="294190" height="587" width="723"]]