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