Wiki source code of Notes for ChirpStack

Version 108.9 by Xiaoling on 2022/07/23 14:21

Show last authors
1 **~ Table of Contents:**
2
3 {{toc/}}
4
5
6
7
8 = 1.  Introduction =
9
10
11 (% style="color:black" %)The ChirpStack open-source LoRaWAN Network Server stack provides open-source components for LoRaWAN networks And the Chirpstack supports the users in building a private LoRaWAN Server. For more info please refer to this [[link>>url:https://www.chirpstack.io/]]
12
13 (((
14 (% style="color:black" %)The dragino gateway can connect the ChirpStack server via Semtech UDP or Semtech Basic Station.
15
16
17 )))
18
19 (% style="color:blue" %)**Prerequisite:**
20
21 **1) Have a Chirstack Server.**
22
23 [[image:image-20220525100058-1.png]]
24
25 ChirpStack home page
26
27
28
29 **2) Gateway model support**
30
31 (% class="box" %)
32 (((
33 (((
34 Semtech UDP : **All Model**
35 Basic Station : [[LIG16>>url:http://www.dragino.com/products/lora-lorawan-gateway/item/171-lig16.html]], [[LG308>>url:http://www.dragino.com/products/lora-lorawan-gateway/item/140-lg308.html]], [[DLOS8>>url:http://www.dragino.com/products/lora-lorawan-gateway/item/160-dlos8.html]] [[LPS8>>url:http://www.dragino.com/products/lora-lorawan-gateway/item/148-lps8.html]]
36 (% style="color:red" %)**Note** (%%): the firmware needs >[[lgw~~-~~-build-v5.4.1640315898>>url:https://www.dragino.com/downloads/index.php?dir=LoRa_Gateway/LPS8/Firmware/Release/]]  if use the Bais station
37 )))
38 )))
39
40
41
42 = 2.  Semtech UDP =
43
44 == 2.1  Step 1. Add the Network-servers ==
45
46
47 The network-Servers address varies depending on the ChirpStack server setup environment
48
49 (% class="box" %)
50 (((
51 Windows       ~-~->  Network-server server *  :  localhost:8000
52 Linux  ~-~->  Network-server server *  :  chirpstack-network-server:8000
53 )))
54
55
56 (% style="color:red" %)**If the user cannot add network-Servers, re-check the ChirpStack code or the server building process.**
57
58
59 [[image:image-20220531171609-1.png]]
60
61 Add the Network-servers
62
63
64
65 == 2.2  Step 2. Create Gateway-profiles ==
66
67
68 [[image:image-20220531171651-2.png]]
69
70 Create Gateway-profiles
71
72
73
74 == 2.3  Step 3. Create Service-profiles ==
75
76
77 [[image:image-20220531171809-3.png]]
78
79 Create Service-profiles
80
81
82 In Step 3. Create Service-profiles, the above parameters can be set. If necessary, you can set them by yourself. This is only an example.
83
84 (% style="color:red" %)**Note : Before add the gateway, the user needs to complete the preceding three steps.**
85
86 If the user has completed the preceding steps, proceed to the next step.(% style="display:none" %)
87
88
89
90 == 2.4  Step 4. Add the gateway ==
91
92
93 The example gateway id is: a840411e96744150
94
95 (((
96 (% style="color:red" %)**Note : The Gateway EUI and server addresses must match the ChirpStack configuration.**
97
98
99 )))
100
101 [[image:image-20220531171923-4.png]](% style="display:none" %)
102
103 Add the gateway
104
105
106
107 [[image:image-20220531172031-5.png]]
108
109 Configure the gateway
110
111
112
113 == 2.5  Step 5. Checking gateway Status ==
114
115
116 [[image:image-20220531172158-6.png]](% style="display:none" %)
117
118
119
120 gateway Status
121
122 [[image:image-20220531172304-7.png]]
123
124 gateway Status
125
126
127
128 = 3.  Gateway Registration for Basics Station =
129
130
131 == 3.1  Introduction ==
132
133
134 The [[Semtech Basic Station>>url:https://doc.sm.tc/station/]] backend implements the [[LNS protocol>>url:https://doc.sm.tc/station/tcproto.html]]. It exposes a WebSocket handler to which Basic Station powered gateways can connect.
135
136 ChirpStack Open-Source LoRaWAN® Network Server needs to set up a configuration that can use Semtech BasicStation.
137
138
139 (% style="color:blue" %)**Below list the support products and Requirements:**
140
141 1. LoRaWAN Gateway model: [[LIG16>>url:http://www.dragino.com/products/lora-lorawan-gateway/item/171-lig16.html]], [[LG308>>url:http://www.dragino.com/products/lora-lorawan-gateway/item/140-lg308.html]], [[DLOS8>>url:http://www.dragino.com/products/lora-lorawan-gateway/item/160-dlos8.html]] ,[[LPS8>>url:http://www.dragino.com/products/lora-lorawan-gateway/item/148-lps8.html]]
142 1. Firmware version since :[[lgw~~-~~-build-v5.4.1651822913>>url:https://www.dragino.com/downloads/index.php?dir=LoRa_Gateway/LPS8/Firmware/Test_Firmware/lgw--build-v5.4.1651822913-20220506-1543/]]
143
144
145 (% style="color:blue" %)**How to set up chirpStack Basic Station**
146
147 Users can check out the ChirpStack Basic Station [[link>>https://www.chirpstack.io/gateway-bridge/backends/basic-station/]] and [[forum>>https://forum.chirpstack.io/search?q=basic%20station]]
148
149
150 (% style="color:blue" %)**What do you need to prepare**
151
152 A gateway that can access the internet normally
153
154
155
156 == 3.2  Add Gateway ==
157
158
159 [[image:image-20220524164205-10.png]]
160
161
162 == 3.3  Access the gateway GUI ==
163
164
165 Access the gateway GUI interface of LoRaWAN~-~->LoRaWAN ~-~- Basic Station
166
167 [[image:image-20220524164319-11.png]]
168
169
170 User need to Choose the ChirpStack/Senet ~-~- Basic Station , input Server URI and Upload the TLS Certificate
171
172 (% class="box" %)
173 (((
174 Service Provider  ~-~->  Choose the ChirpStack/Senet ~-~- Basic Station
175
176 LNS URI  ~-~->  Enter the LNS URI address, For example : wss:~/~/xxxx.chirpstack.com:433 or ws:~/~/xxxx.chirpstack.com:3001
177
178 LNS TLS trust  ~-~->  Upload the TLS Certificate
179 )))
180
181 (% class="wikigeneratedid" %)
182 [[image:image-20220524164341-12.png]]
183
184
185 == 3.4  Start Station ==
186
187
188 When the user has finished the configuration, Please click Sace&Apply to start station to connect ChirpStack
189
190
191 == 3.5  Successful Connection ==
192
193
194 If user completes the above steps, which will see live date in the ChirpStack.
195
196 [[image:image-20220524164448-13.png]]
197
198
199
200 == 3.6  Trouble Shooting ==
201
202
203 User can check the station log in the logread/system log page.
204
205 [[image:image-20220531172837-8.png]]
206
207
208 and recode the station log in the system/Recode log page.
209
210 [[image:image-20220531172857-9.png]]
211
212
213
214 = 4. Downlink =
215
216 == 4.1 Chirpstack Downlink Note ==
217
218
219 [[image:image-20220601102543-2.png]]
220
221 Convert the data to Base64
222
223
224 [[image:image-20220531173236-10.png]]
225
226 Check ChripStack downlink DataRate
227
228
229 [[image:image-20220525101326-11.png]]
230
231 Make sure the RX2DR is the same in the end node
232
233
234
235 == 4.2  Loraserver Downlink Note ==
236
237
238 User can use MQTT to send downlink payload to ChirpStack to perform downstream to LoRaWAN End
239
240 (((
241 **Below is examples:**
242 )))
243
244 (% class="box" %)
245 (((
246 Connect to your server via MQTT:
247 MQTT Client ID: Any   
248 Protocol:mqtt/tcp   Server IP:loraserver_ip:1883
249 User name: User name Password: password
250 )))
251
252 [[image:image-20220531173419-11.png]]
253
254 (((
255 MQTT Connect to ChirpStack
256
257
258
259 )))
260
261 (((
262 **After connect**
263 )))
264
265 (% class="box" %)
266 (((
267 Subscribe : Format:application/ID/device/ Device EUI/rx
268 Example: application/7/device/00aedb3da649cb23/rx
269 )))
270
271 (% class="box" %)
272 (((
273 Publish:
274 Format: Top: application/ID/device/ Device EUI/tx
275 Payload: {"confirmed":true or false,"fPort":XX,"data":"xxxx"}
276 Example: Top: application/7/device/00aedb3da649cb23/tx
277 Payload: {"confirmed":true,"fPort":2,"data":"AwEB"}
278 )))
279
280 [[image:image-20220531173519-12.png]]
281
282 MQTT Connect to ChirpStack
283
284
285 (((
286 (% style="color:red" %)**Note: Chirpstack use base64 to downlink, so need to convert the downlink payload from HEX to base64 [[https:~~/~~/base64.us/>>url:https://base64.us/]]**
287 )))
288
289 [[image:image-20220531173601-13.png]]
290
291 Choose to Use Hex for Encode
292
293
294
295 If we want send downstream hex 030101 to end node, the BASE64 payload is AwEB
296
297 [[image:image-20220531173658-14.png]]
298
299
300 (((
301 Downlink payload encode javescript code: 可以在网站上运行以下Javsscript代码:
302 )))
303
304 (% class="box" %)
305 (((
306 function sha1_to_base64(sha1)
307 {
308 var digits="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
309 var base64_rep = "";
310 var cnt = 0;
311 var bit_arr = 0;
312 var bit_num = 0;
313 \\ for(var n = 0; n < sha1.length; ++n)
314 {
315 if(sha1[n] >= 'A' && sha1[n] <= 'Z')
316 {
317 ascv = sha1.charCodeAt(n) - 55;
318 }
319 else if(sha1[n] >= 'a' && sha1[n] <= 'z')
320 {
321 ascv = sha1.charCodeAt(n) - 87;
322 }
323 else
324 {
325 ascv = sha1.charCodeAt(n) - 48;
326 }
327 \\ bit_arr = (bit_arr << 4) | ascv;
328 bit_num += 4;
329 if(bit_num >= 6)
330 {
331 bit_num -= 6;        
332 base64_rep += digits[bit_arr >>> bit_num];
333 bit_arr &= ~~(-1 << bit_num);
334 }
335 }
336 \\ if(bit_num > 0)
337 {
338 bit_arr <<= 6 - bit_num;
339 base64_rep += digits[bit_arr];
340 }
341 \\ var padding = base64_rep.length % 4;   
342 \\ if(padding > 0)
343 {
344 for(var n = 0; n < 4 - padding; ++n)
345 {
346 base64_rep += "=";
347 }
348 }
349 return base64_rep;
350 }
351 \\console.log(sha1_to_base64("data"));
352 \\data is downlink payload required by end node.
353 e.g console.log(sha1_to_base64("030101"));
354 ​result: AwEB     
355 AwEB is the 0x030101's base 64 Encode.
356 \\​e.g console.log(sha1_to_base64("030000"));
357 ​result: AwAA     
358 AwAA is 0x030000's base 64 Encode.
359 )))
360
361
362
363 == 4.3  Add the decode function in Chirpstack for the payload ==
364
365
366 User enters the payload code according to the steps.
367
368 [[image:image-20220531173754-15.png]]
369
370
371 [[image:image-20220531173856-16.png]]
372
373
374 [[image:image-20220531174120-20.png]]
375
376 [[image:image-20220531174046-19.png]]
377
378
379
380 = 5.  Multiply Uplink in ChirpStack =
381
382
383 (((
384 nbtrans field is the value to determine the re-transmission time for unconfirmed uplink data.
385 )))
386
387 (((
388 ChirpStack will auto adjust nbtrans according to uplink rssi. [[link to source>>url:https://github.com/brocaar/chirpstack-network-server/blob/master/internal/adr/adr.go]]
389
390
391 )))
392
393 [[image:image-20220526091912-7.png]]
394
395
396 (((
397 nbtrans is a field of ADR message, in unconfirm mode, it tells end node how many time it needs to transmit for every frame.
398
399
400 )))
401
402 [[image:image-20220525104359-21.png]]
403
404 (((
405 Above behaviour will cause the platform shows below two cases of error:
406
407
408 )))
409
410 (((
411 Error of duplicate Frame Counter
412 )))
413
414 [[image:image-20220525104437-22.png]]
415
416
417
418 Duplicate transmission in short time
419
420 [[image:image-20220601102430-1.png]]
421
422
423
424 == 5.1  Solution ==
425
426
427 This example uses the Windows version as a template, other versions can refer to this. Similiar reference: [[https:~~/~~/confluence.alitecs.de/plugins/servlet/mobile?contentId=79790102#content/view/79790102>>url:https://confluence.alitecs.de/plugins/servlet/mobile?contentId=79790102#content/view/79790102]]
428
429
430 (((
431 (% style="color:blue" %)**1. Install the GO compilation environment: Download the corresponding version of the Go compiler at [[https:~~/~~/go.dev/dl/>>url:https://go.dev/dl/]] and install it.**
432
433
434 )))
435
436 [[image:image-20220525104532-24.png]]
437
438
439 **installation path:**
440
441 [[image:image-20220525104554-25.png]]
442
443
444
445 (((
446 (% style="color:blue" %)**2. Environment variable settings:**
447 )))
448
449 (((
450 1) Open Computer -> Properties -> Advanced System Settings -> Environment Variables and add a "new" system variable:
451 )))
452
453 (((
454 2) Set the variable name GOROOT and the variable value C:\Go\ (installation directory)
455 )))
456
457 [[image:image-20220524165433-33.png]]
458
459
460 3) Modify the system variable Path and add C:\Go\bin\:
461
462 [[image:image-20220524165452-34.png]]
463
464
465 User variable setting file generation directory: D:\go:
466
467 [[image:image-20220524165517-35.png]]
468
469
470
471 (% style="color:blue" %)**3. Modify the ADR configuration file according to your own needs, adr.setting.go is an example of the ADR configuration file.**
472
473 The name of the plugin: Example ADR plugin:
474
475 [[image:image-20220524165540-36.png]]
476
477 Set Nbtrans: Nbtrans=1 (Nbtrans is the number of retransmissions, if it is 1, no retransmission, it is recommended to be 1). To enable it, you need to uncomment.
478
479 [[image:image-20220524165557-37.png]]
480
481
482
483 (% style="color:blue" %)**4. Compile the ADR configuration file and generate the exe file.**
484
485 1) Create a folder named adr-setting
486
487 2) Open the adr-setting folder
488
489 3) Put adr.setting.go in this folder.
490
491 4) Open the computer cmd and run the following commands in sequencecd adr-setting
492
493 go mod init adr-setting
494
495 go get github.com/brocaar/chirpstack-network-server/v3/adr
496
497 go get github.com/hashicorp/go-plugin
498
499 go get adr-setting
500
501 go build
502
503 5) Finally generate this file:
504
505 [[image:image-20220524165623-38.png]]
506
507
508
509 (% style="color:blue" %)**5. Add the plugin and run the plugin.**
510
511 (((
512 The exe file generated in the previous step is placed in the same root directory as chirpstack-network-server.toml, and the ADR plugin is added to the toml file. The location of the addition is as follows:
513 )))
514
515 [[image:image-20220524165641-39.png]]
516
517 (((
518 (((
519 For example: adr_plugins=[“adr-setting”]
520 )))
521 )))
522
523 * (((
524 (((
525 Adding a single plugin format is adr_plugins=["filename"]
526 )))
527 )))
528
529 * (((
530 (((
531 Adding multiple plugins The format is adr_plugins=["file name 1", "file name 2",...]
532 )))
533 )))
534
535 (((
536 (((
537 Finally, re-run chirpstack-network-server.exe, and then select the plugin you just compiled in Device-profiles,
538 )))
539 )))
540
541 [[image:image-20220525104647-26.png]]
542
543 Finish.
544
545
546
547 = 6. Trouble Shooting =
548
549 == 6.1 MIC Mismatch or MIC Failed ==
550
551
552 (((
553 When the device is registered or the device is working normally, the problem of MIC mismatch and MIC failed occurs.
554 )))
555
556 (((
557 Under normal circumstances, users need to change the APPKEY to solve this problem.
558 )))