Version 114.1 by Xiaoling on 2024/08/30 11:42

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 AQS01-L LoRaWAN Indoor CO2 Sensor ==
24
25
26 The Dragino AQS01-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" %)** CO2, Temperature , Relative Air Humidity and Air pressure**(%%), and then upload to IoT server via LoRaWAN wireless protocol.
27
28 AQS01-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 AQS01-L (% style="color:blue" %)**supports BLE configure**(%%) and (% style="color:blue" %)**wireless OTA update**(%%) which make user easy to use.
31
32 AQS01-L supports (% style="color:blue" %)**CO2 Alarm and Temperature Alarm* features**(%%), users can get an alarm for instant notice.
33
34 AQS01-L supports (% style="color:blue" %)**Datalog feature**(%%), User can retrieve the sensor data from LoRaWAN commands.
35
36 (% style="color:red" %)**Note*:**(%%) CO2 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 CO2/Temperature/Relative Humidity/Pressure
44 * Support CO2 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" %)**CO2 Sensor:**
62
63 * Sensor: [[Senseair Sunrise Article No. 006-0-0008>>https://senseair.com/product/sunrise/]](% style="color:#037691" %)**    **
64 * Target gas: Carbon dioxide(CO2)
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 AQS01-L supports BLE remote configure.
146
147 BLE can be used to configure the parameter of AQS01-L or see the console output from AQS01-L. BLE will be only activate on below case:
148
149 * Press button to send an uplink.
150 * Press button to active AQS01-L.
151 * Device Power on or reset.
152
153 If there is no activity connection on BLE in 60 seconds, AQS01-L will shut down BLE module to enter low power mode.
154
155
156 = 2. Configure AQS01-L to connect to LoRaWAN network =
157
158 == 2.1 How it works ==
159
160
161 The AQS01-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 AQS01-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 AQS01-L.
174
175 Each AQS01-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 input these keys in the LoRaWAN Server portal. Below is TTN screen shot:
181
182
183 (% style="color:blue" %)**Register the device**
184
185 [[image:http://wiki.dragino.com/xwiki/bin/download/Main/User%20Manual%20for%20LoRaWAN%20End%20Nodes/LSN50v2-S31-S31B%20LoRaWAN%20Temperature%20%26%20Humidity%20Sensor%20User%20Manual/WebHome/1654935135620-998.png?rev=1.1||alt="1654935135620-998.png"]]
186
187
188 (% style="color:blue" %)**Add APP EUI and DEV EUI**
189
190 [[image:http://wiki.dragino.com/xwiki/bin/download/Main/User%20Manual%20for%20LoRaWAN%20End%20Nodes/LSN50v2-S31-S31B%20LoRaWAN%20Temperature%20%26%20Humidity%20Sensor%20User%20Manual/WebHome/image-20220611161308-4.png?width=753&height=551&rev=1.1||alt="图片-20220611161308-4.png"]]
191
192
193 (% style="color:blue" %)**Add APP EUI in the application**
194
195
196 [[image:http://wiki.dragino.com/xwiki/bin/download/Main/User%20Manual%20for%20LoRaWAN%20End%20Nodes/LSN50v2-S31-S31B%20LoRaWAN%20Temperature%20%26%20Humidity%20Sensor%20User%20Manual/WebHome/image-20220611161308-5.png?width=742&height=601&rev=1.1||alt="图片-20220611161308-5.png"]]
197
198
199 (% style="color:blue" %)**Add APP KEY**
200
201 [[image:http://wiki.dragino.com/xwiki/bin/download/Main/User%20Manual%20for%20LoRaWAN%20End%20Nodes/LSN50v2-S31-S31B%20LoRaWAN%20Temperature%20%26%20Humidity%20Sensor%20User%20Manual/WebHome/image-20220611161308-6.png?width=744&height=485&rev=1.1||alt="图片-20220611161308-6.png"]]
202
203
204 (% style="color:blue" %)**Step 2:**(%%) Activate on AQS01-L
205
206
207 Press the button for 5 seconds to activate the AQS01-L.
208
209 (% 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.
210
211 After join success, it will start to upload messages to TTN and you can see the messages in the panel.
212
213
214 (% style="color:blue" %)**Step 3: **(%%)Calibration AQS01-L
215
216
217 Button CO2 calibration function (Equivalent to AT+CALCMD=3)
218
219
220 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.
221
222 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.
223
224 The last step is to reset the device, press and hold the button until the green light flashes.
225
226
227 For more calibration methods, please refer to this link: [[Calibration AQS01-L>>||anchor="H3.4Calibrationcommand"]]
228
229
230 == 2.3 ​Uplink Payload ==
231
232 === 2.3.1 Device Status, FPORT~=5 ===
233
234
235 Users can use the downlink command(**0x26 01**) to ask AQS01-L to send device configure detail, include device configure status. AQS01-L will uplink a payload via FPort=5 to the server.
236
237 The Payload format is as below.
238
239 (% border="1" cellspacing="4" style="background-color:#f2f2f2; width:510px" %)
240 |(% colspan="6" style="background-color:#4f81bd; color:white" %)**Device Status (FPORT=5)**
241 |(% 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**
242 |(% 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
243
244 Example parse in TTNv3
245
246 [[image:image-20240112094511-1.png||height="280" width="1110"]]
247
248
249 (% style="color:#037691" %)**Sensor Model**(%%): For AQS01-L, this value is 0x37
250
251 (% style="color:#037691" %)**Firmware Version**(%%): 0x0100, Means: v1.0.0 version
252
253 (% style="color:#037691" %)**Frequency Band**:
254
255 0x01: EU868
256
257 0x02: US915
258
259 0x03: IN865
260
261 0x04: AU915
262
263 0x05: KZ865
264
265 0x06: RU864
266
267 0x07: AS923
268
269 0x08: AS923-1
270
271 0x09: AS923-2
272
273 0x0a: AS923-3
274
275 0x0b: CN470
276
277 0x0c: EU433
278
279 0x0d: KR920
280
281 0x0e: MA869
282
283
284 (% style="color:#037691" %)**Sub-Band**:
285
286 AU915 and US915:value 0x00 ~~ 0x08
287
288 CN470: value 0x0B ~~ 0x0C
289
290 Other Bands: Always 0x00
291
292
293 (% style="color:#037691" %)**Battery Info**:
294
295 Check the battery voltage.
296
297 Ex1: 0x0B45 = 2885mV
298
299 Ex2: 0x0B49 = 2889mV
300
301
302 === 2.3.2  Sensor Data. FPORT~=2 ===
303
304
305 Sensor Data is uplink via FPORT=2
306
307 (% border="1" cellspacing="3" style="background-color:#f2f2f2; width:510px" %)
308 |=(% style="width: 70px;background-color:#4F81BD;color:white" %)(((
309 **Size(bytes)**
310 )))|=(% 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
311 |(% style="width:99px" %)Value|(% style="width:69px" %)(((
312 Battery
313 )))|(% style="width:130px" %)Temperature|(% style="width:82px" %)(((
314 Humidity
315 )))|(% style="width:87px" %)Pressure|(% style="width:53px" %)(((
316 CO2
317 )))|(% style="width:95px" %)Alarm flag&Other flag
318
319 **Alarm flag & Other flag:**
320
321 (% border="1" cellspacing="3" style="background-color:#f2f2f2; width:510px" %)
322 |=(% 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**
323 |(% style="width:99px" %)Value|(% style="width:85px" %)(((
324 Reserve
325 )))|(% style="width:64px" %)(((
326 SHT41_sensor
327 )))|(% style="width:67px" %)TEMPL_ flag|(% style="width:68px" %)TEMPH_ flag|(% style="width:65px" %)CO2L_ flag|(% style="width:66px" %)CO2H_ flag
328
329 [[image:image-20240112094817-2.png||height="294" width="1148"]]
330
331
332 ==== (% style="color:#4472c4" %)**Battery**(%%) ====
333
334 Sensor Battery Level.
335
336 Ex1: 0x0B45 = 2885mV
337
338 Ex2: 0x0B49 = 2889mV
339
340
341 ==== (% style="color:#4472c4" %)**Temperature**(%%) ====
342
343 **The temperature collection before hardware v1.2 comes from bme280. The following is the payload analysis.**
344
345 If payload is: 0105H:  (0105 & 8000 == 0), temp = 0105H /10 = 26.1 degree
346
347 If payload is: FF3FH :  (FF3F & 8000 == 1) , temp = (FF3FH - 65536)/10 = -19.3 degrees.
348
349 (FF3F & 8000:Judge whether the highest bit is 1, when the highest bit is 1, it is negative)
350
351 **The temperature collection aftre hardware v1.2(Includes v1.2)  comes from sht41. The following is the payload analysis.**
352
353 If payload is: 0A32H:  (0A32 & 8000 == 0), temp = 0A32H /100 = 26.10 degree
354
355 If payload is: F876H :  (F876 & 8000 == 1) , temp = (F876H - 65536)/100 = -19.30 degrees.
356
357 (F876 & 8000:Judge whether the highest bit is 1, when the highest bit is 1, it is negative)
358
359
360 ==== (% style="color:#4472c4" %)**Humidity**(%%) ====
361
362 **Before hardware v1.2, the humidity comes from bme280, and after hardware v1.2(Includes v1.2), the humidity comes from sht41.**
363
364 Read:0x(018F)=399  Value:  399 / 10=39.9, So 39.9%
365
366
367 ==== (% style="color:#4472c4" %)**Pressure**(%%) ====
368
369 **Example**:
370
371 If payload is: 279BH, Pressure = 279BH /10 = 1013.9 hPa
372
373
374 ==== (% style="color:#4472c4" %)**CO2**(%%) ====
375
376 **Example**:
377
378 If payload is: 01FDH, CO2 = 01FDH= 509ppm
379
380
381 ==== (% style="color:#4472c4" %)**Alarm flag**(%%) ====
382
383 TEMPH_flag: When it is True, the actual temperature exceeds the set alarm temperature.
384
385 TEMPL_flag: When it is True, the actual temperature lower than the set alarm temperature.
386
387 CO2H_flag: When it is True, the actual CO2 concentration exceeds the set alarm CO2 concentration.
388
389 CO2L_flag: When it is True, the actual CO2 concentration lower than the set alarm CO2 concentration.
390
391 **Example**:
392
393 AT+TEMPALARM=25,60  ~-~-~-~-~-~->  temperature: 23.1, TEMPH_flag: "False", TEMPL_flag: "True"
394
395 AT+CO2ALARM=400,2000  ~-~-~-~-~-~->  co2: 2368, CO2H_flag:"True", CO2L_flag:"False"
396
397
398 ==== (% style="color:#4472c4" %)**SHT41_sensor**(%%) ====
399
400 Using SHT41 sensors after and including hardware v1.2, this flag is 1, and before hardware v1.2, this flag is 0.
401
402
403 == 2.4 Payload Decoder file ==
404
405
406 In TTN, user can add a custom payload so it shows friendly reading
407
408 In the page (% style="color:#037691" %)**Applications ~-~-> Payload Formats ~-~-> Custom ~-~-> decoder**(%%) to add the decoder from:
409
410 [[https:~~/~~/github.com/dragino/dragino-end-node-decoder/tree/main>>https://github.com/dragino/dragino-end-node-decoder/tree/main/AQS01-L]]
411
412
413 == 2.5 Datalog Feature ==
414
415
416 Datalog Feature is to ensure IoT Server can get all sampling data from AQS01-L even if the LoRaWAN network is down. For each sampling, AQS01-L will store the reading for future retrieving purposes.
417
418
419 === 2.5.1 Ways to get datalog via LoRaWAN ===
420
421
422 Set PNACKMD=1, AQS01-L will wait for ACK for every uplink, when there is no LoRaWAN network,AQS01-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.
423
424 * (((
425 a) AQS01-L will do an ACK check for data records sending to make sure every data arrive server.
426 )))
427 * (((
428 b) AQS01-L will send data in **CONFIRMED Mode** when PNACKMD=1, but AQS01-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 AQS01-L gets a ACK, AQS01-L will consider there is a network connection and resend all NONE-ACK messages.
429
430
431 )))
432
433 === 2.5.2 Unix TimeStamp ===
434
435
436 **AQS01-L uses Unix TimeStamp format based on**
437
438
439 [[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"]]
440
441 User can get this time from link:  [[https:~~/~~/www.epochconverter.com/>>url:https://www.epochconverter.com/]] :
442
443 Below is the converter example
444
445 [[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"]]
446
447
448 So, we can use AT+TIMESTAMP=1611889405 or downlink 3060137afd00 to set the current time 2021 – Jan ~-~- 29 Friday 03:03:25
449
450
451 === 2.5.3 Set Device Time ===
452
453
454 User need to set (% style="color:blue" %)**SYNCMOD=1**(%%) to enable sync time via MAC command.
455
456 Once AQS01-L Joined LoRaWAN network, it will send the MAC command (DeviceTimeReq) and the server will reply with (DeviceTimeAns) to send the current time to AQS01-L. If AQS01-L fails to get the time from the server, AQS01-L will use the internal time and wait for next time request (AT+SYNCTDC to set the time request period, default is 10 days).
457
458 (% 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.**
459
460
461 === 2.5.4 Datalog Uplink payload (FPORT~=3) ===
462
463
464 The Datalog uplinks will use below payload format.
465
466 **Retrieval data payload:**
467
468 (% border="1" cellspacing="5" style="background-color:#f2f2f2; width:500px" %)
469 |=(% style="width: 60px;background-color:#4F81BD;color:white" %)(((
470 **Size(bytes)**
471 )))|=(% 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**
472 |(% style="width:103px" %)Value|(% style="width:68px" %)(((
473 CO2
474 )))|(% style="width:104px" %)(((
475 (((
476 Humidity
477 )))
478
479 (((
480
481 )))
482 )))|(% style="width:87px" %)(((
483 Temperature
484 )))|(% style="width:178px" %)(((
485 Poll message flag
486 )))|(% style="width:137px" %)Unix Time Stamp
487
488 **Poll message flag :**
489
490
491 [[image:image-20240112095124-3.png||height="101" width="483"]]
492
493 **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)
494
495 **Poll Message Flag**: 1: This message is a poll message reply.
496
497 * Poll Message Flag is set to 1.
498
499 * Each data entry is 11 bytes, to save airtime and battery, devices will send max bytes according to the current DR and Frequency bands.
500
501 For example, in US915 band, the max payload for different DR is:
502
503 **a) DR0:** max is 11 bytes so one entry of data
504
505 **b) DR1:** max is 53 bytes so devices will upload 4 entries of data (total 44 bytes)
506
507 **c) DR2:** total payload includes 11 entries of data
508
509 **d) DR3: **total payload includes 22 entries of data.
510
511 If devise doesn't have any data in the polling time. Device will uplink 11 bytes of 0   
512
513 **Example:**
514
515 If AQS01-L has below data inside Flash:
516
517
518 [[image:image-20240112095403-4.png||height="278" width="523"]]
519
520 If user sends below downlink command: 3165A010F865A015E405
521
522 Where : Start time: 65A010F8 = time 24/1/11 16:02:00
523
524 Stop time: 65A015E4 = time 24/1/11 16:23:00
525
526
527 **AQS01-L will uplink this payload.**
528
529 [[image:image-20240112101407-1.png||height="244" width="1092"]]
530
531
532 //**01E401A400F14065A0112E**//01CE01A500F14065A0114F01C401A400F14065A0118A02EC01B300F24065A0138202F001B100F34065A013F4023801AD00F24065A0143302EB01BC00F24065A014D603D701B900F14065A015D3
533
534
535 Where the first 11 bytes is for the first entry: 01 E4 01 A4 00 F1 40 65 A0 11 2E
536
537 * **CO2**=0x01E4=484 ppm
538 * **Hum**=0x01A4/10=42 %
539 * **Temp**=0x00F1/10=24.1 ℃
540 * **poll message flag **=0x40,means reply data,sampling uplink message.
541 * **Unix time** is 0x65A0112E=1704888040s=24/1/11 16:02:54
542
543 (% 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="单击并拖动以调整大小" %)的
544
545 == 2.6 Frequency Plans ==
546
547
548 The AQS01-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.
549
550 [[http:~~/~~/wiki.dragino.com/xwiki/bin/view/Main/End%20Device%20Frequency%20Band/>>http://wiki.dragino.com/xwiki/bin/view/Main/End%20Device%20Frequency%20Band/]]
551
552
553 == 2.7 ​Firmware Change Log ==
554
555
556 **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]]
557
558
559 = 3. Configure AQS01-L =
560
561 == 3.1 Configure Methods ==
562
563
564 AQS01-L supports below configure method:
565
566 * AT Command via Bluetooth Connection (**Recommended**): [[BLE Configure Instruction>>http://wiki.dragino.com/xwiki/bin/view/Main/BLE%20Bluetooth%20Remote%20Configure/]].
567 * 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]].
568 * LoRaWAN Downlink.  Instruction for different platforms: See [[IoT LoRaWAN Server>>http://wiki.dragino.com/xwiki/bin/view/Main/]] section.
569
570 == 3.2 General Commands ==
571
572
573 These commands are to configure:
574
575 * General system settings like: uplink interval.
576 * LoRaWAN protocol & radio related command.
577
578 They are same for all Dragino Devices which support DLWS-005 LoRaWAN Stack. These commands can be found on the wiki:
579
580 [[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/]]
581
582
583 == 3.3 Commands special design for AQS01-L ==
584
585
586 These commands only valid for AQS01-L, as below:
587
588
589 === 3.3.1 Set Transmit Interval Time ===
590
591
592 Feature: Change LoRaWAN End Node Transmit Interval.
593
594 (% style="color:blue" %)**AT Command: AT+TDC**
595
596 (% border="1" cellspacing="4" style="background-color:#f2f2f2; width:510px" %)
597 |=(% 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**
598 |(% style="width:156px" %)AT+TDC=?|(% style="width:137px" %)Show current transmit Interval|(((
599 30000
600 OK
601 the interval is 30000ms = 30s
602 )))
603 |(% style="width:156px" %)AT+TDC=60000|(% style="width:137px" %)Set Transmit Interval|(((
604 OK
605 Set transmit interval to 60000ms = 60 seconds
606 )))
607
608 (% style="color:blue" %)**Downlink Command: 0x01**
609
610 Format: Command Code (0x01) followed by 3 bytes time value.
611
612 If the downlink payload=0100003C, it means set the END Node's Transmit Interval to 0x00003C=60(S), while type code is 01.
613
614 * Example 1: Downlink Payload: 0100001E  ~/~/  Set Transmit Interval (TDC) = 30 seconds
615 * Example 2: Downlink Payload: 0100003C  ~/~/  Set Transmit Interval (TDC) = 60 seconds
616
617 === 3.3.2 Get Device Status ===
618
619
620 Send a LoRaWAN downlink to ask device send Alarm settings.
621
622 (% style="color:blue" %)**Downlink Payload:  **(%%)0x26 01
623
624 Sensor will upload Device Status via FPORT=5. See payload section for detail.
625
626
627 === 3.3.3 Set Temperature Alarm Threshold ===
628
629
630 * (% style="color:blue" %)**AT Command:**
631
632 (% style="color:#037691" %)**AT+TEMPALARM=min,max  (Among them, 100 is an invalid value, which means not set)**
633
634 * When min=100, and max≠100, Alarm higher than max
635 * When min≠100, and max=100, Alarm lower than min
636 * When min≠100 and max≠100, Alarm higher than max or lower than min
637
638 Example:
639
640 AT+TEMPALARM=100,30   ~/~/ Alarm when temperature higher than 30.
641
642 * (% style="color:blue" %)**Downlink Payload:**
643
644 (% style="color:#037691" %)**0x(0C 01 64 1E)**  (%%) ~/~/ Set AT+TEMPALARM=100,30
645
646 (% style="color:red" %)**(note: 3^^rd^^ byte= 0x64 for low limit(not set), 4^^th^^ byte = 0x1E for high limit: 30)**
647
648
649 === 3.3.4 Set CO2 Alarm Threshold ===
650
651
652 * (% style="color:blue" %)**AT Command:**
653
654 (% style="color:#037691" %)**AT+CO2ALARM=min,max  (Among them, 0 is an invalid value, which means not set)**
655
656 * When min=0, and max≠0, Alarm higher than max
657 * When min≠0, and max=0, Alarm lower than min
658 * When min≠0 and max≠0, Alarm higher than max or lower than min
659
660 Example:
661
662 AT+CO2ALARM=400,0  ~/~/ Alarm when humidity lower than 400.
663
664 * (% style="color:blue" %)**Downlink Payload:**
665
666 (% style="color:#037691" %)**0x(0C 02  01 90 00 00)**(%%)  ~/~/ Set AT+CO2ALARM=400,0
667
668 (% 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))**
669
670
671 === 3.3.5 Set Alarm Interval ===
672
673
674 The shortest time of two Alarm packet. (unit: min)
675
676 * (% style="color:blue" %)**AT Command:**
677
678 (% 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.
679
680 * (% style="color:blue" %)**Downlink Payload:**
681
682 (% style="color:#037691" %)**0x(0D 14)**(%%)     **~-~--> ** Set AT+ATDC=0x 14 = 20 minutes
683
684
685 === 3.3.6 Set Time Sync Mode ===
686
687
688 Feature: Enable/Disable Sync system time via LoRaWAN MAC Command (DeviceTimeReq), LoRaWAN server must support v1.0.3 protocol to reply to this command.
689
690 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.
691
692 (% style="color:blue" %)**AT Command:**
693
694 (% border="1" cellspacing="3" style="background-color:#f2f2f2; width:500px" %)
695 |=(% 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**
696 |(% style="width:155px" %)(((
697 AT+SYNCMOD=1
698 )))|(% style="width:259px" %)(((
699 Enable Sync system time via LoRaWAN MAC Command (DeviceTimeReq) The default is zero time zone.
700 )))|(% style="width:44px" %)(((
701 OK
702 )))
703 |(% style="width:155px" %)(((
704 AT+SYNCMOD=1,8
705 )))|(% style="width:259px" %)(((
706 Enable Sync system time via LoRaWAN MAC Command (DeviceTimeReq) Set to East eight time zone.
707 )))|(% style="width:44px" %)(((
708 OK
709 )))
710 |(% 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
711
712 (% style="color:blue" %)**Downlink Command:**
713
714 0x28 01 ~/~/ Same As AT+SYNCMOD=1
715
716 0x28 01 08 ~/~/ Same As AT+SYNCMOD=1,8
717
718 0x28 01 F4 ~/~/ Same As AT+SYNCMOD=1,-12
719
720 0x28 00 ~/~/ Same As AT+SYNCMOD=0
721
722
723 === 3.3.7 Request the server to send an ACK ===
724
725
726 (% style="color:blue" %)**AT Command: AT+PNACKMD**
727
728 (% border="1" cellspacing="3" style="background-color:#f2f2f2; width:510px" %)
729 |=(% 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**
730 |(% 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(((
731 OK
732 )))
733 |(% style="width:155px" %)AT+PNACKMD=0|(% style="width:253px" %)off request the server to send an ACK|(% style="width:100px" %)(((
734 0
735 OK
736 )))
737
738 (% style="color:blue" %)**Downlink Command: 0x34**
739
740 0X34 01  ~/~/Same As AT+PNACKMD=1
741
742 0x34 00  ~/~/Same As AT+PNACKMD=0
743
744
745 == 3.4 Calibration command ==
746
747
748 (% style="color:red" %)**Note: If the device is not calibrated for the first time, there will be a certain degree of drift.**
749
750 After having performed the calibration,all following measurements will use the adjusted calibration parameters.
751
752
753 === 3.4.1 Restore factory Calibration  (AT+CALCMD~=0) ===
754
755
756 Restores calibration parameters factory calibration values.
757
758 (% style="color:blue" %)**Downlink Payload**(%%)**:  **0x0F 00
759
760
761 === 3.4.2 Forced ABC Calibration (AT+CALCMD~=1) ===
762
763
764 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).
765
766 (% style="color:blue" %)**Downlink Payload**(%%)**:  **0x0F 01
767
768
769 === 3.4.3 Target Calibration (AT+CALCMD~=2 Equivalent to AT+CALCMD~=2,400) ===
770
771
772 Target concentration calibration assumes that sensor is put into a target environment with a known CO2 concentration. Such as outdoor fresh air 400ppm.
773
774 (% style="color:blue" %)**Downlink Payload**(%%)**:  **0x0F 02 ==> AT+CALCMD=2
775
776 0x0F 02 01 90 ==> AT+CALCMD=2,400
777
778 0x0F 02 01 F4 ==> AT+CALCMD=2,500
779
780
781 === 3.4.4 Background Calibration  (AT+CALCMD~=3) ===
782
783
784 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).
785
786 (% style="color:blue" %)**Downlink Payload**(%%)**:  **0x0F 03
787
788
789 === 3.4.5 Zero Calibration  (AT+CALCMD~=4) ===
790
791
792 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.
793
794 (% style="color:blue" %)**Downlink Payload**(%%)**:  **0x0F 04
795
796
797 == 3.5 calibration mode ==
798
799 === 3.5.1 Enabled ABC Calibration (AT+CALMOD~=1, default) ===
800
801
802 The Automatic Baseline Correction algorithm is a proprietary Senseair method for referencing to “fresh air” as the lowest, but required stable, CO2-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 CO2 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 CO2-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.
803
804 (% style="color:blue" %)**Downlink Payload**(%%)**:  **0x0E 01
805
806
807 === 3.5.2 Disabled ABC Calibration (AT+CALMOD~=0) ===
808
809
810 If the device is in a greenhouse or enclosed environment, it is recommended to turn off ABC calibration. And use Target Calibration for calibration.
811
812 (% style="color:blue" %)**Downlink Payload**(%%)**:  **0x0E 00
813
814
815 === 3.5.3 Button CO2 calibration function (Equivalent to AT+CALCMD~=3) ===
816
817
818 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.
819
820 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.
821
822 The last step is to reset the device, press and hold the button until the green light flashes.
823
824
825 = 4. Battery & Power Consumption =
826
827 == 4.1 Battery Life ==
828
829
830 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 .
831
832 See below link for detail information about the battery life calculation.
833
834 [[**Battery Info & Power Consumption Analyze**>>http://wiki.dragino.com/xwiki/bin/view/Main/How%20to%20calculate%20the%20battery%20life%20of%20Dragino%20sensors%3F/]] .
835
836
837 == 4.2 Replace Battery ==
838
839
840 AQS01-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.
841
842 [[image:image-20240108140200-1.png||height="503" width="803"]]
843
844
845 = 5. OTA Firmware update =
846
847
848 (% class="wikigeneratedid" %)
849 User can change firmware AQS01-L to:
850
851 * Change Frequency band/ region.
852 * Update with new features.
853 * Fix bugs.
854
855 Firmware and changelog can be downloaded from : **[[Firmware download link>>https://www.dropbox.com/scl/fo/o5v6j7qewlks12eso98kl/h?rlkey=v1ian3hmva65924j4h4n0yfz8&dl=0]]**
856
857
858 Methods to Update Firmware:
859
860 * (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/]]**
861 * 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]]**.
862
863
864
865 = 6. FAQ =
866
867 == 6.1 Do i need to calibrate the CO2 reading of AQS01-L? ==
868
869
870 The Operating principle for CO2 measurement used in AQS01-L is Non-dispersive infrared (NDIR). There is no need Calibration for this method.
871
872
873 = 7. Order Info =
874
875
876 Part Number: (% style="color:blue" %)**AQS01-L-XX**
877
878 (% style="color:red" %)**XX**(%%): The default frequency band
879
880 * (% style="color:red" %)**AS923**(%%): LoRaWAN AS923 band
881
882 * (% style="color:red" %)**AU915**(%%): LoRaWAN AU915 band
883
884 * (% style="color:red" %)**EU433**(%%): LoRaWAN EU433 band
885
886 * (% style="color:red" %)**EU868**(%%): LoRaWAN EU868 band
887
888 * (% style="color:red" %)**KR920**(%%): LoRaWAN KR920 band
889
890 * (% style="color:red" %)**US915**(%%): LoRaWAN US915 band
891
892 * (% style="color:red" %)**IN865**(%%): LoRaWAN IN865 band
893
894 * (% style="color:red" %)**CN470**(%%): LoRaWAN CN470 band
895
896 = 8. ​Packing Info =
897
898
899 (% style="color:#037691" %)**Package Includes**:
900
901 * AQS01-L LoRaWAN Indoor CO2 Sensor
902
903 (% style="color:#037691" %)**Dimension and weight**:
904
905 * Device Size: cm
906
907 * Device Weight: g
908
909 * Package Size / pcs : cm
910
911 * Weight / pcs : g
912
913 = 9. Support =
914
915
916 * 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.
917
918 * 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]].