本地控制服务
ESP RainMaker 支持通过本地控制来控制设备,详见 本地控制 文档。最初,本地网络通信是基于纯文本的 HTTP 建立的。更新后,ESP RainMaker 使用了 ESP-IDF 的 protocomm_security1 安全级别,进一步增强了本地网络通信的安全性,实现了基于所有权证明令牌 (PoP) 的访问控制以及加密通信。
服务概述
启用安全级别为 1 的本地控制后,将在节点配置中添加如下 服务:
{
"name": "Local Control",
"params": [{
"data_type": "string",
"name": "POP",
"properties": [
"read"
],
"type": "esp.param.local_control_pop"
},
{
"data_type": "int",
"name": "Type",
"properties": [
"read"
],
"type": "esp.param.local_control_type"
}
],
"type": "esp.service.local_control"
}
可在节点参数中查看所有权证明令牌的值以及控制类型,如下所示:
{
"Local Control": {
"POP": "a8d8e5ce",
"Type": 1
}
}
工作原理
节点与用户关联后,即可通过移动应用等客户端在节点配置中搜索本地控制服务,查看节点是否支持安全本地控制。若支持该服务,客户端将从节点参数中获取 PoP。通过 mDNS 在本地网络上检测到节点时,将使用获取的 PoP 与节点建立 安全会话,随后基于 ESP-IDF 的 本地控制 功能与节点通信。
需注意,此处的 PoP 是由节点自身生成的,而非配网时用到的 PoP。配网 PoP 是在生产过程中编程的,且在节点生命周期内保持不变,其仅用于配置节点,从而降低代码泄露的风险。然而,如果将相同代码用于本地控制,一经泄露,即使重置并重新配置节点,同一网络上的任何用户仍可访问该节点。尽管在大多数情况下,我们只会将可信的客户端连接至同一 Wi-Fi 网络,但使用相同代码进行本地控制仍存在潜在风险。
随机生成 PoP 并使用节点参数进行报告的优势如下:
- PoP 生成并存储在 NVS 中,支持通过恢复出厂设置进行更改。本地控制服务还可后续支持用户按需定期更改 PoP。
- 所有共享当前节点的用户都可以使用此 PoP。
鉴于本地控制兼顾运行速度与安全性,推荐在项目中默认开启该选项。但需注意,当前安全本地控制仅兼容 ESP-IDF release/v4.2(v4.2.2 之后版本)、release/v4.3.2 及之后的更高版本。