Version 120.1 by Xiaoling on 2025/04/25 17:32

Show last authors
1
2
3 (% style="text-align:center" %)
4 [[image:image-20240124134538-1.png||height="365" width="415"]]
5
6
7
8
9
10
11
12 **Table of Contents:**
13
14 {{toc/}}
15
16
17
18
19
20
21 = 1. Introduction =
22
23 == 1.1 What is AQS02-L LoRaWAN Indoor CO Sensor ==
24
25
26 The Dragino AQS02-L is an (% style="color:blue" %)**Indoor LoRaWAN Air Quality Sensor**(%%) for the Internet of Things solution. It is designed to measure the surrounding environment parameters include:(% style="color:blue" %)** CO, Temperature , Relative Air Humidity and Air pressure**(%%), and then upload to IoT server via LoRaWAN wireless protocol.
27
28 AQS02-L is powered by a (% style="color:blue" %)**ER18505 4000mAh battery**(%%). The battery can last more than 2 years and is easy to change.
29
30 AQS02-L (% style="color:blue" %)**supports BLE configure**(%%) and (% style="color:blue" %)**wireless OTA update**(%%) which make user easy to use.
31
32 AQS02-L supports (% style="color:blue" %)**CO Alarm and Temperature Alarm* features**(%%), users can get an alarm for instant notice.
33
34 AQS02-L supports (% style="color:blue" %)**Datalog feature**(%%), User can retrieve the sensor data from LoRaWAN commands.
35
36 (% style="color:red" %)**Note*:**(%%) CO Alarm and temperature Alarm will decrease a lot the battery life.
37
38
39 == 1.2 ​Features ==
40
41
42 * LoRaWAN 1.0.3 Class A
43 * Monitor CO/Temperature/Relative Humidity/Pressure
44 * Support CO alarm
45 * Support Datalog Feature
46 * Bands: CN470/EU433/KR920/US915/EU868/AS923/AU915/IN865
47 * Support Bluetooth v5.1 and LoRaWAN remote configure
48 * Support wireless OTA update firmware
49 * Uplink on periodically
50 * Downlink to change configure
51 * 4000mAh batteries powered
52
53 == 1.3 Specification ==
54
55
56 (% style="color:#037691" %)**Common DC Characteristics:**
57
58 * Supply Voltage: built in 4000mAh Li-SOCI2 battery , 2.5v ~~ 3.6v
59 * Operating Temperature: -20 ~~ 65°C
60
61 (% style="color:#037691" %)**CO Sensor:**
62
63 * Sensor: [[Senseair Sunrise Article No. 006-0-0008>>https://senseair.com/product/sunrise/]](% style="color:#037691" %)**    **
64 * Target gas: Carbon dioxide(CO)
65 * Operating principle: Non-dispersiveinfrared(NDIR)
66 * Operating range: 0-50°C, 0-85% RH(non-condensing)
67 * Measurement range: 400ppm to 5000 ppm (extended range up to 10000 ppm )
68 * Accuracy:
69 ** 400-1500ppm  ±(30 ppm +3% of reading)
70 ** 1501-2500ppm  ±75 ppm
71 ** 2501-5000ppm  ±(30 ppm +3% of reading)               
72 * Pressure Compensation
73
74 (% style="color:#037691" %)**Temperature Sensor:**
75
76 * Sensor: [[bme280>>https://www.bosch-sensortec.com/products/environmental-sensors/humidity-sensors-bme280/]](% style="color:#037691" %)**     **
77 * Range: -20 ~~ 65 °C
78 * Accuracy: Typ ±1.0@ 0-65 °C
79 * Resolution: 0.1°C
80
81 Hardware v1.2 and later
82
83 * Sensor: [[sht41>>https://sensirion.com/products/catalog/SHT41]](% style="color:#037691" %)**     **
84 * Range: -40 ~~ 125 °C
85 * Accuracy: ±0.2°C
86 * Resolution: 0.01°C
87
88 (% style="color:#037691" %)**Humidity Sensor: **
89
90 * Sensor: [[bme280>>https://www.bosch-sensortec.com/products/environmental-sensors/humidity-sensors-bme280/]]
91 * Range: 0 ~~ 99.9% RH
92 * Accurancy: ± 3%RH (20 ~~ 80%RH)
93 * Resolution: 0.1% RH
94 * Long term stability: 0.5 %RH/yr
95
96 Hardware v1.2 and later
97
98 * Sensor: [[sht41>>https://sensirion.com/products/catalog/SHT41]](% style="color:#037691" %)**  **
99 * Range: 0 ~~ 99.9% RH
100 * Accurancy: ± 1.8%RH
101 * Resolution: 0.1% RH
102
103 (% style="color:#037691" %)**Air Pressure: **
104
105 * Sensor: [[bme280>>https://www.bosch-sensortec.com/products/environmental-sensors/humidity-sensors-bme280/]]
106 * Range: 300~~1100hPa
107 * Accuracy: ± 1.0 hPa (0-65 °C)
108 * Resolution: 0.18Pa
109 * Long term stability: ±1.0 hPa/yr
110
111 (% style="color:#037691" %)**LoRa Spec:**
112
113 * Frequency Range,  Band 1 (HF): 862 ~~ 1020 Mhz
114 * Max +22 dBm constant RF output vs.
115 * RX sensitivity: down to -139 dBm.
116 * Excellent blocking immunity
117
118 (% style="color:#037691" %)**Battery:**
119
120 * Li/SOCI2 un-chargeable battery
121 * Capacity: 4000mAh
122 * Self-Discharge: <1% / Year @ 25°C
123
124 (% style="color:#037691" %)**Power Consumption**
125
126 * Sleep Mode: 6uA @ 3.3v
127 * LoRa Transmit Mode: 125mA @ 20dBm, 82mA @ 14dBm
128
129 == 1.4 Applications ==
130
131 * Smart Building
132 * Industrial Monitoring and Control
133
134 == 1.5 Sleep mode and working mode ==
135
136
137 (% style="color:blue" %)**Deep Sleep Mode: **(%%)Sensor doesn't have any LoRaWAN activity. This mode is used for storage and shipping to save battery life.
138
139 (% 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.
140
141
142 == 1.6 BLE connection ==
143
144
145 AQS02-L supports BLE remote configure.
146
147 BLE can be used to configure the parameter of AQS02-L or see the console output from AQS02-L. BLE will be only activate on below case:
148
149 * Press button to send an uplink.
150 * Press button to active AQS02-L.
151 * Device Power on or reset.
152
153 If there is no activity connection on BLE in 60 seconds, AQS02-L will shut down BLE module to enter low power mode.
154
155
156 = 2. Configure AQS02-L to connect to LoRaWAN network =
157
158 == 2.1 How it works ==
159
160
161 The AQS02-L is configured as (% style="color:#037691" %)**LoRaWAN OTAA Class A**(%%) mode by default. It has OTAA keys to join LoRaWAN network. To connect a local LoRaWAN network, you need to input the OTAA keys in the LoRaWAN IoT server and press the button to activate the AQS02-L. It will automatically join the network via OTAA and start to send the sensor value. The default uplink interval is 20 minutes.
162
163
164 == 2.2 ​Quick guide to connect to LoRaWAN server (OTAA) ==
165
166
167 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.
168
169 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.
170
171 [[image:image-20240124150425-1.png||height="378" width="757"]]
172
173 (% style="color:blue" %)**Step 1:**(%%) Create a device in TTN with the OTAA keys from AQS02-L.
174
175 Each AQS02-L is shipped with a sticker with the default device EUI as below:
176
177 [[image:image-20230426084152-1.png||alt="图片-20230426084152-1.png" height="233" width="502"]]
178
179
180 You can enter this key in the LoRaWAN Server portal. Below is TTN screen shot:
181
182 **Create the application.**
183
184 [[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"]]
185
186 [[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"]]
187
188
189 **Add devices to the created Application.**
190
191 [[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"]]
192
193 [[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"]]
194
195
196 **Enter end device specifics manually.**
197
198 [[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"]]
199
200
201 **Add DevEUI and AppKey. Customize a platform ID for the device.**
202
203 [[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"]]
204
205
206 (% style="color:blue" %)**Step 2:**(%%) Add decoder.
207
208 In TTN, user can add a custom payload so it shows friendly reading.
209
210 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/]]
211
212 Below is TTN screen shot:
213
214 [[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"]]
215
216 [[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"]]
217
218
219 (% style="color:blue" %)**Step 3:**(%%) Activate on AQS02-L
220
221 Press the button for 5 seconds to activate the AQS02-L.
222
223 (% style="color:green" %)**Green LED**(%%) will fast blink 5 times, device will enter (% style="color:blue" %)**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.
224
225 After join success, it will start to upload messages to TTN and you can see the messages in the panel.
226
227
228 (% style="color:blue" %)**Step 4: **(%%)Calibration AQS02-L
229
230 Button CO calibration function (Equivalent to AT+CALCMD=3)
231
232
233 The first step is to put your device into sleep mode. Press the button five times quickly and the device will light up solid red for 5 seconds.
234
235 In the second step, take the device outside to an environment without combustion sources and people, let it sit for a few minutes, and then press the button three times quickly. The calibration is complete after the blue light stays on for 5 seconds.
236
237 The last step is to reset the device, press and hold the button until the green light flashes.
238
239 For more calibration methods, please refer to this link: [[Calibration AQS02-L>>||anchor="H3.4Calibrationcommand"]]
240
241
242 == 2.3 ​Uplink Payload ==
243
244 === 2.3.1 Device Status, FPORT~=5 ===
245
246
247 Users can use the downlink command(**0x26 01**) to ask AQS02-L to send device configure detail, include device configure status. AQS02-L will uplink a payload via FPort=5 to the server.
248
249 The Payload format is as below.
250
251 (% border="1" cellspacing="4" style="background-color:#f2f2f2; width:510px" %)
252 |(% colspan="6" style="background-color:#4f81bd; color:white" %)**Device Status (FPORT=5)**
253 |(% style="width:103px" %)**Size (bytes)**|(% style="width:72px" %)**1**|(% style="width:91px" %)**2**|(% style="width:91px" %)**1**|(% style="width:86px" %)**1**|(% style="width:67px" %)**2**
254 |(% style="width:103px" %)Value|(% style="width:72px" %)Sensor Model|Firmware Version|(% style="width:91px" %)Frequency Band|(% style="width:86px" %)Sub-band|(% style="width:44px" %)BAT
255
256 Example parse in TTNv3
257
258 [[image:image-20240112094511-1.png||height="280" width="1110"]]
259
260
261 (% style="color:#037691" %)**Sensor Model**(%%): For AQS02-L, this value is 0x37
262
263 (% style="color:#037691" %)**Firmware Version**(%%): 0x0100, Means: v1.0.0 version
264
265 (% style="color:#037691" %)**Frequency Band**:
266
267 0x01: EU868
268
269 0x02: US915
270
271 0x03: IN865
272
273 0x04: AU915
274
275 0x05: KZ865
276
277 0x06: RU864
278
279 0x07: AS923
280
281 0x08: AS923-1
282
283 0x09: AS923-2
284
285 0x0a: AS923-3
286
287 0x0b: CN470
288
289 0x0c: EU433
290
291 0x0d: KR920
292
293 0x0e: MA869
294
295
296 (% style="color:#037691" %)**Sub-Band**:
297
298 AU915 and US915:value 0x00 ~~ 0x08
299
300 CN470: value 0x0B ~~ 0x0C
301
302 Other Bands: Always 0x00
303
304
305 (% style="color:#037691" %)**Battery Info**:
306
307 Check the battery voltage.
308
309 Ex1: 0x0B45 = 2885mV
310
311 Ex2: 0x0B49 = 2889mV
312
313
314 === 2.3.2  Sensor Data. FPORT~=2 ===
315
316
317 Sensor Data is uplink via FPORT=2
318
319 (% border="1" cellspacing="3" style="background-color:#f2f2f2; width:510px" %)
320 |=(% style="width: 70px;background-color:#4F81BD;color:white" %)(((
321 **Size(bytes)**
322 )))|=(% style="width: 50px;background-color:#4F81BD;color:white" %)2|=(% style="width: 90px;background-color:#4F81BD;color:white" %)2|=(% style="width: 80px;background-color:#4F81BD;color:white" %)2|=(% style="width: 60px;background-color:#4F81BD;color:white" %)**2**|=(% style="width: 50px;background-color:#4F81BD;color:white" %)2|=(% style="width: 110px; background-color: rgb(79, 129, 189); color: white;" %)1
323 |(% style="width:99px" %)Value|(% style="width:69px" %)(((
324 Battery
325 )))|(% style="width:130px" %)Temperature|(% style="width:82px" %)(((
326 Humidity
327 )))|(% style="width:87px" %)Pressure|(% style="width:53px" %)(((
328 CO
329 )))|(% style="width:95px" %)Alarm flag&Other flag
330
331 **Alarm flag & Other flag:**
332
333 (% border="1" cellspacing="3" style="background-color:#f2f2f2; width:510px" %)
334 |=(% style="width: 70px;background-color:#4F81BD;color:white" %)**Size(bit)**|=(% style="width: 90px; background-color: rgb(79, 129, 189); color: white;" %)**[bit7:bit5]**|=(% style="width: 69px; background-color: rgb(79, 129, 189); color: white;" %)**bit4**|=(% style="width: 72px; background-color: rgb(79, 129, 189); color: white;" %)**bit3**|=(% style="width: 73px; background-color: rgb(79, 129, 189); color: white;" %)**bit2**|=(% style="width: 70px; background-color: rgb(79, 129, 189); color: white;" %)**bit1**|=(% style="width: 66px; background-color: rgb(79, 129, 189); color: white;" %)**bit0**
335 |(% style="width:99px" %)Value|(% style="width:85px" %)(((
336 Reserve
337 )))|(% style="width:64px" %)(((
338 SHT41_sensor
339 )))|(% style="width:67px" %)TEMPL_ flag|(% style="width:68px" %)TEMPH_ flag|(% style="width:65px" %)COL_ flag|(% style="width:66px" %)COH_ flag
340
341 [[image:image-20240112094817-2.png||height="294" width="1148"]]
342
343
344 ==== (% style="color:#4472c4" %)**Battery**(%%) ====
345
346 Sensor Battery Level.
347
348 Ex1: 0x0B45 = 2885mV
349
350 Ex2: 0x0B49 = 2889mV
351
352
353 ==== (% style="color:#4472c4" %)**Temperature**(%%) ====
354
355 **The temperature collection before hardware v1.2 comes from bme280. The following is the payload analysis.**
356
357 If payload is: 0105H:  (0105 & 8000 == 0), temp = 0105H /10 = 26.1 degree
358
359 If payload is: FF3FH :  (FF3F & 8000 == 1) , temp = (FF3FH - 65536)/10 = -19.3 degrees.
360
361 (FF3F & 8000:Judge whether the highest bit is 1, when the highest bit is 1, it is negative)
362
363 **The temperature collection aftre hardware v1.2(Includes v1.2)  comes from sht41. The following is the payload analysis.**
364
365 If payload is: 0A32H:  (0A32 & 8000 == 0), temp = 0A32H /100 = 26.10 degree
366
367 If payload is: F876H :  (F876 & 8000 == 1) , temp = (F876H - 65536)/100 = -19.30 degrees.
368
369 (F876 & 8000:Judge whether the highest bit is 1, when the highest bit is 1, it is negative)
370
371
372 ==== (% style="color:#4472c4" %)**Humidity**(%%) ====
373
374 **Before hardware v1.2, the humidity comes from bme280, and after hardware v1.2(Includes v1.2), the humidity comes from sht41.**
375
376 Read:0x(018F)=399  Value:  399 / 10=39.9, So 39.9%
377
378
379 ==== (% style="color:#4472c4" %)**Pressure**(%%) ====
380
381 **Example**:
382
383 If payload is: 279BH, Pressure = 279BH /10 = 1013.9 hPa
384
385
386 ==== (% style="color:#4472c4" %)**CO**(%%) ====
387
388 **Example**:
389
390 If payload is: 01FDH, CO = 01FDH= 509ppm
391
392
393 ==== (% style="color:#4472c4" %)**Alarm flag**(%%) ====
394
395 TEMPH_flag: When it is True, the actual temperature exceeds the set alarm temperature.
396
397 TEMPL_flag: When it is True, the actual temperature lower than the set alarm temperature.
398
399 COH_flag: When it is True, the actual CO concentration exceeds the set alarm CO concentration.
400
401 COL_flag: When it is True, the actual CO concentration lower than the set alarm CO concentration.
402
403 **Example**:
404
405 AT+TEMPALARM=25,60  ~-~-~-~-~-~->  temperature: 23.1, TEMPH_flag: "False", TEMPL_flag: "True"
406
407 AT+COALARM=400,2000  ~-~-~-~-~-~->  co: 2368, COH_flag:"True", COL_flag:"False"
408
409
410 ==== (% style="color:#4472c4" %)**SHT41_sensor**(%%) ====
411
412 Using SHT41 sensors after and including hardware v1.2, this flag is 1, and before hardware v1.2, this flag is 0.
413
414
415 == 2.4 Payload Decoder file ==
416
417
418 In TTN, user can add a custom payload so it shows friendly reading
419
420 In the page (% style="color:#037691" %)**Applications ~-~-> Payload Formats ~-~-> Custom ~-~-> decoder**(%%) to add the decoder from:
421
422 [[https:~~/~~/github.com/dragino/dragino-end-node-decoder/tree/main>>https://github.com/dragino/dragino-end-node-decoder/tree/main/AQS01-L]]
423
424
425 == 2.5 Datalog Feature ==
426
427
428 Datalog Feature is to ensure IoT Server can get all sampling data from AQS02-L even if the LoRaWAN network is down. For each sampling, AQS02-L will store the reading for future retrieving purposes.
429
430
431 === 2.5.1 Ways to get datalog via LoRaWAN ===
432
433
434 Set PNACKMD=1, AQS02-L will wait for ACK for every uplink, when there is no LoRaWAN network,AQS02-L 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.
435
436 * (((
437 a) AQS02-L will do an ACK check for data records sending to make sure every data arrive server.
438 )))
439 * (((
440 b) AQS02-L will send data in **CONFIRMED Mode** when PNACKMD=1, but AQS02-L 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 AQS02-L gets a ACK, AQS02-L will consider there is a network connection and resend all NONE-ACK messages.
441
442
443 )))
444
445 === 2.5.2 Unix TimeStamp ===
446
447
448 **AQS02-L uses Unix TimeStamp format based on**
449
450
451 [[image:http://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="图片-20220523001219-11.png" height="97" width="627"]]
452
453 User can get this time from link:  [[https:~~/~~/www.epochconverter.com/>>url:https://www.epochconverter.com/]] :
454
455 Below is the converter example
456
457 [[image:http://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="图片-20220523001219-12.png" height="298" width="720"]]
458
459
460 So, we can use AT+TIMESTAMP=1611889405 or downlink 3060137afd00 to set the current time 2021 – Jan ~-~- 29 Friday 03:03:25
461
462
463 === 2.5.3 Set Device Time ===
464
465
466 User need to set (% style="color:blue" %)**SYNCMOD=1**(%%) to enable sync time via MAC command.
467
468 Once AQS02-L Joined LoRaWAN network, it will send the MAC command (DeviceTimeReq) and the server will reply with (DeviceTimeAns) to send the current time to AQS02-L. If AQS02-L fails to get the time from the server, AQS02-L will use the internal time and wait for next time request (AT+SYNCTDC to set the time request period, default is 10 days).
469
470 (% 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 and loriot support but TTN 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 v2 if SYNCMOD=1.**
471
472
473 === 2.5.4 Datalog Uplink payload (FPORT~=3) ===
474
475
476 The Datalog uplinks will use below payload format.
477
478 **Retrieval data payload:**
479
480 (% border="1" cellspacing="5" style="background-color:#f2f2f2; width:500px" %)
481 |=(% style="width: 60px;background-color:#4F81BD;color:white" %)(((
482 **Size(bytes)**
483 )))|=(% style="width: 40px; background-color:#4F81BD;color:white" %)**2**|=(% style="width: 55px; background-color:#4F81BD;color:white" %)**2**|=(% style="width: 65px; background-color:#4F81BD;color:white" %)**2**|=(% style="width: 180px; background-color:#4F81BD;color:white" %)**1**|=(% style="width: 100px; background-color:#4F81BD;color:white" %)**4**
484 |(% style="width:103px" %)Value|(% style="width:68px" %)(((
485 CO
486 )))|(% style="width:104px" %)(((
487 (((
488 Humidity
489 )))
490
491 (((
492
493 )))
494 )))|(% style="width:87px" %)(((
495 Temperature
496 )))|(% style="width:178px" %)(((
497 Poll message flag
498 )))|(% style="width:137px" %)Unix Time Stamp
499
500 **Poll message flag :**
501
502
503 [[image:image-20240112095124-3.png||height="101" width="483"]]
504
505 **No ACK Message**:  1: This message means this payload is fromn Uplink Message which doesn't get ACK from the server before ( for **PNACKMD=1** feature)
506
507 **Poll Message Flag**: 1: This message is a poll message reply.
508
509 * Poll Message Flag is set to 1.
510
511 * Each data entry is 11 bytes, to save airtime and battery, devices will send max bytes according to the current DR and Frequency bands.
512
513 For example, in US915 band, the max payload for different DR is:
514
515 **a) DR0:** max is 11 bytes so one entry of data
516
517 **b) DR1:** max is 53 bytes so devices will upload 4 entries of data (total 44 bytes)
518
519 **c) DR2:** total payload includes 11 entries of data
520
521 **d) DR3: **total payload includes 22 entries of data.
522
523 If devise doesn't have any data in the polling time. Device will uplink 11 bytes of 0   
524
525 **Example:**
526
527 If AQS02-L has below data inside Flash:
528
529
530 [[image:image-20240112095403-4.png||height="278" width="523"]]
531
532 If user sends below downlink command: 3165A010F865A015E405
533
534 Where : Start time: 65A010F8 = time 24/1/11 16:02:00
535
536 Stop time: 65A015E4 = time 24/1/11 16:23:00
537
538
539 **AQS01-L will uplink this payload.**
540
541 [[image:image-20240112101407-1.png||height="244" width="1092"]]
542
543
544 //**01E401A400F14065A0112E**//01CE01A500F14065A0114F01C401A400F14065A0118A02EC01B300F24065A0138202F001B100F34065A013F4023801AD00F24065A0143302EB01BC00F24065A014D603D701B900F14065A015D3
545
546
547 Where the first 11 bytes is for the first entry: 01 E4 01 A4 00 F1 40 65 A0 11 2E
548
549 * **CO**=0x01E4=484 ppm
550 * **Hum**=0x01A4/10=42 %
551 * **Temp**=0x00F1/10=24.1 ℃
552 * **poll message flag **=0x40,means reply data,sampling uplink message.
553 * **Unix time** is 0x65A0112E=1704888040s=24/1/11 16:02:54
554
555 (% aria-label="数据 URI 图像图像小部件" contenteditable="false" role="region" style="background-image:url(http://wiki1.dragino.com/xwiki/webjars/wiki%3Axwiki/application-ckeditor-webjar/1.61/plugins/widget/images/handle.png); background:rgba(220,220,220,0.5); display:none" tabindex="-1" %)[[image:data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==||alt="数据 URI 图片" data-widget="image" draggable="true" height="15" role="presentation" title="单击并拖动以移动" width="15"]](% aria-label="数据 URI 图像图像小部件" contenteditable="false" role="region" style="background-image:url(http://wiki1.dragino.com/xwiki/webjars/wiki%3Axwiki/application-ckeditor-webjar/1.61/plugins/widget/images/handle.png); background:rgba(220, 220, 220, 0.5); display:none" tabindex="-1" %)[[image:data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==||alt="数据 URI 图片" draggable="true" height="15" role="presentation" title="单击并拖动以移动" width="15"]](% aria-label="数据 URI 图像图像小部件" contenteditable="false" role="region" style="background-image:url(http://wiki1.dragino.com/xwiki/webjars/wiki%3Axwiki/application-ckeditor-webjar/1.61/plugins/widget/images/handle.png); background:rgba(220,220,220,0.5); display:none" tabindex="-1" title="单击并拖动以调整大小" %)的(% aria-label="数据 URI 图像图像小部件" contenteditable="false" role="region" style="background-image:url(http://wiki1.dragino.com/xwiki/webjars/wiki%3Axwiki/application-ckeditor-webjar/1.61/plugins/widget/images/handle.png); background:rgba(220,220,220,0.5); display:none" tabindex="-1" %)[[image:data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==||alt="数据 URI 图片" data-widget="image" draggable="true" height="15" role="presentation" title="单击并拖动以移动" width="15"]](% aria-label="数据 URI 图像图像小部件" contenteditable="false" role="region" style="background-image:url(http://wiki1.dragino.com/xwiki/webjars/wiki%3Axwiki/application-ckeditor-webjar/1.61/plugins/widget/images/handle.png); background:rgba(220, 220, 220, 0.5); display:none" tabindex="-1" %)[[image:data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==||alt="数据 URI 图片" draggable="true" height="15" role="presentation" title="单击并拖动以移动" width="15"]](% aria-label="数据 URI 图像图像小部件" contenteditable="false" role="region" style="background-image:url(http://wiki1.dragino.com/xwiki/webjars/wiki%3Axwiki/application-ckeditor-webjar/1.61/plugins/widget/images/handle.png); background:rgba(220,220,220,0.5); display:none" tabindex="-1" title="单击并拖动以调整大小" %)的
556
557 == 2.6 Frequency Plans ==
558
559
560 The AQS02-L 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.
561
562 [[http:~~/~~/wiki.dragino.com/xwiki/bin/view/Main/End%20Device%20Frequency%20Band/>>http://wiki.dragino.com/xwiki/bin/view/Main/End%20Device%20Frequency%20Band/]]
563
564
565 == 2.7 ​Firmware Change Log ==
566
567
568 **Firmware download link: **[[https:~~/~~/www.dropbox.com/scl/fo/o5v6j7qewlks12eso98kl/h?rlkey=v1ian3hmva65924j4h4n0yfz8&dl=0>>https://www.dropbox.com/scl/fo/o5v6j7qewlks12eso98kl/h?rlkey=v1ian3hmva65924j4h4n0yfz8&dl=0]]
569
570
571 = 3. Configure AQS02-L =
572
573 == 3.1 Configure Methods ==
574
575
576 AQS02-L supports below configure method:
577
578 * AT Command via Bluetooth Connection (**Recommended**): [[BLE Configure Instruction>>http://wiki.dragino.com/xwiki/bin/view/Main/BLE%20Bluetooth%20Remote%20Configure/]].
579 * 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.6A0UARTConnectionforAQS01-Lmotherboard]].
580 * LoRaWAN Downlink.  Instruction for different platforms: See [[IoT LoRaWAN Server>>http://wiki.dragino.com/xwiki/bin/view/Main/]] section.
581
582 == 3.2 General Commands ==
583
584
585 These commands are to configure:
586
587 * General system settings like: uplink interval.
588 * LoRaWAN protocol & radio related command.
589
590 They are same for all Dragino Devices which support DLWS-005 LoRaWAN Stack. These commands can be found on the wiki:
591
592 [[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/]]
593
594
595 == 3.3 Commands special design for AQS02-L ==
596
597
598 These commands only valid for AQS02-L, as below:
599
600
601 === 3.3.1 Set Transmit Interval Time ===
602
603
604 Feature: Change LoRaWAN End Node Transmit Interval.
605
606 (% style="color:blue" %)**AT Command: AT+TDC**
607
608 (% border="1" cellspacing="4" style="background-color:#f2f2f2; width:510px" %)
609 |=(% style="width: 156px;background-color:#4F81BD;color:white" %)**Command Example**|=(% style="width: 137px;background-color:#4F81BD;color:white" %)**Function**|=(% style="background-color:#4F81BD;color:white" %)**Response**
610 |(% style="width:156px" %)AT+TDC=?|(% style="width:137px" %)Show current transmit Interval|(((
611 30000
612 OK
613 the interval is 30000ms = 30s
614 )))
615 |(% style="width:156px" %)AT+TDC=60000|(% style="width:137px" %)Set Transmit Interval|(((
616 OK
617 Set transmit interval to 60000ms = 60 seconds
618 )))
619
620 (% style="color:blue" %)**Downlink Command: 0x01**
621
622 Format: Command Code (0x01) followed by 3 bytes time value.
623
624 If the downlink payload=0100003C, it means set the END Node's Transmit Interval to 0x00003C=60(S), while type code is 01.
625
626 * Example 1: Downlink Payload: 0100001E  ~/~/  Set Transmit Interval (TDC) = 30 seconds
627 * Example 2: Downlink Payload: 0100003C  ~/~/  Set Transmit Interval (TDC) = 60 seconds
628
629 === 3.3.2 Get Device Status ===
630
631
632 Send a LoRaWAN downlink to ask device send Alarm settings.
633
634 (% style="color:blue" %)**Downlink Payload:  **(%%)0x26 01
635
636 Sensor will upload Device Status via FPORT=5. See payload section for detail.
637
638
639 === 3.3.3 Set Temperature Alarm Threshold ===
640
641
642 * (% style="color:blue" %)**AT Command:**
643
644 (% style="color:#037691" %)**AT+TEMPALARM=min,max  (Among them, 100 is an invalid value, which means not set)**
645
646 * When min=100, and max≠100, Alarm higher than max
647 * When min≠100, and max=100, Alarm lower than min
648 * When min≠100 and max≠100, Alarm higher than max or lower than min
649
650 Example:
651
652 AT+TEMPALARM=100,30   ~/~/ Alarm when temperature higher than 30.
653
654 * (% style="color:blue" %)**Downlink Payload:**
655
656 (% style="color:#037691" %)**0x(0C 01 64 1E)**  (%%) ~/~/ Set AT+TEMPALARM=100,30
657
658 (% style="color:red" %)**(note: 3^^rd^^ byte= 0x64 for low limit(not set), 4^^th^^ byte = 0x1E for high limit: 30)**
659
660
661 === 3.3.4 Set CO Alarm Threshold ===
662
663
664 The CO alarm function detects CO once every minute, so it consumes more power.
665
666 * (% style="color:blue" %)**AT Command:**
667
668 (% style="color:#037691" %)**AT+COALARM=min,max  (Among them, 0 is an invalid value, which means not set)**
669
670 * When min=0, and max≠0, Alarm higher than max
671 * When min≠0, and max=0, Alarm lower than min
672 * When min≠0 and max≠0, Alarm higher than max or lower than min
673
674 Example:
675
676 AT+COALARM=400,0  ~/~/ Alarm when humidity lower than 400.
677
678 * (% style="color:blue" %)**Downlink Payload:**
679
680 (% style="color:#037691" %)**0x(0C 02  01 90 00 00)**(%%)  ~/~/ Set AT+COALARM=400,0
681
682 (% style="color:red" %)**(note: 3^^rd^^ byte+4^^rd^^ byte= 0x0190 for low limit (400ppm), 5^^th^^ byte+6^^rd^^ byte = 0x00 for high limit (not set))**
683
684
685 === 3.3.5 Set Alarm Interval ===
686
687
688 The shortest time of two Alarm packet. (unit: min)
689
690 * (% style="color:blue" %)**AT Command:**
691
692 (% style="color:#037691" %)**AT+ATDC=20** (%%) ~/~/ The shortest interval of two Alarm packets is 20 minutes, Means if there is an alarm packet uplink, there won't be another one in the next 20 minutes.
693
694 * (% style="color:blue" %)**Downlink Payload:**
695
696 (% style="color:#037691" %)**0x(0D 14)**(%%)     **~-~--> ** Set AT+ATDC=0x 14 = 20 minutes
697
698
699 === 3.3.6 Set Time Sync Mode ===
700
701
702 Feature: Enable/Disable Sync system time via LoRaWAN MAC Command (DeviceTimeReq), LoRaWAN server must support v1.0.3 protocol to reply to this command.
703
704 SYNCMOD is set to 1 by default. If user wants to set a different time from the LoRaWAN server, the user needs to set this to 0.
705
706 (% style="color:blue" %)**AT Command:**
707
708 (% border="1" cellspacing="3" style="background-color:#f2f2f2; width:500px" %)
709 |=(% style="width: 155px;background-color:#4F81BD;color:white" %)**Command Example**|=(% style="width: 288px; background-color:#4F81BD;color:white" %)**Function**|=(% style="width: 57px;background-color:#4F81BD;color:white" %)**Response**
710 |(% style="width:155px" %)(((
711 AT+SYNCMOD=1
712 )))|(% style="width:259px" %)(((
713 Enable Sync system time via LoRaWAN MAC Command (DeviceTimeReq) The default is zero time zone.
714 )))|(% style="width:44px" %)(((
715 OK
716 )))
717 |(% style="width:155px" %)(((
718 AT+SYNCMOD=1,8
719 )))|(% style="width:259px" %)(((
720 Enable Sync system time via LoRaWAN MAC Command (DeviceTimeReq) Set to East eight time zone.
721 )))|(% style="width:44px" %)(((
722 OK
723 )))
724 |(% style="width:155px" %)AT+SYNCMOD=1,-12|(% style="width:259px" %)Enable Sync system time via LoRaWAN MAC Command (DeviceTimeReq) Set to West Twelve Time Zone.|(% style="width:44px" %)OK
725
726 (% style="color:blue" %)**Downlink Command:**
727
728 0x28 01 ~/~/ Same As AT+SYNCMOD=1
729
730 0x28 01 08 ~/~/ Same As AT+SYNCMOD=1,8
731
732 0x28 01 F4 ~/~/ Same As AT+SYNCMOD=1,-12
733
734 0x28 00 ~/~/ Same As AT+SYNCMOD=0
735
736
737 === 3.3.7 Request the server to send an ACK ===
738
739
740 (% style="color:blue" %)**AT Command: AT+PNACKMD**
741
742 (% border="1" cellspacing="3" style="background-color:#f2f2f2; width:510px" %)
743 |=(% style="width: 160px;background-color:#4F81BD;color:white" %)**Command Example**|=(% style="width: 293px; background-color:#4F81BD;color:white" %)**Function**|=(% style="width: 57px;background-color:#4F81BD;color:white" %)**Response**
744 |(% style="width:155px" %)AT+PNACKMD=1|(% style="width:253px" %)If the node uploads the ACK as confirm, it will request the server to send an ACK. If the server ack is not received, the node will upload the packets that have not received the ACK the next time it receives the ACK|(% style="width:100px" %)1(((
745 OK
746 )))
747 |(% style="width:155px" %)AT+PNACKMD=0|(% style="width:253px" %)off request the server to send an ACK|(% style="width:100px" %)(((
748 0
749 OK
750 )))
751
752 (% style="color:blue" %)**Downlink Command: 0x34**
753
754 0X34 01  ~/~/Same As AT+PNACKMD=1
755
756 0x34 00  ~/~/Same As AT+PNACKMD=0
757
758
759 == 3.4 Calibration command ==
760
761
762 (% style="color:red" %)**Note: If the device is not calibrated for the first time, there will be a certain degree of drift.**
763
764 After having performed the calibration,all following measurements will use the adjusted calibration parameters.
765
766
767 === 3.4.1 Restore factory Calibration  (AT+CALCMD~=0) ===
768
769
770 Restores calibration parameters factory calibration values.
771
772 (% style="color:blue" %)**Downlink Payload**(%%)**:  **0x0F 00
773
774
775 === 3.4.2 Forced ABC Calibration (AT+CALCMD~=1) ===
776
777
778 Sensor will perform an ABC calibration after receiving this command if sensor has valid ABC data.The command can be used if one for some reason wants to do an ABC adjustment before one ABC period has passed(when a normal ABC calibration is done).
779
780 (% style="color:blue" %)**Downlink Payload**(%%)**:  **0x0F 01
781
782
783 === 3.4.3 Target Calibration (AT+CALCMD~=2 Equivalent to AT+CALCMD~=2,400) ===
784
785
786 Target concentration calibration assumes that sensor is put into a target environment with a known CO concentration. Such as outdoor fresh air 400ppm.
787
788 (% style="color:blue" %)**Downlink Payload**(%%)**:  **0x0F 02 ==> AT+CALCMD=2
789
790 0x0F 02 01 90 ==> AT+CALCMD=2,400
791
792 0x0F 02 01 F4 ==> AT+CALCMD=2,500
793
794
795 === 3.4.4 Background Calibration  (AT+CALCMD~=3) ===
796
797
798 A “fresh air” baseline environment is by default 400 ppm at normal ambient atmospheric pressure by sea level. It can be referenced in a crude way by placing the sensor in direct proximity to outdoor air, free of combustion sources and human presence, preferably during either by open window or fresh air inlets or similar. Calibration gas by exactly 400ppm can be purchased and used. Background calibration and ABC calibration share the same target value (fresh air = 400ppm).
799
800 (% style="color:blue" %)**Downlink Payload**(%%)**:  **0x0F 03
801
802
803 === 3.4.5 Zero Calibration  (AT+CALCMD~=4) ===
804
805
806 Zero-calibrations are the most accurate recalibration routine. A zero-ppm environment is most easily created by flushing the optical cell of the sensor module and filling up an encapsulating enclosure with nitrogen gas, N2, displacing all previous air volume concentrations. Another less reliable or accurate zero reference point can be created by scrubbing an airflow using e.g. Soda lime.
807
808 (% style="color:blue" %)**Downlink Payload**(%%)**:  **0x0F 04
809
810
811 == 3.5 calibration mode ==
812
813 === 3.5.1 Enabled ABC Calibration (AT+CALMOD~=1, default) ===
814
815
816 The Automatic Baseline Correction algorithm is a proprietary Senseair method for referencing to “fresh air” as the lowest, but required stable, CO-equivalent internal signal the sensor has measured during a set time period. This time period by default is 180hrs as to catch low-occupancy and other lower-emission time periods and favourable outdoor wind-directions and similar which can plausibly and routinely expose the sensor to the most true fresh air environment. If such an environment can never be expected to occur, either by sensor locality or ever-presence of CO emission sources, or exposure to even lower concentrations than the natural fresh air baseline, then ABC recalibration can’t be used. In each new measurement period, the sensor will compare it to the stored one at the ABC parameters registers, and if new values show a lower CO-equivalent raw signal while also in a stable environment, the reference is updated with these new values. The ABC algorithm also has a limit on how much it is allowed to change the baseline correction offset with, per each ABC cycle, meaning that self-calibrating to adjust to bigger drifts or signal changes may take more than one ABC cycle.
817
818 (% style="color:blue" %)**Downlink Payload**(%%)**:  **0x0E 01
819
820
821 === 3.5.2 Disabled ABC Calibration (AT+CALMOD~=0) ===
822
823
824 If the device is in a greenhouse or enclosed environment, it is recommended to turn off ABC calibration. And use Target Calibration for calibration.
825
826 (% style="color:blue" %)**Downlink Payload**(%%)**:  **0x0E 00
827
828
829 === 3.5.3 Button CO calibration function (Equivalent to AT+CALCMD~=3) ===
830
831
832 The first step is to put your device into sleep mode. Press the button five times quickly and the device will light up solid red for 5 seconds.
833
834 In the second step, take the device outside to an environment without combustion sources and people, let it sit for a few minutes, and then press the button three times quickly. The calibration is complete after the blue light stays on for 5 seconds.
835
836 The last step is to reset the device, press and hold the button until the green light flashes.
837
838
839 = 4. Battery & Power Consumption =
840
841 == 4.1 Battery Life ==
842
843
844 In a normal 20 minutes uplink situation , the battery life can last from 2 ~~ 8 years depends on signal environment. The Alarm feature will reduce the battery life a lot .
845
846 See below link for detail information about the battery life calculation.
847
848 [[**Battery Info & Power Consumption Analyze**>>http://wiki.dragino.com/xwiki/bin/view/Main/How%20to%20calculate%20the%20battery%20life%20of%20Dragino%20sensors%3F/]] .
849
850
851 == 4.2 Replace Battery ==
852
853
854 AQS02-L uses an ER18505 battery. If the battery is running out, User can purchase an ER18505 battery and replace. Make sure don't mess the + & - position.
855
856 [[image:image-20240108140200-1.png||height="503" width="803"]]
857
858
859 = 5. OTA Firmware update =
860
861
862 (% class="wikigeneratedid" %)
863 User can change firmware AQS02-L to:
864
865 * Change Frequency band/ region.
866 * Update with new features.
867 * Fix bugs.
868
869 Firmware and changelog can be downloaded from : **[[Firmware download link>>https://www.dropbox.com/scl/fo/o5v6j7qewlks12eso98kl/h?rlkey=v1ian3hmva65924j4h4n0yfz8&dl=0]]**
870
871
872 Methods to Update Firmware:
873
874 * (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/]]**
875 * Update through UART TTL interface : **[[Instruction>>http://wiki.dragino.com/xwiki/bin/view/Main/UART%20Access%20for%20LoRa%20ST%20v4%20base%20model/#H2.6A0UARTConnectionforAQS01-Lmotherboard]]**.
876
877 = 6. FAQ =
878
879 == 6.1 Do i need to calibrate the CO reading of AQS02-L? ==
880
881
882 The Operating principle for CO measurement used in AQS02-L is Non-dispersive infrared (NDIR). There is no need Calibration for this method.
883
884
885 = 7. Order Info =
886
887
888 Part Number: (% style="color:blue" %)**AQS02-L-XX**
889
890 (% style="color:red" %)**XX**(%%): The default frequency band
891
892 * (% style="color:red" %)**AS923**(%%): LoRaWAN AS923 band
893
894 * (% style="color:red" %)**AU915**(%%): LoRaWAN AU915 band
895
896 * (% style="color:red" %)**EU433**(%%): LoRaWAN EU433 band
897
898 * (% style="color:red" %)**EU868**(%%): LoRaWAN EU868 band
899
900 * (% style="color:red" %)**KR920**(%%): LoRaWAN KR920 band
901
902 * (% style="color:red" %)**US915**(%%): LoRaWAN US915 band
903
904 * (% style="color:red" %)**IN865**(%%): LoRaWAN IN865 band
905
906 * (% style="color:red" %)**CN470**(%%): LoRaWAN CN470 band
907
908 = 8. ​Packing Info =
909
910
911 (% style="color:#037691" %)**Package Includes**:
912
913 * AQS02-L LoRaWAN Indoor CO Sensor
914
915 (% style="color:#037691" %)**Dimension and weight**:
916
917 * Device Size: cm
918
919 * Device Weight: g
920
921 * Package Size / pcs : cm
922
923 * Weight / pcs : g
924
925 = 9. Support =
926
927
928 * 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.
929
930 * 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.cc>>mailto:Support@dragino.cc]].