Skip to content

1. 设备管理

ThinkLink 支持多种设备类型的统一接入与管理。设备数据来源不限于 LoRaWAN——任何符合 ThinkLink 协议的 MQTT 数据均可对接,包括通过第三方网关或 DTU 桥接的 Modbus、RS-485 设备。

设备类型概览

设备类型device_type说明
普通设备NORMAL直接通过 LoRaWAN 或 MQTT 上报数据的终端。数据来源(data_from)可以是 LoRaWANOTHER(符合 ThinkLink 协议的 MQTT 设备)
子设备SUB_DEVICE由 EdgeBus(EB)等父设备抄读后自动生成的虚拟终端。每个被抄表设备对应一个子设备,父设备持有其 EUI 映射
资产VIRTUAL将多台设备的数据聚合为一个逻辑实体,如"一层楼的总用电量"或"一个房间的平均温湿度"

数据来源(data_from

  • LoRaWAN:经 ThinkLink NS 接入的 LoRaWAN 标准设备,需先创建 LoRaWAN 档案
  • OTHER:通过 MQTT 直接推送数据的第三方设备,只要报文格式符合 ThinkLink AS 协议即可,无需 LoRaWAN 档案

1.1. LoRaWAN 设备档案

LoRaWAN 设备档案(Profile)是 NS 层的身份配置,用于设备入网鉴权(AppKey/AppSKey/NwkSKey)和通信参数管理。档案和设备是两个独立对象:档案控制 NS 层是否允许该设备入网,设备控制数据处理层(物模型/RPC/数据存储)。同一个 devEUI 在档案中存在才能完成 Join;档案 enable=false 则 NS 不响应该设备。

1.1.1. ABP 与 OTAA 的区别

LoRaWAN 支持两种入网方式,决定了档案中需要填写哪些密钥字段:

对比项ABP(Activation By Personalization)OTAA(Over-The-Air Activation)
入网方式设备出厂时预置固定的 DevAddr 和会话密钥,无需 Join 流程设备上电时通过 Join Request / Join Accept 动态协商会话密钥
所需密钥devAddr(设备地址)+ apps_key(应用会话密钥)+ nwks_key(网络会话密钥)app_key(应用主密钥)即可,DevAddr 由 NS 动态分配
配置稳定性DevAddr 和密钥固定,重启后无需重新入网每次 Join 后密钥刷新,安全性更高但需要 NS 在线完成握手
适用场景固定布点、网络环境简单、要求快速上线或批量预配置安全要求较高、需要长期运维、设备需要在不同网络间迁移

推荐使用 ABP:对于大多数物联网项目,ABP 配置更简单,设备重启或断网后无需重新入网,批量部署时只需提前录入 DevAddr 和两个会话密钥即可。若使用 OTAA,设备每次重新入网都需要与 NS 完成 Join 握手,在网络不稳定时可能导致入网失败。

ABP 模式必填字段:

字段说明
devEui设备唯一标识,全局不可重复
devAddr设备地址(4 字节 hex,如 32015019),在同一网络内不可冲突
apps_key应用会话密钥(16 字节 hex),用于加解密应用层数据
nwks_key网络会话密钥(16 字节 hex),用于 MIC 校验和 MAC 命令加密

OTAA 模式必填字段:

字段说明
devEui设备唯一标识,全局不可重复
app_key应用主密钥(16 字节 hex),Join 过程中用于派生会话密钥

1.1.2. 新增单个 LoRaWAN 设备档案

所有字段说明如下:

字段名是否必填说明
devEui必填设备唯一标识符(EUI),全局唯一,不可重复
join_mode必填入网模式:ABP(预置密钥,推荐)或 OTAA(动态入网)
devAddrABP 模式下必填设备地址,确保在网络中不冲突
apps_keyABP 模式下必填应用会话密钥(16 字节 hex)
nwks_keyABP 模式下必填网络会话密钥(16 字节 hex)
app_keyOTAA 模式下必填应用主密钥(16 字节 hex)
enable必填(默认 TRUENS 是否响应该设备的入网请求和上行数据。设为 FALSE 可静默禁用设备,不影响设备侧数据记录
down_enable必填(默认 TRUE是否允许 NS 向设备下发数据
lw_ver必填(建议 1.0.2LoRaWAN 协议版本,兼容大多数 1.0.3 和部分 1.0.4 地区协议
standard必填频段标准:CN470 / EU433 / EU868 / AS923 / AU915 / US902
class_mode必填(默认 ClassA正常工作模式:ClassA(低功耗,上行后开窗) 或 ClassC(持续接收,需常供电)
join_class_mode必填(默认 ClassA重入网后的工作模式,应与设备实际行为一致
rx1dr_offset必填(按频段自动填充)RX1 窗口 DR 偏移量
rx2dr必填(按频段自动填充)RX2 窗口传输速率
rx_delay必填(默认 1)上行后第一个下行窗口的延迟(秒)
rx_delay_join必填(默认 5)Join 流程中的下行响应延迟(秒)
rx2_freq必填(按频段自动填充)RX2 接收窗固定频率

提示:选定正确的 standardlw_ver 后,rx1dr_offsetrx2drrx_delayrx_delay_joinrx2_freq 均自动填充默认值,无需手动调整。

档案与设备的关系:设备档案是 NS 层的鉴权配置,设备是数据处理层的管理实体。两者通过 devEUI 关联。添加设备时在"数据来源"中选择 LoRaWAN,并绑定对应档案即可。同一设备的档案在同一时间只应在一个平台(云平台/TKG/TKE)中处于启用状态,否则会导致入网冲突。

1.1.3. 批量导入 LoRaWAN 设备档案(Excel)

导入:

  1. 下载模板文件(参考示例:mt_sdev_pf_macs--1756347416255.xlsx
  2. 按字段要求填写设备信息(ABP 填 devAddr/apps_key/nwks_key,OTAA 填 app_key
  3. 点击"导入"上传 Excel 文件,系统自动批量创建档案

导出:

在 LoRaWAN 档案列表页点击"导出",可将当前所有档案导出为 Excel 文件,用于备份或在另一部署实例批量导入。

1.1.4. 从远程平台同步档案(Remote Pull)

分布式部署场景(TKG 网关本地 NS / TKE 边缘服务器)中,设备 LoRaWAN 档案通常在中央平台录入,本地实例可以通过远程数据拉取功能将档案同步到本地 NS:

  1. 进入高级功能 → 远程数据拉取(详见 远程数据拉取
  2. 配置上游地址和 secret_key
  3. 在拉取列表中选择 LoRaWAN 档案,点击拉取
  4. 系统将上游的档案数据同步写入本地,已存在相同 dev_eui 的档案会被覆盖更新

适用场景:工程师在云平台录入完整设备档案后,现场网关一键同步,无需在本地逐一重新录入。

1.1.5. 通过模板新增 LoRaWAN 设备

当需要批量新增同型号的 LoRaWAN 设备时,可以先创建设备配置模板,再通过模板快速建立设备:

  1. 设备管理页面点击"新增"
  2. 填写设备 EUI(必填)和名称(可选)
  3. 选择已创建好的配置模板(包含物模型、RPC、属性等默认配置)
  4. 数据来源选择 LoRaWAN
  5. 提交后系统自动检测该 EUI 是否已有 LoRaWAN 档案:
    • 已有档案:直接创建设备并应用模板配置
    • 无档案:弹出提示,可选择"立即添加"跳转到档案配置页,或"稍后添加"先保存设备

提示:配置模板预置了物模型、RPC、服务端属性、共享属性、标签等内容,同一型号的设备只需在新增时选择同一模板,无需逐一手动配置。

1.1.6. 通过模板重置设备

将已有设备的全部配置还原为指定模板的默认值:

  1. 设备管理列表勾选一台或多台设备
  2. 点击批量操作中的"通过模板重置"
  3. 在弹窗中选择目标配置模板
  4. 确认后,所选设备的以下配置将被覆盖为模板的内容:
重置内容说明
物模型(thing_model替换为模板绑定的物模型列表
RPC(rpc替换为模板绑定的 RPC 列表
触发器(trigger替换为模板绑定的触发器列表
共享属性(shared_attrs重置为模板中各字段的默认值
服务端属性(server_attrs重置为模板中各字段的默认值
标签(tags替换为模板的标签
心跳周期(heart_period替换为模板值
实时存储、ThingsBoard、BACnet 等开关替换为模板配置

注意:设备的 EUI名称数据来源data_from)和 LoRaWAN 档案不会被重置,保持原有值不变。此操作不可撤销,请确认选择了正确的模板。

档案与设备的关系:下行能力说明

⚠️ 仅有档案,无法下行。

LoRaWAN 档案只负责 NS 层的入网鉴权,控制设备能否上报数据。RPC 下行是数据处理层的能力,必须先在设备管理中创建对应设备,并为该设备挂载 RPC 模型,才能向设备下发指令。

快速下行方法:如果只需要发送原始下行数据,无需自定义 RPC,可以在新增设备时选择系统内置的 DEFAULT 模板,该模板已预挂载系统内置 RPC mt_act_dn_data。挂载后直接在设备详情的 RPC Tab 中执行该 RPC,填写 port(FPort)和 data(hex 字符串)即可完成一次 LoRaWAN 下行发送。


1.2. 新增设备

1.2.1. 新增单个设备

字段说明
EUI设备唯一编号,在 ThinkLink 系统内必须全局唯一
名称用户自定义的设备名称
设备类型设备(普通/子设备)或 资产(虚拟聚合设备)
数据来源LoRaWAN:经 ThinkLink NS 接入;OTHER:通过 MQTT 直接推送,符合 ThinkLink 协议即可
配置模板选择预设模板可快速绑定物模型、RPC 等配置,批量上线同型号设备时推荐使用

非 LoRaWAN 设备接入:选择数据来源为 OTHER 的设备,只需保证上报的 MQTT 报文格式符合 ThinkLink AS 协议,无需绑定 LoRaWAN 档案。适用于通过 DTU、Modbus 网关或自定义 MQTT 客户端接入的设备。

1.2.2. 批量增加设备

  1. 勾选已有设备,点击"导出"下载模板
  2. 填写或修改其他设备信息,必须填写 EUI 字段
  3. 删除不需要修改的列
  4. 执行批量导入:
    • 系统中已存在相同 EUI → 更新该设备参数
    • 不存在该 EUI → 作为新设备添加

⚠️ 确保每个设备的 EUI 唯一且准确。

1.2.3. 一次性 RPC(批量下发指令)

一次性 RPC 用于临时批量向一组设备下发同一条指令,执行后即销毁,不保留定时任务记录。适合批量修改设备参数(采样间隔、阈值)或触发某次性操作(重启、清零、校准)。

操作步骤:

  1. 设备管理列表勾选一台或多台目标设备
  2. 点击批量操作中的"一次性 RPC 执行"
  3. 在弹窗中填写:
    • 名称:本次执行任务的描述性名称(便于在执行记录中识别)
    • 设备间发送间隔(ms):相邻两台设备之间的下发间隔,用于避免瞬时并发过高,默认可留空
    • RPC 及参数:选择要执行的 RPC 模型,并填写对应参数
  4. 点击"提交",系统立即开始逐台下发,弹窗内实时展示进度条(当前/总数)

查看执行中的任务:

点击批量操作中的"查看执行任务"可打开任务监控面板,其中列出所有正在运行的一次性 RPC 任务,显示任务名称、开始时间和实时进度。若需提前终止,点击对应任务的"中断"按钮。

与多设备 RPC 的区别:多设备 RPC(在配置管理菜单下)支持保存任务、定时执行和重复触发;一次性 RPC 仅做一次临时执行,不保存任何配置。

1.2.4. 批量修改设备配置

批量修改功能可以对已选中的多台设备统一变更指定配置,仅修改勾选的字段,未勾选的字段保持原有值不变。

操作步骤:

  1. 设备管理列表勾选需要修改的设备
  2. 点击批量操作中的"批量修改参数"
  3. 在分步向导中逐步配置,每步都可以单独设置要修改的内容:
步骤可修改内容
基本信息名称、设备类型、心跳周期、实时存储、ThingsBoard/BACnet/HomeAssistant 开关。每项旁边有勾选框,只有打勾的项才会被修改
修改物模型向所选设备新增物模型(穿梭框左→右),或从所选设备删除物模型(穿梭框左→右)
修改 RPC向所选设备新增或删除 RPC 绑定
修改触发器向所选设备新增或删除触发器绑定
修改服务端属性新增键值对(支持设置数据类型和默认值),或删除现有的属性键
修改共享属性新增键值对,或删除现有的属性键
删除遥测数据按物模型粒度删除该物模型对应的遥测数据记录
修改标签新增标签(输入后回车)或删除已有标签
提交确认展示将被修改的设备列表,确认无误后提交
  1. 完成所有步骤后点击"提交",系统将变更同步到所选设备

注意:步骤之间可以点击顶部的步骤标题自由跳转。物模型/RPC/触发器的新增和删除是增量操作(不影响设备已有的其他绑定),不会清空整个列表。


1.3. 设备详情

1.3.1. 物模型(Thing Model)

物模型 Tab 展示该设备已绑定的所有物模型,以及每个物模型来自哪个作用域(PUBLIC 公共模型或当前租户私有模型)。

在此 Tab 可以:

  • 新增:点击「新增」,从物模型列表中选择并挂载到该设备。一个设备可挂载多个物模型,每个物模型对应独立的 payload 解析脚本,解析结果写入各自名下的遥测数据分区
  • 删除:移除不再需要的物模型绑定(不删除物模型本身,只解除关联)

物模型的作用:

  • 负责将设备上报的原始 payload 解析为结构化数据(温度、湿度、电量、状态位等)
  • 每个物模型有独立的 JavaScript 解析脚本,脚本返回 telemetry_dataserver_attrsshared_attrs 等字段
  • 资产设备(VIRTUAL)的物模型脚本接收来自关联源设备的数据通知,用于聚合计算

物模型的定义和脚本编写详见 → 物模型


1.3.2. RPC

RPC Tab 展示该设备已绑定的所有 RPC 模型,可在此直接下发指令。

在此 Tab 可以:

  • 新增:绑定已定义的 RPC 模型到该设备,支持绑定多个
  • 删除:解除 RPC 绑定
  • 执行:点击列表中每条 RPC 右侧的「执行」按钮,即可向该设备下发指令:
    • 无参数 RPC:直接发送,无需确认
    • 有参数 RPC:弹出参数输入框,填写后点击确认发送;参数默认值可从 shared_attrs/server_attrs 中读取

RPC 的三个执行入口:

入口位置适用场景
设备配置 → RPC Tab运维管理 → 设备管理 → 详情 → RPC针对单台设备手动下发,调试或日常操作
应用数据 → 操作列数据 → 应用数据 → 实时数据列表右侧在查看实时数据时快速对指定设备下发 RPC
仪表盘组件仪表盘上配置了 RPC 按钮的卡片运维人员通过仪表盘执行常规操作(如开关阀门、复位设备)

绑定到设备执行(定时调度):

除手动「执行」外,RPC 列表新增了**「绑定的设备执行」** 列,可把该 RPC 加入一个设备执行任务,从而按定时任务周期自动下发,无需人工触发:

  • 已绑定的设备执行以标签形式展示,点击标签可打开对应的设备执行配置抽屉
  • 点击虚线标签 「+ 添加到设备执行」,从下拉菜单中选择:
    • 新建设备执行:打开设备执行配置抽屉,自动带入当前 RPC 与当前设备的 EUI,可继续选择定时任务、执行类型(无限次/固定次数)、设备间发送间隔等并保存
    • 添加到已有:把当前设备追加到一个已存在的设备执行任务中
  • 已绑定到当前设备的 RPC 才能添加到设备执行(未绑定时会提示先在 RPC 列表中绑定)

设备执行与定时任务的字段、cron 表达式、执行/停止与日志详见 → 设备执行 · 定时任务

RPC 模型的定义(指令格式、参数模板)详见 → RPC 模型


1.3.3. 服务端属性(Server Attributes)

服务端属性是由平台侧维护的键值对,与设备上报的遥测数据完全独立,设备侧不感知这些值。

在此 Tab 可以:

  • 新增属性:填写 key 名称、初始值,以及元数据(数据类型、单位、别名、备注、关联 RPC)
  • 编辑属性值:直接修改已有属性的值,修改后立即生效
  • 删除属性:移除不需要的键

服务端属性的用途:

用途说明
逻辑判断参数物模型脚本通过 device.server_attrs 读取,参与计算或告警判断(如阈值上限、系数)
RPC 执行参数RPC 模板中可引用 server_attrs 字段作为默认参数值
跨设备状态缓存资产设备用 server_attrs 缓存每台源设备的最新读数,用于聚合计算
运维标记记录设备安装位置、负责人、维保日期等业务字段,不影响数据处理逻辑

属性元数据字段:

字段说明
type数据类型(string / number / boolean),影响编辑框的展示形式
unit单位(如 kWh),仅展示用
alias别名,在仪表板/告警中以更友好的名字显示
remark备注,写给操作人员看的使用说明
rpcs关联的 RPC ID 列表,点击属性旁的快捷按钮可直接触发对应 RPC
order排列顺序,数字越小越靠前

1.3.4. 共享属性(Shared Attributes)

共享属性是服务端与设备侧双向同步的键值对,是平台向设备下传配置参数的核心机制。

在此 Tab 可以:

  • 新增属性:同服务端属性,支持同样的元数据字段
  • 编辑属性值:修改后平台通过 LoRaWAN 下行或 MQTT 将新值推送给设备
  • 删除属性:移除不需要的键

共享属性与服务端属性的区别:

对比项共享属性(Shared Attrs)服务端属性(Server Attrs)
同步方向服务端 ↔ 设备侧双向同步仅平台侧维护,设备不感知
典型用途采样间隔、工作模式、OTA 升级标记阈值、系数、运维标记
设备读取设备可主动请求或接收推送设备无法直接读取,只能通过脚本传递
修改触发下行是,平台修改后会推送给设备

1.3.5. 遥测数据(Telemetry Data)

遥测数据 Tab 以物模型为分组,实时展示每个物模型最近一次解析后产生的所有字段值及其时间戳。

在此 Tab 可以:

  • 查看实时值:打开设备详情后,遥测数据会通过 MQTT 实时推送更新,无需手动刷新
  • 删除遥测记录:可按物模型整组删除该物模型产生的遥测数据(用于重置数据或清理测试数据)

历史遥测数据的查询和图表展示在 → 历史数据

1.3.6. 设备关联

建立设备间的数据通知拓扑:源设备(数据上报方)→ 目标设备(接收通知并聚合处理方)。

变更类型触发时机
遥测数据源设备上报新的 telemetry
共享属性平台或设备修改 shared attributes
服务端属性业务系统修改 server attributes

目标设备的物模型脚本在收到通知时自动执行,msg 参数中包含源设备的 EUI 和最新数据。

术语对应:界面显示"绑定主设备 / 从设备",对应内部键 bind-master-device / bind-slave-device。"源设备"= 旧称"从设备 / slave","目标设备"= 旧称"主设备 / master"。


1.4. 子设备

子设备(SUB_DEVICE)是 EdgeBus 等父设备在抄表时自动生成的虚拟终端。父设备(DTU/EB 编译器)通过 RS-485、Modbus 等协议轮询多台从机,物模型脚本解析出每台从机的数据时,通过 result.sub_device 字段指定子设备标识,系统自动为每个标识创建并维护一个独立的子设备。

运作机制

  1. 父设备(NORMAL 类型,data_from=LoRaWANOTHER)上报数据
  2. 物模型脚本解析 payload,对每台被采集设备返回一个包含 sub_device 字段的结果
  3. 系统检查父设备的 server_attrs 中是否已有该 sub_device 标识的 EUI 映射
  4. 无映射时自动生成新的 EUI,创建子设备并建立父子关联
  5. 子设备独立持有遥测数据、属性、物模型,可单独配置告警和 RPC
javascript
// 物模型脚本示例:父设备抄读 3 台 Modbus 从机
// payload 中按设备地址区分数据
let results = [];

// 1 号从机:温湿度传感器(地址 0x01)
results.push({
  sub_device: "addr_01",          // 子设备标识(同一父设备内唯一)
  telemetry_data: {
    temperature: payload.readInt16BE(2) / 10,
    humidity: payload.readInt16BE(4) / 10,
  }
});

// 2 号从机:电表(地址 0x02)
results.push({
  sub_device: "addr_02",
  telemetry_data: {
    energy_kwh: payload.readUInt32BE(6) / 100,
    power_w: payload.readUInt16BE(10),
  }
});

// 3 号从机:CO₂ 传感器(地址 0x03)
results.push({
  sub_device: "addr_03",
  telemetry_data: {
    co2_ppm: payload.readUInt16BE(12),
  }
});

return results;

最佳实践

  • 子设备 EUI 由系统自动生成,不需要手动分配
  • 父设备定义物模型时将 apply_to 设为 SUB_DEVICE,让系统路由到正确的子设备
  • 子设备可单独绑定物模型、RPC、触发器,实现精细化告警和控制
  • EdgeBus 场景下,每个 EB APP 抄读的每台从机都会生成一个子设备,子设备数量 = 父设备 × 从机数量

1.5. 资产

资产(VIRTUAL)是将多台设备的遥测数据汇聚为一个高层次逻辑实体的虚拟设备,适用于:

  • 统计聚合:一层楼的总用电量、一个区域的平均温湿度
  • 多维监控:一台综合仪表同时暴露多个监控指标
  • 跨设备联动:多个传感器共同决定某个输出状态

资产本身不需要物理设备上报数据,它通过设备关联订阅一组源设备的变更,当任意源设备数据更新时,资产的物模型脚本自动触发计算。

最佳实践示例

示例一:楼层总用电量统计

场景:某楼层安装了 8 台单相电表(通过 EB 子设备上报),资产设备代表该楼层的聚合用电视图。

javascript
// 资产物模型脚本(数据来源:8 台电表的 telemetry)
if (!noticeAttrs.telemetry_data) {
  return { telemetry_data: null, server_attrs: null, shared_attrs: null };
}

// server_attrs 中存储每台电表的最新读数(以 msg.eui 为 key)
let perMeterAttrs = device.server_attrs || {};

// 更新当前上报设备的读数
perMeterAttrs[msg.eui] = {
  energy_kwh: msg.telemetry_data[msg.thing_model[0]]?.energy_kwh ?? 0
};

// 汇总所有已知电表的用电量
let totalEnergy = Object.values(perMeterAttrs)
  .reduce((sum, m) => sum + (m.energy_kwh || 0), 0);

return {
  telemetry_data: { total_energy_kwh: Math.round(totalEnergy * 100) / 100 },
  server_attrs: perMeterAttrs,
  shared_attrs: null,
};

示例二:房间平均温湿度

场景:一个会议室安装了 4 台温湿度传感器,资产代表该房间的环境均值。

javascript
if (!noticeAttrs.telemetry_data) {
  return { telemetry_data: null, server_attrs: null, shared_attrs: null };
}

// 以 server_attrs 缓存每台传感器的最新读数
let sensorCache = device.server_attrs || {};
sensorCache[msg.eui] = {
  t: msg.telemetry_data[msg.thing_model[0]]?.t,
  h: msg.telemetry_data[msg.thing_model[0]]?.h,
};

// 计算有效读数的平均值(过滤 null)
let temps = Object.values(sensorCache).map(s => s.t).filter(v => v != null);
let hums  = Object.values(sensorCache).map(s => s.h).filter(v => v != null);

let avgT = temps.length ? temps.reduce((a, b) => a + b, 0) / temps.length : null;
let avgH = hums.length  ? hums.reduce((a, b) => a + b, 0) / hums.length  : null;

return {
  telemetry_data: {
    avg_temperature: avgT != null ? Math.round(avgT * 10) / 10 : null,
    avg_humidity:    avgH != null ? Math.round(avgH * 10) / 10 : null,
    sensor_count:    temps.length,
  },
  server_attrs: sensorCache,
  shared_attrs: null,
};

示例三:设备在线率统计

场景:监控一组设备中有多少台在线(心跳超时视为离线)。

javascript
if (!noticeAttrs.telemetry_data && !noticeAttrs.server_attrs) {
  return { telemetry_data: null, server_attrs: null, shared_attrs: null };
}

let now = Date.now();
let onlineThreshold = 15 * 60 * 1000; // 15 分钟无上报视为离线

let statusCache = device.server_attrs || {};
statusCache[msg.eui] = { last_seen: now };

let total = Object.keys(statusCache).length;
let online = Object.values(statusCache)
  .filter(s => (now - s.last_seen) < onlineThreshold).length;

return {
  telemetry_data: {
    total_devices: total,
    online_devices: online,
    online_rate: total ? Math.round(online / total * 100) : 0,
  },
  server_attrs: statusCache,
  shared_attrs: null,
};

1.6. Modbus TCP 对接

ThinkLink 内置 Modbus TCP Server,可将设备遥测数据和属性暴露为标准 Modbus 寄存器,供 SCADA/HMI 读取;第三方系统写寄存器时也可触发 RPC 下发指令。

详细配置步骤、寄存器映射说明和点表导出方法请参阅 → Modbus TCP Server

在设备详情的基本信息 Tab 中将 modbus_tcp 开关设为 TRUE 即可为该设备启用 Modbus 映射。


1.7. 设备关联关系(Relation)

在设备详情页的设备关联 Tab 中,可以管理当前设备与其他设备之间的数据通知关系。关联关系存储在 device_relation 表中,每条关系记录:

字段说明
from_eui源设备 EUI(数据上报方,旧称"从设备")
to_eui目标设备 EUI(接收通知方,旧称"主设备")
notify_fields触发通知的属性类型列表:telemetry_data / shared_attrs / server_attrs
params扩展参数(可选)

from_eui 对应设备的 notify_fields 中任一类型的数据发生变更时,ThinkLink 会将变更数据推送给 to_eui 对应设备的物模型脚本进行处理,msg 参数中包含源设备的全量数据快照。

资产 + 关联关系 是 ThinkLink 实现多设备数据聚合的核心机制,不依赖外部脚本调度,完全在平台内驱动。


1.8. 设备租户迁移

将设备从一个租户迁移到另一个租户,需要分别迁移两个独立对象:LoRaWAN 档案(NS 层鉴权配置)和设备记录(数据处理层管理实体)。

非 LoRaWAN 设备data_from = OTHER)没有 LoRaWAN 档案,可直接跳到第 3 步。

第 1 步:从原租户导出并删除 LoRaWAN 档案

  1. 进入原租户的运维管理 → 设备管理 → LoRaWAN 档案
  2. 点击导出,将当前所有档案下载为 Excel 文件
  3. 打开文件,核实内容完整、包含所有待迁移设备的档案记录

⚠️ 危险操作提示: 务必在确认导出文件完整后再执行删除。若未成功导出就删除,档案中的密钥信息(AppKey / AppSKey / NwkSKey)将永久丢失,无法找回。

  1. 勾选待迁移的档案条目,点击删除

第 2 步:在新租户下导入 LoRaWAN 档案

  1. 切换到目标租户
  2. 进入运维管理 → 设备管理 → LoRaWAN 档案
  3. 点击导入,上传第 1 步导出的 Excel 文件

第 3 步:迁移设备记录

按相同的导出 → 删除 → 导入流程完成设备记录的迁移:

  1. 原租户进入运维管理 → 设备管理
  2. 勾选需要迁移的设备,点击导出下载设备列表
  3. 确认导出文件完整后,在原租户中删除这些设备

⚠️ 危险操作提示: 同样需在确认导出成功后再删除。被删除的设备记录(包括已绑定的物模型、RPC、触发器和属性配置)无法自动恢复。

  1. 切换到目标租户,进入运维管理 → 设备管理,点击导入上传设备列表