Skip to content

1. 服务器配置 ​

1.1. BACnet ​

注意:BACnet 服务功能仅支持在独立部署的 TKE设备/网关(TKG)上使用,云版本(Cloud Service)暂不提供此功能。

ThinkLink(TKL)支持将物模型中的设备数据以标准 BACnet 协议对外暴露,便于与楼宇管理系统(BMS)进行集成。要实现完整的 BACnet 服务功能,需完成以下两个步骤:

  1. 在物模型中对相关字段进行 BACnet 属性配置;
  2. 在目标设备上启用 BACnet 功能并正确配置服务器参数。

1.1.1. BACnet 字段配置 ​

启用 BACnet 服务前,必须在物模型 中对需要对外映射的字段配置相应的 BACnet 属性。具体配置方法请参考文档第 7.1

1.1.2. 服务器配置 ​

为使 TKL 成功作为 BACnet 服务器运行,需在系统中配置以下核心参数。服务参数位于系统管理 → 服务器配置 → BACnet;点表另在运维管理 → BACnet维护。

请确保已在设备管理 页面为对应设备开启 BACnet 服务,之后在此处完成详细配置,并将生成的 BACnet 点表导出提供给 BMS 平台使用。

2.00.077 起,平台内置 BACnet 服务。系统管理员在系统平台 → 系统配置 → 组织服务使用权限允许 BACnet 后,组织在此填写参数,先“提交”,再点“重启”。关闭全局权限会停止服务并禁止配置与点表操作;重新允许不会自动启动。保存点表会自动同步正在运行的服务,无需“应用点表”。同一进程只运行一个组织的 BACnet 服务,在另一组织启动会停止前一实例。 详见 BACnet 操作说明和2.00.079 升级说明。

以下数值供现场配置参考,不表示当前新增表单会自动填入;应读取已有配置并与 BMS 集成方确认。

配置项说明参考值是否可修改
IP 地址TKL 所在设备的本地 IP 地址,用于 BACnet 通信 若设为 0.0.0.0,表示绑定所有网络接口0.0.0.0是
PortBACnet 服务监听端口47808(十进制) (即 UDP 端口 0xBAC0)是,可根据 BMS 要求调整
Device IDBACnet 设备唯一标识符,必须在系统内唯一 需与 BMS 平台协商一致1是
Vendor Identifier厂商标识号,代表设备制造商按实际厂商标识填写是
Device Name设备名称,用于在 BMS 中显示TKE是,建议按现场命名规范修改
Max APDU Length Accepted最大可接受 APDU 长度,影响通信效率和兼容性1024是,根据客户端能力调整
Segmentation Supported当前版本不通过此项启用分段传输;请与 BMS 集成方确认通信兼容性。以实际表单为准兼容性需现场核对

完成上述配置后,请进入 点表管理模块查看或导出当前设备的 BACnet 对象列表(即点表),并交付给 BMS 集成方用于接入和监控。提示:

  • 修改配置后需重启 BACnet 服务或相关设备以生效。
  • 建议与 BMS 集成方确认上述参数的具体要求,避免因协议不匹配导致连接失败。
  • BACnet over IP 协议基于 UDP 构建,确保网络层面允许相应端口通行。

1.2. 第三方 MQTT ​

TKL 支持将解析后的设备遥测数据推送至第三方 MQTT Broker,使外部平台无需直接订阅 ThinkLink Broker 即可接收结构化设备数据。

1.2.1. 服务器配置 ​

进入系统管理 → 服务器配置,找到 ThirdParty 配置区域,填写以下参数:

参数说明示例
ProtocolMQTT 连接协议mqtt 或 mqtts
Host第三方 Broker 地址192.168.1.100
PortBroker 端口1883
Telemetry Topic发布设备遥测数据的主题/your/custom/topic
UsernameBroker 认证用户名user
PasswordBroker 认证密码pass

填写完成后,点击提交,再点击重启以激活连接。

1.2.2. 设备层面启用 ​

完成服务器配置后,需在目标设备上单独启用 ThirdParty 功能:

  1. 进入设备管理,打开目标设备;
  2. 在设备详情页中,启用 ThirdParty 开关;
  3. 保存配置。

启用后,每当设备有新数据上行时,ThinkLink 会将解析后的遥测数据推送至配置的主题。

1.3. Modbus TCP 服务器 ​

注意:Modbus TCP Server 功能仅支持独立部署的 TKE 或 TKG 设备,云版本(Cloud Service)暂不提供此功能。

TKL 可作为 Modbus TCP 从站服务器(Slave),将设备遥测数据以 Modbus 寄存器形式对外暴露,供 SCADA 系统、PLC 及其他 Modbus TCP 主站通过标准 Modbus 协议读取设备数据。

1.3.1. 服务器配置 ​

进入系统管理 → 服务器配置,找到 Modbus TCP Server 配置区域,配置以下参数:

参数说明默认值备注
PortModbus TCP 监听端口502确保该端口在网络层面对外开放
Coils线圈寄存器映射(可读写位寄存器)—映射设备布尔字段
Discrete Inputs离散量输入映射(只读位寄存器)—映射设备布尔字段
Input Registers输入寄存器映射(只读 16 位字寄存器)—映射设备数值字段
Holding Registers保持寄存器映射(可读写 16 位字寄存器)—映射设备数值字段

配置完成后,点击提交,再点击重启以启动 Modbus TCP 服务。

全局 Modbus 使用权限同样受系统配置控制:关闭会停服并阻止启动和恢复,配置与寄存器点表保留;重新允许后需手动点击“重启”。

1.3.2. 设备层面启用 ​

Modbus TCP 寄存器的值来源于设备物模型字段。要将设备数据对外暴露:

  1. 在物模型中配置 Modbus TCP 字段映射;
  2. 在设备管理中为目标设备启用 Modbus TCP 功能。

启用后,Modbus TCP 主站即可通过配置的端口和寄存器地址读取 TKL 设备数据。

1.4. 组织参数(Org Params) ​

组织参数是当前组织(租户)级别的"环境变量",集中保管在 系统管理 → 服务器配置 → 组织参数 中。一次维护,全租户共享,并由平台在执行下列脚本时作为入参 org_params 自动注入:

  • RPC 模型:rpc_script({ device, params, alarms, logger, org_params })
  • 物模型解析脚本:payload_parser(device, msg, thingModelId, noticeAttrs, org_params)
  • 触发模型:trigger_script(device, thingModelId, org_params)
  • MQTT 转发器脚本:forwardScript({ topic, msg, org_params })

💡 设计目的:把"对接外部系统所需的凭证 / 地址 / 业务标识"从脚本里剥离出来——脚本只负责逻辑,凭证写在组织参数里。换 webhook、轮换密钥、切换环境时只改一处,无需逐个修改 RPC/触发/转发器脚本。

1.4.1. 与 server_attrs / shared_attrs / params 的区别 ​

来源作用域写在哪里谁能看到
params单次 RPC 调用调用方在调用时传入调用方
device.shared_attrs单个设备设备 ↔ 平台双向同步该设备的运维
device.server_attrs单个设备平台侧设备详情页该设备的运维
org_params整个组织服务器配置 → 组织参数组织管理员(普通运维不可见)

典型用途:

  • 第三方机器人 Webhook(企业微信 / 钉钉 / Slack / Telegram)的 URL 或 key
  • 第三方 HTTP API 的 base URL、access key
  • 全组织共用的业务标识(如 BMS 接入方编号、运营商账号)
  • 不同环境(生产/测试)切换的常量

1.4.2. 配置方式 ​

进入 系统管理 → 服务器配置 → 组织参数,按"键值对"维护:

字段说明
Key在脚本中通过 org_params.<key> 读取,建议小写下划线命名(如 wecom_webhook_url)
Value字符串;若需结构化数据,请填 JSON 字符串并在脚本中 JSON.parse
Remark给平台操作者看的"这个参数怎么用"的说明,例如"企业微信告警机器人 webhook,每季度轮换"

配置完成后点击提交,新值即刻对该组织所有脚本生效(无需重启服务)。

1.4.3. 在脚本中读取 ​

javascript
// RPC:从 org_params 拿企业微信 webhook
function rpc_script({ device, params, alarms, logger, org_params }) {
    let webhook = org_params?.wecom_webhook_url;
    if (!webhook) {
        logger.error("wecom_webhook_url not configured in org_params");
        return null;
    }
    return [{
        sleepTimeMs: 0,
        type: "axios",
        dnMsg: {
            method: "POST",
            url: webhook,
            headers: { "Content-Type": "application/json" },
            data: { msgtype: "text", text: { content: params.content } },
            timeout: 5000
        }
    }];
}

1.4.4. 安全提示 ​

  • 组织参数页面仅组织管理员可访问——普通运维看不到 webhook key/secret,可放心存放敏感凭证
  • 一旦怀疑泄漏,在第三方平台重置密钥,回到本页面更新 value即可;所有引用该 key 的脚本自动使用新值
  • 建议每季度轮换一次 webhook/access key,并在 Remark 里记录上次轮换时间

⚠️ 不要把 org_params 的值写回到 device.server_attrs 或日志正文里——那等于把"安全藏起来的密钥"又暴露到调用方/日志读者面前。