Show last authors
1 (% style="text-align:center" %)
2 [[image:image-20240103144153-3.png]]
3
4
5
6
7
8 **Table of Contents:**
9
10 {{toc/}}
11
12
13
14
15 = 1. Introduction =
16
17 == 1.1 What is RS485-LB/LS RS485/UART to LoRaWAN Converter ==
18
19
20 (((
21 The Dragino RS485-LB/LS is a (% style="color:blue" %)**RS485 / UART to LoRaWAN Converter**(%%) for Internet of Things solutions. User can connect RS485 or UART sensor to RS485-LB/LS converter, and configure RS485-LB/LS to periodically read sensor data and upload via LoRaWAN network to IoT server.
22 )))
23
24 (((
25 RS485-LB/LS can interface to RS485 sensor, 3.3v/5v UART sensor or interrupt sensor. RS485-LB/LS provides (% style="color:blue" %)**a 3.3v output**(%%) and** (% style="color:blue" %)a 5v output(%%)** to power external sensors. Both output voltages are controllable to minimize the total system power consumption.
26 )))
27
28 (((
29 RS485-LB/LS is IP67 (% style="color:blue" %)**waterproof**(%%) and powered by (% style="color:blue" %)**8500mAh Li-SOCI2 battery**(%%) or (% style="color:blue" %)**solar powered + Li-ion battery,**(%%) it is designed for long term use for several years.
30 )))
31
32 (((
33 RS485-LB/LS runs standard (% style="color:blue" %)**LoRaWAN 1.0.3 in Class A**(%%). It can reach long transfer range and easy to integrate with LoRaWAN compatible gateway and IoT server.
34 )))
35
36 (((
37 For data uplink, RS485-LB/LS sends user-defined commands to RS485 devices and gets the return from the RS485 devices. RS485-LB/LS will process these returns data according to user-define rules to get the final payload and upload to LoRaWAN server.
38 )))
39
40 (((
41 For data downlink, RS485-LB/LS runs in LoRaWAN Class A. When there is downlink commands from LoRaWAN server, RS485-LB/LS will forward the commands from LoRaWAN server to RS485 devices.
42
43 (((
44 RS485-LB/LS (% style="color:blue" %)**Supports BLE configure and wireless OTA update**(%%) which make user easy to use.
45 )))
46 )))
47
48 (((
49 Each RS485-LB/LS pre-load with a set of unique keys for LoRaWAN registration, register these keys to LoRaWAN server and it will auto connect after power on.
50
51
52 )))
53
54 [[image:image-20230718114211-2.png||height="419" width="727"]]
55
56
57 == 1.2 Specifications ==
58
59
60 (% style="color:#037691" %)**Common DC Characteristics:**
61
62 * Supply Voltage: Built-in Battery , 2.5v ~~ 3.6v
63 * Operating Temperature: -40 ~~ 85°C
64
65 (% style="color:#037691" %)**I/O Interface:**
66
67 * Battery controllable output (2.6v ~~ 3.6v depends on battery)
68 * +5v controllable output
69 * 1 x RS485 Interface
70 * 1 x UART Interface , 3.3v or 5v
71 * 1 x Interrupt or Digital IN pins
72 * 1 x I2C Interface
73 * 1 x one wire interface
74
75 (% style="color:#037691" %)**LoRa Spec:**
76
77 * Frequency Range,  Band 1 (HF): 862 ~~ 1020 Mhz
78 * Max +22 dBm constant RF output vs.
79 * RX sensitivity: down to -139 dBm.
80 * Excellent blocking immunity
81
82 (% style="color:#037691" %)**Battery:**
83
84 * Li/SOCI2 un-chargeable battery
85 * Capacity: 8500mAh
86 * Self-Discharge: <1% / Year @ 25°C
87 * Max continuously current: 130mA
88 * Max boost current: 2A, 1 second
89
90 (% style="color:#037691" %)**Power Consumption**
91
92 * Sleep Mode: 5uA @ 3.3v
93 * LoRa Transmit Mode: 125mA @ 20dBm, 82mA @ 14dBm
94
95 == 1.3 Features ==
96
97
98 * LoRaWAN 1.0.3 Class A
99 * Frequency Bands: CN470/EU433/KR920/US915/EU868/AS923/AU915/IN865/RU864/MA869
100 * Ultra-low power consumption
101 * Support multiply RS485 devices by flexible rules
102 * Support Modbus protocol
103 * Support Interrupt uplink
104 * Supports connecting a UART sensors with 3.3V or 5V
105 * Support Bluetooth v5.1 and LoRaWAN remote configure
106 * Support wireless OTA update firmware
107 * AT Commands to change parameters
108 * Uplink on periodically
109 * Downlink to change configure
110 * 8500mAh Li/SOCl2 Battery (RS485-LB)
111 * Solar panel + 3000mAh Li-ion battery (RS485-LS)
112
113 == 1.4 Applications ==
114
115
116 * Smart Buildings & Home Automation
117 * Logistics and Supply Chain Management
118 * Smart Metering
119 * Smart Agriculture
120 * Smart Cities
121 * Smart Factory
122
123 == 1.5 Sleep mode and working mode ==
124
125
126 (% style="color:blue" %)**Deep Sleep Mode: **(%%)Sensor doesn't have any LoRaWAN activate. This mode is used for storage and shipping to save battery life.
127
128 (% style="color:blue" %)**Working Mode:** (%%)In this mode, Sensor will work as LoRaWAN Sensor to Join LoRaWAN network and send out sensor data to server. Between each sampling/tx/rx periodically, sensor will be in IDLE mode), in IDLE mode, sensor has the same power consumption as Deep Sleep mode.
129
130
131 == 1.6 Button & LEDs ==
132
133
134 [[image:image-20240103160425-4.png]]
135
136 (% border="1" cellspacing="4" style="background-color:#f2f2f2; width:510px" %)
137 |=(% style="width: 167px;background-color:#4F81BD;color:white" %)**Behavior on **ACT|=(% style="width: 117px;background-color:#4F81BD;color:white" %)Function|=(% style="width: 225px;background-color:#4F81BD;color:white" %)Action
138 |(% style="width:167px" %)Pressing ACT between 1s < time < 3s|(% style="width:117px" %)Send an uplink|(% style="width:225px" %)(((
139
140
141 If sensor is already Joined to LoRaWAN network, sensor will send an uplink packet, blue led will blink once.
142 Meanwhile, BLE module will be active and user can connect via BLE to configure device.
143 )))
144 |(% style="width:167px" %)Pressing ACT for more than 3s|(% style="width:117px" %)Active Device|(% style="width:225px" %)(((
145
146
147 Green led will fast blink 5 times, device will enter OTA mode for 3 seconds. And then start to JOIN LoRaWAN network.
148 Green led will solidly turn on for 5 seconds after joined in network.
149 Once sensor is active, BLE module will be active and user can connect via BLE to configure device, no matter if device join or not join LoRaWAN network.
150 )))
151 |(% style="width:167px" %)Fast press ACT 5 times.|(% style="width:117px" %)Deactivate Device|(% style="width:225px" %)Red led will solid on for 5 seconds. Means device is in Deep Sleep Mode.
152
153 == 1.7 BLE connection ==
154
155
156 RS485-LB/LS supports BLE remote configure.
157
158
159 BLE can be used to configure the parameter of sensor or see the console output from sensor. BLE will be only activate on below case:
160
161 * Press button to send an uplink
162 * Press button to active device.
163 * Device Power on or reset.
164
165 If there is no activity connection on BLE in 60 seconds, sensor will shut down BLE module to enter low power mode.
166
167
168 == 1.8 Pin Definitions ==
169
170
171 [[image:image-20250218100147-1.jpeg||height="376" width="818"]]
172
173
174 === 1.8.1 SW2 Jumper (Define UART level to external Sensor) ===
175
176
177 SW2 defines the voltage level of BOARD_RX and BOARD_TX pins. It should match the external sensor voltage level
178
179
180 == 1.9 Mechanical ==
181
182 === 1.9.1 for LB version ===
183
184
185 [[image:http://wiki.dragino.com/xwiki/bin/download/Main/User%20Manual%20for%20LoRaWAN%20End%20Nodes/PS-LB%20--%20LoRaWAN%20Pressure%20Sensor/WebHome/image-20240109160800-6.png?rev=1.1||alt="image-20240109160800-6.png"]]
186
187
188 === 1.9.2 for LS version ===
189
190
191 [[image:http://wiki.dragino.com/xwiki/bin/download/Main/User%20Manual%20for%20LoRaWAN%20End%20Nodes/SN50v3-LB/WebHome/image-20231231203439-3.png?width=886&height=385&rev=1.1||alt="image-20231231203439-3.png"]]
192
193
194 = 2. Operation Mode =
195
196 == 2.1 How it works? ==
197
198
199 (((
200 The RS485-LB/LS is configured as LoRaWAN OTAA Class A mode by default. It has OTAA keys to join network. To connect a local LoRaWAN network, user just need to input the OTAA keys in the network server and power on the RS485-LB/LS. It will auto join the network via OTAA.
201 )))
202
203
204 == 2.2 ​Quick guide to connect to LoRaWAN server (OTAA) ==
205
206
207 Following is an example for how to join the [[TTN v3 LoRaWAN Network>>url:https://console.cloud.thethings.network/]]. Below is the network structure; we use the [[LPS8v2>>url:https://www.dragino.com/products/lora-lorawan-gateway/item/228-lps8v2.html]] as a LoRaWAN gateway in this example.
208
209 [[image:image-20230718114628-3.png||height="360" width="757"]]
210
211
212 (((
213 The RS485-LB/LS in this example connected to two RS485 devices for demonstration, user can connect to other RS485 devices via the same method.
214 )))
215
216 (((
217 The LPS8v2 is already set to connected to [[TTN network >>url:https://console.cloud.thethings.network/]], so what we need to now is configure the TTN server.
218 )))
219
220 (((
221 (% style="color:blue" %)**Step 1**(%%): Create a device in TTN V3 with the OTAA keys from RS485-LB/LS.
222 )))
223
224 (((
225 Each RS485-LB/LS is shipped with a sticker with unique device EUI:
226 )))
227
228 [[image:image-20230425173638-1.png||height="215" width="463"]]
229
230
231 (((
232 User can enter this key in their LoRaWAN Server portal. Below is TTN V3 screen shot:
233 )))
234
235 (((
236 **Add APP EUI in the application.**
237 )))
238
239
240 [[image:image-20220519174512-1.png]]
241
242 [[image:image-20220519174512-2.png||height="328" width="731"]]
243
244 [[image:image-20220519174512-3.png||height="556" width="724"]]
245
246 [[image:image-20220519174512-4.png]]
247
248
249 You can also choose to create the device manually.
250
251 [[image:1652953542269-423.png||height="710" width="723"]]
252
253
254 Add APP KEY and DEV EUI
255
256 [[image:1652953553383-907.png||height="514" width="724"]]
257
258
259
260 (((
261 (% style="color:blue" %)**Step 2**(%%): Power on RS485-LB/LS and it will auto join to the TTN V3 network. After join success, it will start to upload message to TTN V3 and user can see in the panel.
262 )))
263
264 [[image:1652953568895-172.png||height="232" width="724"]]
265
266
267 == 2.3 Uplink Payload ==
268
269 === 2.3.1 Device Status, FPORT~=5 ===
270
271 Users can use the downlink command(**0x26 01**) to ask RS485-LB to send device configure detail, include device configure status. RS485-LB/LS will uplink a payload via FPort=5 to server.
272
273 The Payload format is as below.
274
275 (% border="1" cellspacing="4" style="background-color:#f2f2f2; width:510px" %)
276 |=(% style="width: 60px;background-color:#4F81BD;color:white" %)(((
277 **Size(bytes)**
278 )))|=(% style="width: 100px; background-color:#4F81BD;color:white" %)**1**|=(% style="width: 100px; background-color:#4F81BD;color:white" %)**2**|=(% style="background-color:#4F81BD;color:white; width: 100px;" %)**1**|=(% style="background-color:#4F81BD;color:white; width: 100px;" %)**1**|=(% style="background-color:#4F81BD;color:white; width: 50px;" %)**2**
279 |(% style="width:62.5px" %)Value|(% style="width:110px" %)Sensor Model|(% style="width:48px" %)Firmware Version|(% style="width:94px" %)Frequency Band|(% style="width:91px" %)Sub-band|(% style="width:60px" %)BAT
280
281 (% style="color:blue" %)**Sensor Model**(%%): For RS485-LB/LS, this value is 0x30
282
283 (% style="color:blue" %)**Firmware Version**(%%): 0x0100, Means: v1.0.0 version
284
285 (% style="color:blue" %)**Frequency Band**:
286
287 0x01: EU868
288
289 0x02: US915
290
291 0x03: IN865
292
293 0x04: AU915
294
295 0x05: KZ865
296
297 0x06: RU864
298
299 0x07: AS923
300
301 0x08: AS923-1
302
303 0x09: AS923-2
304
305 0x0a: AS923-3
306
307 0x0b: CN470
308
309 0x0c: EU433
310
311 0x0d: KR920
312
313 0x0e: MA869
314
315 (% style="color:blue" %)**Sub-Band**:
316
317 AU915 and US915:value 0x00 ~~ 0x08
318
319 CN470: value 0x0B ~~ 0x0C
320
321 Other Bands: Always 0x00
322
323 (% style="color:blue" %)**Battery Info**:
324
325 Check the battery voltage.
326
327 Ex1: 0x0B45 = 2885mV
328
329 Ex2: 0x0B49 = 2889mV
330
331
332 === 2.3.2 Uplink Payload, FPORT~=2 ===
333
334
335 (% border="1" cellspacing="4" style="background-color:#f2f2f2; width:510px" %)
336 |(% style="background-color:#4f81bd; color:white; width:60px" %)**Size(bytes)**|(% style="background-color:#4f81bd; color:white; width:100px" %)**2**|(% style="background-color:#4f81bd; color:white; width:80px" %)**1**|(% style="background-color:#4f81bd; color:white; width:270px" %)**Length depends on the return from the commands**
337 |Value|(((
338 Battery(mV) & Interrupt _Flag
339 )))|(((
340 PAYLOAD_VER
341
342
343 )))|If the valid payload is too long and exceed the maximum support payload length in server, server will show payload not provided in the LoRaWAN server.
344
345 Below is the decoder for the first 3 bytes. The rest bytes are dynamic depends on different RS485 sensors.
346
347
348 (% style="color:blue" %)**Battery(mV)**
349
350 Check the battery voltage for RS485-LB/LS.
351
352 Ex1: 0x0B45 = 2885mV
353
354 Ex2: 0x0B49 = 2889mV
355
356
357 (% style="color:blue" %)**Interrupt_Flag**
358
359 Ex1: 0x0B45>>15&0x01=0x00 : Normal uplink packet.
360
361 Ex2: 0x8B49>>15&0x01=0x01 : Interrupt Uplink Packet.
362
363
364 (% style="color:blue" %)**PAYLOAD_VER**
365
366 RS485-LB/LS can connect to different sensors. User can set the PAYVER_VER field to tell server how to decode the current payload.
367
368
369 == 2.4 Payload Decoder file ==
370
371
372 In TTN, use can add a custom payload so it shows friendly reading
373
374 In the page (% style="color:#037691" %)**Applications ~-~-> Payload Formats ~-~-> Custom ~-~-> decoder**(%%) to add the decoder from: [[https:~~/~~/github.com/dragino/dragino-end-node-decoder>>https://github.com/dragino/dragino-end-node-decoder]]
375
376
377 == 2.5 Frequency Plans ==
378
379
380 The RS485-LB/LS uses OTAA mode and below frequency plans by default. Each frequency band use different firmware, user update the firmware to the corresponding band for their country.
381
382 [[http:~~/~~/wiki.dragino.com/xwiki/bin/view/Main/End%20Device%20Frequency%20Band/>>http://wiki.dragino.com/xwiki/bin/view/Main/End%20Device%20Frequency%20Band/]]
383
384
385 == 2.6 Configure Device to Read RS485 Sensors ==
386
387
388 (((
389 There are plenty of RS485 and TTL level devices in the market and each device has different commands to read the valid data. To support these devices in most flexible, RS485-LB/LS supports flexible command set. User can use [[Dragino RS485 Tool>>https://www.dropbox.com/sh/us9qecn39fwt8n1/AABREdqUCzEmJMRrfuWuXasoa?dl=0]],  [[AT Commands or LoRaWAN Downlink>>||anchor="H3.ConfigureRS485-LB2FLS"]] Command to configure how RS485-LB/LS should read the sensor and how to handle the return from RS485 or TTL sensors.
390 )))
391
392
393 === 2.6.1 Method 1 ~-~- via RS485 Configure Tool ===
394
395
396 Use the RS485 Configure tool is the recommand method. Please see the instruction of how to use the tool:
397
398 * **[[RS485 Configure Tool Instruction>>doc:Main.RS485_Configure_Tool.WebHome]]**
399
400 [[image:image-20231127144411-1.png||height="368" width="494"]]
401
402
403 === 2.6.2 Method 2 ~-~- via AT Commands ===
404
405 ==== 2.6.2.1 Configure UART settings for RS485 or TTL communication ====
406
407
408 (((
409 RS485-LB/LS can connect to either RS485 sensors or TTL sensor. User need to specify what type of sensor need to connect.
410 )))
411
412
413 (((
414 (% style="color:blue" %)**1.  RS485-MODBUS mode:**
415 )))
416
417 (((
418 (% style="color:#037691" %)**AT+MOD=1**  (%%) ~/~/ Support RS485-MODBUS type sensors. User can connect multiply RS485 , Modbus sensors to the A / B pins.
419 )))
420
421
422 (((
423 (% style="color:blue" %)**2.  TTL mode:**
424 )))
425
426 (((
427 (% style="color:#037691" %)**AT+MOD=2**  (%%) ~/~/ Support TTL Level sensors, User can connect one TTL Sensor to the BOARD_TX, BOARD_RX, GND pins. The power supply of the sensor needs to consider the actual voltage and working current to choose the RS485 LB motherboard power supply or external power supply. Refer to [[Section 6.6>>||anchor="H6.6A0HowtoconnectRS485-LBnodetoUARTdistancesensor3F"]].
428
429
430 )))
431
432 (((
433 RS485-LB/LS default  UART settings is (% style="color:green" %)**9600, no parity, stop bit 1,data bit 8**(%%). If the sensor has a different settings, user can change the RS485-LB/LS setting to match.
434 )))
435
436 (% border="1" cellspacing="4" style="background-color:#f2f2f2; width:515px" %)
437 |=(% style="width: 122px; background-color:#4F81BD;color:white" %)(((
438 (((
439 **AT Commands**
440 )))
441 )))|=(% style="width: 190px; background-color:#4F81BD;color:white" %)(((
442 (((
443 **Description**
444 )))
445 )))|=(% style="width: 203px; background-color:#4F81BD;color:white" %)(((
446 (((
447 **Example**
448 )))
449 )))
450 |(% style="width:122px" %)(((
451 (((
452 AT+BAUDR
453 )))
454 )))|(% style="width:192px" %)(((
455 (((
456 Set the baud rate.
457 Default Value is: 9600.
458 )))
459 )))|(% style="width:338px" %)(((
460 (((
461 (((
462 AT+BAUDR=9600
463 )))
464 )))
465
466 (((
467 (((
468 Options: (1200,2400,4800,14400,19200,115200)
469 )))
470 )))
471 )))
472 |(% style="width:122px" %)(((
473 (((
474 AT+PARITY
475 )))
476 )))|(% style="width:192px" %)(((
477 (((
478 (((
479 Set UART parity.
480 )))
481 )))
482
483 (((
484 (((
485 Default Value is: no parity.
486 )))
487 )))
488 )))|(% style="width:338px" %)(((
489 (((
490 (((
491 AT+PARITY=0
492 )))
493 )))
494
495 (((
496 (((
497 Option: 0: no parity, 1: odd parity, 2: even parity
498 )))
499 )))
500 )))
501 |(% style="width:122px" %)(((
502 (((
503 AT+STOPBIT
504 )))
505 )))|(% style="width:192px" %)(((
506 (((
507 (((
508 Set serial stopbit
509 )))
510 )))
511
512 (((
513 (((
514 Default Value is: 1bit.
515 )))
516 )))
517 )))|(% style="width:338px" %)(((
518 (((
519 AT+STOPBIT=1 for 1 bit
520 )))
521
522 (((
523 (((
524 AT+STOPBIT=2 for 2 bits
525 )))
526 )))
527 )))
528 |(% style="width:122px" %)AT+DATABIT|(% style="width:192px" %)(((
529 (((
530 (((
531 Set serial databit.
532 )))
533 )))
534
535 (((
536 (((
537 Default Value is: 8bits.
538 )))
539 )))
540 )))|(% style="width:338px" %)(((
541 (((
542 AT+DATABIT=7 for 7 bits
543 )))
544
545 (((
546 (((
547 AT+DATABIT=8 for 8 bits
548 )))
549 )))
550 )))
551
552 Example (Soil three-parameter detector):
553
554 (% style="color:blue" %)**Wiring the UART sensor**
555
556 (((
557 **GND <~-~-~-~-~-~-~-~-> GND
558 TX  <~-~-~-~-~-~-~-~->  RX
559 RX  <~-~-~-~-~-~-~-~->  TX
560 VCC  <~-~-~-~-~-~-~-~->  3.3/5V**
561 )))
562
563 [[image:image-20231019111951-1.png||height="235" width="410"]]
564
565
566 (% style="color:blue" %)**Set the correct configuration:**
567
568 (% style="color:#037691" %)**AT+BAUDR=9600**
569
570 (% style="color:#037691" %)**AT+PARITY=0**
571
572 (% style="color:#037691" %)**AT+STOPBIT=1**
573
574 (% style="color:#037691" %)**AT+DATABIT=8**
575
576 If the sensor needs 5v. Need to move the switch position to 5v and then use the command (% style="color:blue" %)**AT+5VT=30000**
577
578
579 (% style="color:blue" %)**Configuration read command:**
580
581 (% style="color:#037691" %)**AT+CFGDEV=FE 03 00 00 00 03 11 C4,0**
582
583 **FE:** Station address
584
585 **03:** Function code
586
587 **00 00:**Register start address
588
589 **00 03:**Number of registers
590
591 **11 04:**  Check code
592
593 [[image:image-20230220111709-2.png]]
594
595
596 Use AT+COMMAND1 to set it as a command, and use AT+DATACUT1 to intercept the bytes I need
597
598 [[image:image-20230220112421-3.png]]
599
600
601 (% style="color:blue" %)**upload payload:**
602
603 [[image:image-20230220112517-4.png]]
604
605
606 ==== 2.6.2.2 Configure sensors ====
607
608
609 (((
610 Some sensors might need to configure before normal operation. User can configure such sensor via PC or through RS485-LB/LS AT Commands (% style="color:#4f81bd" %)**AT+CFGDEV**.
611 )))
612
613 (((
614 When user issue an (% style="color:#4f81bd" %)**AT+CFGDEV**(%%) command, Each (% style="color:#4f81bd" %)**AT+CFGDEV**(%%) equals to send a command to the RS485 or TTL sensors. This command will only run when user input it and won't run during each sampling.
615 )))
616
617 (% border="1" cellspacing="5" style="background-color:#f2f2f2; width:510px" %)
618 |=(% style="width: 130px;background-color:#4F81BD;color:white" %)**AT Commands**|=(% style="width: 190px;background-color:#4F81BD;color:white" %)**Description**|=(% style="width: 190px;background-color:#4F81BD;color:white" %)**Example**
619 |(% style="width:121px" %)AT+CFGDEV|(% style="width:179px" %)(((
620 (((
621 This command is used to configure the RS485/TTL devices; they won’t be used during sampling.
622 )))
623
624 (((
625 AT+CFGDEV=xx xx xx xx xx xx xx xx xx xx xx xx,
626 )))
627
628 (((
629 mm: 0: no CRC, 1: add CRC-16/MODBUS in the end of this command
630 )))
631 )))|(% style="width:210px" %)AT+CFGDEV=xx xx xx xx xx xx xx xx xx xx xx xx,m
632
633 Detail of AT+CFGDEV command see [[AT+CFGDEV detail>>||anchor="H3.3.2RS485DebugCommand28AT2BCFGDEV29"]].
634
635
636 ==== 2.6.2.3 Configure read commands for each sampling ====
637
638
639 (((
640 RS485-LB/LS is a battery powered device; it will sleep most of time. And wake up on each period and read RS485 / TTL sensor data and uplink.
641 )))
642
643 (((
644 During each sampling, we need to confirm what commands we need to send to the sensors to read data. After the RS485/TTL sensors send back the value, it normally includes some bytes and we only need a few from them for a shorten payload.
645 )))
646
647 (((
648 To save the LoRaWAN network bandwidth, we might need to read data from different sensors and combine their valid value into a short payload.
649 )))
650
651 (((
652 This section describes how to achieve above goals.
653 )))
654
655 (((
656 During each sampling, the RS485-LB/LS can support 15 commands to read sensors. And combine the return to one or several uplink payloads.
657
658
659 )))
660
661 (((
662 (% style="color:blue" %)**Command from RS485-LB/LS to Sensor:**
663 )))
664
665 (((
666 RS485-LB/LS can send out pre-set max 15 strings via **AT+COMMAD1**, **ATCOMMAND2**,…, to **AT+COMMANDF** . All commands are of same grammar.
667 )))
668
669 (((
670 (% style="color:blue" %)**Handle return from sensors to RS485-LB/LS:**
671 )))
672
673 (((
674 After RS485-LB/LS send out a string to sensor, RS485-LB/LS will wait for the return from RS485 or TTL sensor. And user can specify how to handle the return, by **AT+DATACUT or AT+SEARCH commands**
675 )))
676
677 * (((
678 (% style="color:blue" %)**AT+DATACUT**
679 )))
680
681 (((
682 When the return value from sensor have fix length and we know which position the valid value we should get, we can use AT+DATACUT command.
683
684
685 )))
686
687 * (((
688 (% style="color:blue" %)**AT+SEARCH**
689 )))
690
691 (((
692 When the return value from sensor is dynamic length and we are not sure which bytes the valid data is, instead, we know what value the valid value following. We can use AT+SEARCH to search the valid value in the return string.
693 )))
694
695
696 (((
697 (% style="color:blue" %)**Define wait timeout:**
698 )))
699
700 (((
701 Some RS485 device might has longer delay on reply, so user can use AT+CMDDL to set the timeout for getting reply after the RS485 command is sent. For example, AT+CMDDL1=1000 to send the open time to 1000ms
702 )))
703
704 (((
705 After we got the valid value from each RS485 commands, we need to combine them together with the command **AT+DATAUP**.
706 )))
707
708 (((
709 **Examples:**
710 )))
711
712 (((
713 Below are examples for the how above AT Commands works.
714 )))
715
716 (((
717 (% style="color:blue" %)**AT+COMMANDx **(%%)**: **This command will be sent to RS485/TTL devices during each sampling, Max command length is 14 bytes. The grammar is:
718 )))
719
720 (% border="1" class="table-bordered" style="background-color:#f2f2f2; width:497px" %)
721 |(% style="width:494px" %)(((
722 (((
723 **AT+COMMANDx=xx xx xx xx xx xx xx xx xx xx xx xx,m**
724 )))
725
726 (((
727 **xx xx xx xx xx xx xx xx xx xx xx xx: The RS485 command to be sent**
728 )))
729
730 (((
731 **m: 0: no CRC, 1: add CRC-16/MODBUS in the end of this command**
732 )))
733 )))
734
735 (((
736 For example, if we have a RS485 sensor. The command to get sensor value is: 01 03 0B B8 00 02 46 0A. Where 01 03 0B B8 00 02 is the Modbus command to read the register 0B B8 where stored the sensor value. The 46 0A is the CRC-16/MODBUS which calculate manually.
737 )))
738
739 (((
740 In the RS485-LB/LS, we should use this command AT+COMMAND1=01 03 0B B8 00 02,1 for the same.
741 )))
742
743
744 If a single command exceeds 14 bytes, you can use the command splicing function.
745
746 When AT+CMDDLx=1, the commands of AT+COMMANDx and AT+COMMAND(x+1) will be merged.
747
748 **Examples:** To send 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F data it should be configured:
749
750 AT+COMMAND1=00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D,0
751
752 AT+COMMAND1=1
753
754 AT+COMMAND2=0E 0F,0
755
756
757 (((
758 (% style="color:blue" %)**AT+SEARCHx**(%%): This command defines how to handle the return from AT+COMMANDx.
759 )))
760
761 (% border="1" class="table-bordered" style="background-color:#f2f2f2; width:473px" %)
762 |(% style="width:470px" %)(((
763 (((
764 **AT+SEARCHx=aa,xx xx xx xx xx**
765 )))
766
767 * (((
768 **aa: 1: prefix match mode; 2: prefix and suffix match mode**
769 )))
770 * (((
771 **xx xx xx xx xx: match string. Max 5 bytes for prefix and 5 bytes for suffix**
772 )))
773 )))
774
775 (((
776 **Examples:**
777 )))
778
779 (((
780 1)For a return string from AT+COMMAND1: 16 0c 1e 56 34 2e 30 58 5f 36 41 30 31 00 49
781 )))
782
783 (((
784 If we set AT+SEARCH1=1,1E 56 34.      (max 5 bytes for prefix)
785 )))
786
787 (((
788 The valid data will be all bytes after 1E 56 34 , so it is (% style="background-color:yellow" %)**2e 30 58 5f 36 41 30 31 00 49**
789 )))
790
791 (((
792 [[image:1653271044481-711.png]]
793
794
795 )))
796
797 (((
798 2)For a return string from AT+COMMAND1:  16 0c 1e 56 34 2e 30 58 5f 36 41 30 31 00 49
799 )))
800
801 (((
802 If we set AT+SEARCH1=2, 1E 56 34+31 00 49
803 )))
804
805 (((
806 Device will search the bytes between 1E 56 34 and 31 00 49. So it is(% style="background-color:yellow" %) **2e 30 58 5f 36 41 30**
807 )))
808
809 (((
810 [[image:1653271276735-972.png]]
811 )))
812
813 (((
814 **AT+DATACUTx : **This command defines how to handle the return from AT+COMMANDx, max return length is 100 bytes.
815 )))
816
817 (% style="background-color:#f2f2f2; width:496px" %)
818 |(% style="width:493px" %)(((
819 (((
820 **AT+DATACUTx=a,b,c**
821 )))
822
823 * (((
824 **a: length for the return of AT+COMMAND**
825 )))
826 * (((
827 **b:1: grab valid value by byte, max 6 bytes. 2: grab valid value by bytes section, max 3 sections.**
828 )))
829 * (((
830 **c: define the position for valid value.  **
831 )))
832 )))
833
834 (((
835 **Examples:**
836 )))
837
838 * (((
839 (% style="color:blue" %)**Grab bytes:**
840 )))
841
842 (((
843 [[image:1653271581490-837.png||height="313" width="722"]]
844 )))
845
846
847 * (((
848 (% style="color:blue" %)**Grab a section.**
849 )))
850
851 (((
852 [[image:1653271648378-342.png||height="326" width="720"]]
853 )))
854
855
856 * (((
857 (% style="color:blue" %)**Grab different sections.**
858 )))
859
860 (((
861 [[image:1653271657255-576.png||height="305" width="730"]]
862
863
864 )))
865
866 (((
867 (% style="color:red" %)**Note:**
868 )))
869
870 (((
871 (% style="color:#037691" %)**AT+SEARCHx** (%%)and (% style="color:#037691" %)**AT+DATACUTx**(%%) can be used together, if both commands are set, RS485-LB/LS will first process AT+SEARCHx on the return string and get a temporary string, and then process AT+DATACUTx on this temporary string to get the final payload. In this case, AT+DATACUTx need to set to format** AT+DATACUTx=0,xx,xx** where the return bytes set to **0**.
872 )))
873
874 (((
875 **Example:**
876 )))
877
878 (((
879 (% style="color:red" %)AT+COMMAND1=11 01 1E D0,0
880 )))
881
882 (((
883 (% style="color:red" %)AT+SEARCH1=1,1E 56 34
884 )))
885
886 (((
887 (% style="color:red" %)AT+DATACUT1=0,2,1~~5
888 )))
889
890 (((
891 (% style="color:red" %)Return string from AT+COMMAND1: 16 0c 1e 56 34 2e 30 58 5f 36 41 30 31 00 49
892 )))
893
894 (((
895 (% style="color:red" %)String after SEARCH command: 2e 30 58 5f 36 41 30 31 00 49
896 )))
897
898 (((
899 (% style="color:red" %)Valid payload after DataCUT command: 2e 30 58 5f 36
900 )))
901
902
903 (((
904 [[image:1653271763403-806.png]]
905 )))
906
907
908 ==== 2.6.2.4 Compose the uplink payload ====
909
910
911 (((
912 Through AT+COMMANDx and AT+DATACUTx we got valid value from each RS485 commands, Assume these valid value are RETURN1, RETURN2, .., to RETURNx. The next step is how to compose the LoRa Uplink Payload by these RETURNs. The command is **AT+DATAUP.**
913 )))
914
915 (((
916 (% style="color:#037691" %)**Examples: AT+DATAUP=0**
917 )))
918
919 (((
920 Compose the uplink payload with value returns in sequence and send with (% style="color:red" %)**A SIGNLE UPLINK**.
921 )))
922
923 (((
924 Final Payload is
925 )))
926
927 (((
928 (% style="color:#4f81bd" %)**Battery Info+PAYVER + VALID Value from RETURN1 + Valid Value from RETURN2 + … + RETURNx**
929 )))
930
931 (((
932 Where PAYVER is defined by AT+PAYVER, below is an example screen shot.
933 )))
934
935 [[image:1653272787040-634.png||height="515" width="719"]]
936
937
938 (((
939 (% style="color:#037691" %)**Examples: AT+DATAUP=1**
940 )))
941
942
943 (((
944 Compose the uplink payload with value returns in sequence and send with (% style="color:red" %)**Multiply UPLINKs**.
945 )))
946
947 (((
948 Final Payload is
949 )))
950
951 (((
952 (% style="color:#4f81bd" %)**Battery Info+PAYVER + PAYLOAD COUNT + PAYLOAD# + DATA**
953 )))
954
955 1. (((
956 Battery Info (2 bytes): Battery voltage
957 )))
958 1. (((
959 PAYVER (1 byte): Defined by AT+PAYVER
960 )))
961 1. (((
962 PAYLOAD COUNT (1 byte): Total how many uplinks of this sampling.
963 )))
964 1. (((
965 PAYLOAD# (1 byte): Number of this uplink. (from 0,1,2,3…,to PAYLOAD COUNT)
966 )))
967 1. (((
968 DATA: Valid value: max 6 bytes(US915 version here, Notice*!) for each uplink so each uplink <= 11 bytes. For the last uplink, DATA will might less than 6 bytes
969 )))
970
971 [[image:1653272817147-600.png||height="437" width="717"]]
972
973 So totally there will be 3 uplinks for this sampling, each uplink includes 6 bytes DATA
974
975
976 DATA1=RETURN1 Valid Value = (% style="background-color:#4f81bd; color:white" %) 20 20 0a 33 90 41
977
978 DATA2=1^^st^^ ~~ 6^^th^^ byte of Valid value of RETURN10= (% _mstmutation="1" style="background-color:#4f81bd; color:white" %)02 aa 05 81 0a 20
979
980 DATA3=7^^th^^ ~~ 11^^th^^ bytes of Valid value of RETURN10 =(% _mstmutation="1" style="background-color:#4f81bd; color:white" %) 20 20 20 2d 30
981
982
983 Below are the uplink payloads:
984
985 [[image:1653272901032-107.png]]
986
987
988 (% style="color:red" %)**Notice: the Max bytes is according to the max support bytes in different Frequency Bands for lowest SF. As below:**
989
990 ~* For AU915/AS923 bands, if UplinkDwell time=0, max 51 bytes for each uplink ( so 51 -5 = 46 max valid date)
991
992 * For AU915/AS923 bands, if UplinkDwell time=1, max 11 bytes for each uplink ( so 11 -5 = 6 max valid date).
993
994 * For US915 band, max 11 bytes for each uplink ( so 11 -5 = 6 max valid date).
995
996 ~* For all other bands: max 51 bytes for each uplink  ( so 51 -5 = 46 max valid date).
997
998 *(% style="color:red" %)** When AT+DATAUP=1, the maximum number of segments is 15, and the maximum total number of bytes is 1500;**
999
1000 (% style="color:red" %)** When AT+DATAUP=1 and AT+ADR=0, the maximum number of bytes of each payload is determined by the DR value. (Since v1.4.0)**
1001
1002
1003 * (((
1004 (% style="color:blue" %)**If the data is empty, return to the display (Since v1.4.0)**(%%)
1005 (% style="color:blue" %)
1006 )))
1007
1008 (% class="wikigeneratedid" %)
1009 **1) ** When (% style="color:blue" %)**AT+MOD=1**(%%), if the data intercepted by (% style="color:#037691" %)** AT+DATACUT**(%%) or (% style="color:#037691" %)** AT+MBFUN **(%%)is empty, it will display **NULL**, and the payload will be filled with **n FFs**.
1010
1011 (% class="wikigeneratedid" %)
1012 [[image:image-20220824114359-3.png||height="297" width="1106"]]
1013
1014
1015 **2)**  When** (% style="color:blue" %)AT+MOD=2(%%)**, if the data intercepted by (% style="color:#037691" %)** AT+DATACUT** (%%)or (% style="color:#037691" %)** AT+MBFUN**(%%) is empty, it will display **NULL**, and the payload will be filled with **n 00s**.
1016
1017 [[image:image-20220824114330-2.png]]
1018
1019
1020 === 2.6.3 Uplink on demand ===
1021
1022
1023 (((
1024 Except uplink periodically, RS485-LB/LS is able to uplink on demand. The server sends downlink command to RS485-LB/LS and RS485 will uplink data base on the command.
1025 )))
1026
1027 (((
1028 (% style="color:blue" %)** Downlink control command:**
1029 )))
1030
1031 (((
1032 (% style="color:#4472c4" %)** 0xA8 command**(%%): Send a command to RS485-LB/LS and uplink the output from sensors.
1033 )))
1034
1035
1036 === 2.6.4 Uplink on Interrupt ===
1037
1038
1039 Put the interrupt sensor between 3.3v_out and GPIO_EXTI.
1040
1041 [[image:image-20231019112133-3.png]]
1042
1043
1044 (((
1045 (% style="color:#4472c4" %)**AT+INTMOD=0**(%%)  Disable Interrupt
1046 )))
1047
1048 (((
1049 (% style="color:#4472c4" %)**AT+INTMOD=1**(%%)  Interrupt trigger by rising or falling edge.
1050 )))
1051
1052 (((
1053 (% style="color:#4472c4" %)**AT+INTMOD=2** (%%) Interrupt trigger by falling edge. (Default Value)
1054 )))
1055
1056 (((
1057 (% style="color:#4472c4" %)**AT+INTMOD=3**(%%)  Interrupt trigger by rising edge.
1058 )))
1059
1060
1061 == 2.7 Report on Change Feature (Since firmware V1.1.1) ==
1062
1063 === 2.7.1 Uplink payload(Enable ROC) ===
1064
1065
1066 Used to monitor changes in external sensor data. When the change amount exceeds the threshold, the ROC uplink is sent.
1067
1068 Take the ranging sensor of RS485 protocol as an example.
1069
1070 The payload for the uplink is 0C 7E 01 02 2C 07 E0.
1071
1072 (% border="1" cellspacing="3" style="background-color:#f2f2f2; width:515px" %)
1073 |(% style="background-color:#4f81bd; color:white; width:92px" %)(((
1074 **Size(bytes)**
1075 )))|(% style="background-color:#4f81bd; color:white; width:55px" %)**2**|(% style="background-color:#4f81bd; color:white; width:228px" %)**1**|(% style="background-color:#4f81bd; color:white; width:67px" %)**2**|(% style="background-color:#4f81bd; color:white; width:73px" %)**2**
1076 |(% style="background-color:#f2f2f2; width:92px" %)Value|(% style="background-color:#f2f2f2; width:55px" %)BAT|(% style="background-color:#f2f2f2; width:204px" %)(((
1077 Payver & roc1_flagL & roc1_flagH & roc2_flagL & roc1_flagH
1078 )))|(% style="background-color:#f2f2f2; width:67px" %)(((
1079 Distance1
1080 )))|(% style="background-color:#f2f2f2; width:73px" %)(((
1081 Distance2
1082 )))
1083
1084 (% style="color:blue" %)**Payver &roc1_flagL & roc1_flagH & roc2_flagL & roc1_flagH:**
1085
1086 (% border="1" cellspacing="3" style="background-color:#f2f2f2; width:515px" %)
1087 |(% style="background-color:#4f81bd; color:white; width:50px" %)**Size(bit)**|(% style="background-color:#4f81bd; color:white; width:93px" %)**bit7**|(% style="background-color:#4f81bd; color:white; width:93px" %)**bit6**|(% style="background-color:#4f81bd; color:white; width:93px" %)**bit5**|(% style="background-color:#4f81bd; color:white; width:93px" %)**bit4**|(% style="background-color:#4f81bd; color:white; width:93px" %)**bit[3:0]**
1088 |(% style="width:75px" %)Value|(% style="width:89px" %)(((
1089 roc1_flagL
1090 )))|(% style="width:46.5834px" %)(((
1091 roc1_flagH
1092 )))|(% style="width:1px" %)(((
1093 roc2_flagL
1094 )))|(% style="width:89px" %)(((
1095 roc2_flagH
1096 )))|(% style="width:89px" %)Payver
1097
1098 * (% style="color:#037691" %)**roc1_flagL**
1099
1100 81 (H): (0x81&0x80)=80(H)=**1**000 0000(B)  bit7=1, "TRUE", When Distance1 is compared with the comparison value after the last ROC refresh, if the reduction exceeds the specified threshold, an ROC uplink is triggered.
1101
1102 41 (H): (0x41&0x80)=0  bit7=0, "FALSE", When Distance1 is compared with the value after the last ROC refresh, the ROC uplink is not triggered if the reduction does not exceed the specified threshold
1103
1104
1105 * (% style="color:#037691" %)**roc1_flagH**
1106
1107 41 (H): (0x41&0x40)=40(H)=0**1**000 0000(B)  bit6=1, "TRUE", When Distance1 is compared with the comparison value after the last ROC refresh, if the increase exceeds the threshold, an ROC uplink is triggered.
1108
1109 81 (H): (0x81&0x40)=0  bit6=0, "FALSE", When Distance1 is compared with the value after the last ROC refresh, the ROC uplink is not triggered if the increase does not exceed the specified threshold.
1110
1111
1112 * (% style="color:#037691" %)**roc2_flagL**
1113
1114 21 (H): (0x21&0x20)=20(H)=00**1**0 0000(B)  bit5=1, "TRUE", When Distance2 is compared with the comparison value after the last ROC refresh, if the reduction exceeds the specified threshold, an ROC uplink is triggered.
1115
1116 11 (H): (0x11&0x20)=0  bit5=0, "FALSE", When Distance2 is compared with the value after the last ROC refresh, the ROC uplink is not triggered if the reduction does not exceed the specified threshold
1117
1118
1119 * (% style="color:#037691" %)**roc2_flagH**
1120
1121 11 (H): (0x11&0x10)=10(H)=000**1** 0000(B)  bit4=1, "TRUE", When Distance2 is compared with the comparison value after the last ROC refresh, if the increase exceeds the threshold, an ROC uplink is triggered.
1122
1123 21 (H): (0x21&0x10)=0  bit4=0, "FALSE", When Distance2 is compared with the value after the last ROC refresh, the ROC uplink is not triggered if the increase does not exceed the specified threshold.
1124
1125
1126 === 2.7.2 Set the Report on Change ===
1127
1128
1129 Feature: Set the detection interval and threshold to monitor whether variables on the uplink payload exceed the threshold. If the value exceeds the threshold, the ROC uplink is sent.
1130
1131 (% style="color:red" %)**Note : **(%%) The RS485 payload is flexible and for this device we can monitor the increment on the maximum two segments payload and send the R0C uplink when any segment change is exceeded.
1132
1133
1134 (% style="color:blue" %)**AT Command: AT+ROC**
1135
1136 (% border="1" cellspacing="3" style="background-color:#f2f2f2; width:510px" %)
1137 |=(% style="width: 163px; background-color: rgb(79, 129, 189); color: white;" %)**Command Example**|=(% style="width: 187px; background-color: rgb(79, 129, 189); color: white;" %)**Parameters**|=(% style="width: 158px; background-color: rgb(79, 129, 189); color: white;" %)**Response/Explanation**
1138 |(% style="width:143px" %)AT+ROC=?|(% style="width:197px" %)Show current ROC setting|(% style="width:168px" %)(((
1139 0,0,0,0,0,0,0,0(default)
1140 OK
1141 )))
1142 |(% colspan="1" rowspan="8" style="width:143px" %)(((
1143
1144
1145
1146
1147
1148
1149 AT+ROC=a,b,c,d,e,f,g,h
1150 )))|(% style="width:197px" %)**a**: Enable or disable the ROC|(% style="width:168px" %)(((
1151 0: off
1152 1: on
1153 )))
1154 |(% style="width:197px" %)**b**: Set the detection interval|(% style="width:168px" %)Unit: second
1155 |(% style="width:197px" %)**c**: Sets which byte of the upstream payload the first segment of data starts with.|(% style="width:168px" %)
1156 |(% style="width:197px" %)**d**: Uplink data type of the sensor. (The customer needs to set it according to the data type indicated in the sensor manual.)|(% style="width:168px" %)**1: **uit16_t(automatically gets two bytes);
1157 **2: **int16_t(automatically gets two bytes)
1158 **3:** uint32_t(gets four bytes automatically)
1159 **4:** int32_t(automatically gets four bytes)
1160 |(% style="width:197px" %)**e:** Set the change threshold of the data in the first segment.|(% style="width:168px" %)
1161 |(% style="width:197px" %)**f:** Sets which byte of the upstream payload the second segment of data starts with.|(% style="width:168px" %)
1162 |(% style="width:197px" %)**g:** Uplink data type of the sensor. (The customer needs to set it according to the data type indicated in the sensor manual.)|(% style="width:168px" %)**1: **uit16_t(automatically gets two bytes);
1163 **2: **int16_t(automatically gets two bytes)
1164 **3:** uint32_t(gets four bytes automatically)
1165 **4:** int32_t(automatically gets four bytes)
1166 |(% style="width:197px" %)**h:** Set the change threshold for the data in the second segment.|(% style="width:168px" %)
1167
1168 **Example:**
1169
1170 * AT+ROC=1,60,4,2,2,6,2,2 ~/~/ Enable the ROC function to detect external sensor data every 60 seconds. When the change value of the fourth to fifth bytes of uplink data exceeds the threshold 2, the uplink of ROC1 is triggered. When the data change of the sixth to seventh bytes exceeds the set threshold 2, the uplink of ROC2 is triggered.
1171 * AT+ROC=1,60,4,2,2,0,0,0  ~/~/ Enable the ROC function to detect the data of the external sensor every 60 seconds. When the fourth to fifth bytes of uplink data change exceeds the threshold 2, the uplink of ROC1 is triggered. The second segment of data is not monitored.
1172 * (((
1173 AT+ROC=1,60,0,0,0,6,2,2  ~/~/ Enable the ROC function to detect the data of the external sensor every 60 seconds. When the data change of the sixth to seventh bytes of uplink exceeds the threshold 2, the uplink of ROC2 is triggered. The first segment of data is not monitored.
1174 )))
1175
1176 (% style="color:blue" %)**Downlink Command:  0x0D aa bb bb cc dd ee ee ee ee ff gg hh hh hh hh **
1177
1178 Format: Function code (0x0D) followed by 15 bytes.
1179
1180 (% style="color:blue" %)**aa: **(%%)Enable/Disable the ROC.
1181
1182 (% style="color:blue" %)**bb bb: **(%%)Set the detection interval.
1183
1184 (% style="color:blue" %)**cc: **(%%)Sets which byte of the upstream payload the first segment of data starts with.
1185
1186 (% style="color:blue" %)**dd: **(%%)Uplink data type of the sensor. (The customer needs to set it according to the data type indicated in the sensor manual.)
1187
1188 (% style="color:#0000ff" %)**ee ee ee ee: **(%%)Set the change threshold of the data in the first segment.
1189
1190 (% style="color:#0000ff" %)**ff: **(%%)Sets which byte of the upstream payload the second segment of data starts with.
1191
1192 (% style="color:#0000ff" %)**gg: **(%%)Uplink data type of the sensor. (The customer needs to set it according to the data type indicated in the sensor manual.)
1193
1194 (% style="color:#0000ff" %)**hh hh hh hh: **(%%)Set the change threshold for the data in the second segment.
1195
1196 **Example:**
1197
1198 * Downlink Payload: **0D 01 00 3C 04 02 00 00 00 02 06 02 00 00 00 02 ** ~/~/ Equal to AT+ROC=1,60,4,2,2,6,2,2
1199 * Downlink Payload: **0D 01 00 3C 04 02 00 00 00 02 00 00 00 00 00 00 ** ~/~/ Equal to AT+ROC=1,60,4,2,2,0,0,0
1200 * Downlink Payload: **0D 01 00 3C 00 00 00 00 00 00 06 02 00 00 00 02 ** ~/~/ Equal to AT+ROC=1,60,0,0,0,6,2,2
1201
1202 **Screenshot of parsing example in TTN:**
1203
1204 [[image:image-20241021172942-1.png]]
1205
1206
1207
1208 == 2.8 Datalog Feature ==
1209
1210
1211 (((
1212 Datalog Feature is to ensure IoT Server can get all sampling data from Sensor even if the LoRaWAN network is down. For each sampling, RS485-LB will store the reading for future retrieving purposes. There are two ways for IoT servers to get datalog from RS485-LB.
1213 )))
1214
1215
1216 === 2.8.1 Ways to get datalog via LoRaWAN ===
1217
1218
1219 There are two methods:
1220
1221 (% style="color:blue" %)**Method 1:** (%%)IoT Server sends a downlink LoRaWAN command to [[poll the value>>||anchor="H2.8.4Pollsensorvalue"]] for specified time range.
1222
1223
1224 (% style="color:blue" %)**Method 2: **(%%)Set PNACKMD=1, RS485-LB will wait for ACK for every uplink, when there is no LoRaWAN network, RS485-LB will mark these records with non-ack messages and store the sensor data, and it will send all messages (10s interval) after the network recovery.
1225
1226
1227 (% style="color:red" %)**Note for method 2:**
1228
1229 * a) RS485-LB will do an ACK check for data records sending to make sure every data arrive server.
1230 * b) RS485-LB will send data in **CONFIRMED Mode** when PNACKMD=1, but RS485-LB won't re-transmit the packet if it doesn't get ACK, it will just mark it as a NONE-ACK message. In a future uplink if RS485-LB gets a ACK, RS485-LB will consider there is a network connection and resend all NONE-ACK Message.
1231
1232 Below is the typical case for the auto-update datalog feature (Set PNACKMD=1)
1233
1234 [[image:image-20250325160942-1.png]]
1235
1236
1237 === 2.8.2 Unix TimeStamp ===
1238
1239
1240 RS485-LB uses Unix TimeStamp format based on
1241
1242 [[image:https://wiki.dragino.com/xwiki/bin/download/Main/User%20Manual%20for%20LoRaWAN%20End%20Nodes/LHT65N%20LoRaWAN%20Temperature%20%26%20Humidity%20Sensor%20Manual/WebHome/image-20220523001219-11.png?width=627&height=97&rev=1.1||alt="image-20220523001219-11.png"]]
1243
1244
1245 User can get this time from link:  [[https:~~/~~/www.epochconverter.com/>>url:https://www.epochconverter.com/]] :
1246
1247 Below is the converter example
1248
1249 [[image:https://wiki.dragino.com/xwiki/bin/download/Main/User%20Manual%20for%20LoRaWAN%20End%20Nodes/LHT65N%20LoRaWAN%20Temperature%20%26%20Humidity%20Sensor%20Manual/WebHome/image-20220523001219-12.png?width=720&height=298&rev=1.1||alt="image-20220523001219-12.png"]]
1250
1251 So, we can use AT+TIMESTAMP=1742889625 or downlink 3067E26299 to set the current time 2025 – March ~-~- 25 Tuesday  08:00:25
1252
1253
1254 === 2.8.3 Set Device Time ===
1255
1256
1257 (((
1258 (% style="color:blue" %)**There are two ways to set device's time:**
1259 )))
1260
1261 (((
1262 **1.  Through LoRaWAN MAC Command (Default settings)**
1263 )))
1264
1265 (((
1266 User need to set SYNCMOD=1 to enable sync time via MAC command.
1267 )))
1268
1269 (((
1270 Once RS485-LB Joined LoRaWAN network, it will send the MAC command (DeviceTimeReq) and the server will reply with (DeviceTimeAns) to send the current time to RS485-LB. If RS485-LB fails to get the time from the server, RS485-LB will use the internal time and wait for next time request (AT+SYNCTDC to set the time request period, default is 10 days).
1271 )))
1272
1273 (((
1274 (% style="color:red" %)**Note: LoRaWAN Server need to support LoRaWAN v1.0.3(MAC v1.0.3) or higher to support this MAC command feature, Chirpstack,TTN V3 v3 and loriot support but TTN V3 v2 doesn't support. If server doesn't support this command, it will through away uplink packet with this command, so user will lose the packet with time request for TTN V3 v2 if SYNCMOD=1.**
1275 )))
1276
1277
1278 (((
1279 **2. Manually Set Time**
1280 )))
1281
1282 (((
1283 User needs to set SYNCMOD=0 to manual time, otherwise, the user set time will be overwritten by the time set by the server.
1284 )))
1285
1286
1287 === 2.8.4 Poll sensor value ===
1288
1289
1290 User can poll sensor value based on timestamps from the server. Below is the downlink command.
1291
1292 (% border="1" cellspacing="3" style="background-color:#f2f2f2; width:438.778px" %)
1293 |(% style="background-color:#4f81bd; color:white; width:59px" %)**1byte**|(% style="background-color:#4f81bd; color:white; width:123px" %)**4bytes**|(% style="background-color:#4f81bd; color:white; width:114px" %)**4bytes**|(% style="background-color:#4f81bd; color:white; width:142.778px" %)**1byte**
1294 |(% style="width:58px" %)31|(% style="width:123px" %)Timestamp start|(% style="width:114px" %)Timestamp end|(% style="width:137px" %)(((
1295 Uplink Interval(range 5~~255s)
1296 )))
1297
1298 Timestamp start and Timestamp end use Unix TimeStamp format as mentioned above. Devices will reply with all data log during this time period, use the uplink interval.
1299
1300 For example, downlink command (% _mstmutation="1" %)**31 67E24660 67E26280 05**(%%)
1301
1302 Is to check 2025/03/25 06:00:00 to 2025/03/25 08:00:00's data
1303
1304 Uplink Internal =5s, means RS485-LB will send one packet every 5s.
1305
1306
1307 === 2.8.5 Datalog Uplink payload ===
1308
1309
1310 The Datalog poll reply uplink will use below payload format.
1311
1312 **Retrieval data payload:**
1313
1314 (% border="1" cellspacing="3" style="background-color:#f2f2f2; width:480px" %)
1315 |=(% style="width: 60px;background-color:#4F81BD;color:white" %)(((
1316 **Size(bytes)**
1317 )))|=(% style="width: 100px; background-color: rgb(79, 129, 189); color: white;" %)**4**|=(% style="width: 100px; background-color: rgb(79, 129, 189); color: white;" %)**1**|=(% style="width: 220px; background-color: rgb(79, 129, 189); color: white;" %)**Length depends on the return from the commands**
1318 |(% style="width:97px" %)Value|(% style="width:104px" %)Unix Time Stamp|(% style="width:109px" %)Payload Length|(% style="width:165px" %)Data returned by the sensor
1319
1320 **Example:**
1321
1322 If RS485-LB has below data inside Flash:
1323
1324 (Distance sensors using the RS485 protocol are used for testing.)
1325
1326 (% border="1" cellspacing="3" style="background-color:#f2f2f2; width:510px" %)
1327 |=(% style="width: 88px; background-color:#4F81BD;color:white" %)Flash Add|=(% style="width: 98px; background-color: rgb(79, 129, 189); color: white;" %)**Unix Time**|=(% style="width: 82px; background-color: rgb(79, 129, 189); color: white;" %)Payload Length|=(% style="width: 86px; background-color: rgb(79, 129, 189); color: white;" %)**BAT voltage**|=(% style="width: 92px; background-color: rgb(79, 129, 189); color: white;" %)Payload Version|=(% style="width: 64px; background-color:#4F81BD;color:white" %)**Value**
1328 |(% style="width:89px" %)(((
1329 0001
1330 )))|(% style="width:98px" %)(((
1331 2025/3/25 08:09:30
1332 )))|(% style="width:82px" %)5|(% style="width:86px" %)(((
1333 0c a8
1334 )))|(% style="width:92px" %)01|(% style="width:131px" %)(((
1335 08 21
1336 )))
1337 |(% style="width:89px" %)0002|(% style="width:98px" %)(((
1338 2025/3/25 08:10:30
1339 )))|(% style="width:82px" %)5|(% style="width:86px" %)(((
1340 0c ae
1341 )))|(% style="width:92px" %)01|(% style="width:131px" %)(((
1342 08 22
1343 )))
1344 |(% style="width:89px" %)0003|(% style="width:98px" %)(((
1345 2025/3/25 08:11:30
1346 )))|(% style="width:82px" %)5|(% style="width:86px" %)0c ae|(% style="width:92px" %)01|(% style="width:131px" %)08 22
1347 |(% style="width:89px" %)0004|(% style="width:98px" %)(((
1348 2025/3/25 08:12:30
1349 )))|(% style="width:82px" %)5|(% style="width:86px" %)0c ae|(% style="width:92px" %)01|(% style="width:131px" %)08 22
1350 |(% style="width:89px" %)0005|(% style="width:98px" %)(((
1351 2025/3/25 08:13:30
1352 )))|(% style="width:82px" %)5|(% style="width:86px" %)(((
1353 0c b4
1354 )))|(% style="width:92px" %)01|(% style="width:131px" %)08 23
1355 |(% style="width:89px" %)0006|(% style="width:98px" %)(((
1356 2025/3/25 08:14:30
1357 )))|(% style="width:82px" %)5|(% style="width:86px" %)0c ae|(% style="width:92px" %)01|(% style="width:131px" %)08 22
1358 |(% style="width:89px" %)0007|(% style="width:98px" %)(((
1359 2025/3/25 08:15:30
1360 )))|(% style="width:82px" %)5|(% style="width:86px" %)0c b4|(% style="width:92px" %)01|(% style="width:131px" %)08 23
1361 |(% style="width:89px" %)0008|(% style="width:98px" %)(((
1362 2025/3/25 08:16:30
1363 )))|(% style="width:82px" %)5|(% style="width:86px" %)0c ae|(% style="width:92px" %)01|(% style="width:131px" %)08 22
1364
1365 If user sends below downlink command: (% style="background-color:yellow" %)3167E264BA67E2665E05
1366
1367 Where : Start time: 67E264BA = time 2025/3/25 08:09:30
1368
1369 Stop time: 67E2665E= time 2025/3/25 08:16:30
1370
1371
1372 **RS485-LB will uplink this payload.**
1373
1374 **67E264BA 05 0CA8 01 0821** 67E264F6050CAE01082267E26532050CAE01082267E2656E050CAE01082267E265AA050CB401082367E265E6050CAE01082267E26622050CB401082367E2665E050CAE010822
1375
1376
1377 Where the first 10 bytes is for the first entry:
1378
1379 67E264BA050CA8010821
1380
1381 Unix Time Stamp: 67E264BA(H)=1742890170(D)  ~-~->  time=2025-03-25 8:09:30
1382
1383 Payload Length: 0x05(H)=5 bytes
1384
1385 Battery voltage: 0x0CA8(H)=3240 mV
1386
1387 Payload Version:  01
1388
1389 Value: For the distance sensor used for testing, this value is the mm distance value, 0x0821(H)=2081mm.
1390
1391
1392 = 3. Configure RS485-LB/LS =
1393
1394 == 3.1 Configure Methods ==
1395
1396
1397 RS485-LB/LS supports below configure method:
1398
1399 * AT Command via Bluetooth Connection (**Recommended**): [[BLE Configure Instruction>>http://wiki.dragino.com/xwiki/bin/view/Main/BLE%20Bluetooth%20Remote%20Configure/]].
1400 * AT Command via UART Connection : See [[UART Connection>>http://wiki.dragino.com/xwiki/bin/view/Main/UART%20Access%20for%20LoRa%20ST%20v4%20base%20model/#H2.3UARTConnectionforSN50v3basemotherboard]].
1401 * LoRaWAN Downlink.  Instruction for different platforms: See [[IoT LoRaWAN Server>>http://wiki.dragino.com/xwiki/bin/view/Main/]] section.
1402
1403 == 3.2 General Commands ==
1404
1405
1406 These commands are to configure:
1407
1408 * General system settings like: uplink interval.
1409 * LoRaWAN protocol & radio related command.
1410
1411 They are same for all Dragino Devices which support DLWS-005 LoRaWAN Stack. These commands can be found on the wiki:
1412
1413 [[http:~~/~~/wiki.dragino.com/xwiki/bin/view/Main/End%20Device%20AT%20Commands%20and%20Downlink%20Command/>>http://wiki.dragino.com/xwiki/bin/view/Main/End%20Device%20AT%20Commands%20and%20Downlink%20Command/]]
1414
1415
1416 == 3.3 Commands special design for RS485-LB/LS ==
1417
1418
1419 These commands only valid for RS485-LB/LS, as below:
1420
1421
1422 === 3.3.1 Choose Device Type (RS485 or TTL) ===
1423
1424
1425 RS485-LB/LS can connect to either RS485 sensors or TTL sensor. User need to specify what type of sensor need to connect.
1426
1427 * (% style="color:#037691" %)**AT Command**
1428
1429 (% style="color:#4472c4" %)** AT+MOD=1** (%%) ~/~/ Set to support RS485-MODBUS type sensors. User can connect multiply RS485 , Modbus sensors to the A / B pins.
1430
1431 (% style="color:#4472c4" %)** AT+MOD=2** (%%) ~/~/ Set to support TTL Level sensors, User can connect one TTL Sensor to the TXD/RXD/GND pins.
1432
1433
1434 * (% style="color:#037691" %)**Downlink Payload**
1435
1436 (% style="color:#4472c4" %)** 0A aa** (%%) ~-~->  same as AT+MOD=aa
1437
1438
1439 === 3.3.2 RS485 Debug Command (AT+CFGDEV) ===
1440
1441
1442 (((
1443 This command is used to configure the RS485 or TTL sensors; they won't be used during sampling. Max Length of AT+CFGDEV is **40 bytes**.
1444 )))
1445
1446 (((
1447 * (% style="color:#037691" %)**AT Command**
1448
1449 (((
1450 (% style="color:#4472c4" %)** AT+CFGDEV=xx xx xx xx xx xx xx xx xx xx xx xx,m**  (%%) m: 0: no CRC;  1: add CRC-16/MODBUS in the end of this command.
1451 )))
1452 )))
1453
1454
1455 * (((
1456 (% style="color:#037691" %)**Downlink Payload**
1457 )))
1458
1459 (((
1460 Format:  (% style="color:#4472c4" %)** A8 MM NN XX XX XX XX YY**
1461 )))
1462
1463 (((
1464 Where:
1465 )))
1466
1467 * (((
1468 MM: 1: add CRC-16/MODBUS ; 0: no CRC
1469 )))
1470 * (((
1471 NN: The length of RS485 command
1472 )))
1473 * (((
1474 XX XX XX XX: RS485 command total NN bytes
1475 )))
1476 * (((
1477 YY: How many bytes will be uplink from the return of this RS485 command, if YY=0, RS485-LB/LS will execute the downlink command without uplink; if YY>0, RS485-LB/LS will uplink total YY bytes from the output of this RS485 command
1478 )))
1479
1480 (((
1481 (% style="color:blue" %)**Example 1:**
1482 )))
1483
1484 (((
1485 To connect a Modbus Alarm with below commands.
1486 )))
1487
1488 * (((
1489 The command to active alarm is: 0A 05 00 04 00 01 **4C B0**. Where 0A 05 00 04 00 01 is the Modbus command to read the register 00 40 where stored the DI status. The 4C B0 is the CRC-16/MODBUS which calculate manually.
1490 )))
1491
1492 * (((
1493 The command to deactivate alarm is: 0A 05 00 04 00 00 **8D 70**. Where 0A 05 00 04 00 00 is the Modbus command to read the register 00 40 where stored the DI status. The 8D 70 is the CRC-16/MODBUS which calculate manually.
1494 )))
1495
1496 (((
1497 So if user want to use downlink command to control to RS485 Alarm, he can use:
1498 )))
1499
1500 (((
1501 (% style="color:#037691" %)**A8 01 06 0A 05 00 04 00 01 00**(%%): to activate the RS485 Alarm
1502 )))
1503
1504 (((
1505 (% style="color:#037691" %)**A8 01 06 0A 05 00 04 00 00 00**(%%): to deactivate the RS485 Alarm
1506 )))
1507
1508 (((
1509 A8 is type code and 01 means add CRC-16/MODBUS at the end, the 3^^rd^^ byte is 06, means the next 6 bytes are the command to be sent to the RS485 network, the final byte 00 means this command don’t need to acquire output.
1510 )))
1511
1512
1513 (((
1514 (% style="color:blue" %)**Example 2:**
1515 )))
1516
1517 (((
1518 Check TTL Sensor return:
1519 )))
1520
1521 (((
1522 [[image:1654132684752-193.png]]
1523 )))
1524
1525
1526 === 3.3.3 Set Payload version ===
1527
1528
1529 This is the first byte of the uplink payload. RS485-LB/LS can connect to different sensors. User can set the PAYVER field to tell server how to decode the current payload.
1530
1531 * (% style="color:#037691" %)**AT Command:**
1532
1533 (% style="color:#4472c4" %)** AT+PAYVER:   **(%%)Set PAYVER field = 1
1534
1535
1536 * (% style="color:#037691" %)**Downlink Payload:**
1537
1538 (% style="color:#4472c4" %)** 0xAE 01** (%%) ~-~-> Set PAYVER field =  0x01
1539
1540 (% style="color:#4472c4" %)** 0xAE 0F** (%%) ~-~-> Set PAYVER field =  0x0F
1541
1542
1543 === 3.3.4 Set RS485 Sampling Commands ===
1544
1545
1546 (((
1547 AT+COMMANDx, AT+DATACUTx and AT+SEARCHx
1548 )))
1549
1550 (((
1551 These three commands are used to configure how the RS485-LB polling data from Modbus device. Detail of usage please see : [[polling RS485 device>>||anchor="H2.5.3Configurereadcommandsforeachsampling"]].
1552 )))
1553
1554
1555 * (((
1556 (% style="color:#037691" %)**AT Command:**
1557 )))
1558
1559 (% style="color:#4472c4" %)** AT+COMMANDx: **(%%)** Configure RS485 read command to sensor.**
1560
1561 (% style="color:#4472c4" %)** AT+DATACUTx: **(%%)** Configure how to handle return from RS485 devices.**
1562
1563 (% style="color:#4472c4" %)** AT+SEARCHx:  **(%%)** Configure search command**
1564
1565
1566 * (((
1567 (% style="color:#037691" %)**Downlink Payload:**
1568 )))
1569
1570 (((
1571 (% style="color:#4472c4" %)** 0xAF**(%%) downlink command can be used to set AT+COMMANDx or AT+DATACUTx.
1572 )))
1573
1574 (((
1575 (% style="color:red" %)**Note : if user use AT+COMMANDx to add a new command, he also need to send AT+DATACUTx downlink.**
1576 )))
1577
1578 (((
1579 Format: AF MM NN LL XX XX XX XX YY
1580 )))
1581
1582 (((
1583 Where:
1584 )))
1585
1586 * (((
1587 MM: the ATCOMMAND or AT+DATACUT to be set. Value from 01 ~~ 0F,
1588 )))
1589 * (((
1590 NN:  0: no CRC; 1: add CRC-16/MODBUS ; 2: set the AT+DATACUT value.
1591 )))
1592 * (((
1593 LL:  The length of AT+COMMAND or AT+DATACUT command
1594 )))
1595 * (((
1596 XX XX XX XX: AT+COMMAND or AT+DATACUT command
1597 )))
1598 * (((
1599 YY:  If YY=0, RS485-LB/LS will execute the downlink command without uplink; if YY=1, RS485-LB/LS will execute an uplink after got this command.
1600 )))
1601
1602 (((
1603 **Example:**
1604 )))
1605
1606 (((
1607 (% style="color:#037691" %)**AF 03 01 06 0A 05 00 04 00 01 00**(%%): Same as AT+COMMAND3=0A 05 00 04 00 01,1
1608 )))
1609
1610 (((
1611 (% style="color:#037691" %)**AF 03 02 06**(% style="color:orange" %)** 10 **(% style="color:red" %)**01 **(% style="color:green" %)**05 06 09 0A**(% style="color:#037691" %)** 00**(%%): Same as AT+DATACUT3=(% style="color:orange" %)**16**(%%),(% style="color:red" %)**1**(%%),(% style="color:green" %)**5+6+9+10**
1612 )))
1613
1614 (((
1615 (% style="color:#037691" %)**AF 03 02 06 **(% style="color:orange" %)**0B**(% style="color:red" %)** 02 **(% style="color:green" %)**05 07 08 0A **(% style="color:#037691" %)**00**(%%): Same as AT+DATACUT3=(% style="color:orange" %)**11**(%%),(% style="color:red" %)**2**(%%),(% style="color:green" %)**5~~7+8~~10**
1616 )))
1617
1618
1619 (((
1620 (% style="color:#4472c4" %)** 0xAB**(%%) downlink command can be used for set AT+SEARCHx
1621 )))
1622
1623 (((
1624 **Example:** **AB aa 01 03 xx xx xx** (03 here means there are total 3 bytes after 03) So
1625 )))
1626
1627 * (((
1628 AB aa 01 03 xx xx xx  same as AT+SEARCHaa=1,xx xx xx
1629 )))
1630 * (((
1631 AB aa 02 03 xx xx xx 02 yy yy(03 means there are 3 bytes after 03, they are xx xx xx;02 means there are 2 bytes after 02, they are yy yy) so the commands
1632 )))
1633
1634 (((
1635 **AB aa 02 03 xx xx xx 02 yy yy**  same as **AT+SEARCHaa=2,xx xx xx+yy yy**
1636 )))
1637
1638
1639 === 3.3.5 Fast command to handle MODBUS device ===
1640
1641
1642 (((
1643 AT+MBFUN is valid since v1.3 firmware version. The command is for fast configure to read Modbus devices. It is only valid for the devices which follow the [[MODBUS-RTU protocol>>url:https://www.modbustools.com/modbus.html]].
1644 )))
1645
1646 (((
1647 This command is valid since v1.3 firmware version
1648 )))
1649
1650
1651 (((
1652 (% style="color:#037691" %)**AT+MBFUN has only two value:**
1653 )))
1654
1655 * (((
1656 (% style="color:#4472c4" %)** AT+MBFUN=1**(%%): Enable Modbus reading. And get response base on the MODBUS return
1657 )))
1658
1659 (((
1660 AT+MBFUN=1, device can auto read the Modbus function code: 01, 02, 03 or 04. AT+MBFUN has lower priority vs AT+DATACUT command. If AT+DATACUT command is configured, AT+MBFUN will be ignore.
1661 )))
1662
1663 * (((
1664 (% style="color:#4472c4" %)**AT+MBFUN=0**(%%): Disable Modbus fast reading.
1665 )))
1666
1667 (((
1668
1669
1670 **Example:**
1671 )))
1672
1673 * (((
1674 AT+MBFUN=1 and AT+DATACUT1/AT+DATACUT2 are not configure (0,0,0).
1675 )))
1676 * (((
1677 AT+COMMAND1= 01 03 00 10 00 08,1 ~-~-> read slave address 01 , function code 03, start address 00 01, quantity of registers 00 08.
1678 )))
1679 * (((
1680 AT+COMMAND2= 01 02 00 40 00 10,1 ~-~-> read slave address 01 , function code 02, start address 00 40, quantity of inputs 00 10.
1681 )))
1682
1683 [[image:1654133913295-597.png]]
1684
1685
1686 [[image:1654133954153-643.png]]
1687
1688
1689 * (((
1690 (% style="color:#037691" %)**Downlink Commands:**
1691 )))
1692
1693 (((
1694 (% style="color:#4472c4" %)** A9 aa** (%%)~-~-> Same as AT+MBFUN=aa
1695 )))
1696
1697
1698 === 3.3.6 RS485 command timeout ===
1699
1700
1701 (((
1702 Some Modbus device has slow action to send replies. This command is used to configure the RS485-BL to use longer time to wait for their action.
1703 )))
1704
1705 (((
1706 Default value: 0, range:  0 ~~ 10 seconds
1707 )))
1708
1709 (((
1710
1711 )))
1712
1713 (((
1714 * (% style="color:#037691" %)**AT Command:**
1715
1716 (% style="color:#4472c4" %)**AT+CMDDLaa=hex(bb cc)**
1717
1718
1719 )))
1720
1721 (((
1722 **Example:**
1723 )))
1724
1725 (((
1726 **AT+CMDDL1=1000** to send the open time to 1000ms
1727 )))
1728
1729 (((
1730
1731 )))
1732
1733 * (((
1734 (% style="color:#037691" %)**Downlink Payload:**
1735 )))
1736
1737 (((
1738 (% style="color:#4472c4" %) **0x AA aa bb cc**(%%)  Same as:** AT+CMDDLaa=hex(bb cc)**
1739 )))
1740
1741 (((
1742
1743
1744 **Example:**
1745 )))
1746
1747 (((
1748 (% style="color:#4472c4" %)** 0xAA 01 03 E8**(%%)  ~-~-> Same as (% _mstmutation="1" %)**AT+CMDDL1=1000 ms**
1749 )))
1750
1751
1752 range:  0 ~~ 180seconds (Since version v1.2)
1753
1754 * (((
1755 (% style="color:#037691" %)**Downlink Payload:**
1756 )))
1757
1758 (((
1759 (% style="color:#4472c4" %) **0x AA aa bb cc dd**(%%)  Same as:** AT+CMDDLaa=hex(bb cc dd)**
1760 )))
1761
1762 (((
1763
1764
1765 **Example:**
1766 )))
1767
1768 (((
1769 (% style="color:#4472c4" %)** 0xAA 02 01 11 70**(%%)  ~-~-> Same as (% _mstmutation="1" %)**AT+CMDDL2=70000 ms**
1770
1771
1772 )))
1773
1774 === 3.3.7 Uplink payload mode ===
1775
1776
1777 (((
1778 Define to use one uplink or multiple uplinks for the sampling.
1779 )))
1780
1781 (((
1782 The use of this command please see: [[Compose Uplink payload>>||anchor="H2.6.2.4Composetheuplinkpayload"]]
1783 )))
1784
1785 (((
1786 * (% style="color:#037691" %)**AT Command:**
1787
1788 (% style="color:#4472c4" %)** AT+DATAUP=0**
1789
1790 (% style="color:#4472c4" %)**AT+DATAUP=1**
1791 )))
1792
1793 (% style="color:#4472c4" %)**AT+DATAUP=2       **(%%)~/~/ The external sensor is sent as a separate packet and the data returned by the AT+COMMAND command is sent as a separate packet.
1794
1795 An asterisk ( * ) indicates that it is optional and can be added, refer to instructions (% style="color:red" %)**AT+EXT=a,b,c**(%%) to set up external sensors and pulse counts.
1796
1797 **(FPORT2)**Battery(mV) & Interrupt_Flag + PAYLOAD_VER + *SHT31 temp + *SHT31 Hum + *counting + *DS18B20
1798 **(FPORT3)**PAYLOAD COUNT + PAYLOAD# + Length depends on the return from the commands
1799
1800 (% style="color:red" %)**Note: AT+DATAUP=2 is valid only for firmware versions later than v1.1.0.**
1801
1802
1803 * (((
1804 (% style="color:#037691" %)**Downlink Payload:**
1805 )))
1806
1807 (((
1808 (% style="color:#4472c4" %)** 0xAD 00**  (%%) **~-~->** Same as AT+DATAUP=0
1809 )))
1810
1811 (((
1812 (% style="color:#4472c4" %)** 0xAD 01**   (%%)**~-~->** Same as AT+DATAUP=1  ~/~/ Each uplink is sent to the server one after the other as it is segmented.
1813
1814 (% style="color:#4472c4" %)** 0xAD 02**(%%)**   ~-~->** Same as AT+DATAUP=2 
1815
1816
1817 )))
1818
1819 (((
1820 * (% style="color:#037691" %)**AT Command:**
1821
1822 (% style="color:#4472c4" %)**AT+DATAUP=1,Timeout**
1823 )))
1824
1825
1826 * (((
1827 (% style="color:#037691" %)**Downlink Payload:**
1828 )))
1829
1830 (((
1831 (% style="color:#4472c4" %)** 0xAD 01 00 00 14** (%%) **~-~->** Same as AT+DATAUP=1,20000  ~/~/ (00 00 14 is 20 seconds)
1832 )))
1833
1834 (((
1835 Each uplink is sent to the server at 20-second intervals when segmented.
1836 )))
1837
1838
1839 === 3.3.8 Clear RS485 Command ===
1840
1841
1842 (((
1843 The AT+COMMANDx and AT+DATACUTx  AT+SEARCHx and AT+CMDDLx settings are stored in special location, user can use below command to clear them.
1844 )))
1845
1846 * (((
1847 (% style="color:#037691" %)**AT Command:**
1848 )))
1849
1850 (((
1851 (% style="color:#4472c4" %) **AT+CMDEAR=mm,nn** (%%) mm: start position of erase ,nn: stop position of erase Etc. AT+CMDEAR=1,10 means erase AT+COMMAND1/AT+DATACUT1/AT+SEARCH1/AT+CMDDL1 to AT+COMMANDA/AT+DATACUTA/AT+SEARCHA/AT+CMDDLA.
1852
1853
1854 )))
1855
1856 (((
1857 Example screen shot after clear all RS485 commands. 
1858 )))
1859
1860 (((
1861 The uplink screen shot is:
1862 )))
1863
1864 (((
1865 [[image:1654134704555-320.png]]
1866 )))
1867
1868
1869 * (((
1870 (% style="color:#037691" %)**Downlink Payload:**
1871 )))
1872
1873 (((
1874 (% style="color:#4472c4" %)** 0x09 aa bb**(%%) same as AT+CMDEAR=aa,bb
1875 )))
1876
1877
1878 === 3.3.9 Set Serial Communication Parameters ===
1879
1880
1881 (((
1882 Set the Rs485 serial communication parameters:
1883 )))
1884
1885 * (((
1886 (% style="color:#037691" %)**AT Command:**
1887 )))
1888
1889 (((
1890
1891
1892 * **Set Baud Rate:**
1893 )))
1894
1895 (% style="color:#4472c4" %)** AT+BAUDR=9600** (%%) ~/~/ Options: (200~~115200),When using low baud rate or receiving multiple bytes, you need to use AT+CMDDL to increase the receive timeout (the default receive timeout is 300ms), otherwise data will be lost.
1896
1897
1898 * **Set UART Parity**
1899
1900 (% style="color:#4472c4" %)** AT+PARITY=0**  (%%) ~/~/ Option: 0: no parity, 1: odd parity, 2: even parity
1901
1902
1903 * **Set STOPBIT**
1904
1905 (% style="color:#4472c4" %)** AT+STOPBIT=1** (%%) ~/~/ Option:1 for 1 bit ; 2 for 2 bits
1906
1907
1908 * **Set DATABIT**
1909
1910 (% style="color:#4472c4" %)** AT+DATABIT=8** (%%) ~/~/ Option:7 for 7 bits ; 8 for 8 bits
1911
1912
1913 * (((
1914 (% style="color:#037691" %)**Downlink Payload:**
1915 )))
1916
1917 (((
1918 **Example:**
1919 )))
1920
1921 (((
1922 A7 01 00 60   same as AT+BAUDR=9600
1923 )))
1924
1925 (((
1926 A7 01 04 80  same as AT+BAUDR=115200
1927 )))
1928
1929 (((
1930 A7 02 aa: Same as  AT+PARITY=aa  (aa value: 00 , 01 or 02)
1931 )))
1932
1933 (((
1934 A7 03 aa: Same as  AT+STOPBIT=aa  (aa value: 01 or 02)
1935 )))
1936
1937 A7 04 07: Same as  AT+DATABIT=7
1938
1939 A7 04 08: Same as  AT+DATABIT=8
1940
1941
1942 === 3.3.10 Cut data separation processing ===
1943
1944
1945 AT+NEWLINE command, which only takes effect when AT+DATAUP=1 or AT+DATAUP=1, timeout.
1946
1947 When not set, each part of AT+DATAUP is sent according to the maximum number of bytes of DR.
1948
1949 When setting, each part of AT+DATAUP is sent according to the value set by AT+NEWLINE.
1950
1951
1952 * (((
1953 (% style="color:#037691" %)** AT Command:**
1954 )))
1955
1956 (% style="color:#4472c4" %)//**AT+NEWLINE=ALL**//(%%)//   //The data cut out by each AT+COMMANDx command is sent separately as an uplink.
1957
1958 (% style="color:#4472c4" %)//**AT+NEWLINE=ALL**//(%%)//   equal:  (% style="color:#4472c4" %)**AT+NEWLINE=1+2+3+4+5+6+7+8+9+10+11+12+13+14+15**//
1959
1960
1961 (% style="color:#4472c4" %)//**AT+NEWLINE=a+b+c**//(%%)//  //The data returned by all commands is divided into three parts, COMMAND(1~~a) is the first part, COMMAND(a+1~~b) is the second part,COMMAND(b+1~~c) is the third part.
1962
1963
1964 (% style="color:#4472c4" %)//**AT+NEWLINE=NULL**//(%%)//  //Turn off the functionality of this AT command.
1965
1966
1967 * (((
1968 (% style="color:#037691" %)** Downlink Payload:**
1969 )))
1970
1971 //AT+NEWLINE=ALL  ~-~-->  (% style="color:#4472c4" %)**0xA5 01**//
1972
1973 // AT+NEWLINE= NULL  ~-~-->  (% style="color:#4472c4" %)**0xA5 00**//
1974
1975 //AT+NEWLINE= a+b+c   ~-~-->  (% style="color:#4472c4" %)**0xA5 number of bytes a b c**//
1976
1977 //AT+NEWLINE= 1+5+15 ~-~-->  (% style="color:#4472c4" %)**0xA5 03 01 05 0F**//
1978
1979
1980 === 3.3.11 Control output power duration ===
1981
1982
1983 (% style="color:red" %)**Before v1.2, the maximum settable time of 3V3T and 5VT is 65535 milliseconds. Since v1.2, the maximum settable time of 3V3T and 5VT is 180 seconds.**
1984
1985 (((
1986 User can set the output power duration before each sampling.
1987 )))
1988
1989 * (((
1990 (% style="color:#037691" %)**AT Command:**
1991 )))
1992
1993 (((
1994 **Example:**
1995 )))
1996
1997 (((
1998 (% style="color:#4472c4" %)** AT+3V3T=1000**(%%)  ~/~/ 3V3 output power will open 1s before each sampling.
1999 )))
2000
2001 (((
2002 (% style="color:#4472c4" %)** AT+5VT=1000**  (%%) ~/~/ +5V output power will open 1s before each sampling.
2003 )))
2004
2005 (((
2006
2007 )))
2008
2009 * (((
2010 (% style="color:#037691" %)**LoRaWAN Downlink Command:**
2011
2012 **Example:**
2013
2014 (% style="color:#037691" %)**When the delay is less than 65 seconds, Downlink can be controlled by 4 bytes or 5 bytes:**
2015 )))
2016
2017 (((
2018 (% style="color:#4472c4" %)** 07 01 aa bb** (%%) Same as AT+5VT=(aa<<8 | bb)
2019 )))
2020
2021 (((
2022 (% style="color:#4472c4" %)** 07 02 aa bb** (%%) Same as AT+3V3T=(aa<<8 | bb)
2023
2024 (((
2025 (% style="color:#4472c4" %)** 07 01 aa bb** **cc**(%%) Same as AT+5VT=(aa<<16 | bb<<8 | cc)
2026 )))
2027
2028 (((
2029 (% style="color:#4472c4" %)** 07 02 aa bb** **cc **(%%)Same as AT+3V3T=(aa<<16 | bb<<8 | cc)
2030
2031 (% style="color:#037691" %)** When the delay is greater than 65 seconds, the Downlink is controlled by 5 bytes:**
2032 )))
2033 )))
2034
2035 (((
2036 (% style="color:#4472c4" %)** 07 01 aa bb** **cc**(%%) Same as AT+5VT=(aa<<16 | bb<<8 | cc)
2037 )))
2038
2039 (((
2040 (% style="color:#4472c4" %)** 07 02 aa bb** **cc **(%%)Same as AT+3V3T=(aa<<16 | bb<<8 | cc)
2041 )))
2042
2043 (% style="color:#037691" %)** When  setting 3V3T, 5VT normally open or normally closed.**
2044
2045 (% style="color:#4472c4" %)** 07 03**(%%) (% style="color:#4472c4" %)**01**(%%) Same as AT+3V3T=0 (Enable 3.3V Output)
2046
2047 (% style="color:#4472c4" %)**07 03**(%%) (% style="color:#4472c4" %)**00**(%%) Same as AT+3V3T=65535 (Disable 3.3V Output)
2048
2049 (% style="color:#4472c4" %)**07 04**(%%) (% style="color:#4472c4" %)**01**(%%) Same as AT+5VT=65535 (Enable 5V Output)
2050
2051 (% style="color:#4472c4" %)**07 04**(%%) (% style="color:#4472c4" %)**00**(%%) Same as AT+5VT=0 (Disable 5V Output)
2052
2053
2054 === 3.3.12 Encrypted payload ===
2055
2056
2057 * (((
2058 (% style="color:#037691" %)**AT Command:**
2059 )))
2060
2061 (% style="color:#4472c4" %)** AT+DECRYPT=1 **(%%)** **~/~/ The payload is uploaded without encryption
2062
2063 (% style="color:#4472c4" %)** AT+DECRYPT=0   **(%%)~/~/  Encrypt when uploading payload (default)
2064
2065
2066 === 3.3.13 Get sensor value ===
2067
2068
2069 * (((
2070 (% style="color:#037691" %)**AT Command:**
2071 )))
2072
2073 (% style="color:#4472c4" %)** AT+GETSENSORVALUE=0 **(%%)** **~/~/ The serial port gets the reading of the current sensor
2074
2075 (% style="color:#4472c4" %)** AT+GETSENSORVALUE=1    **(%%)~/~/ The serial port gets the current sensor reading and uploads it.
2076
2077
2078 === 3.3.14 Resets the downlink packet count ===
2079
2080
2081 * (((
2082 (% style="color:#037691" %)**AT Command:**
2083 )))
2084
2085 (% style="color:#4472c4" %)** AT+DISFCNTCHECK=0    **(%%) ~/~/  When the downlink packet count sent by the server is less than the node downlink packet count or exceeds 16384, the node will no longer receive downlink packets (default)
2086
2087 (% style="color:#4472c4" %)** AT+DISFCNTCHECK=1    **(%%) ~/~/  When the downlink packet count sent by the server is less than the node downlink packet count or exceeds 16384, the node resets the downlink packet count and keeps it consistent with the server downlink packet count.
2088
2089
2090 === 3.3.15 When the limit bytes are exceeded, upload in batches ===
2091
2092
2093 * (((
2094 (% style="color:#037691" %)**AT Command:**
2095 )))
2096
2097 (% style="color:#4472c4" %)** AT+DISMACANS=0**  (%%) ~/~/  When the MACANS of the reply server plus the payload exceeds the maximum number of bytes of 11 bytes (DR0 of US915, DR2 of AS923, DR2 of AU195), the node will send a packet with a payload of 00 and a port of 4. (default)
2098
2099 (% style="color:#4472c4" %)** AT+DISMACANS=1**  (%%) ~/~/  When the MACANS of the reply server plus the payload exceeds the maximum number of bytes of the DR, the node will ignore the MACANS and not reply, and only upload the payload part.
2100
2101
2102 * (((
2103 (% style="color:#037691" %)**Downlink Payload**
2104 )))
2105
2106 (% style="color:#4472c4" %)** 0x21 00 01 ** (%%) ~/~/ Set  the DISMACANS=1
2107
2108
2109 === 3.3.16 Copy downlink to uplink ===
2110
2111
2112 * (((
2113 (% style="color:#037691" %)**AT Command:**
2114 )))
2115
2116 (% style="color:#4472c4" %)** AT+RPL=5** (%%) ~/~/ After receiving the package from the server, it will immediately upload the content of the package to the server, the port number is 100.
2117
2118
2119 Example:**aa xx xx xx xx**         ~/~/ aa indicates whether the configuration has changed, 00 is yes, 01 is no; xx xx xx xx are the bytes sent.
2120
2121 [[image:http://wiki.dragino.com/xwiki/bin/download/Main/User%20Manual%20for%20LoRaWAN%20End%20Nodes/LSN50%20%26%20LSN50-V2%20-%20LoRaWAN%20Sensor%20Node%20User%20Manual/WebHome/image-20220823173747-6.png?width=1124&height=165&rev=1.1||alt="image-20220823173747-6.png"]]
2122
2123
2124 For example, sending 11 22 33 44 55 66 77 will return invalid configuration 00 11 22 33 44 55 66 77.
2125
2126 [[image:http://wiki.dragino.com/xwiki/bin/download/Main/User%20Manual%20for%20LoRaWAN%20End%20Nodes/LSN50%20%26%20LSN50-V2%20-%20LoRaWAN%20Sensor%20Node%20User%20Manual/WebHome/image-20220823173833-7.png?width=1124&height=149&rev=1.1||alt="image-20220823173833-7.png"]]
2127
2128
2129 For example, if 01 00 02 58 is issued, a valid configuration of 01 01 00 02 58 will be returned.
2130
2131
2132 === 3.3.17 Query version number and frequency band ===
2133
2134
2135 * (((
2136 (% style="color:#037691" %)**Downlink Payload: 26 01  **(%%) ~/~/ Downlink 26 01 can query device upload frequency, frequency band, software version number, battery.
2137 )))
2138
2139 **Example:**
2140
2141 [[image:image-20231019173852-1.png||height="64" width="1161"]]
2142
2143
2144 == 3.4 +3V3 Output ==
2145
2146
2147 (((
2148 RS485-LB/LS has a Controllable +3V3 output, user can use this output to power external sensor.
2149 )))
2150
2151 (((
2152 The +3V3 output will be valid for every sampling. RS485-LB/LS will enable +3V3 output before all sampling and disable the +3V3 after all sampling. 
2153 )))
2154
2155 (((
2156 The +3V3 output time can be controlled by AT Command.
2157 )))
2158
2159 (% style="color:red" %)**Note: (Since v1.2, AT+3V3T increased from the maximum 65000ms to 180000ms )**
2160
2161 (((
2162 (% style="color:#037691" %)**AT+3V3T=1000**
2163 )))
2164
2165
2166 (((
2167 Means set +3v3 valid time to have 1000ms. So, the real +3v3 output will actually have 1000ms + sampling time for other sensors.
2168 )))
2169
2170 (((
2171 By default, the AT+3V3T=0. This is a special case, means the +3V3 output is always on at any time
2172 )))
2173
2174
2175 == 3.5 +5V Output ==
2176
2177
2178 (((
2179 RS485-LB/LS has a Controllable +5V output, user can use this output to power external sensor.
2180 )))
2181
2182 (((
2183 The +5V output will be valid for every sampling. RS485-LB/LS will enable +5V output before all sampling and disable the +5v after all sampling. 
2184 )))
2185
2186 (((
2187 The 5V output time can be controlled by AT Command.
2188 )))
2189
2190 (((
2191 (% style="color:red" %)**Note: (Since v1.2, AT+5VT increased from the maximum 65000ms to 180000ms )**
2192 )))
2193
2194 (((
2195 (% style="color:#037691" %)**AT+5VT=1000**
2196 )))
2197
2198
2199 (((
2200 Means set 5V valid time to have 1000ms. So, the real 5V output will actually have 1000ms + sampling time for other sensors.
2201 )))
2202
2203 (((
2204 By default, the AT+5VT=0. If the external sensor which require 5v and require more time to get stable state, user can use this command to increase the power ON duration for this sensor.
2205 )))
2206
2207
2208 == 3.6 Switch Jumper ==
2209
2210
2211 (% border="1" cellspacing="5" style="background-color:#f2f2f2; width:463px" %)
2212 |=(% style="width: 123px;background-color:#4F81BD;color:white" %)**Switch Jumper**|=(% style="width: 340px;background-color:#4F81BD;color:white" %)**Feature**
2213 |(% style="width:123px" %)SW1|(% style="width:336px" %)ISP position: Upgrade firmware via UART
2214 Flash position: Configure device, check running status.
2215 |(% style="width:123px" %)SW2|(% style="width:336px" %)5V position: set to compatible with 5v I/O.
2216 3.3v position: set to compatible with 3.3v I/O.,
2217
2218 (((
2219 (% style="color:blue" %)** +3.3V**(%%): is always ON
2220 )))
2221
2222 (((
2223 (% style="color:blue" %)** +5V**(%%): Only open before every sampling. The time is by default, it is (% style="color:#4472c4" %)** AT+5VT=0**(%%).
2224
2225 (% style="color:red" %)**Note: If SW2 is at +5V and AT+5VT=0, work mode 2 will not be able to send data.**
2226 )))
2227
2228
2229 == 3.7 Battery & Power Consumption ==
2230
2231
2232 RS485-LB use ER26500 + SPC1520 battery pack and RS485-LS use 3000mAh Recharable Battery with Solar Panel. See below link for detail information about the battery info and how to replace.
2233
2234 [[**Battery Info & Power Consumption Analyze**>>url:http://wiki.dragino.com/xwiki/bin/view/Main/How%20to%20calculate%20the%20battery%20life%20of%20Dragino%20sensors%3F/]] .
2235
2236
2237 == 3.8 Connect to external temperature sensor & counting sensor(Since firmware V1.1.0) ==
2238
2239
2240 (% style="color:blue" %)**Setting up external sensors:**
2241
2242 * (% style="color:#037691" %)**AT Command:**
2243
2244 (% style="color:#4472c4" %)**AT+EXT=a,b,c**(%%)
2245
2246 (% style="color:#4472c4" %)**a:**(%%)  **0:** ignore I2C interface.  ** 1:** Add SHT31 sensor support (4 bytes).
2247 (% style="color:#4472c4" %)**b: **(%%) **0:** ignore pulse interface ( doesn't effect interrupt ).  **1:** Add Counting Support (4 bytes).
2248 (% style="color:#4472c4" %)**c:**(%%)  **0:** ignore one wire interface.  **1:** Add DS18B20 support (2 bytes).
2249
2250 **Example:**
2251
2252 (% style="color:#4472c4" %)**AT+EXT=1,1,1**
2253
2254 Device will add SHT31, counting, DS18B20 support.
2255
2256 The payload will be:
2257 Battery(mV) & Interrupt _Flag + PAYLOAD_VER + ***SHT31 temp** + ***SHT31 Hum** + ***counting** + *DS18B20 + Length depends on the return from the commands
2258
2259 (% style="color:#4472c4" %)**AT+EXT=0,1,0**
2260
2261 Device will add counting support.
2262
2263 The payload will be:
2264 Battery(mV) & Interrupt _Flag + PAYLOAD_VER + ***counting** + Length depends on the return from the commands
2265
2266 * (% style="color:#037691" %)**Downlink Command: 0x0B aa bb cc**
2267
2268 Format: Command Code (0x0B) followed by 3 bytes.
2269
2270 (% style="color:#037691" %)**aa:**(%%) Set whether to add SHT31 sensor support.  **00**: No, **01**: Add.
2271
2272 (% style="color:#037691" %)**bb:**(%%) Set whether to add Counting Support.  **00**: No, **01**: Add.
2273
2274 (% style="color:#037691" %)**cc:**(%%) Set whether to add DS18B20 support.  **00**: No, **01**: Add.
2275
2276 **Example:**
2277
2278 Downlink payload:  0B 00 00 01  ~/~/AT+EXT=0,0,1  Add DS18B20 support
2279
2280 Downlink payload:  0B 01 00 01  ~/~/AT+EXT=1,0,1  Add SHT31 sensor support and DS18B20 support                        
2281
2282
2283 (% style="color:blue" %)**Set the pulse count value:**
2284
2285 * (% style="color:#037691" %)**AT Command:**
2286
2287 (% style="color:#4472c4" %)**AT+SETCNT=aa     **(%%)~/~/ Set the pulse count value.
2288
2289 **Example:**
2290
2291 AT+SETCNT=100  (% style="display:none" %) (%%)~/~/ Set the pulse count to 100.(% style="display:none" %)
2292
2293 * (% style="color:#037691" %)**Downlink Command: 0x0C**
2294
2295 Format: Command Code (0x0C) followed by 4 bytes.
2296
2297 **Example:**
2298
2299 Downlink Payload: 0C 00 00 00 64  ~/~/ AT+SETCNT=100
2300
2301
2302 (% style="color:blue" %)**Connect DS18B20 sensor:**
2303
2304 **RED <~-~-~-~-~-~-~-~--> VBAT_OUT(+3.3V)**
2305
2306 **YELLOW <~-~-~-~-> ONE_WIRE**
2307
2308 **BLACK <~-~-~-~-~-~-> GND**
2309
2310 [[image:image-20241223101841-3.jpeg||height="417" width="666"]]
2311
2312
2313 (% style="color:blue" %)**Connect SHT31 sensor:**
2314
2315 **RED <~-~-~-~-~-~-~-~--> VBAT_OUT(+3.3V)**
2316
2317 **YELLOW <~-~-~-~-> SCL**
2318
2319 **GREEN <~-~-~-~-~-~-> SDA**
2320
2321 **BLACK <~-~-~-~-~-~-> GND**
2322
2323 [[image:image-20241223100438-2.jpeg||height="440" width="672"]]
2324
2325
2326 (% style="color:blue" %)**Connect counting sensor:**
2327
2328 The counting sensor cables are connected to the VBAT_OUT(+3.3v) pin and GPIO_EXTI pin of the RS485_LB motherboard.
2329
2330 [[image:image-20241223102347-4.jpeg||height="437" width="683"]]
2331
2332
2333 = 4. Case Study =
2334
2335
2336 User can check this URL for some case studies:  [[APP RS485 COMMUNICATE WITH SENSORS>>doc:Main.Application Note \: Communicate with Different Sensors ----- RS485-LN RS485-BL.WebHome]]
2337
2338
2339 = 5. OTA Firmware update =
2340
2341
2342 (% class="wikigeneratedid" %)
2343 **User can change firmware RS485-LB/LS to:**
2344
2345 * Change Frequency band/ region.
2346 * Update with new features.
2347 * Fix bugs.
2348
2349 **Firmware and changelog can be downloaded from :** **[[Firmware download link>>https://www.dropbox.com/sh/nqaaag2ipm07txf/AAC_angqlhA0yQmiWVNbEEdya?dl=0]]**
2350
2351 **Methods to Update Firmware:**
2352
2353 * (Recommanded way) OTA firmware update via wireless: **[[http:~~/~~/wiki.dragino.com/xwiki/bin/view/Main/Firmware%20OTA%20Update%20for%20Sensors/>>url:http://wiki.dragino.com/xwiki/bin/view/Main/Firmware%20OTA%20Update%20for%20Sensors/]]**
2354
2355 * Update through UART TTL interface: **[[Instruction>>url:http://wiki.dragino.com/xwiki/bin/view/Main/UART%20Access%20for%20LoRa%20ST%20v4%20base%20model/#H1.LoRaSTv4baseHardware]]**.
2356
2357 = 6. FAQ =
2358
2359 == 6.1 How to change the LoRa Frequency Bands/Region? ==
2360
2361
2362 (((
2363 User can follow the introduction for [[how to upgrade firmware>>||anchor="H5.OTAFirmwareupdate"]]. When download the firmware, choose the required image file for download.
2364 )))
2365
2366
2367 == 6.2 How many RS485-Slave can RS485-LB/LS connects? ==
2368
2369
2370 (((
2371 The RS485-LB/LS can support max 32 RS485 devices. Each uplink command of RS485-LB/LS can support max 16 different RS485 command. So RS485-LB/LS can support max 16 RS485 devices pre-program in the device for uplink. For other devices no pre-program, user can use the downlink message (type code 0xA8) to poll their info.
2372 )))
2373
2374
2375 == 6.3 How to Use RS485-LB/LS  to connect to RS232 devices? ==
2376
2377
2378 [[Use RS485-LB/LS or RS485-LN to connect to RS232 devices. - DRAGINO>>http://wiki.dragino.com/xwiki/bin/view/Main/RS485%20to%20RS232/]]
2379
2380
2381 == 6.4 How to judge whether there is a problem with the set COMMAND ==
2382
2383 === 6.4.1 Introduce: ===
2384
2385
2386 Users can use below the structure to fast debug the communication between RS485-LB/LS and RS485-LN. The principle is to put the PC in the RS485 network and sniff the packet between Modbus MTU and RS485-LB/LS/LN. We can (% style="color:blue" %)**use this way to:**
2387
2388 1. Test if Modbus-MTU works with PC commands.
2389 1. Check if RS485-LN sent the expected command to Mobus-MTU
2390 1. Check if Modbus-MTU return back the expected result to RS485-LN.
2391 1. If both b) and c) has issue, we can compare PC's output and RS485-LN output.
2392
2393 [[image:image-20230718135819-4.png||height="342" width="638"]]
2394
2395
2396 (% style="color:blue" %)**Example Connection: **
2397
2398 [[image:http://wiki.dragino.com/xwiki/bin/download/Main/User%20Manual%20for%20LoRaWAN%20End%20Nodes/RS485-LN%20%E2%80%93%20RS485%20to%20LoRaWAN%20Converter/WebHome/image-20221130104310-2.png?rev=1.1||alt="image-20221130104310-2.png"]]
2399
2400
2401 === 6.4.2 Set up PC to monitor RS485 network With Serial tool ===
2402
2403
2404 (% style="color:red" %)**Note: Receive and send set to hex mode**
2405
2406 [[image:image-20250326105356-1.jpeg]]
2407
2408
2409 === 6.4.3 With ModRSsim2: ===
2410
2411
2412 (% style="color:blue" %)**(1) Select serial port MODBUS RS-232**
2413
2414 [[image:image-20250326105508-2.jpeg]]
2415
2416
2417 (% style="color:blue" %)**(2) Click the serial port icon**
2418
2419 [[image:image-20250326105522-3.jpeg]]
2420
2421
2422 (% style="color:blue" %)**(3) After selecting the correct serial port and baud rate, click ok**
2423
2424 [[image:image-20250326105535-4.jpeg]]
2425
2426
2427 (% style="color:blue" %)**(4) Click the comms.**
2428
2429 [[image:image-20250326105549-5.jpeg]]
2430
2431 Run RS485-LN/BL command and monitor if it is correct.
2432
2433
2434 === 6.4.4 Example – Test the CFGDEV command ===
2435
2436
2437 RS485-LN sent below command:
2438
2439 (% style="color:blue" %)**AT+CFGDEV=01 03 20 00 01 85 c0,1**(%%) to RS485 network, and PC is able to get this command and return commands from MTU to show in the serial tool.
2440
2441 We can see the output from the Serial port tool to analyze. And check if they are expected result.
2442
2443 [[image:image-20250326105608-6.jpeg]]
2444
2445
2446 We can also use ModRSsim2 to see the output.
2447
2448 [[image:image-20250326105624-7.jpeg]]
2449
2450
2451 === 6.4.5 Example – Test CMD command sets. ===
2452
2453
2454 Run (% style="color:blue" %)**AT+GETSENSORVALUE=1**(%%) to test the CMD commands set in RS485-LB.
2455
2456 (% style="color:blue" %)**Serial port tool:**
2457
2458 [[image:image-20250326105640-8.jpeg]]
2459
2460
2461 (% style="color:blue" %)**ModRSsim2:**
2462
2463 [[image:image-20250326105656-9.jpeg]]
2464
2465
2466 === 6.4.6 Test with PC ===
2467
2468
2469 If there is still have problem to set up correctly the commands between RS485-LN and MTU. User can test the correct RS485 command set in PC and compare with the RS485 command sent out via RS485-LN. as long as both commands are the same, the MTU should return correct result.
2470
2471 Or User can send the working commands set in PC serial tool to Dragino Support to check what should be configured in RS485-LN.
2472
2473 (% style="color:blue" %)**Connection method:**
2474
2475 [[image:image-20250326105730-10.jpeg]]
2476
2477
2478 (% style="color:blue" %)**Link situation:**
2479
2480 [[image:image-20250326105746-11.jpeg]]
2481
2482
2483 [[image:image-20250326105800-12.jpeg]]
2484
2485
2486 == 6.5 Where to get the decoder for RS485-LB/LS? ==
2487
2488
2489 The decoder for RS485-LB/LS needs to be written by yourself. Because the sensor to which the user is connected is custom, the read device data bytes also need custom parsing, so there is no universal decoder. We can only provide [[templates>>https://github.com/dragino/dragino-end-node-decoder]] for decoders (no intermediate data parsing part involved)
2490
2491
2492 == 6.6 How to connect RS485-LB node to UART distance sensor? ==
2493
2494
2495 Take the A16-15 as an example, but the same setup can support different distance sensors, compare specifications see this [[link>>http://wiki.dragino.com/xwiki/bin/view/Main/User%20Manual%20for%20LoRaWAN%20End%20Nodes/DDS04-LB_LoRaWAN_4-Channels_Distance_Detection_Sensor_User_Manual/#H1.4ProbeOptions]] to DDS04-LB.
2496
2497 [[image:image-20240703151202-1.png]]
2498
2499
2500 * (((
2501 (% style="color:blue" %)**Connection:**
2502 )))
2503
2504 [[image:image-20240703153033-2.jpeg||height="364" width="687"]]
2505
2506
2507 * (% style="color:blue" %)**AT command configuration:  **
2508
2509 **AT+MOD=2    **
2510
2511 **AT+COMMAND1=01 02 03 04 05 ,0  AT+SEARCH1=1,ff  AT+DATACUT1=4,2,2~~3  AT+CMDDL1=1000**
2512
2513 [[image:image-20240703153540-3.png]]
2514
2515
2516 * (% style="color:blue" %)**Decoder:  **(%%)**Decoding refer to this [[link>>https://github.com/dragino/dragino-end-node-decoder/tree/main/RS485-LB_A16-15]].**
2517 * (% style="color:blue" %)**Example in TTN:**
2518
2519 [[image:image-20240703161941-4.png||height="619" width="1357"]]
2520
2521
2522 == 6.7 How to determine whether the returned data value FF is valid data or invalid data? ==
2523
2524
2525 The address of the returned data can be used as a flag.
2526
2527 The customer uses the intercept command to intercept the first bit of the returned data (the slave address of the sensor) as a judgment flag.
2528
2529 **Invalid data:**
2530
2531 If the first bit and the data are both FF, it means the data is empty.
2532
2533
2534 **Valid data:**
2535 If the first bit is a normal slave address and the data is FF, it means the data is normal.
2536
2537 (((
2538
2539 )))
2540
2541 = 7. Trouble Shooting =
2542
2543 == 7.1 Downlink doesn't work, how to solve it? ==
2544
2545
2546 Please see this link for debug: [[LoRaWAN Communication Debug>>doc:Main.LoRaWAN Communication Debug.WebHome]]
2547
2548
2549 == 7.2 Why I can't join TTN V3 in US915 /AU915 bands? ==
2550
2551
2552 It might about the channels mapping. Please see for detail: [[Notice of Frequency band>>doc:Main.LoRaWAN Communication Debug.WebHome||anchor="H2.NoticeofUS9152FCN4702FAU915Frequencyband"]]
2553
2554
2555 == 7.3 Possible reasons why the device is unresponsive: ==
2556
2557
2558 ~1. Check whether the battery voltage is lower than 2.8V
2559 2. Check whether the jumper of the device is correctly connected
2560
2561 [[image:image-20240330172639-1.png||height="308" width="526"]]
2562 3. Check whether the switch here of the device is at the ISP(The switch can operate normally only when it is in RUN)
2563
2564 [[image:image-20240330172716-2.png||height="294" width="523"]]
2565
2566
2567 == 7.4 Why can't customers see the device's data in the server when the data is too long? ==
2568
2569
2570 This is due to the limitation of the lorawan protocol, and the fixed DR needs to be adjusted to improve this problem.
2571
2572 Please refer to the following link for the number of bytes limited by different frequencies and different DRs in the lorawan protocol
2573
2574 [[lora-alliance.org/wp-content/uploads/2021/05/RP002-1.0.3-FINAL-1.pdf>>url:https://lora-alliance.org/wp-content/uploads/2021/05/RP002-1.0.3-FINAL-1.pdf]]
2575
2576 Example:
2577
2578 [[image:http://wiki.dragino.com/xwiki/bin/download/Main/User%20Manual%20for%20LoRaWAN%20End%20Nodes/RS485-LN%20%E2%80%93%20RS485%20to%20LoRaWAN%20Converter/WebHome/image-20240620145456-1.png?rev=1.1||alt="image-20240620145456-1.png"]]
2579
2580 Please refer to the following command to fix DR
2581
2582 AT+ADR=0
2583
2584 AT+DR=3
2585
2586 Downlink command:
2587
2588 [[http:~~/~~/wiki.dragino.com/xwiki/bin/view/Main/End%20Device%20AT%20Commands%20and%20Downlink%20Command/#H7.4DataRate>>url:http://wiki.dragino.com/xwiki/bin/view/Main/End%20Device%20AT%20Commands%20and%20Downlink%20Command/#H7.4DataRate]]
2589
2590
2591 == 7.5  How to solve the problem that the sensor requires a pull-up resistor on the RS485A pin? ==
2592
2593
2594 ~1. Upgrade the firmware to a dedicated firmware, which will consume more power and cannot enter low power mode.
2595
2596 If necessary, please contact our technical support email: [[support@dragino.com>>url:file:///D:/市场资料/说明书/LoRa/LT系列/support@dragino.com]]
2597
2598 2. Use AT command: AT+RS485POWER=1
2599
2600
2601 = 8. Order Info =
2602
2603
2604 **Part Number: (% style="color:blue" %)RS485-LB-XX-YY(%%) or (% style="color:blue" %)RS485-LS-XX-YY(%%)**
2605
2606 (% style="color:blue" %)**XX:**
2607
2608 * (% style="color:red" %)**EU433**(%%):  frequency bands EU433
2609 * (% style="color:red" %)**EU868**(%%):  frequency bands EU868
2610 * (% style="color:red" %)**KR920**(%%):  frequency bands KR920
2611 * (% style="color:red" %)**CN470**(%%):  frequency bands CN470
2612 * (% style="color:red" %)**AS923**(%%):  frequency bands AS923
2613 * (% style="color:red" %)**AU915**(%%):  frequency bands AU915
2614 * (% style="color:red" %)**US915**(%%):  frequency bands US915
2615 * (% style="color:red" %)**IN865**(%%):  frequency bands IN865
2616 * (% style="color:red" %)**RU864**(%%):  frequency bands RU864
2617 * (% style="color:red" %)**KZ865**(%%):  frequency bands KZ865
2618
2619 (% style="color:blue" %)**YY:**(%%)**  Hole Option**
2620
2621 (% style="color:red" %)**12**(%%): With M12 waterproof cable hole
2622 (% style="color:red" %)**16**(%%): With M16 waterproof cable hole
2623
2624 = 9. Packing Info =
2625
2626
2627 (((
2628 **Package Includes**:
2629 )))
2630
2631 * (((
2632 RS485-LB or RS485-LS x 1
2633 )))
2634 * (((
2635 Stick Antenna for LoRa RF part x 1
2636 )))
2637 * (((
2638 Program cable x 1
2639 )))
2640
2641 (((
2642 **Dimension and weight**:
2643 )))
2644
2645 * (((
2646 Device Size: cm
2647 )))
2648 * (((
2649 Device Weight: g
2650 )))
2651 * (((
2652 Package Size / pcs : cm
2653 )))
2654 * (((
2655 Weight / pcs : g
2656
2657
2658
2659 )))
2660
2661 = 10. Support =
2662
2663
2664 * (((
2665 Support is provided Monday to Friday, from 09:00 to 18:00 GMT+8. Due to different timezones we cannot offer live support. However, your questions will be answered as soon as possible in the before-mentioned schedule.
2666 )))
2667 * (((
2668 Provide as much information as possible regarding your enquiry (product models, accurately describe your problem and steps to replicate it etc) and send a mail to [[support@dragino.com>>url:file:///D:/市场资料/说明书/LoRa/LT系列/support@dragino.com]]
2669
2670
2671
2672 )))
Copyright ©2010-2024 Dragino Technology Co., LTD. All rights reserved
Dragino Wiki v2.0