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 == 3.1  Introduction ==
131
132
133 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.
134
135 ChirpStack Open-Source LoRaWAN® Network Server needs to set up a configuration that can use Semtech BasicStation.
136
137
138 (% style="color:blue" %)**Below list the support products and Requirements:**
139
140 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]]
141 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/]]
142
143 (% style="color:blue" %)**How to set up chirpStack Basic Station**
144
145 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]]
146
147
148 (% style="color:blue" %)**What do you need to prepare**
149
150 A gateway that can access the internet normally
151
152
153 == 3.2  Add Gateway ==
154
155
156 [[image:image-20220524164205-10.png]]
157
158
159 == 3.3  Access the gateway GUI ==
160
161
162 Access the gateway GUI interface of LoRaWAN~-~->LoRaWAN ~-~- Basic Station
163
164 [[image:image-20220524164319-11.png]]
165
166
167 User need to Choose the ChirpStack/Senet ~-~- Basic Station , input Server URI and Upload the TLS Certificate
168
169 (% class="box" %)
170 (((
171 Service Provider  ~-~->  Choose the ChirpStack/Senet ~-~- Basic Station
172
173 LNS URI  ~-~->  Enter the LNS URI address, For example : wss:~/~/xxxx.chirpstack.com:433 or ws:~/~/xxxx.chirpstack.com:3001
174
175 LNS TLS trust  ~-~->  Upload the TLS Certificate
176 )))
177
178 (% class="wikigeneratedid" %)
179 [[image:image-20220524164341-12.png]]
180
181
182 == 3.4  Start Station ==
183
184
185 When the user has finished the configuration, Please click **Sace&Apply** to start station to connect ChirpStack.
186
187
188 == 3.5  Successful Connection ==
189
190
191 If user completes the above steps, which will see live date in the ChirpStack.
192
193 [[image:image-20220524164448-13.png]]
194
195
196 == 3.6  Trouble Shooting ==
197
198
199 User can check the station log in the logread/system log page.
200
201 [[image:image-20220531172837-8.png]]
202
203
204 and recode the station log in the system/Recode log page.
205
206 [[image:image-20220531172857-9.png]]
207
208
209
210 = 4.  Downlink =
211
212 == 4.1 Convert HEX to Base64 ==
213
214
215 (% style="color:red" %)**Note: Chirpstack uses base64 to downlink, the end node user manual provides HEX format of the downlink commands. So user needs to convert the HEX to Base64.**
216
217 **[[Online HEX to Base64 Converter>>https://base64.guru/converter/encode/hex]]:**
218
219 [[image:image-20221010193350-1.png]]
220
221
222
223 **[[Online Base64 to Hex converter>>https://base64.guru/converter/decode/hex]]**
224
225 [[image:image-20221010193621-2.png]]
226
227
228 == 4.2  Chirpstack Downlink Note ==
229
230
231 [[image:image-20220601102543-2.png]]
232
233 **Convert the data to Base64**
234
235 (% style="display:none" %) (%%)
236
237
238 [[image:image-20220531173236-10.png||height="597" width="1215"]]
239
240 **Check ChripStack downlink DataRate**
241
242
243
244 [[image:image-20220525101326-11.png]]
245
246 **Make sure the RX2DR is the same in the end node**
247
248
249 == 4.3  Loraserver Downlink Note ==
250
251
252 User can use MQTT to send downlink payload to ChirpStack to perform downstream to LoRaWAN End
253
254 (((
255 **Below is examples:**
256 )))
257
258 (% class="box" %)
259 (((
260 Connect to your server via MQTT:
261 MQTT Client ID: Any   
262 Protocol:mqtt/tcp   Server IP:loraserver_ip:1883
263 User name: User name Password: password
264 )))
265
266 [[image:image-20220531173419-11.png]]
267
268 (((
269 **MQTT Connect to ChirpStack**
270
271
272
273 )))
274
275 (((
276 **After connect**
277 )))
278
279 (% class="box" %)
280 (((
281 Subscribe : Format:application/ID/device/ Device EUI/rx
282 Example: application/7/device/00aedb3da649cb23/rx
283 )))
284
285 (% class="box" %)
286 (((
287 Publish:
288 Format: Top: application/ID/device/ Device EUI/tx
289 Payload: {"confirmed":true or false,"fPort":XX,"data":"xxxx"}
290 Example: Top: application/7/device/00aedb3da649cb23/tx
291 Payload: {"confirmed":true,"fPort":2,"data":"AwEB"}
292 )))
293
294 [[image:image-20220531173519-12.png]]
295
296 **MQTT Connect to ChirpStack**
297
298
299 **If we want to send downstream hex 030101 to end node, the BASE64 payload is AwEB**
300
301 [[image:image-20220531173658-14.png]]
302
303
304 (((
305 Downlink payload encode javescript code: 可以在网站上运行以下Javsscript代码:
306 )))
307
308 (% class="box" %)
309 (((
310 function sha1_to_base64(sha1)
311 {
312 var digits="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
313 var base64_rep = "";
314 var cnt = 0;
315 var bit_arr = 0;
316 var bit_num = 0;
317 \\ for(var n = 0; n < sha1.length; ++n)
318 {
319 if(sha1[n] >= 'A' && sha1[n] <= 'Z')
320 {
321 ascv = sha1.charCodeAt( n ) - 55;
322 }
323 else if(sha1[n] >= 'a' && sha1[n] <= 'z')
324 {
325 ascv = sha1.charCodeAt( n ) - 87;
326 }
327 else
328 {
329 ascv = sha1.charCodeAt( n ) - 48;
330 }
331 \\ bit_arr = (bit_arr << 4) | ascv;
332 bit_num += 4;
333 if(bit_num >= 6)
334 {
335 bit_num -= 6;        
336 base64_rep += digits[bit_arr >>> bit_num];
337 bit_arr &= ~~(-1 << bit_num);
338 }
339 }
340 \\ if(bit_num > 0)
341 {
342 bit_arr <<= 6 - bit_num;
343 base64_rep += digits[bit_arr];
344 }
345 \\ var padding = base64_rep.length % 4;   
346 \\ if(padding > 0)
347 {
348 for(var n = 0; n < 4 - padding; ++n)
349 {
350 base64_rep += "=";
351 }
352 }
353 return base64_rep;
354 }
355 \\console.log(sha1_to_base64("data"));
356 \\data is downlink payload required by end node.
357 e.g console.log(sha1_to_base64("030101"));
358 ​result: AwEB     
359 AwEB is the 0x030101's base 64 Encode.
360 \\​e.g console.log(sha1_to_base64("030000"));
361 ​result: AwAA     
362 AwAA is 0x030000's base 64 Encode.
363 )))
364
365
366
367 == 4.3  Add the decode function in Chirpstack for the payload ==
368
369
370 User enters the payload code according to the steps.
371
372 [[image:image-20220531173754-15.png||height="474" width="1334"]]
373
374
375 [[image:image-20220531173856-16.png]]
376
377
378 [[image:image-20220531174120-20.png]]
379
380 [[image:image-20220531174046-19.png]]
381
382
383 = 5.  Multiply Uplink in ChirpStack =
384
385
386 (((
387 nbtrans field is the value to determine the re-transmission time for unconfirmed uplink data.
388 )))
389
390 (((
391 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]]
392
393
394 )))
395
396 [[image:image-20220526091912-7.png||height="241" width="1336"]]
397
398
399 (((
400 nbtrans is a field of ADR message, in unconfirm mode, it tells end node how many time it needs to transmit for every frame.
401
402
403 )))
404
405 [[image:image-20220525104359-21.png]]
406
407 (((
408 Above behaviour will cause the platform shows below two cases of error:
409
410
411 )))
412
413 (((
414 Error of duplicate Frame Counter
415 )))
416
417 [[image:image-20220525104437-22.png]]
418
419
420
421 **Duplicate transmission in short time**
422
423 [[image:image-20220601102430-1.png||height="598" width="1319"]]
424
425
426
427 == 5.1  Solution ==
428
429
430 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]]
431
432
433 (((
434 (% 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.**
435
436
437 )))
438
439 [[image:image-20220525104532-24.png]]
440
441
442 **installation path:**
443
444 [[image:image-20220525104554-25.png]]
445
446
447
448 (((
449 (% style="color:blue" %)**2.  Environment variable settings:**
450 )))
451
452 (((
453 1) Open Computer -> Properties -> Advanced System Settings -> Environment Variables and add a "new" system variable:
454 )))
455
456 (((
457 2) Set the variable name GOROOT and the variable value C:\Go\ (installation directory)
458 )))
459
460 [[image:image-20220524165433-33.png]]
461
462
463 3) Modify the system variable Path and add C:\Go\bin\:
464
465 [[image:image-20220524165452-34.png]]
466
467
468 User variable setting file generation directory: D:\go:
469
470 [[image:image-20220524165517-35.png]]
471
472
473
474 (% 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.**
475
476 The name of the plugin: Example ADR plugin:
477
478 [[image:image-20220524165540-36.png]]
479
480 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.
481
482 [[image:image-20220524165557-37.png]]
483
484
485
486 (% style="color:blue" %)**4.  Compile the ADR configuration file and generate the exe file.**
487
488 1) Create a folder named adr-setting
489
490 2) Open the adr-setting folder
491
492 3) Put adr.setting.go in this folder.
493
494 4) Open the computer cmd and run the following commands in sequencecd adr-setting
495
496 go mod init adr-setting
497
498 go get github.com/brocaar/chirpstack-network-server/v3/adr
499
500 go get github.com/hashicorp/go-plugin
501
502 go get adr-setting
503
504 go build
505
506 5) Finally generate this file:
507
508 [[image:image-20220524165623-38.png]]
509
510
511
512 (% style="color:blue" %)**5.  Add the plugin and run the plugin.**
513
514 (((
515 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:
516 )))
517
518 [[image:image-20220524165641-39.png]]
519
520 (((
521 (((
522 For example: adr_plugins=[“adr-setting”]
523 )))
524 )))
525
526 * (((
527 (((
528 Adding a single plugin format is adr_plugins=["filename"]
529 )))
530 )))
531
532 * (((
533 (((
534 Adding multiple plugins The format is adr_plugins=["file name 1", "file name 2",...]
535 )))
536 )))
537
538 (((
539 (((
540 Finally, re-run chirpstack-network-server.exe, and then select the plugin you just compiled in Device-profiles,
541 )))
542 )))
543
544 [[image:image-20220525104647-26.png]]
545
546 Finish.
547
548
549 = 6.  How to store/get all data traffic for a specific sensor, including raw payload, and uplink/ downlink history. =
550
551
552 All data is published to the MQTT topics. if you want to store/get the data, you would have to create an MQTT handler and store the data yourself.
553
554 This example will be shown how to store/get all the data in two ways:
555
556 **//1). Chirpstack ~-~-> Node-red//**
557
558
559 [[image:image-20221012184501-1.png]]
560
561
562 Use MQTT in Nore-red to subscribe to topics published by the chirpstack-application and then continuously write to a file
563
564 [[image:image-20221012174220-2.png]]
565
566
567 [[image:image-20221012184655-3.png||height="395" width="1049"]]
568
569
570 **Each message is continuously logged to a specified file**
571
572 [[image:image-20221012174352-3.png]]
573
574
575 **//2). MQTT  Sub//**
576
577 If you don't want to store the information via node-red, you can get the output via the subscribe command.
578
579
580 **If connecting from the same machine, you can use the following command to receive data:**
581
582 (% class="box infomessage" %)
583 (((
584 mosquitto_sub -h localhost -t "application/#" -v
585 )))
586
587
588 **Different host**
589
590 (% class="box infomessage" %)
591 (((
592 mosquitto_sub -h IPADDRESS -p 8883 ~-~-insecure ~-~-cafile ca.pem ~-~-cert cert.pem ~-~-key key.pem -t "application/#" -v
593 )))
594
595 [[image:image-20221012173639-1.png]]
596
597
598 = 7.  Trouble Shooting =
599
600 == 7.1  MIC Mismatch or MIC Failed ==
601
602
603 (((
604 When the device is registered or the device is working normally, the problem of MIC mismatch and MIC failed occurs.
605 )))
606
607 (((
608 Under normal circumstances, users need to change the APPKEY to solve this problem.
609 )))
Copyright ©2010-2022 Dragino Technology Co., LTD. All rights reserved
Dragino Wiki v2.0