跳到主要内容

节点 - 云通讯

节点和云之间的所有通讯都基于安全的 MQTT 协议。

安全性

TLS

TLS 使用基于 X.509 证书的双向身份验证,保障节点和云之间通讯的安全性。客户端密钥在节点中生成,然后生成一个证书签名请求 (CSR),由 CA 签名并在 Claiming 过程中作为客户端证书交还给节点。

MQTT 策略

根据 MQTT 策略规定,只有当客户端 ID 与节点 ID 匹配时节点才能建立连接,而且节点只能订阅和发布以 node/<node_id>/ 开头的主题。

节点配置

节点 ID、属性、设备、参数等所有与节点相关的信息,都合并成一个称为“节点配置”的对象。节点配置信息是节点启动时向 ESP RainMaker 云报告的第一个信息,相同的信息将原样报告给移动应用程序、CLI 等客户端,客户端可以解析和任意使用节点配置。您可以根据需要添加或编辑节点配置,并在客户端中进行适当处理。

以下是 ESP RainMaker 固件和移动应用程序当前使用的节点配置。

注意:加粗项是必要信息。括号中的字符串表示相应的键(JSON 格式)和数据类型。

  • 节点 IDnode_id、字符串
  • 配置版本config_version、字符串
  • 信息info、对象
    • 名称name、字符串
    • 固件版本fw_version、字符串
    • 类型type、字符串
  • 节点属性(attributes、对象数组
    • 名称name、字符串
    • value、字符串
  • 设备devices、对象数组
    • 名称name、字符串
    • 类型(type、字符串
    • 主要参数(primary, String)
    • 设备属性(attributes、对象数组
      • 名称name、字符串
      • value、字符串
    • 参数params、对象数组
      • 名称name、字符串
      • 数据类型data_type、字符串
      • 类型(type、字符串
      • 参数属性properties、字符串数组
      • UI 类型(ui_type、字符串
      • 边界(bounds、对象
        • 最小值(min、数字
        • 最大值(max、数字
        • 步长(step、数字

MQTT

  • 主题:node/<node_id>/config
  • 操作:PUBLISH
  • 数据:以下是节点配置 JSON 对象
  • 示例: 示例节点配置

节点参数

所有参数更改都通过特定的节点参数主题进行管理。

初始报告

MQTT

  • 主题:node/<node_id>/params/local/init
  • 操作:PUBLISH
  • 数据:{"<device-name">:{"<param-name>":<value>,...},...}
  • 示例:
{
"Lightbulb": {
"name": "Bedroom Light",
"power": true,
"brightness": 55
}
}

每次节点启动时都会发送初始报告,包含所有设备的所有参数值。

后续报告

MQTT

  • 主题:node/<node_id>/params/local
  • 操作:PUBLISH
  • 数据:{"<device-name">:{"<param-name>":<value>,...},...}
  • 示例:
{
"Lightbulb": {
"brightness": 75
}
}

任何后续对于该节点的更改,无论是远程更改还是本地更改,都会在向该主题报告,只有更改的参数才需要包含在负载中。

远程控制

MQTT

  • 主题:node/<node_id>/params/remote
  • 操作:SUBSCRIBE
  • 数据:{"<device-name">:{"<param-name>":<value>,...},...}
  • 示例:
{
"Lightbulb": {
"brightness": 100
}
}

节点必须始终订阅此主题,以便监听由客户端(如移动应用程序或 CLI)触发的更新。然后,根据这些更新,修改参数值,并使用 “后续报告”向客户端报告该修改。

用户 - 节点映射

如果需要远程监控和控制节点下的设备,必须首先将节点映射到特定用户,以确保该用户有权访问该节点。这个映射过程在 Wi-Fi 配网的后台完成:节点将 node_id 发送给客户端,客户端将 user_id 和 secret_key 发送给节点进行映射。一旦连接到 RainMaker 云后,节点将发送映射请求。有关详细的工作流程,请参见 用户节点映射

MQTT

  • 主题:node/<node_id>/user/mapping
  • 操作:PUBLISH
  • 数据:{"node_id":"<node_id>","user_id":"<user_id>","secret_key": "<secret_key>"}
  • 示例:
{
"node_id": "112233AABBCC",
"user_id": "02e95749-8d9d-4b8e-972c-43325ad27c63",
"secret_key": "9140ef1d-72be-48d5-a6a1-455a27d77dee"
}

附录:示例节点配置

以下是包含 2 个设备的示例节点配置。

{
"node_id": "5d898491-a498-48ec-9476-a4e23519fe31",
"config_version": "2019-02-27",
"info": {
"name": "My_Bridge",
"fw_version": "1.0",
"type": "Bridge"
},
"attributes": [{
"name": "serial_num",
"value": "123abc"
}, {
"name": "model",
"value": "myBridge-2019"
}],
"devices": [{
"name": "Switch",
"primary": "power",
"params": [{
"name": "name",
"type": "esp.param.name",
"data_type": "string",
"properties": ["read", "write"]
}, {
"name": "power",
"data_type": "bool",
"properties": ["read", "write", "time_series"],
"ui_type": "esp.ui.toggle"
}]
}, {
"name": "Light",
"type": "esp.device.lightbulb",
"attributes": [{
"name": "serial_number",
"value": "012345"
}, {
"name": "mac",
"value": "xx:yy:zz:aa:bb:cc"
}],
"primary": "power",
"params": [{
"name": "name",
"type": "esp.param.name",
"data_type": "string",
"properties": ["read", "write"]
}, {
"name": "power",
"data_type": "bool",
"properties": ["read", "write", "time_series"],
"ui_type": "esp.ui.toggle"
}, {
"name": "brightness",
"data_type": "int",
"properties": ["read", "write"],
"bounds": {
"min": 0,
"max": 100
},
"ui_type": "esp.ui.slider"
}]
}]
}