Last modified by Xiaoling on 2025/06/11 14:31

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