Wiki source code of Notes for ChirpStack

Version 108.7 by Xiaoling on 2022/07/23 13:57

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 == 2.5 Step 5. Checking gateway Status ==
113
114 [[image:image-20220531172158-6.png]](% style="display:none" %)
115
116
117 gateway Status
118
119 [[image:image-20220531172304-7.png]]
120
121 gateway Status
122
123
124 = 3. Gateway Registration for Basics Station =
125
126 == 3.1 Introduction ==
127
128 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.
129
130 ChirpStack Open-Source LoRaWAN® Network Server needs to set up a configuration that can use Semtech BasicStation.
131
132 **Below list the support products and Requirements:**
133
134 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]]
135 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/]]
136
137 **How to set up chirpStack Basic Station**
138
139 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]]
140
141 **What do you need to prepare**
142
143 A gateway that can access the internet normally
144
145
146 == 3.2 Add Gateway ==
147
148 [[image:image-20220524164205-10.png]]
149
150
151 == 3.3 Access the gateway GUI ==
152
153 Access the gateway GUI interface of LoRaWAN~-~->LoRaWAN ~-~- Basic Station
154
155 [[image:image-20220524164319-11.png]]
156
157 User need to Choose the ChirpStack/Senet ~-~- Basic Station , input Server URI and Upload the TLS Certificate
158
159 (% class="box" %)
160 (((
161 Service Provider  ~-~->  Choose the ChirpStack/Senet ~-~- Basic Station
162
163 LNS URI  ~-~->  Enter the LNS URI address, For example : wss:~/~/xxxx.chirpstack.com:433 or ws:~/~/xxxx.chirpstack.com:3001
164
165 LNS TLS trust  ~-~->  Upload the TLS Certificate
166 )))
167
168 (% class="wikigeneratedid" %)
169 [[image:image-20220524164341-12.png]]
170
171
172 == 3.4 Start Station ==
173
174 When the user has finished the configuration, Please click Sace&Apply to start station to connect ChirpStack
175
176
177 == 3.5 Successful Connection ==
178
179 If user completes the above steps, which will see live date in the ChirpStack.
180
181 [[image:image-20220524164448-13.png]]
182
183
184 == 3.6 Trouble Shooting ==
185
186 User can check the station log in the logread/system log page.
187
188 [[image:image-20220531172837-8.png]]
189
190
191 and recode the station log in the system/Recode log page.
192
193 [[image:image-20220531172857-9.png]]
194
195
196 = 4. Downlink =
197
198 == 4.1 Chirpstack Downlink Note ==
199
200 [[image:image-20220601102543-2.png]]
201
202 Convert the data to Base64
203
204
205 [[image:image-20220531173236-10.png]]
206
207 Check ChripStack downlink DataRate
208
209
210 [[image:image-20220525101326-11.png]]
211
212 Make sure the RX2DR is the same in the end node
213
214
215 == 4.2 Loraserver Downlink Note ==
216
217 User can use MQTT to send downlink payload to ChirpStack to perform downstream to LoRaWAN End
218
219 (((
220 Below is examples:
221 )))
222
223 (% class="box" %)
224 (((
225 Connect to your server via MQTT:
226 MQTT Client ID: Any   
227 Protocol:mqtt/tcp   Server IP:loraserver_ip:1883
228 User name: User name Password: password
229 )))
230
231 [[image:image-20220531173419-11.png]]
232
233 (((
234 MQTT Connect to ChirpStack
235
236
237 )))
238
239 (((
240 After connect
241 )))
242
243 (% class="box" %)
244 (((
245 Subscribe : Format:application/ID/device/ Device EUI/rx
246 Example: application/7/device/00aedb3da649cb23/rx
247 )))
248
249 (% class="box" %)
250 (((
251 Publish:
252 Format: Top: application/ID/device/ Device EUI/tx
253 Payload: {"confirmed":true or false,"fPort":XX,"data":"xxxx"}
254 Example: Top: application/7/device/00aedb3da649cb23/tx
255 Payload: {"confirmed":true,"fPort":2,"data":"AwEB"}
256 )))
257
258 [[image:image-20220531173519-12.png]]
259
260 MQTT Connect to ChirpStack
261
262
263 (((
264 (% 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/]]
265 )))
266
267 [[image:image-20220531173601-13.png]]
268
269 Choose to Use Hex for Encode
270
271
272 If we want send downstream hex 030101 to end node, the BASE64 payload is AwEB
273
274 [[image:image-20220531173658-14.png]]
275
276 (((
277 Downlink payload encode javescript code: 可以在网站上运行以下Javsscript代码:
278 )))
279
280 (% class="box" %)
281 (((
282 function sha1_to_base64(sha1)
283 {
284 var digits="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
285 var base64_rep = "";
286 var cnt = 0;
287 var bit_arr = 0;
288 var bit_num = 0;
289 \\ for(var n = 0; n < sha1.length; ++n)
290 {
291 if(sha1[n] >= 'A' && sha1[n] <= 'Z')
292 {
293 ascv = sha1.charCodeAt(n) - 55;
294 }
295 else if(sha1[n] >= 'a' && sha1[n] <= 'z')
296 {
297 ascv = sha1.charCodeAt(n) - 87;
298 }
299 else
300 {
301 ascv = sha1.charCodeAt(n) - 48;
302 }
303 \\ bit_arr = (bit_arr << 4) | ascv;
304 bit_num += 4;
305 if(bit_num >= 6)
306 {
307 bit_num -= 6;        
308 base64_rep += digits[bit_arr >>> bit_num];
309 bit_arr &= ~~(-1 << bit_num);
310 }
311 }
312 \\ if(bit_num > 0)
313 {
314 bit_arr <<= 6 - bit_num;
315 base64_rep += digits[bit_arr];
316 }
317 \\ var padding = base64_rep.length % 4;   
318 \\ if(padding > 0)
319 {
320 for(var n = 0; n < 4 - padding; ++n)
321 {
322 base64_rep += "=";
323 }
324 }
325 return base64_rep;
326 }
327 \\console.log(sha1_to_base64("data"));
328 \\data is downlink payload required by end node.
329 e.g console.log(sha1_to_base64("030101"));
330 ​result: AwEB     
331 AwEB is the 0x030101's base 64 Encode.
332 \\​e.g console.log(sha1_to_base64("030000"));
333 ​result: AwAA     
334 AwAA is 0x030000's base 64 Encode.
335 )))
336
337
338 == 4.3 Add the decode function in Chirpstack for the payload ==
339
340 User enters the payload code according to the steps.
341
342 [[image:image-20220531173754-15.png]]
343
344
345 [[image:image-20220531173856-16.png]]
346
347
348 [[image:image-20220531174120-20.png]]
349
350 [[image:image-20220531174046-19.png]]
351
352
353 = 5. Multiply Uplink in ChirpStack =
354
355 (((
356 nbtrans field is the value to determine the re-transmission time for unconfirmed uplink data.
357 )))
358
359 (((
360 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]]
361 )))
362
363 [[image:image-20220526091912-7.png]]
364
365 (((
366 nbtrans is a field of ADR message, in unconfirm mode, it tells end node how many time it needs to transmit for every frame.
367 )))
368
369 [[image:image-20220525104359-21.png]]
370
371 (((
372 Above behaviour will cause the platform shows below two cases of error:
373 )))
374
375 (((
376 Error of duplicate Frame Counter
377 )))
378
379 [[image:image-20220525104437-22.png]]
380
381
382 Duplicate transmission in short time
383
384 [[image:image-20220601102430-1.png]]
385
386
387 == 5.1 Solution ==
388
389 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]]
390
391 (((
392 ~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.
393 )))
394
395 [[image:image-20220525104532-24.png]]
396
397
398 installation path:
399
400 [[image:image-20220525104554-25.png]]
401
402
403 (((
404 2. Environment variable settings:.
405 )))
406
407 (((
408 1) Open Computer -> Properties -> Advanced System Settings -> Environment Variables and add a "new" system variable:
409 )))
410
411 (((
412 2)Set the variable name GOROOT and the variable value C:\Go\ (installation directory)
413 )))
414
415 [[image:image-20220524165433-33.png]]
416
417
418 3)Modify the system variable Path and add C:\Go\bin\:
419
420 [[image:image-20220524165452-34.png]]
421
422
423 User variable setting file generation directory: D:\go:
424
425 [[image:image-20220524165517-35.png]]
426
427
428 3. Modify the ADR configuration file according to your own needs, adr.setting.go is an example of the ADR configuration file.
429
430 The name of the plugin: Example ADR plugin:
431
432 [[image:image-20220524165540-36.png]]
433
434 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.
435
436 [[image:image-20220524165557-37.png]]
437
438
439 4. Compile the ADR configuration file and generate the exe file.
440
441 1) Create a folder named adr-setting
442
443 2) Open the adr-setting folder
444
445 3) Put adr.setting.go in this folder.
446
447 4) Open the computer cmd and run the following commands in sequencecd adr-setting
448
449 go mod init adr-setting
450
451 go get github.com/brocaar/chirpstack-network-server/v3/adr
452
453 go get github.com/hashicorp/go-plugin
454
455 go get adr-setting
456
457 go build
458
459 5) Finally generate this file:
460
461 [[image:image-20220524165623-38.png]]
462
463
464 5. Add the plugin and run the plugin.
465
466 (((
467 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:
468 )))
469
470 [[image:image-20220524165641-39.png]]
471
472 (((
473 (((
474 For example: adr_plugins=[“adr-setting”]
475 )))
476 )))
477
478 * (((
479 (((
480 Adding a single plugin format is adr_plugins=["filename"]
481 )))
482 )))
483
484 * (((
485 (((
486 Adding multiple plugins The format is adr_plugins=["file name 1", "file name 2",...]
487 )))
488 )))
489
490 (((
491 (((
492 Finally, re-run chirpstack-network-server.exe, and then select the plugin you just compiled in Device-profiles,
493 )))
494 )))
495
496 [[image:image-20220525104647-26.png]]
497
498 Finish.
499
500
501 = 6. Trouble Shooting =
502
503 == 6.1 MIC Mismatch or MIC Failed ==
504
505 (((
506 When the device is registered or the device is working normally, the problem of MIC mismatch and MIC failed occurs.
507 )))
508
509 (((
510 Under normal circumstances, users need to change the APPKEY to solve this problem.
511 )))