Version 111.7 by Xiaoling on 2024/07/26 16:43

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