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–83 klux
分级:L0 < 100 lux;L1 < 200 lux;L2 < 500 lux;L3 > 500 lux
CO2采集周期 10秒,精度±40.0 ppm ±5.0 %m.v. 范围 400 - 5000ppm
TVOC采集周期 10 秒,精度 ±15 VOC Index points 或 ±15% m.v.,范围 1–500 VOC Index points
PM2.5零火版:采集周期 180 秒,精度 ±10%,范围 0–1000 μg/m³
单火版:采集周期 3 小时,精度 ±10%,范围 0–1000 μg/m³
PM1.0默认不显示,通过 LoRaWAN 上传;精度 ±10%,范围 0–1000 μg/m³
零火版采集周期 180 秒;单火版采集周期 3 小时
PM10默认不显示,通过 LoRaWAN 上传;精度 ±25%,范围 0–1000 μg/m³
零火版采集周期 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

型号组成部分解析

  • KS618:产品系列与射频频段。
    • KS61 表示第 2 代室内空气质量监测器。
    • 8 表示 800 MHz 及以上射频版本,适用于 EU868、AS923、AU915 和 US902。
    • 其他频段选项:4 表示 400 MHz 射频版本,适用于 EU433 和 CN470。
  • -A2:传感器组合与供电配置。
    • A 表示七合一版本,支持温度、湿度、光照度、PIR、TVOC、CO₂ 和 PM2.5,并要求零火线供电。
    • 其他传感器选项:B 表示温度、湿度、光照度、PIR、TVOC 和 CO₂ 六种传感器;C 表示温度、湿度、光照度和 PIR 四种传感器。BC 均支持单火线或零火线供电。
    • 2 表示零火线供电。
    • 其他供电选项:1 表示单火线供电。
  • -AS923:LoRaWAN 区域标准。
    • AS923 表示设备支持 LoRaWAN AS923 区域参数。
    • 其他区域代码:CN470EU433EU868AU915US902;其中 US902 对应 LoRaWAN US915(902–928 MHz)区域参数。
  • -N:默认版本。
    • N 表示默认版本。
    • 其他值用于用户定制版或特殊版本。

整体型号含义

型号 KS618-A2-AS923-N 完整描述为:

这是一款第 2 代室内空气质量监测器,采用 800 MHz 及以上射频版本,支持温度、湿度、光照度、PIR、TVOC、CO₂ 和 PM2.5 七种传感器,采用零火线供电,符合 LoRaWAN AS923 区域标准,末位为默认版本 N

使用说明

网络拓扑

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%RH
PIR事件触发检测状态变化时触发
光照度每 10 秒采集一次周期性上报
CO₂每 10 秒采集一次变化值超过 COV 阈值;默认 100 ppm
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 字节固定为 0x82
2控制字0x2411 字节固定为 0x24
3标识符0x0721 字节固定为 0x07
4状态标识0x0031 字节0:正常;大于 0:故障
5温度0x00ED42 字节int16,小端模式,单位:0.1 ℃
6湿度0x024962 字节int16,小端模式,单位:0.1%RH
7CO₂0x020482 字节int16,小端模式,单位:ppm
8光照度0x0002102 字节int16,小端模式,单位:lux
9TVOC0x00000004124 字节int32,小端模式,单位:μg/m³
10保留0x01161 字节保留,不参与业务解析
11PIR0x01171 字节uint80:无人;大于 0:有人
12开关状态0x07181 字节bit0–bit2 的对应关系和取值见下表
13PM2.50x42265027204 字节小端模式,单位:μg/m³

开关状态位解析

对应开关01
bit0开关 1(最左侧)开断闭合
bit1开关 2(中间)开断闭合
bit2开关 3(最右侧)开断闭合
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 的对应关系和取值见下表
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
11光照度阈值 21001622字节uint16,小端模式,单位:lux
12光照度阈值 31001642字节uint16,小端模式,单位:lux
13PIR控制掩码0x071661字节PIR 有人开灯的控制掩码,bit0-bit3有效。当为1时,PIR检测到人,则开灯

功能使能位解析

功能01
bit0温度禁用启用
bit1湿度禁用启用
bit2TVOC禁用启用
bit3光照度禁用启用
bit4CO₂禁用启用
bit5PM2.5禁用启用
bit6光照控制禁用启用

联系我们

网址:www.manthink.cn

邮箱:info@manthink.cn

电话:+86 15810684257

说明书下载

以上为固定下载地址,说明书更新后链接保持不变。