KS61 LoRaWAN开关型86盒室内空气质量监测器
产品介绍

产品简介
KS61是一款集多功能与精巧设计于一体的86型墙面开关式室内环境监测传感器。它可实时监测PM2.5(零火线版本支持)、温度、湿度、光照强度、CO₂、TVOC以及人体移动(PIR)等多种环境参数,并配备电子墨水屏,支持本地直观查看空气质量数据,信息清晰易读。KS61采用标准86盒尺寸设计,内置三个物理按键,安装便捷,可直接替换传统墙壁开关。在启用远程控制功能后,用户可通过网络实现对开关通断的智能操控,兼顾本地操作习惯与远程智能化管理。
该产品基于LoRa®无线技术,支持标准LoRaWAN®协议,具备远距离通信和超低功耗的优势,适用于大范围、长续航的物联网部署场景。KS61兼容门思科技及第三方LoRaWAN®网关,并可无缝接入ThinkLink、ChirpStack、The Things Network(TTN)等主流物联网平台,轻松实现环境数据的采集、远程监控、智能分析与节能联动控制,广泛适用于智慧办公、智能家居及楼宇管理系统。
主要特点
- 86盒安装,可对原有的86盒开关直接替换
- 支持3个硬开关
- 支持PM2.5、温度、湿度、光照、CO₂、TVOC 、 PIR 七种环境参数监测
- 墨水屏显示
- 支持单火/零火 供电(两个版本)
- 支持RS-485接口(零火版支持)
- 支持ThinkLink/ChirpStack/TTN 平台对接
- 支持US902,AU915,AS923,EU868,EU433,CN470 LoRaWAN标准
规格参数
参数
| 接口 | 按键开关 | 3个 |
|---|---|---|
| 显示 | 墨水屏 |
| 参数 | 值 |
|---|---|
| § 测量 | |
| 温度 | 采集周期 10秒,精度 ±1℃,范围 -20℃ - 60℃ (零火版) 采集周期 10秒,精度 ±3℃,范围 -20℃ - 60℃ (单火版) |
| 湿度 | 采集周期 10秒,精度 ±3%RH,范围 0 - 100% |
| PIR | 触发式,水平 80°,垂直55°,有效距离5米 |
| 光照度 | 采集周期 10秒, 测量范围 0.01 lux - 83 k lux (按L0-L3分级) L0 : <100lux L1 : <200lux L2 : <500lux L3 : >500lux |
| CO2 | 采集周期 10秒,精度±40.0 ppm ±5.0 %m.v. 范围 400 - 5000ppm |
| TVOC | 采集周期 10秒,精度±15 VOC Index points or % m.v.<br>范围:1 - 500 VOC Index points |
| PM2.5 | 采集周期 180秒,精度±10% ,范围: 0 - 1000μg/m³ (零火版) 采集周期 3小时,精度±10% ,范围: 0 - 1000μg/m³ (单火版) |
| PM1.0 | 精度±10% ,范围: 0 - 1000μg/m³ (默认不显示,通过LoRaWAN通道上传) 采集周期 180秒(零火版) 采集周期 3小时(单火版) |
| PM10 | 精度±25% ,范围: 0 - 1000μg/m³ (默认不显示,通过LoRaWAN通道上传) 采集周期 180秒(零火版) 采集周期 3小时(单火版) |
| § 无线参数 | |
| 通信协议 | 标准LoRaWAN ®协议 |
| 地区标准 | CN470/EU433/EU868/AS923/AU915/Us902 |
| 发射功率 | 最大22dBm(零火版) 最大 14dBm(单火版) |
| 接收灵敏度 | -142dBm(SF=12,BW=125kHz) |
| 入网/工作模式 | OTAA/ABP Class A |
| § 协议/配置 | |
| 测试/触发方式 | 长按1号开关 2秒触发心跳数据 6秒触发入网 |
| 参数配置 | 通过NS下发指令 |
| § 物理特性 | |
| 供电方式 | 单火线/零火线 |
| 接收电流 | < 8mA (25℃室温条件下) |
| 发射电流 | < 110mA (22dBm 发射功率) |
| 平均功耗 | <100mW |
| 工作温度 | -40°C ~85°C |
| 相对湿度 | ≤95%(无凝结) |
| 防护等级 | IP30 |
| 材质&颜色 | ABS+PC,白色 |
| 尺寸 | 86mm86mm17mm (17mm为墙外的厚度) |
| 安装方式 | 86盒嵌入式安装 |
产品型号

例如:KS618-A2-AS923-N ,第2代室内空气质量监测仪,七合一传感器,零火线供电,AS923标准
使用说明
网络拓扑
KS61 是一款符合标准 LoRaWAN 协议的终端设备,其正常运行依赖于完整的 LoRaWAN 网络支持。该网络需包含 LoRaWAN 网关及网络服务器(NS)。KS61 可接入门思科技自研网关或第三方兼容网关,并支持连接主流 LoRaWAN 网络服务器,如 ThinkLink、ChirpStack 和 The Things Network(TTN)等。
通过门思科技 ThinkLink 物联网平台,用户可便捷配置物模型,实现业务功能定义、卡片视图展示及其他个性化业务逻辑,快速构建应用场景。
典型的 LoRaWAN 网络拓扑结构如下:

工作模式
采集和上传
KS61 按照预设的固定周期进行数据采集,并支持三种上传模式:周期性上传、事件触发上传和变化值上传(COV)。
在周期性上传模式下,KS61 将按设定的时间间隔,定时上报所有传感器的完整数据。对于支持 COV(Change of Value)的变量,当其数值变化超过预设阈值时,系统将自动触发一次数据上传。此外,PIR(人体感应)和开关状态等事件型变量,则在状态发生改变时立即触发单次数据上报。
所有上行数据均采用统一的数据包格式,确保传输的一致性与解析效率。整体采集与上传机制结合了定时、阈值和事件驱动三种策略,兼顾数据完整性与响应实时性。
测量
| 温度 | 采集周期 10秒 | COV,默认 1℃ | |
|---|---|---|---|
| 湿度 | 采集周期 10秒 | COV,默认 5% | |
| PIR | 触发式 | 触发 | |
| 光照度 | 采集周期 10秒, | ||
| CO2 | 采集周期 10秒 | COV, 默认100 | |
| TVOC | 采集周期 10秒 | COV,默认50 | |
| PM2.5 | 采集周期 180秒(零火版) | ||
| 采集周期 3小时(单火版) |
通信测试
通过开关开断一次,即可以实现一包数据触发上行。
入网
长按开关3(最右侧开关)6秒以上,触发入网操作。
通信协议
参考 \PTL-D01 门思科技物联网终端应用层通用协议V1.5
数据项和标识符
- [x] LoRaWAN 端口号=11
KS61 只支持1种数据格式,会按照设定的周期,周期性发送数据,当COV事件发生时会触发1帧上行数据。
示例(hex):82 24 07 00 ED00 4902 2402 0200 44000000 01 01 07 40 27502642
| 序号 | 数据项 | 示例 | 起始地址 | 长度 | 描述 |
|---|---|---|---|---|---|
| 1 | 版本号 | 0x82 | 0 | 1字节 | KS61 固定为0x82 |
| 2 | 控制字 | 0x24 | 1 | 1字节 | KS61固定为0x24 |
| 3 | 标识符 | 0x07 | 2 | 1字节 | KS61 固定为0x07 |
| 4 | 状态标识 | 0x00 | 3 | 1字节 | >0 为故障,=0 正常 |
| 5 | 温度 | 0x00ED | 4 | 2字节 | Int16,小端模式,单位0.1℃ |
| 6 | 湿度 | 0x0249 | 6 | 2字节 | Int16,小端模式,单位0.1RH% |
| 7 | CO2 | 0x0204 | 8 | 2字节 | Int16,小端模式 ,单位 ppm |
| 8 | 光照度 | 0x0002 | 10 | 2字节 | Int16,小端模式,单位 lux |
| 9 | TVOC | 0x00000004 | 12 | 4字节 | Int32,小端模式,单位 ug/m³ |
| 10 | 保留 | 0x01 | 16 | 1字节 | 保留 |
| 11 | PIR | 0x01 | 17 | 1字节 | uint8,>0 有人,=0 无人 |
| 12 | 开关状态 | 0x07 | 18 | 1字节 | uint8,bit0-bit3 分别对应3个开关状态(从左到右 开关1-3) |
| =0 为开断,=1为闭合 | |||||
| 13 | PM2.5 | 0x42265027 | 20 | 4字节 | 小端模式,单位 ug/m³ |
ThinkLink 解析规则
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,
}参数修改
\PTL-D01 门思科技物联网终端应用层通用协议V1.5
配置参数地址表
| 序号 | 数据项 | 默认值 | 起始地址 | 长度 | 描述 |
|---|---|---|---|---|---|
| 1 | 复位 | 只写 | 9 | 1字节 | 写0x01 |
| 2 | 上传周期 | 900 | 40 | 2字节 | 上传周期,单位秒 |
| 3 | 功能使能位 | 152 | 1字节 | bit0-bit6 分别对应不同功能使能位,=0 不使能,=1使能 | |
| bit0 : 温度 | |||||
| bit1 : 湿度 | |||||
| bit2 :TVOC | |||||
| bit3 :光照度 | |||||
| bit4 :CO2 | |||||
| bit5 :PM2.5 | |||||
| bit6 :光照控制使能位 | |||||
| 4 | 温度COV | 10 | 153 | 1字节 | 倍率 0.1,单位℃ |
| 5 | 湿度COV | 20 | 154 | 1字节 | 倍率 0.1,单位 RH% |
| 6 | TVOC COV | 50 | 155 | 1字节 | |
| 7 | CO2 COV | 100 | 156 | 1字节 | 单位 ppm |
| 8 | pm2.5 COV | 10 | 157 | 1字节 | 单位 ug/m³ |
| 9 | PIR 延时 | 1800 | 158 | 2字节 | uint16,小端模式,单位秒 |
| PIR无人状态二次确认延时, | |||||
| 10 | 光照度阈值1 | 100 | 160 | 2字节 | uint16,小端模式,单位 lux |
| 光照度 阈值1 | |||||
| 11 | 光照度阈值2 | 100 | 162 | 2字节 | uint16,小端模式,单位 lux |
| 光照度 阈值2 | |||||
| 12 | 光照度阈值2 | 100 | 164 | 2字节 | uint16,小端模式,单位 lux |
| 光照度 阈值3 | |||||
| 13 | PIR控制掩码 | 0x07 | 166 | 1字节 | PIR 有人开灯的控制掩码,bit0-bit3有效。当为1时,PIR检测到人,则开灯 |
联系我们
电话:+86 15810684257