Skip to content

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版本号0x8201字节KS61 固定为0x82
2控制字0x2411字节KS61固定为0x24
3标识符0x0721字节KS61 固定为0x07
4状态标识0x0031字节>0 为故障,=0 正常
5温度0x00ED42字节Int16,小端模式,单位0.1℃
6湿度0x024962字节Int16,小端模式,单位0.1RH%
7CO20x020482字节Int16,小端模式 ,单位 ppm
8光照度0x0002102字节Int16,小端模式,单位 lux
9TVOC0x00000004124字节Int32,小端模式,单位 ug/m³
10保留0x01161字节保留
11PIR0x01171字节uint8,>0 有人,=0 无人
12开关状态0x07181字节uint8,bit0-bit3 分别对应3个开关状态(从左到右 开关1-3)
=0 为开断,=1为闭合
13PM2.50x42265027204字节小端模式,单位 ug/m³
javascript
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复位只写91字节写0x01
2上传周期900402字节上传周期,单位秒
3功能使能位1521字节bit0-bit6 分别对应不同功能使能位,=0 不使能,=1使能
bit0 : 温度
bit1 : 湿度
bit2 :TVOC
bit3 :光照度
bit4 :CO2
bit5 :PM2.5
bit6 :光照控制使能位
4温度COV101531字节倍率 0.1,单位℃
5湿度COV201541字节倍率 0.1,单位 RH%
6TVOC COV501551字节
7CO2 COV1001561字节单位 ppm
8pm2.5 COV101571字节单位 ug/m³
9PIR 延时18001582字节uint16,小端模式,单位秒
PIR无人状态二次确认延时,
10光照度阈值11001602字节uint16,小端模式,单位 lux
光照度 阈值1
11光照度阈值21001622字节uint16,小端模式,单位 lux
光照度 阈值2
12光照度阈值21001642字节uint16,小端模式,单位 lux
光照度 阈值3
13PIR控制掩码0x071661字节PIR 有人开灯的控制掩码,bit0-bit3有效。当为1时,PIR检测到人,则开灯

联系我们

网址:www.manthink.cn

邮箱:info@manthink.cn

电话:+86 15810684257