☰
ThingsBoard 温湿度传感器解决方案的 Edge 边缘计算部署与数据同步实战
2026/10/1 2:06:22 网站建设 项目流程
  • 物联网
  • 后端
  • 数据可视化
  • 消息队列

【免费下载链接】thingsboard

All-in-one IoT Platform - Device management, data collection, processing and visualization.

项目地址:https://gitcode.com/GitHub_Trending/th/thingsboard
点击查看免费下载

导读

本文围绕 ThingsBoard 开源 IoT 平台内置的Temperature & Humidity Sensors(温湿度传感器)解决方案,讲解如何为其启用可选的ThingsBoard Edge 边缘计算扩展:在多地点远程设施场景下把边缘端部署到数据产生现场,实现断网自治处理、联网后自动同步到云端,并给出边缘设备遥测上报的完整 curl 命令与配置原理。读完本文,你将掌握该解决方案中 Edge 实体的组织方式、安装连接流程、实体组分配逻辑,以及从源码角度理解解决方案安装指令中占位符的渲染机制。

一、温湿度传感器解决方案中的 Edge 扩展定位

在 ThingsBoard 仓库中,温湿度传感器解决方案的完整定义位于application/src/main/data/json/solutions/temperature_sensors/目录,其中 edge_instructions.md 是专门面向Edge 边缘计算扩展的安装与使用说明文档。它在整个解决方案中是一个可选(Optionally)的增强项,与解决方案主体(设备配置、告警规则、仪表盘等)解耦,只有当安装的解决方案需要覆盖分布式远程站点时才启用。

ThingsBoard Edge 的核心价值在于两点,这也是该文档开篇反复强调的定位:

  • 将数据分析和设备管理下沉到数据产生的地方——远程设施内的温湿度传感器数据不必绕道云端处理,边缘端即可完成实时分析;
  • 与 ThingsBoard 云端按业务需求无缝同步——边缘端与云端之间的数据、配置、告警双向同步由 ThingsBoard 平台统一协调。

在仓库中,边缘指令文档并非孤例,application/src/main/data/json/solutions/water_metering/edge_instructions.md存在结构完全相同的边缘扩展说明(对应 "Remote Facility W1" 与 "Water Metering Customer A"),说明这是 ThingsBoard 内置解决方案体系中的一套通用设计模式。

二、适用场景:多地点远程设施的实时控制

原文档给出了一类非常典型的边缘计算业务场景,值得展开说明:

假设温湿度传感器解决方案的部署范围覆盖了同一城市、不同城镇甚至不同国家的多个远程设施。此时,可以在每一个远程设施内部署一个 ThingsBoard Edge 实例,就近处理来自该设施温湿度传感器的数据。

这种架构带来的直接收益包括:

  1. 本地实时决策:边缘端可即时完成数据分析并作出决策,例如根据温度/湿度阈值自动开启或关闭加热器、自动调节温度,无需等待云端往返;
  2. 断网自治:当与中心 ThingsBoard 服务器的网络连接中断时,Edge 继续在本地处理数据,不会丢失任何数据,关键决策仍然在本地生效;
  3. 联网后回传:网络恢复后,边缘端积累的必要数据会自动推送(push)到云端,云端最终获得完整的遥测记录;
  4. 配置集中化:边缘计算相关的业务逻辑(规则链、告警规则等)统一在 ThingsBoard 服务器(云端)配置,所有 Edge 实例共享同一套配置来源,运维人员无需逐个登录边缘端改配置。

三、解决方案预置的 Edge 实体与实体组分配

在温湿度传感器解决方案的范围内,系统已自动创建了一个新的 Edge 实体:

  • Edge 实体名称:Remote Facility R1(远程设施 R1)
  • 归属客户:Customer D

在 edge_instructions.md 中,该 Edge 实体的详情页地址以模板占位符${Remote Facility R1EDGE_DETAILS_URL}的形式存在。这里需要特别说明:仓库中的指令文档是模板文件,占位符会在解决方案安装渲染阶段被替换为真实的相对 URL 路径。从 DefaultSolutionService.java 的源码可以看到替换逻辑:

// Edge detail URLs for (Map.Entry<String, EdgeLinkInfo> edgeLinkInfoEntry : ctx.getCreatedEdges().entrySet()) { EdgeLinkInfo edgeLinkInfo = edgeLinkInfoEntry.getValue(); StringBuilder edgeDetailsUrl = new StringBuilder(); if (EntityType.CUSTOMER.equals(edgeLinkInfo.getOwnerId().getEntityType())) { edgeDetailsUrl.append("/customers/all/").append(edgeLinkInfo.getOwnerId().getId()); } edgeDetailsUrl.append("/edgeManagement/edges/all/").append(edgeLinkInfo.getEdgeId().getId()); String edgeName = edgeLinkInfoEntry.getKey(); String edgeDetailsPlaceholder = "${" + edgeName + "EDGE_DETAILS_URL}"; template = template.replace(edgeDetailsPlaceholder, edgeDetailsUrl.toString()); }

也就是说,${Remote Facility R1EDGE_DETAILS_URL}最终会被渲染为类似/customers/all/<customer-id>/edgeManagement/edges/all/<edge-id>的云端控制台路径,方便安装者直接点击进入该 Edge 实体的详情页。

为了简化边缘部署,解决方案还预先为 Edge 实体Remote Facility R1分配了以下实体组(Entity Group):

实体组实体类型归属
"Customer Administrators"USER(用户)客户 "Customer D"
"Temperature & Humidity sensors"DEVICE(设备)客户 "Customer D"
"Customer dashboards"DASHBOARD(仪表盘)当前租户(tenant)

这三类实体组的作用在于:用户组保证 Customer D 的管理员登录 Edge 后有对应权限;设备组决定哪些设备会被自动下发到 Edge;仪表盘组决定哪些可视化界面会同步到 Edge。实体组分配完成后,Edge 的初始部署几乎无需人工逐个添加实体,做到了开箱即用。

四、安装 ThingsBoard Edge 并连接到云

安装流程在原文档中指向 Edge 详情页的操作按钮,具体步骤为:

  1. 登录 ThingsBoard 云端控制台,进入 Edge 实体Remote Facility R1的详情页(即上文渲染后的${Remote Facility R1EDGE_DETAILS_URL}链接);
  2. 点击页面上的Install & Connect instructions(安装与连接指引)按钮;
  3. 按照指引完成 ThingsBoard Edge 的安装,并将 Edge 连接到云端。

完成安装与连接后,即可使用租户账号或客户 "Customer D" 的用户账号登录 Edge 控制台。这一设计体现了边缘端复用云端同一套用户体系与权限模型的特性——用户凭证在 Edge 上同样有效,减少了额外的账号管理负担。

五、向 Edge 设备推送遥测数据:两种端口下的 curl 命令

原文档的核心实操部分是模拟设备向 Edge 上报遥测数据。其前提是:"Temperature & Humidity sensors"设备组已分配给 Edge 实体Remote Facility R1,因此该组内的所有设备都会被自动下发(provisioned)到 Edge。登录 Edge 控制台后,在Entities -> Devices页面即可看到这些设备。

以设备Sensor C1为例,向其Edge 端推送温度与湿度遥测数据的命令如下(设备凭证同样使用模板占位符${Sensor C1ACCESS_TOKEN},在指令渲染时会被替换为真实的访问令牌,替换逻辑同样位于 DefaultSolutionService.java):

curl -v -X POST -d "{\"temperature\": 43, \"humidity\": 74}" http://localhost:8080/api/v1/${Sensor C1ACCESS_TOKEN}/telemetry --header "Content-Type:application/json"{:copy-code}

注:命令末尾的{:copy-code}是 ThingsBoard 指令渲染系统支持的标记,渲染后界面会为代码块提供一键复制按钮。

如果你在 Edge 安装过程中把 Edge HTTP 服务的8080 绑定端口修改为 18080,则改用以下命令:

curl -v -X POST -d "{\"temperature\": 43, \"humidity\": 74}" http://localhost:18080/api/v1/${Sensor C1ACCESS_TOKEN}/telemetry --header "Content-Type:application/json"{:copy-code}

对这两条命令的要点说明:

  • 接口语义:POST /api/v1/{accessToken}/telemetry是 ThingsBoard 标准的设备遥测上传 HTTP API,Sensor C1的设备访问令牌被填入路径中的${Sensor C1ACCESS_TOKEN}位置;
  • 数据格式:Content-Type: application/json,JSON 载荷包含temperature(示例值 43)与humidity(示例值 74)两个键,对应温湿度传感器解决方案的核心遥测字段;
  • 验证方式:带上-v参数可以查看 HTTP 请求/响应的完整交互过程,便于排错;
  • 云端同步:向 Edge 上的Sensor C1推送数据后,该设备的遥测更新会同步出现在云端对应设备上,这正是 Edge 与云双向同步机制的直接体现。

六、从源码理解边缘指令的注入与渲染机制

上述指令文档之所以能在用户侧"自动生成"可点击的链接与真实的令牌,是因为它并不是一个静态文件,而是由解决方案安装服务动态组装的结果。核心逻辑位于 DefaultSolutionService.java,关键步骤为:

  1. 读取基础指令模板:从解决方案目录读取主instructions.md模板(Files.readString(instructionsFile));
  2. 注入边缘指令:若主模板包含${edge_instructions}占位符,则检查该次安装是否创建了 Edge 实体(ctx.getCreatedEdges().isEmpty()):未创建 Edge 时置空,已创建时读取临时目录中的edge_instructions.md并替换进去(template.replace("${edge_instructions}", edgeTemplate));
  3. 替换 URL 占位符:${DOCS_BASE_URL}、${BASE_URL}、${MAIN_DASHBOARD_URL}以及各 Edge 实体的${<EdgeName>EDGE_DETAILS_URL}被替换为真实相对路径;
  4. 替换设备凭证占位符:遍历本次安装创建的所有设备,将${<设备名>ACCESS_TOKEN}替换为真实凭据,并生成设备列表表格${device_list_and_credentials};
  5. 渲染用户与告警信息:替换${user_list},并调用replaceAlarmRules、replaceCalculatedFields、replaceCreatedEntities完成整体组装。

这说明仓库中的 edge_instructions.md 是"模板 + 占位符"的混合体,研究其源码有助于理解 ThingsBoard 解决方案包(Solution Template)的完整交付机制。

七、温湿度传感器解决方案的边缘配套资源

除了边缘指令外,同一解决方案目录下还包含若干可辅助理解边缘业务逻辑的配套资源,建议结合阅读:

  • 设备配置文件:device_profiles/temperature_sensor.json 定义了名为Temperature Sensor的默认设备配置:传输类型为 MQTT,payload 为 JSON,设备遥测主题为esp/telemetry;值得关注的是其defaultEdgeRuleChainId字段引用了RULE_CHAIN类型的 Edge 规则链,这正是边缘端独立执行业务逻辑(而不依赖云端规则链)的配置体现;
  • 高温告警规则:alarm_rules/temperature_sensor_high_temperature.json 定义High Temperature告警:当服务器端属性temperatureAlarmFlag为 true 且最新遥测temperature大于temperatureAlarmThreshold(默认 30.0)时触发CRITICAL级告警,温度回落至阈值以下时清除告警;
  • 低湿度告警规则:alarm_rules/temperature_sensor_low_humidity.json 定义Low Humidity告警:当humidityAlarmFlag为 true 且humidity低于humidityAlarmThreshold(默认 45.0)时触发MAJOR级告警。

这些告警规则使用TS_LATEST(最新遥测)与SERVER_SCOPE(服务器端属性)作为判定依据,正是边缘端"数据产生地就近分析、就地告警决策"的典型实现素材;当网络中断时,此类规则链在 Edge 上仍可持续评估,保障本地设施的安全运行。

小结

通过温湿度传感器解决方案的 edge_instructions.md,可以完整掌握 ThingsBoard Edge 在多地点远程设施场景下的落地路径:预置 Edge 实体与实体组 → 云端一键安装连接 → 登录边缘端管理设备 → 本地数据上报与云端自动同步。结合 DefaultSolutionService.java 的渲染源码与设备配置、告警规则等配套资源,开发者可以在此基础上定制自己的多站点温湿度监控体系,实现边缘自治与云端汇聚的混合部署。

  • 物联网
  • 后端
  • 数据可视化
  • 消息队列

【免费下载链接】thingsboard

All-in-one IoT Platform - Device management, data collection, processing and visualization.

项目地址:https://gitcode.com/GitHub_Trending/th/thingsboard
点击查看免费下载

相关推荐

上一篇:cim系统中的技术债务管理:重构策略与实践
下一篇:shadPS4 0.7.0 一启动就崩?这份 Windows 11 排障指南帮你 4 步救回 PS4 游戏

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询