3. 腾讯云IoT Hub产品架构与核心概念

腾讯云IoT Hub(物联网通信)是设备接入与数据上云的入口服务。要真正用好它,不能只记住几个名词,而要理解这些概念之间的从属与引用关系:产品是设备的集合与配置模板,设备是产品的实例,设备密钥与设备证书是设备身份的两类凭据,物模型描述设备"能做什么",Topic类规定设备"能往哪发、能从哪收",权限决定"谁被允许操作哪些Topic",规则引擎则负责把消息从Topic转发到其它云服务。下面逐一展开,并给出它们如何串成一条完整链路。

产品与设备:模板与实例

产品(Product)是同一类设备的集合,也是配置的载体。创建产品时需要确定:产品名称、设备类型(如"温湿度传感器")、认证方式(密钥认证或证书认证)、数据格式(JSON或自定义透传)、以及通信方式。产品创建后会得到一个全局唯一的 ProductId,它是后续所有设备、Topic、规则引用的根标识。

设备(Device)是产品的实例,代表一台真实硬件。每台设备有 DeviceName,与 ProductId 组合后形成全局唯一的设备标识。设备创建后处于"未激活"状态,首次成功连接并鉴权通过后变为"已激活",之后可被禁用、删除。设备状态(在线/离线)由平台根据连接心跳维护,是排障时最先查看的信息。

设备密钥与设备证书:两种身份凭据

设备接入必须证明"我是我"。腾讯云IoT Hub提供两种认证方式,二选一:

  • 设备密钥(密钥认证):平台为每台设备生成 DeviceSecret。设备用 ProductId + DeviceName + DeviceSecret 按规则计算签名(常用 HMAC-SHA1),连接时提交 clientId、username、password。密钥认证实现简单,适合资源受限的MCU。
  • 设备证书(证书认证):平台签发设备证书(含公钥)与私钥,设备用私钥做TLS双向认证。安全性更高,适合Linux网关或对安全要求高的场景。

关键点:认证方式在产品创建时确定,同一产品下的设备必须使用同一种方式。密钥或证书一旦泄露,应通过"禁用设备"或"重置密钥/证书"处理,而不是删除重建,以免丢失历史数据关联。

物模型:设备的数字化描述

物模型(Thing Model)用JSON描述设备能力,包含三类元素:

  • 属性(Property):设备状态,如 temperature(float,-40~125,单位℃),可读写或只读。
  • 事件(Event):设备主动上报的通知,如"高温告警",可带参数。
  • 行为(Action):云端可下发的指令,如"重启"。

物模型的价值在于:云端和APP无需理解设备私有协议,只需按物模型读写属性、调用行为。设备上报数据时,Topic固定为 $thing/up/property/{productId}/{deviceName},载荷为 {"temperature":26.5};云端下发属性设置走 $thing/down/property/...。物模型是"数据上云"能被规则引擎、数据库、可视化理解的前提。

Topic类与权限:消息的路由与边界

Topic类是消息通道的命名规则。腾讯云IoT Hub预置了系统Topic(以 $ 开头,如 $thing/up/property/...),也支持自定义Topic(如 /{productId}/{deviceName}/data)。设备只能发布/订阅被授权的Topic。

权限以"产品+Topic+操作(发布/订阅)"为粒度配置。例如允许设备发布到 $thing/up/property/...,订阅 $thing/down/property/...。权限配置错误是"连上了但收不到消息"的最常见原因:设备能连接说明密钥正确,但若未授权订阅下行Topic,云端下发的属性设置就不会到达设备。

规则引擎:从Topic到云服务

规则引擎把设备消息从Topic转发到其它云产品。一条规则由三部分组成:

  1. 数据源:选择要监听的Topic,如 $thing/up/property/{productId}/{deviceName}。
  2. SQL筛选:如 SELECT temperature FROM '$thing/up/property/xxx/yyy' WHERE temperature > 30,只转发满足条件的消息。
  3. 转发目标:写入云数据库、投递到消息队列CKafka、调用云函数SCF、写入时序数据库TSDB等。

规则引擎让"数据上云"从"设备发消息"变成"数据落到可用存储/计算服务",是IoT Hub与腾讯云生态的连接点。

概念关系总览

下图把上述概念串成一条从设备到云服务的链路,并标出各概念的从属与引用关系:

产品 Product ProductId 全局唯一 认证方式 / 数据格式 设备 Device DeviceName 实例标识 未激活 → 已激活 设备密钥 / 设备证书 DeviceSecret 签名 或 TLS 双向证书 物模型 Thing Model 属性 / 事件 / 行为 JSON 描述设备能力 Topic 类 $thing/up|down/... 自定义 Topic 通道 权限 Permission 产品 + Topic + 发布/订阅 决定消息能否通行 规则引擎 Rule Engine 数据源 → SQL 筛选 → 转发目标 CKafka / TSDB / SCF / 云数据库 云服务 / 应用 存储 · 计算 · 可视化 APP / 大屏 / 告警 包含 持有凭据 定义 关联 受控于 映射 订阅 转发 链路示例: 设备用 DeviceSecret 签名连接 → 按物模型上报 {"temperature":26.5} 到 $thing/up/property/... → 权限校验通过 → 规则引擎 SQL 筛选 temperature>30 → 写入 TSDB 并触发告警。 排障顺序:先看设备是否在线(密钥/证书)→ 再看 Topic 权限是否放行 → 最后看规则引擎 SQL 与转发目标是否命中。

把概念用起来:一次属性上报的完整判断

假设产品 ProductId=P1,设备 DeviceName=dev01,认证方式为密钥。设备端计算签名后连接,平台校验 DeviceSecret 通过,设备变为在线。随后设备向 $thing/up/property/P1/dev01 发布 {"temperature":26.5}。平台先检查该产品是否授权"发布"到该Topic;若授权,消息进入规则引擎。规则SQL为 SELECT temperature FROM '$thing/up/property/P1/dev01' WHERE temperature > 30,由于26.5不满足条件,消息被过滤,不写入TSDB。若把阈值改为25,则消息被转发到TSDB,可在时序数据库中查到该点。

判断"数据为什么没上云"时,按"设备在线→密钥/证书正确→Topic权限放行→规则SQL命中→转发目标可用"的顺序逐段排查,比盲目重连更高效。

理解这些概念的关系后,后续配置产品、创建设备、定义物模型、授权Topic、编写规则,就都是在同一张关系图上填空,而不是孤立地记忆操作步骤。