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