KS61 Indoor Air Quality (IAQ) Sensor V1.0
Product Introduction

Product Introduction
KS61 is a set of multi-functional and sophisticated design in one of the 86 type wall switch type indoor environment monitoring sensor. It can monitor PM2.5 (zero fire version support), temperature, humidity, light intensity, CO₂, TVOC and human movement (PIR) and other environmental parameters in real time, and is equipped with electronic ink screen, which supports local intuitive view of air quality data, and the information is clear and easy to read.
KS61 adopts standard 86 box size design, built-in three physical buttons, easy to install, can directly replace the traditional wall switch. After the remote control function is enabled, the user can realize the intelligent control of the switch on and off through the network, taking into account the local operation habits and remote intelligent management.
The product is based on LoRa ® Wireless technology, supports standard LoRaWAN ® Protocol, with the advantages of long-distance communication and ultra-low power consumption, is suitable for large-scale, long-life IoT deployment scenarios.
KS61 compatible with ManThink and third party LoRaWAN ® Gateway, and seamless access to ThinkLink, ChirpStack, The Things Network(TTN) and other mainstream Internet of Things platforms, easy to achieve environmental data collection, remote monitoring, intelligent analysis and energy-saving linkage control, widely applicable to smart office, smart home and building management system.
Features
- 86 box installation, can directly replace the original 86 box switch
- Support 3 phiscal switches
- Support PM2.5, temperature, humidity, light, CO₂, TVOC, PIR seven environmental parameter monitoring
- Ink screen display
- Support single Live wire/LN power supply (two versions)
- Support RS-485 interface (zero fire version support)
- Support ThinkLink/ChirpStack/TTN platform docking
- Support US902,AU915,AS923,EU868,EU433,CN470 LoRaWAN standards
Specifications
Sarameters
| Interface | Switch | Three |
|---|---|---|
| Display | Ink LCD |
| Item | Value |
|---|---|
| § Measurement | |
| Temperature | LN version: measure period 10 seconds accuracy ± 1 ℃, range -20 ℃ - 60 ℃ L version measure period 10 seconds accuracy ± 3 ℃, range -20 ℃ - 60 ℃ |
| Humidity | measure period 10 seconds accuracy ± 3% RH, range 0 - 100% |
| PIR | trigger type horizontal 80°, vertical 55° effective distance 5 meters |
| Illumination | measure period 10 seconds Measuring range 0.01 lux - 83 k lux (graded by L0-L3) L0 : <100lux L1 : <200lux L2 : <500lux L3 : <500lux |
| CO2 | measure period 10 seconds accuracy ± 40.0 ppm ± 5.0 %m.v. Range 400-5000ppm |
| TVOC | measure period is 10 seconds accuracy is ± 15 VOC Index points or % m.v. Range: 1 - 500 VOC Index points |
| PM2.5 | LN vesion : measure period 180 seconds accuracy: ±10%, range: 0-1000μg/m³ L version : acquisition period 3 hours, accuracy :±10%, range : 0-1000μg/m³ |
| PM1.0 | LN vesion : measure period 180 seconds accuracy: ±10%, range: 0-1000μg/m³ L version : acquisition period 3 hours, accuracy :±10%, range : 0-1000μg/m³ |
| PM10 | LN vesion (Hidden by default, uploaded via LoRaWAN channel): measure period 180 seconds accuracy: ±25%, range: 0-1000μg/m³ L version (Hidden by default, uploaded via LoRaWAN channel): acquisition period 3 hours, accuracy :±10%, range : 0-1000μg/m³ |
| § Wireless parameters | |
| Protocol | standard LoRaWAN |
| regional Standards | CN470/EU433/EU868/AS923/AU915/Us902 |
| Transmit power | max 22dBm (LN version) maximum 14dBm (L version ) |
| receiving sensitivity | -142dBm(SF=12,BW=125kHz) |
| Working mode | OTAA/ABP Class A |
| § Configuration | |
| test /Trigger mode | long press switch 1 2 seconds trigger heartbeat data 6 seconds trigger network |
| parameter configuration | by NS issue instruction |
| § characteristics | |
| power supply mode | L/LN AC |
| receiving current | <8mA (25 ℃ at room temperature) |
| emission current | <110mA (22dBm transmit power) |
| average power consumption | <100mW |
| working temperature | -40°C ~85°C |
| relative humidity | ≤95% (no condensation) |
| protection level | IP30 |
| material &Color | ABS + PC, White |
| dimensions | 86mm * 86mm * 17mm (17mm is the thickness outside the wall) |
| installation method | 86 box embedded installation |
Product Model

Example: KS618-A1-AS923-N, 2nd Generation Indoor Air Quality Sensor, seven-in-one sensor, single live wire power supply, AS923 standard
Instructions for use
Network topology
KS61 is a terminal device that conforms to the standard LoRaWAN protocol, and its normal operation depends on the complete LoRaWAN network support. The network needs to include a LoRaWAN gateway and a web server (NS). KS61 can be connected to ManThink self-developed Gateway or third-party compatible gateway, and supports connection to mainstream LoRaWAN Network servers, such as ThinkLink, ChirpStack and The Things Network(TTN).
Through the ThinkLink IoT platform, users can easily configure the object model, realize the definition of business functions, card view display and other personalized business logic, and quickly build application scenarios.
A typical LoRaWAN network topology is as follows:

Working mode
Collection and Upload
KS61 collects data according to a preset fixed period, and supports three Upload modes: periodic Upload, event trigger Upload and change value Upload (COV).
In the periodic Upload mode, KS61 will regularly report the complete data of all sensors according to the set time interval. For variables that support COV(Change of Value), the system will automatically trigger a data Upload when the Value Change exceeds the preset threshold. In addition, event-type variables such as PIR (human body sensing) and switch status trigger a single data report immediately when the status changes.
All uplink data uses a unified packet format to ensure transmission consistency and resolution efficiency. The overall acquisition and upload mechanism combines three strategies: timing, threshold and event-driven, taking into account data integrity and real-time response.
Measurement
| Temperature | measure period 10 seconds | COV, default 1 ℃ | |
|---|---|---|---|
| Humidity | measure period 10 seconds | COV, default 5% | |
| PIR | triggered | trigger | |
| Illumination | measure period 10 seconds, | ||
| CO2 | measure period 10 seconds | COV, default 100 | |
| TVOC | measure period 10 seconds | COV, default 50 | |
| PM2.5 | measure period 180 seconds (LN version) | ||
| measure period 3 hours (L version) |
Communication Test
By switching on and off the switch once, a packet of data can be implemented to trigger uplink.
Network access
Long press Switch 3 (right most switch) for more than 6 seconds to trigger the network access operation.
Communication Protocol
Data Items and Identifiers
- [x] LoRaWAN port number = 11
KS61 supports only one data format and sends data periodically according to a set period. When a COV event occurs, it triggers one frame of uplink data.
Example (hex): 82 24 07 00 ED00 4902 2402 0200 44000000 01 01 07 40 27502642
| Number | Data Item | Example | Sstart Address | Length | Description |
|---|---|---|---|---|---|
| 1 | version Number | 0x82 | 0 | 1 byte | KS61 fixed to 0x82 |
| 2 | control Word | 0x24 | 1 | 1 byte | KS61 fixed to 0x24 |
| 3 | identifier | 0x07 | 2 | 1 byte | KS61 fixed to 0x07 |
| 4 | status Identification | 0x00 | 3 | 1 byte | >0 is fault, = 0 normal |
| 5 | temperature | 0x00ED | 4 | 2 bytes | int16,little endian unit is 0.1 ℃ |
| 6 | humidity | 0x0249 | 6 | 2 bytes | int16,littel endian unit is 0.1 rh% |
| 7 | CO2 | 0x0204 | 8 | 2 bytes | int16, littel endian , unit is ppm |
| 8 | illumination | 0x0002 | 10 | 2 bytes | int16,littel endian unit lux |
| 9 | TVOC | 0x00000004 | 12 | 4 bytes | Int32 , littel endian , unit ug/m³ |
| 10 | retention | 0x01 | 16 | 1 byte | retention |
| 11 | PIR | 0x01 | 17 | 1 byte | uint8>0 someone, = 0 No One |
| 12 | switch status | 0x07 | 18 | 1 byte | uint8,bit0-bit3 corresponding to 3 switch states respectively (switches 1-3 from left to right) |
| = 0 is open, = 1 is closed | |||||
| 13 | PM2.5 | 0x 42265027 | 20 | 4 bytes | little endian ,unit ug/m³ |
ThinkLink parsing rules
let payload = Buffer.from(msg?.userdata?.payload, "base64");
let port=msg?.userdata?.port;
//let preTelemetry = device?.telemetry_data?.[thingModelId];
function parseSharedAttrs(payload) {
if (port!=214||payload[0]!=0x2F) { return null}
let shared_attrs ={}
shared_attrs.content = payload.toString('hex')
if (payload.length<5) { return null}
let size=payload.length-4
let regAddress=payload[2]
for (let i=0; i<size; i++) {
regAddress=payload[2]+i
switch (regAddress) {
case 58:
if ( size<(2+i) ) { break }
shared_attrs.period_data = payload.readUInt16LE(4+i)
break;
case 152:
if ( size<(1+i) ) { break }
shared_attrs.enable = "0x"+payload.readUInt8(4+i).toString(16).padStart(2, '0')
break;
case 153:
if ( size<(1+i) ) { break }
shared_attrs.cov_temperatrue = payload.readUInt8(4+i)*0.1
break;
case 154:
if ( size<(1+i) ) { break }
shared_attrs.cov_humidity = payload.readUInt8(4+i)
break;
case 155:
if ( size<(1+i) ) { break }
shared_attrs.cov_tvoc = payload.readUInt8(4+i)
break;
case 156:
if ( size<(1+i) ) { break }
shared_attrs.cov_co2 = payload.readUInt8(4+i)
break;
case 157:
if ( size<(1+i) ) { break }
shared_attrs.cov_pm25 = payload.readUInt8(4+i)
break;
case 158:
if ( size<(2+i) ) { break }
shared_attrs.pir_delay = payload.readUInt16LE(4+i)
break;
case 160:
if ( size<(2+i) ) { break }
shared_attrs.lux_threshold1 = payload.readUInt16LE(4+i)
break;
case 162:
if ( size<(2+i) ) { break }
shared_attrs.lux_threshold2 = payload.readUInt16LE(4+i)
break;
case 164:
if ( size<(2+i) ) { break }
shared_attrs.lux_threshold3 = payload.readUInt16LE(4+i)
break;
case 166:
if ( size<(1+i) ) { break }
shared_attrs.pir_mask ="0x"+ payload.readUInt8(4+i).toString(16).padStart(2, '0')
break;
default: break
}
}
if (Object.keys(shared_attrs).length == 0) {
return null
}
return shared_attrs;
}
function parseTelemetry(payload){
if (port!=11) { return null}
if (payload[0]!=0x82||payload[1]!=0x24||payload[2]!=0x07){ return null }
let telemetryData={}
if (payload.length <24) { return null }
if (payload[3]>0) {
telemetryData.status="fault"
return telemetryData
}
telemetryData.temperatrue=Number((payload.readInt16LE(4)/10).toFixed(1))
telemetryData.humidity=Number((payload.readInt16LE(6)/10).toFixed(1))
telemetryData.co2=Number(payload.readInt16LE(8))
telemetryData.light=Number(payload.readInt16LE(10))
telemetryData.tvoc=Number(payload.readInt32LE(12))
let pirval=payload.readUInt8(17)
telemetryData.pir= (pirval>0)?1:0
let relayval =payload.readUInt8(18)
telemetryData.relay1=((relayval&0x01)===0x01)?1:0
telemetryData.relay2=((relayval&0x02)===0x02)?1:0
telemetryData.relay3=((relayval&0x04)===0x04)?1:0
telemetryData.pm25=Number((payload.readFloatLE(20)).toFixed(2))
return telemetryData
}
let appData= parseTelemetry(payload)
let sattrs=parseSharedAttrs(payload)
return {
telemetry_data: appData,
server_attrs: null,
shared_attrs: sattrs,
}Parameter modification
\PTL-D01 ManThink Technology IoT Terminal Application Layer General Protocol V1.5
Configuration parameter address table
| Number | Data Item | Default Value | Start Address | Length | Description |
|---|---|---|---|---|---|
| 1 | reset | write Only | 9 | 1 byte | write 0x01 |
| 2 | upload cycle | 15 | 58 | 2 bytes | upload cycle, in minutes |
| 3 | function enable bit | 152 | 1 byte | bit0-bit6 corresponding to different function enable bits, | |
| = 0 does not enable, = 1 enable | |||||
| bit0: Temperature | |||||
| bit1: Humidity | |||||
| bit2 :TVOC | |||||
| bit3: Illumination | |||||
| bit4 :CO2 | |||||
| bit5 :PM2.5 | |||||
| bit6: light control enable bit | |||||
| 4 | temperature COV | 10 | 153 | 1 byte | unit 0.1 ℃ |
| 5 | humidity COV | 20 | 154 | 1 byte | unit 0.1 RH% |
| 6 | TVOC COV | 50 | 155 | 1 byte | |
| 7 | CO2 COV | 100 | 156 | 1 byte | unit ppm |
| 8 | pm2.5 COV | 10 | 157 | 1 byte | unit ug/m³ |
| 9 | PIR delay | 1800 | 158 | 2 bytes | uint16, little endian , in seconds |
| PIR unmanned status secondary confirmation delay | |||||
| 10 | illumination Threshold 1 | 100 | 160 | 2 bytes | uint16, little endian unit lux |
| illumination Threshold 1 | |||||
| 11 | illumination Threshold 2 | 100 | 162 | 2 bytes | uint16, little endian , unit lux |
| illumination Threshold 2 | |||||
| 12 | illumination Threshold 2 | 100 | 164 | 2 bytes | uint16,little endian , unit lux |
| Illumination threshold 3 | |||||
| 13 | PIR Control Mask | 0x07 | 166 | 1 byte | PIR someone turn on the light control mask, bit0-bit3 valid. When it is 1, PIR detects a person and turns on the light. |
Contact Us
Website: www.manthink.cn
Email: info@ manthink.cn
Tel: +86 15810684257