节点 - 云通讯
节点和云之间的所有通讯都基于安全的 MQTT 协议。
安全性
TLS
TLS 使用基于 X.509 证书的双向身份验证,保障节点和云之间通讯的安全性。客户端密钥在节点中生成,然后生成一个证书签名请求 (CSR),由 CA 签名并在 Claiming 过程中作为客户端证书交还给节点。
MQTT 策略
根据 MQTT 策略规定,只有当客户端 ID 与节点 ID 匹配时节点才能建立连接,而且节点只能订阅和发布以 node/<node_id>/
开头的主题。
节点配置
节点 ID、属性、设备、参数等所有与节点相关的信息,都合并成一个称为“节点配置”的对象。节点配置信息是节点启动时向 ESP RainMaker 云报告的第一个信息,相同的信息将原样报告给移动应用程序、CLI 等客户端,客户端可以解析和任意使用节点配置。您可以根据需要添加或编辑节点配置,并在客户端中进行适当处理。
以下是 ESP RainMaker 固件和移动应用程序当前使用的节点配置。
注意:加粗项是必要信息。括号中的字符串表示相应的键(JSON 格式)和数据类型。
- 节点 ID(node_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"
}]
}]
}