Show last authors
1 **~ Contents:**
2
3 {{toc/}}
4
5 = 1. Introduction =
6
7 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/]]
8
9 (((
10 The dragino gateway can connect the ChirpStack server via Semtech UDP or Semtech Basic Station.
11 )))
12
13 **Prerequisite**
14
15 1) Have a Chirstack Server.
16
17 [[image:https://wiki.dragino.com/images/thumb/f/f4/ChirpStack_home_page.png/600px-ChirpStack_home_page.png||height="320" width="600"]]
18
19 ChirpStack home page
20
21 2) Gateway model support
22
23 (% class="box" %)
24 (((
25 (((
26 Semtech UDP : **All Model**
27 Basic Station : , , 
28 **Note** : the firmware needs >  if use the Bais station
29 )))
30 )))
31
32 = 2. Semtech UDP =
33
34 == 2.1 Step 1. Add the Network-servers ==
35
36 The network-Servers address varies depending on the ChirpStack server setup environment
37
38 (% class="box" %)
39 (((
40 Windows       ~-~->Network-server server * : localhost:8000
41 Linux         ~-~->Network-server server * : chirpstack-network-server:8000
42 )))
43
44 If the user cannot add network-Servers, re-check the ChirpStack code or the server building process.
45
46 [[image:https://wiki.dragino.com/images/thumb/6/6b/Add_the_Network-servers.png/600px-Add_the_Network-servers.png||height="363" width="600"]]
47
48 Add the Network-servers
49
50 == 2.2 Step 2. Create Gateway-profiles ==
51
52 [[image:https://wiki.dragino.com/images/thumb/a/a9/Create_Gateway-profiles.png/600px-Create_Gateway-profiles.png||height="363" width="600"]]
53
54 Create Gateway-profiles
55
56 == 2.3 Step 3. Create Service-profiles ==
57
58 [[image:https://wiki.dragino.com/images/thumb/1/1f/Create_Service-profiles.png/600px-Create_Service-profiles.png||height="363" width="600"]]
59
60 Create Service-profiles
61
62 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.
63
64 (% style="color:red" %)**Note : Before add the gateway, the user needs to complete the preceding three steps.**
65
66 If the user has completed the preceding steps, proceed to the next step.
67
68 == 2.4 Step 4. Add the gateway ==
69
70 The example gateway id is: a840411e96744150
71
72 (((
73 (% style="color:red" %)**Note : The Gateway EUI and server addresses must match the ChirpStack configuration.**
74 )))
75
76 [[image:https://wiki.dragino.com/images/thumb/c/c6/Add_the_gateway.png/600px-Add_the_gateway.png||height="363" width="600"]]
77
78 Add the gateway
79
80 [[image:https://wiki.dragino.com/images/thumb/1/14/ChirpStack_Configure_the_gateway.png/600px-ChirpStack_Configure_the_gateway.png||height="304" width="600"]]
81
82 Configure the gateway
83
84 == 2.5 Step 5. Checking gateway Status ==
85
86 [[image:https://wiki.dragino.com/images/thumb/2/2c/Gateway_Status_cao_1.png/600px-Gateway_Status_cao_1.png||height="363" width="600"]]
87
88 gateway Status
89
90 [[image:https://wiki.dragino.com/images/thumb/1/11/Gateway_Status_cao_2.png/600px-Gateway_Status_cao_2.png||height="363" width="600"]]
91
92 gateway Status
93
94 = 3. Semtech Basic Station =
95
96 = 4. Downlink =
97
98 == 4.1 Chirpstack Downlink Note ==
99
100 [[image:https://wiki.dragino.com/images/thumb/b/ba/ChirpStack_Down_5.png/600px-ChirpStack_Down_5.png||height="293" width="600"]]
101
102 Convert the data to Base64
103
104 [[image:https://wiki.dragino.com/images/thumb/2/2c/ChirpStack_Down_6.png/600px-ChirpStack_Down_6.png||height="300" width="600"]]
105
106 Check ChripStack downlink DataRate
107
108 [[image:https://wiki.dragino.com/images/thumb/d/dc/ChirpStack_Down_7.png/600px-ChirpStack_Down_7.png||height="711" width="600"]]
109
110 Make sure the RX2DR is the same in the end node
111
112 == 4.2 Loraserver Downlink Note ==
113
114 User can use MQTT to send downlink payload to ChirpStack to perform downstream to LoRaWAN End
115
116 (((
117 Below is examples:
118 )))
119
120 (% class="box" %)
121 (((
122 Connect to your server via MQTT:
123 MQTT Client ID: Any   
124 Protocol:mqtt/tcp   Server IP:loraserver_ip:1883
125 User name: User name Password: password
126 )))
127
128 [[image:https://wiki.dragino.com/images/thumb/0/06/ChirpStack_Down_1.png/600px-ChirpStack_Down_1.png||height="578" width="600"]]
129
130 (((
131 MQTT Connect to ChirpStack
132 )))
133
134 (((
135 After connect
136 )))
137
138 (% class="box" %)
139 (((
140 Subscribe : Format:application/ID/device/ Device EUI/rx
141 Example: application/7/device/00aedb3da649cb23/rx
142 )))
143
144 (% class="box" %)
145 (((
146 Publish:
147 Format: Top: application/ID/device/ Device EUI/tx
148 Payload: {"confirmed":true or false,"fPort":XX,"data":"xxxx"}
149 Example: Top: application/7/device/00aedb3da649cb23/tx
150 Payload: {"confirmed":true,"fPort":2,"data":"AwEB"}
151 )))
152
153 [[image:https://wiki.dragino.com/images/thumb/c/c8/ChirpStack_Down_2.png/600px-ChirpStack_Down_2.png||height="342" width="600"]]
154
155 MQTT Connect to ChirpStack
156
157 (((
158 (% 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/]]
159 )))
160
161 [[image:https://wiki.dragino.com/images/thumb/f/f8/ChirpStack_Down_3.png/600px-ChirpStack_Down_3.png||height="309" width="600"]]
162
163 Choose to Use Hex for Encode
164
165 If we want send downstream hex 030101 to end node, the BASE64 payload is AwEB
166
167 [[image:https://wiki.dragino.com/images/thumb/d/d2/ChirpStack_Down_4.png/600px-ChirpStack_Down_4.png||alt="ChirpStack Down 4.png" height="344" width="600"]]
168
169 (((
170 Downlink payload encode javescript code: 可以在网站上运行以下Javsscript代码:
171 )))
172
173 (% class="box" %)
174 (((
175 function sha1_to_base64(sha1)
176 {
177 var digits="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
178 var base64_rep = "";
179 var cnt = 0;
180 var bit_arr = 0;
181 var bit_num = 0;
182 \\ for(var n = 0; n < sha1.length; ++n)
183 {
184 if(sha1[n] >= 'A' && sha1[n] <= 'Z')
185 {
186 ascv = sha1.charCodeAt(n) - 55;
187 }
188 else if(sha1[n] >= 'a' && sha1[n] <= 'z')
189 {
190 ascv = sha1.charCodeAt(n) - 87;
191 }
192 else
193 {
194 ascv = sha1.charCodeAt(n) - 48;
195 }
196 \\ bit_arr = (bit_arr << 4) | ascv;
197 bit_num += 4;
198 if(bit_num >= 6)
199 {
200 bit_num -= 6;        
201 base64_rep += digits[bit_arr >>> bit_num];
202 bit_arr &= ~~(-1 << bit_num);
203 }
204 }
205 \\ if(bit_num > 0)
206 {
207 bit_arr <<= 6 - bit_num;
208 base64_rep += digits[bit_arr];
209 }
210 \\ var padding = base64_rep.length % 4;   
211 \\ if(padding > 0)
212 {
213 for(var n = 0; n < 4 - padding; ++n)
214 {
215 base64_rep += "=";
216 }
217 }
218 return base64_rep;
219 }
220 \\console.log(sha1_to_base64("data"));
221 \\data is downlink payload required by end node.
222 e.g console.log(sha1_to_base64("030101"));
223 ​result: AwEB     
224 AwEB is the 0x030101's base 64 Encode.
225 \\​e.g console.log(sha1_to_base64("030000"));
226 ​result: AwAA     
227 AwAA is 0x030000's base 64 Encode.
228 )))
229
230 == 4.3 Add the decode function in Chirpstack for the payload ==
231
232 User enters the payload code according to the steps.
233
234 [[image:https://wiki.dragino.com/images/thumb/9/9f/Step2.png/600px-Step2.png||alt="Step2.png" height="224" width="600"]]
235
236 [[image:https://wiki.dragino.com/images/thumb/0/08/Step3.png/600px-Step3.png||alt="Step3.png" height="289" width="600"]]
237
238 [[image:https://wiki.dragino.com/images/thumb/8/83/Step6.png/600px-Step6.png||alt="Step6.png" height="259" width="600"]]
239
240 [[image:https://wiki.dragino.com/images/thumb/4/4f/Step5.png/600px-Step5.png||alt="Step5.png" height="221" width="600"]]
241
242 = 5. Multiply Uplink in ChirpStack =
243
244 (((
245 nbtrans field is the value to determine the re-transmission time for unconfirmed uplink data.
246 )))
247
248 (((
249 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]]
250 )))
251
252 [[image:https://wiki.dragino.com/images/thumb/6/63/Nbtrans_1.png/600px-Nbtrans_1.png||alt="Nbtrans 1.png" height="103" width="600"]]
253
254 (((
255 nbtrans is a field of ADR message, in unconfirm mode, it tells end node how many time it needs to transmit for every frame.
256 )))
257
258 [[image:https://wiki.dragino.com/images/thumb/1/17/Nbtrans_2.png/300px-Nbtrans_2.png||alt="Nbtrans 2.png" height="462" width="300"]]
259
260 (((
261 Above behaviour will cause the platform shows below two cases of error:
262 )))
263
264 (((
265 Error of duplicate Frame Counter
266 )))
267
268 [[image:https://wiki.dragino.com/images/7/7e/Nbtrans_3.png||alt="Nbtrans 3.png" height="677" width="600"]]
269
270 Duplicate transmission in short time
271
272 [[image:https://wiki.dragino.com/images/thumb/c/c4/Nbtrans_4.png/600px-Nbtrans_4.png||alt="Nbtrans 4.png" height="301" width="600"]]
273
274 == 5.1 Solution ==
275
276 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]]
277
278 (((
279 ~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.
280 )))
281
282 [[image:https://wiki.dragino.com/images/3/37/Chirpstacksolution-1.png||alt="Chirpstacksolution-1.png" height="199" width="554"]]
283
284 installation path:
285
286 [[image:https://wiki.dragino.com/images/c/ca/Chirpstacksolution-2.png||alt="Chirpstacksolution-2.png" height="283" width="361"]]
287
288 (((
289 2. Environment variable settings:.
290 )))
291
292 (((
293 1) Open Computer -> Properties -> Advanced System Settings -> Environment Variables and add a "new" system variable:
294 )))
295
296 (((
297 2)Set the variable name GOROOT and the variable value C:\Go\ (installation directory)
298 )))
299
300 [[image:https://wiki.dragino.com/images/f/f9/Chirpstacksolution-3.png||alt="Chirpstacksolution-3.png" height="152" width="554"]]
301
302 3)Modify the system variable Path and add C:\Go\bin\:
303
304 [[image:https://wiki.dragino.com/images/1/1b/Chirpstacksolution-4.png||alt="Chirpstacksolution-4.png" height="152" width="554"]]
305
306 User variable setting file generation directory: D:\go:
307
308 [[image:https://wiki.dragino.com/images/9/9b/Chirpstacksolution-5.png||alt="Chirpstacksolution-5.png" height="278" width="371"]]
309
310 3. Modify the ADR configuration file according to your own needs, adr.setting.go is an example of the ADR configuration file.
311
312 The name of the plugin: Example ADR plugin:
313
314 [[image:https://wiki.dragino.com/images/1/12/Chirpstacksolution-6.jpg||alt="Chirpstacksolution-6.jpg" height="89" width="554"]]
315
316 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.
317
318 [[image:https://wiki.dragino.com/images/2/25/Chirpstacksolution-7.png||alt="Chirpstacksolution-7.png" height="98" width="426"]]
319
320 4. Compile the ADR configuration file and generate the exe file.
321
322 1) Create a folder named adr-setting
323
324 2) Open the adr-setting folder
325
326 3) Put adr.setting.go in this folder.
327
328 4) Open the computer cmd and run the following commands in sequencecd adr-setting
329
330 go mod init adr-setting
331
332 go get github.com/brocaar/chirpstack-network-server/v3/adr
333
334 go get github.com/hashicorp/go-plugin
335
336 go get adr-setting
337
338 go build
339
340 5) Finally generate this file:
341
342 [[image:https://wiki.dragino.com/images/6/66/Chirpstacksolution-8.png||alt="Chirpstacksolution-8.png" height="96" width="554"]]
343
344 5. Add the plugin and run the plugin.
345
346 (((
347 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:
348 )))
349
350 [[image:https://wiki.dragino.com/images/8/82/Chirpstacksolution-9.png||alt="Chirpstacksolution-9.png" height="73" width="554"]]
351
352 (((
353 (((
354 For example: adr_plugins=[“adr-setting”]
355 )))
356 )))
357
358 * (((
359 (((
360 Adding a single plugin format is adr_plugins=["filename"]
361 )))
362 )))
363
364 * (((
365 (((
366 Adding multiple plugins The format is adr_plugins=["file name 1", "file name 2",...]
367 )))
368 )))
369
370 (((
371 (((
372 Finally, re-run chirpstack-network-server.exe, and then select the plugin you just compiled in Device-profiles,
373 )))
374 )))
375
376 [[image:https://wiki.dragino.com/images/3/39/Chirpstacksolution-10.png||alt="Chirpstacksolution-10.png" height="275" width="554"]]
377
378 Finish.
379
380 = 6. Trouble Shooting =
381
382 == 6.1 MIC Mismatch or MIC Failed ==
383
384 (((
385 When the device is registered or the device is working normally, the problem of MIC mismatch and MIC failed occurs.
386 )))
387
388 (((
389 Under normal circumstances, users need to change the APPKEY to solve this problem.
390 )))
Copyright ©2010-2024 Dragino Technology Co., LTD. All rights reserved
Dragino Wiki v2.0