ruoyi-vue-pro 开发指南 ruoyi-vue-pro 开发指南
  • 萌新必读
  • 后端手册
  • 中间件手册
  • 工作流手册
  • 大屏手册
  • 支付手册
  • 会员手册
  • 商城手册
  • ERP 手册
  • CRM 手册
  • AI 大模型手册
  • IoT 物联网手册
  • 公众号手册
  • 系统手册
  • 运维手册
  • 前端手册 Vue 3.x
  • 前端手册 Vben 5.x
  • 前端手册 Vue 2.x
  • 前端手册 Admin Uniapp
  • 工作流手册
  • 大屏手册
  • 支付手册
  • 会员手册
  • 商城手册
  • ERP 手册
  • CRM 手册
  • AI 大模型手册
  • IoT 物联网手册
  • 公众号手册
  • 系统手册
视频教程
  • Vue3 + element-plus (opens new window)
  • Vue3 + vben5(ant-design-vue、element-plus) (opens new window)
  • Vue2 + element-ui (opens new window)
微服务版 (opens new window)
作者博客 (opens new window)
GitHub (opens new window)
  • 萌新必读
  • 后端手册
  • 中间件手册
  • 工作流手册
  • 大屏手册
  • 支付手册
  • 会员手册
  • 商城手册
  • ERP 手册
  • CRM 手册
  • AI 大模型手册
  • IoT 物联网手册
  • 公众号手册
  • 系统手册
  • 运维手册
  • 前端手册 Vue 3.x
  • 前端手册 Vben 5.x
  • 前端手册 Vue 2.x
  • 前端手册 Admin Uniapp
  • 工作流手册
  • 大屏手册
  • 支付手册
  • 会员手册
  • 商城手册
  • ERP 手册
  • CRM 手册
  • AI 大模型手册
  • IoT 物联网手册
  • 公众号手册
  • 系统手册
视频教程
  • Vue3 + element-plus (opens new window)
  • Vue3 + vben5(ant-design-vue、element-plus) (opens new window)
  • Vue2 + element-ui (opens new window)
微服务版 (opens new window)
作者博客 (opens new window)
GitHub (opens new window)
  • 萌新必读

    • 简介
    • 交流群
    • 视频教程
    • 功能列表
    • 快速启动(后端项目)
    • 快速启动(前端项目)
    • 接口文档
    • 技术选型
    • 项目结构
    • 代码热加载
    • 一键改包
    • 迁移模块(适合新项目)
    • 删除功能(以租户为例)
    • 表结构变更(版本升级)
    • 国产信创数据库(DM 达梦、大金、OpenGauss)
    • 如何去除 Redis 缓存
    • 内网穿透
    • 面试题、简历模版、简历优化
    • 项目外包
  • 后端手册

    • 新建模块
    • 代码生成【单表】(新增功能)
    • 代码生成【主子表】
    • 代码生成(树表)
    • 代码生成(移动端)
    • 功能权限
    • 数据权限
    • 用户体系
    • 三方登录
    • OAuth 2.0(SSO 单点登录)
    • SaaS 多租户【字段隔离】
    • SaaS 多租户【数据库隔离】
    • WebSocket 实时通信
    • 异常处理(错误码)
    • 参数校验、时间传参
    • 分页实现
    • VO 对象转换、数据翻译
    • 文件存储(上传下载)
    • Excel 导入导出
    • 操作日志、访问日志、异常日志
    • MyBatis 数据库
    • MyBatis 联表&分页查询
    • 多数据源(读写分离)、事务
    • Redis 缓存
    • 本地缓存
    • 异步任务
    • 分布式锁
    • 幂等性(防重复提交)
    • 请求限流(RateLimiter)
    • HTTP 接口签名(防篡改)
    • HTTP 接口加解密
    • 单元测试
    • 验证码
    • 工具类 Util
    • 配置管理
    • 数据库文档
  • 中间件手册

    • 定时任务
    • 消息队列(内存)
    • 消息队列(Redis)
    • 消息队列(RocketMQ)
    • 消息队列(RabbitMQ)
    • 消息队列(Kafka)
    • 限流熔断
  • 工作流手册

    • 工作流演示
    • 功能开启
    • 工作流(达梦适配)
    • 审批接入(流程表单)
    • 审批接入(业务表单)
    • 流程设计器(BPMN)
    • 流程设计器(钉钉、飞书)
    • 选择审批人、发起人自选
    • 会签、或签、依次审批
    • 流程发起、取消、重新发起
    • 审批通过、不通过、驳回
    • 审批加签、减签
    • 审批转办、委派、抄送
    • 执行监听器、任务监听器
    • 流程表达式
    • 流程审批通知
  • 大屏手册

    • 报表设计器
    • 大屏设计器
  • 支付手册

    • 功能开启
    • 支付宝支付接入
    • 微信公众号支付接入
    • 微信小程序支付接入
    • 支付宝、微信退款接入
    • 支付宝转账接入
    • 微信转账接入
    • 钱包充值、支付、退款
    • 模拟支付、退款
  • 会员手册

    • 功能开启
    • 微信公众号登录
    • 微信小程序登录
    • 微信小程序订阅消息
    • 微信小程序码
    • 会员用户、标签、分组
    • 会员等级、积分、签到
  • 商城手册

    • 商城演示
    • 功能开启
    • 商城装修
    • 在线客服
    • 【商品】商品分类
    • 【商品】商品属性
    • 【商品】商品 SPU 与 SKU
    • 【商品】商品评价
    • 【交易】购物车
    • 【交易】交易订单
    • 【交易】售后退款
    • 【交易】快递发货
    • 【交易】门店自提
    • 【交易】分销返佣
    • 【营销】优惠劵
    • 【营销】积分商城
    • 【营销】拼团活动
    • 【营销】秒杀活动
    • 【营销】砍价活动
    • 【营销】满减送活动
    • 【营销】限时折扣
    • 【营销】内容管理
    • 【统计】会员、商品、交易统计
  • ERP手册

    • ERP 演示
    • 功能开启
    • 【产品】产品信息、分类、单位
    • 【库存】产品库存、库存明细
    • 【库存】其它入库、其它出库
    • 【库存】库存调拨、库存盘点
    • 【采购】采购订单、入库、退货
    • 【销售】销售订单、出库、退货
    • 【财务】采购付款、销售收款
  • CRM手册

    • CRM 演示
    • 功能开启
    • 【线索】线索管理
    • 【客户】客户管理、公海客户
    • 【商机】商机管理、商机状态
    • 【合同】合同管理、合同提醒
    • 【回款】回款管理、回款计划
    • 【产品】产品管理、产品分类
    • 【通用】数据权限
    • 【通用】跟进记录、待办事项
  • AI大模型手册

    • AI 大模型演示
    • 功能开启
    • AI 聊天对话
    • AI 绘画创作
    • AI 知识库(RAG)
    • AI 音乐创作
    • AI 写作助手
    • AI 思维导图
    • AI 工具(function calling)
    • AI 工作流
    • Dify 工作流
    • FastGPT 工作流
    • Coze 智能体
    • 推理模式(thinking)
    • 联网搜索
    • MCP Client 客户端
    • MCP Server 服务端
    • 【模型接入】Claude
    • 【模型接入】OpenAI
    • 【模型接入】通义千问
    • 【模型接入】DeepSeek
    • 【模型接入】字节豆包
    • 【模型接入】腾讯混元
    • 【模型接入】硅基流动
    • 【模型接入】MiniMax
    • 【模型接入】月之月面
    • 【模型接入】百川智能
    • 【模型接入】文心一言
    • 【模型接入】LLAMA
    • 【模型接入】智谱 GLM
    • 【模型接入】讯飞星火
    • 【模型接入】微软 OpenAI
    • 【模型接入】谷歌 Gemini
    • 【模型接入】Stable Diffusion
    • 【模型接入】Midjourney
    • 【模型接入】Suno
  • IoT物联网手册

    • 功能开启
    • 产品管理
    • 设备管理
    • 物模型配置
    • 设备网关与子设备
      • 1. 概述
        • 1.1 设备类型
        • 1.2 网关子设备使用同一套协议
        • 1.3 拓扑关系的两种管理方式
        • 1.4 表结构设计
      • 2. 拓扑关系管理(后台绑定)
      • 3. 拓扑关系管理(协议绑定)
        • 3.1 MQTT 主题格式
        • 3.2 快速测试
        • 3.3 消息数据结构
      • 4. 网关批量上报
    • 设备动态注册
    • 设备接入(概述)
    • 设备接入(HTTP 协议)
    • 设备接入(MQTT 协议)
    • 设备接入(EMQX 协议)
    • 设备接入(TCP 协议)
    • 设备接入(UDP 协议)
    • 设备接入(WebSocket 协议)
    • 设备接入(CoAP 协议)
    • 设备接入(Modbus Client 模式)
    • 设备接入(Modbus Server 模式)
    • 设备接入(自定义协议)
    • 场景联动
    • 数据流转
    • 告警配置
    • OTA 固件升级
  • 公众号手册

    • 功能开启
    • 公众号接入
    • 公众号粉丝
    • 公众号标签
    • 公众号消息
    • 模版消息
    • 自动回复
    • 公众号菜单
    • 公众号素材
    • 公众号图文
    • 公众号统计
  • 系统手册

    • 短信配置
    • 邮件配置
    • 站内信配置
    • Webhook(钉钉、飞书、企微)
    • 数据脱敏、字段权限
    • 敏感词
    • 地区 & IP 库
  • 运维手册

    • 开发环境
    • Linux 部署
    • Docker 部署
    • Jenkins 部署
    • 宝塔部署
    • 1Panel 部署
    • HTTPS 证书
    • 服务监控
    • Tomcat WAR 部署
  • 前端手册 Vue 3.x

    • 开发规范
    • 菜单路由
    • Icon 图标
    • 字典数据
    • 系统组件
    • 通用方法
    • 配置读取
    • CRUD 组件
    • 国际化
    • IDE 调试
    • 代码格式化
  • 前端手册 Vben 5.x

    • 开发规范
    • 菜单路由
    • 图标、主题、国际化
    • 字典数据
    • 系统组件
    • 通用方法
    • 配置读取
    • IDE 调试
    • 代码格式化
  • 前端手册 Vue 2.x

    • 开发规范
    • 菜单路由
    • Icon 图标
    • 字典数据
    • 系统组件
    • 通用方法
    • 配置读取
  • 前端手册 Admin Uniapp

    • 开发规范
    • 菜单路由
    • 图标、主题、国际化
    • 字典数据
    • 系统组件
    • 通用方法
    • IDE 调试
    • 代码格式化
    • 运行发布
  • 更新日志

    • 【v2026-02】开发中
    • 【v2026-01】
    • 【v2025-12】
    • 【v2025-11】
    • 【v2025-10】
    • 【v2025-09】
    • 【v2025-08】
    • 【v2-6-1】2025-07-19
    • 【v2-6-0】2025-06-07
    • 【v2.5.0】2025-05-13
    • 【v2.4.2】2025-04-12
    • 【v2.4.1】2025-02-09
    • 【v2.4.0】2024-12-31
    • 【v2.3.0】2024-10-07
    • 【v2.2.0】2024-08-02
    • 【v2.1.0】2024-05-05
    • 【v2.0.1】2024-03-01
    • 【v2.0.0】2024-01-26
  • 开发指南
  • IoT物联网手册
芋道源码
2026-02-12
目录

设备网关与子设备

推荐阅读:

  • 《阿里云物联网平台 —— 网关与子设备》 (opens new window)

物联网平台支持设备直连,也支持设备挂载在网关上,作为网关的子设备,由网关直连。

使用场景:适用于子设备不能直连或者需要拓扑关系管理的场景,例如接入 Wi-Fi 网关、蓝牙网关、ZigBee 网关等。

(图片来自阿里云)

网关与子设备架构图

# 1. 概述

# 1.1 设备类型

创建产品时,需要选择设备类型。设备类型由 IotProductDeviceTypeEnum 枚举定义,包含以下三种:

产品设备类型

名称 说明
直连设备 直接连接物联网平台,独立进行数据上报和接收命令
网关子设备 不能直接连接物联网平台,需要通过网关设备代理接入
网关设备 可以直接连接物联网平台,并且能代理多个子设备接入,管理子设备的拓扑关系

设备创建时,会自动继承所属产品的设备类型。

# 1.2 网关子设备使用同一套协议

网关连接物联网平台后,将拓扑关系同步至物联网平台的云端,"代理"子设备进行设备认证、消息上传、指令接收等与物联网平台的通信。

简单理解

网关设备就像子设备的"路由器" —— 子设备自身不具备直连物联网平台的能力,需要通过网关进行消息转发和代理通信。

① 网关子设备与直连设备使用完全相同的协议。 以 MQTT 协议为例,子设备的属性上报、事件上报、服务调用等,都跟直连设备使用相同的主题和消息格式:

操作 直连设备主题 网关子设备主题
属性上报 /sys/{productKey}/{deviceName}/thing/property/post /sys/{productKey}/{deviceName}/thing/property/post
事件上报 /sys/{productKey}/{deviceName}/thing/event/post /sys/{productKey}/{deviceName}/thing/event/post
服务调用 /sys/{productKey}/{deviceName}/thing/service/invoke /sys/{productKey}/{deviceName}/thing/service/invoke

具体来说,子设备不直接连接物联网平台,而是将消息发给网关设备,再由网关设备转发到物联网平台:

  • 认证:网关设备使用子设备的三元组(productKey + deviceName + deviceSecret)向平台执行认证
  • 上报:网关设备以子设备的 {productKey}/{deviceName} 为主题,将子设备的数据上报到平台
  • 下发:平台以子设备的 {productKey}/{deviceName} 为主题下发指令,由网关设备接收后转发给子设备

② 网关设备独有的操作包括:

  • 拓扑管理:thing.topo.add、thing.topo.delete、thing.topo.get、thing.topo.change
  • 子设备动态注册:thing.auth.register.sub(详见 《设备动态注册》)
  • 批量上报:thing.event.property.pack.post(网关一次上报自身 + 多个子设备的数据)

# 1.3 拓扑关系的两种管理方式

拓扑关系(即网关与子设备的绑定关系)支持两种管理方式:

方式 说明 适用场景
方式一:后台绑定 管理员在管理后台手动绑定/解绑子设备,操作完成后平台下发 thing.topo.change 通知给网关 部署阶段、手动配置
方式二:协议绑定 网关设备通过 MQTT 协议主动上报 thing.topo.add/delete/get 消息,动态管理拓扑关系 运行阶段、自动发现

两种方式可以并存,互不影响。

# 1.4 表结构设计

在 iot_device 表中,通过 device_type 和 gateway_id 字段支持网关与子设备的关联关系:

字段 类型 说明
device_type tinyint 设备类型,参见 IotProductDeviceTypeEnum 枚举
gateway_id bigint 网关设备 ID,子设备需要关联的网关设备 ID(直连/网关设备为空)

# 2. 拓扑关系管理(后台绑定)

管理员在管理后台手动管理子设备与网关的绑定关系。由 IotDeviceController 提供接口。

① 在设备详情页,仅「网关设备」显示【子设备管理】Tab 页签。对应前端项目的 @/views/iot/device/device/detail/DeviceDetailsSubDevice.vue。

设备详情 - 子设备管理

展示当前网关下已绑定的所有子设备,包括设备名称、备注名称、所属产品、设备状态、最后上线时间等信息。

② 点击【添加子设备】按钮,弹出对话框。支持按产品筛选(仅显示「网关子设备」类型的产品),选中未绑定的子设备后确认绑定。

绑定子设备

支持单个解绑和批量解绑。选中已绑定的子设备,点击【解绑】或【批量解绑】按钮即可解除绑定关系。

后台绑定或解绑操作完成后,平台会通过 thing.topo.change 下行消息主动通知网关设备,网关设备可据此更新本地拓扑缓存。

# 3. 拓扑关系管理(协议绑定)

网关设备也可以通过 MQTT 协议主动管理拓扑关系,实现运行时动态添加/删除子设备。

# 3.1 MQTT 主题格式

操作 方向 消息方法 MQTT 主题
添加拓扑关系 上行 thing.topo.add /sys/{productKey}/{deviceName}/thing/topo/add
删除拓扑关系 上行 thing.topo.delete /sys/{productKey}/{deviceName}/thing/topo/delete
获取拓扑关系 上行 thing.topo.get /sys/{productKey}/{deviceName}/thing/topo/get
拓扑变更通知 下行 thing.topo.change /sys/{productKey}/{deviceName}/thing/topo/change

其中 {productKey} 和 {deviceName} 为网关设备的标识。回复主题在原主题后追加 _reply 后缀。

# 3.2 快速测试

可以通过以下集成测试类快速体验,具体步骤见各类的注释:

协议 网关设备 网关子设备
MQTT IotGatewayDeviceMqttProtocolIntegrationTest IotGatewaySubDeviceMqttProtocolIntegrationTest
HTTP IotGatewayDeviceHttpProtocolIntegrationTest IotGatewaySubDeviceHttpProtocolIntegrationTest
CoAP IotGatewayDeviceCoapProtocolIntegrationTest IotGatewaySubDeviceCoapProtocolIntegrationTest
TCP IotGatewayDeviceTcpProtocolIntegrationTest IotGatewaySubDeviceTcpProtocolIntegrationTest
UDP IotGatewayDeviceUdpProtocolIntegrationTest IotGatewaySubDeviceUdpProtocolIntegrationTest
WebSocket IotGatewayDeviceWebSocketProtocolIntegrationTest IotGatewaySubDeviceWebSocketProtocolIntegrationTest

# 3.3 消息数据结构

拓扑相关的消息数据结构定义在 yudao-module-iot-core 模块的 core.topic.topo 包中:

消息方法 方向 数据结构类 说明
thing.topo.add 上行 IotDeviceTopoAddReqDTO 包含 subDevices 子设备认证信息列表
thing.topo.delete 上行 IotDeviceTopoDeleteReqDTO 包含 subDevices 子设备标识列表
thing.topo.get 上行 IotDeviceTopoGetReqDTO 目前为空,预留扩展
thing.topo.get 上行 IotDeviceTopoGetRespDTO 包含 subDevices 子设备标识列表
thing.topo.change 下行 IotDeviceTopoChangeReqDTO 包含 status(0=创建/1=删除)和 subList 子设备列表

# 4. 网关批量上报

网关设备支持批量上报功能:一次消息同时上报网关自身和多个子设备的属性、事件数据。这是网关设备独有的操作,对应 thing.event.property.pack.post 消息方法。

以 MQTT 协议为例,网关设备上报批量消息的主题和数据格式如下:

  • MQTT 主题:/sys/{gatewayProductKey}/{gatewayDeviceName}/thing/event/property/pack/post
  • 数据格式:对应 IotDevicePropertyPackPostReqDTO 类
    {
      "method": "thing.event.property.pack.post",
      "params": {
        "properties": {
          "cpuUsage": 45.2
        },
        "events": {
          "alert": {
            "value": { "level": 1 },
            "time": 1739265600000
          }
        },
        "subDevices": [
          {
            "identity": {
              "productKey": "YzvHxd4r67sT4s2B",
              "deviceName": "small"
            },
            "properties": {
              "temperature": 36.5,
              "humidity": 60
            },
            "events": {
              "eat": {
                "value": { "rice": 3 },
                "time": 1739265600000
              }
            }
          }
        ]
      }
    }
    

平台收到后,会将批量消息拆分为各设备独立的 thing.property.post 和 thing.event.post 消息分别处理。具体可见 IotDeviceMessageServiceImpl 的 #handlePackMessage(...) 方法。

物模型配置
设备动态注册

← 物模型配置 设备动态注册→

Theme by Vdoing | Copyright © 2019-2026 芋道源码 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×