Last modified by Mengting Qiu on 2025/07/03 19:27

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