Version 115.2 by Karry Zhuang on 2024/11/19 18:41

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 The CO2 alarm function detects CO2 once every minute, so it consumes more power.
653
654 * (% style="color:blue" %)**AT Command:**
655
656 (% style="color:#037691" %)**AT+CO2ALARM=min,max  (Among them, 0 is an invalid value, which means not set)**
657
658 * When min=0, and max≠0, Alarm higher than max
659 * When min≠0, and max=0, Alarm lower than min
660 * When min≠0 and max≠0, Alarm higher than max or lower than min
661
662 Example:
663
664 AT+CO2ALARM=400,0  ~/~/ Alarm when humidity lower than 400.
665
666 * (% style="color:blue" %)**Downlink Payload:**
667
668 (% style="color:#037691" %)**0x(0C 02  01 90 00 00)**(%%)  ~/~/ Set AT+CO2ALARM=400,0
669
670 (% 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))**
671
672
673 === 3.3.5 Set Alarm Interval ===
674
675
676 The shortest time of two Alarm packet. (unit: min)
677
678 * (% style="color:blue" %)**AT Command:**
679
680 (% 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.
681
682 * (% style="color:blue" %)**Downlink Payload:**
683
684 (% style="color:#037691" %)**0x(0D 14)**(%%)     **~-~--> ** Set AT+ATDC=0x 14 = 20 minutes
685
686
687 === 3.3.6 Set Time Sync Mode ===
688
689
690 Feature: Enable/Disable Sync system time via LoRaWAN MAC Command (DeviceTimeReq), LoRaWAN server must support v1.0.3 protocol to reply to this command.
691
692 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.
693
694 (% style="color:blue" %)**AT Command:**
695
696 (% border="1" cellspacing="3" style="background-color:#f2f2f2; width:500px" %)
697 |=(% 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**
698 |(% style="width:155px" %)(((
699 AT+SYNCMOD=1
700 )))|(% style="width:259px" %)(((
701 Enable Sync system time via LoRaWAN MAC Command (DeviceTimeReq) The default is zero time zone.
702 )))|(% style="width:44px" %)(((
703 OK
704 )))
705 |(% style="width:155px" %)(((
706 AT+SYNCMOD=1,8
707 )))|(% style="width:259px" %)(((
708 Enable Sync system time via LoRaWAN MAC Command (DeviceTimeReq) Set to East eight time zone.
709 )))|(% style="width:44px" %)(((
710 OK
711 )))
712 |(% 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
713
714 (% style="color:blue" %)**Downlink Command:**
715
716 0x28 01 ~/~/ Same As AT+SYNCMOD=1
717
718 0x28 01 08 ~/~/ Same As AT+SYNCMOD=1,8
719
720 0x28 01 F4 ~/~/ Same As AT+SYNCMOD=1,-12
721
722 0x28 00 ~/~/ Same As AT+SYNCMOD=0
723
724
725 === 3.3.7 Request the server to send an ACK ===
726
727
728 (% style="color:blue" %)**AT Command: AT+PNACKMD**
729
730 (% border="1" cellspacing="3" style="background-color:#f2f2f2; width:510px" %)
731 |=(% 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**
732 |(% 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(((
733 OK
734 )))
735 |(% style="width:155px" %)AT+PNACKMD=0|(% style="width:253px" %)off request the server to send an ACK|(% style="width:100px" %)(((
736 0
737 OK
738 )))
739
740 (% style="color:blue" %)**Downlink Command: 0x34**
741
742 0X34 01  ~/~/Same As AT+PNACKMD=1
743
744 0x34 00  ~/~/Same As AT+PNACKMD=0
745
746
747 == 3.4 Calibration command ==
748
749
750 (% style="color:red" %)**Note: If the device is not calibrated for the first time, there will be a certain degree of drift.**
751
752 After having performed the calibration,all following measurements will use the adjusted calibration parameters.
753
754
755 === 3.4.1 Restore factory Calibration  (AT+CALCMD~=0) ===
756
757
758 Restores calibration parameters factory calibration values.
759
760 (% style="color:blue" %)**Downlink Payload**(%%)**:  **0x0F 00
761
762
763 === 3.4.2 Forced ABC Calibration (AT+CALCMD~=1) ===
764
765
766 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).
767
768 (% style="color:blue" %)**Downlink Payload**(%%)**:  **0x0F 01
769
770
771 === 3.4.3 Target Calibration (AT+CALCMD~=2 Equivalent to AT+CALCMD~=2,400) ===
772
773
774 Target concentration calibration assumes that sensor is put into a target environment with a known CO2 concentration. Such as outdoor fresh air 400ppm.
775
776 (% style="color:blue" %)**Downlink Payload**(%%)**:  **0x0F 02 ==> AT+CALCMD=2
777
778 0x0F 02 01 90 ==> AT+CALCMD=2,400
779
780 0x0F 02 01 F4 ==> AT+CALCMD=2,500
781
782
783 === 3.4.4 Background Calibration  (AT+CALCMD~=3) ===
784
785
786 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).
787
788 (% style="color:blue" %)**Downlink Payload**(%%)**:  **0x0F 03
789
790
791 === 3.4.5 Zero Calibration  (AT+CALCMD~=4) ===
792
793
794 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.
795
796 (% style="color:blue" %)**Downlink Payload**(%%)**:  **0x0F 04
797
798
799 == 3.5 calibration mode ==
800
801 === 3.5.1 Enabled ABC Calibration (AT+CALMOD~=1, default) ===
802
803
804 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.
805
806 (% style="color:blue" %)**Downlink Payload**(%%)**:  **0x0E 01
807
808
809 === 3.5.2 Disabled ABC Calibration (AT+CALMOD~=0) ===
810
811
812 If the device is in a greenhouse or enclosed environment, it is recommended to turn off ABC calibration. And use Target Calibration for calibration.
813
814 (% style="color:blue" %)**Downlink Payload**(%%)**:  **0x0E 00
815
816
817 === 3.5.3 Button CO2 calibration function (Equivalent to AT+CALCMD~=3) ===
818
819
820 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.
821
822 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.
823
824 The last step is to reset the device, press and hold the button until the green light flashes.
825
826
827 = 4. Battery & Power Consumption =
828
829 == 4.1 Battery Life ==
830
831
832 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 .
833
834 See below link for detail information about the battery life calculation.
835
836 [[**Battery Info & Power Consumption Analyze**>>http://wiki.dragino.com/xwiki/bin/view/Main/How%20to%20calculate%20the%20battery%20life%20of%20Dragino%20sensors%3F/]] .
837
838
839 == 4.2 Replace Battery ==
840
841
842 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.
843
844 [[image:image-20240108140200-1.png||height="503" width="803"]]
845
846
847 = 5. OTA Firmware update =
848
849
850 (% class="wikigeneratedid" %)
851 User can change firmware AQS01-L to:
852
853 * Change Frequency band/ region.
854 * Update with new features.
855 * Fix bugs.
856
857 Firmware and changelog can be downloaded from : **[[Firmware download link>>https://www.dropbox.com/scl/fo/o5v6j7qewlks12eso98kl/h?rlkey=v1ian3hmva65924j4h4n0yfz8&dl=0]]**
858
859
860 Methods to Update Firmware:
861
862 * (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/]]**
863 * 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]]**.
864
865
866 = 6. FAQ =
867
868 == 6.1 Do i need to calibrate the CO2 reading of AQS01-L? ==
869
870
871 The Operating principle for CO2 measurement used in AQS01-L is Non-dispersive infrared (NDIR). There is no need Calibration for this method.
872
873
874 = 7. Order Info =
875
876
877 Part Number: (% style="color:blue" %)**AQS01-L-XX**
878
879 (% style="color:red" %)**XX**(%%): The default frequency band
880
881 * (% style="color:red" %)**AS923**(%%): LoRaWAN AS923 band
882
883 * (% style="color:red" %)**AU915**(%%): LoRaWAN AU915 band
884
885 * (% style="color:red" %)**EU433**(%%): LoRaWAN EU433 band
886
887 * (% style="color:red" %)**EU868**(%%): LoRaWAN EU868 band
888
889 * (% style="color:red" %)**KR920**(%%): LoRaWAN KR920 band
890
891 * (% style="color:red" %)**US915**(%%): LoRaWAN US915 band
892
893 * (% style="color:red" %)**IN865**(%%): LoRaWAN IN865 band
894
895 * (% style="color:red" %)**CN470**(%%): LoRaWAN CN470 band
896
897 = 8. ​Packing Info =
898
899
900 (% style="color:#037691" %)**Package Includes**:
901
902 * AQS01-L LoRaWAN Indoor CO2 Sensor
903
904 (% style="color:#037691" %)**Dimension and weight**:
905
906 * Device Size: cm
907
908 * Device Weight: g
909
910 * Package Size / pcs : cm
911
912 * Weight / pcs : g
913
914 = 9. Support =
915
916
917 * 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.
918
919 * 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]].