跳转到内容

OpenThread 组件

Thread 是一种用于 IoT 设备的低功耗网状网络标准。低功耗对于电池供电的智能家居设备很重要。但是,它也是低带宽的,非常适合不发送大量数据的应用,如开关或运动传感器。

Thread 使用与 Zigbee 相同的 RF 技术(IEEE 802.15.4),但提供类似于 Wi-Fi 的 IPv6 连接。与 Zigbee 不同,Thread 本身不允许控制设备:它只是一种通信协议。要控制 Thread 设备,需要更高级别的协议:Matter 或 Apple HomeKit 或 ESPHome API

此组件允许 ESPHome 节点通过 Thread 网络与 Home Assistant 通信。它允许向 Home Assistant 发送传感器状态和接收空中更新(OTA)。此 OpenThread 组件依赖于 OpenThread,这是 Thread 的开源实现。

NOTE

您需要一个 Thread 边界路由器 来将节点连接到 Thread 网络。边界路由器将 Home Assistant 网络上的 IPv6 数据包转换为 Thread 网络上的 6LoWPAN 数据包,允许跨两个网络进行通信。

此组件需要 ESP32(ESP32-C5、ESP32-C6 或 ESP32-H2,因为它们有 Thread 无线电芯片)并使用 ESP-IDF。

# ESP32-C6-DevKitM-1 开发板的 ESP-IDF 配置示例
esp32:
board: esp32-c6-devkitm-1
framework:
type: esp-idf

此示例展示如何为节点配置 Thread Dataset。

# OpenThread 组件配置示例
network:
enable_ipv6: true
openthread:
device_type: FTD
channel: 13
network_name: OpenThread-8f28
network_key: 0xdfd34f0f05cad978ec4e32b0413038ff
pan_id: 0x8f28
ext_pan_id: 0xd63e8e3e495ebbc3
pskc: 0xc23a76e98f1a6483639b1ac1271e2e27
mesh_local_prefix: fd53:145f:ed22:ad81::/64
force_dataset: true
  • device_type (可选, 枚举): OpenThread 设备类型,FTDMTD。默认为 FTD
  • channel (整数): 通道号,从 11 到 26
  • network_name (字符串): 人类可读的网络名称
  • network_key (字符串): OpenThread 网络密钥
  • pan_id (字符串): 2 字节个人区域网络 ID(PAN ID)
  • ext_pan_id (字符串): 8 字节扩展个人区域网络 ID(XPAN ID)
  • pskc (字符串): PSKc 用于认证外部 Thread Commissioner 到 Thread 网络
  • mesh_local_prefix (ipv6network): 用于构建网格本地 IPv6 地址(ML-EID),这些地址在网络分区内对每个 Thread 设备都是唯一的
  • force_dataset (可选, 布尔值): 强制 ESPHome 配置覆盖设备上先前存储的任何 OpenThread 网络数据集,确保配置的参数在启动时始终应用。默认为 false
  • use_address (可选, 字符串): 手动覆盖用于连接 ESP 的地址。默认为自动生成的值。
  • poll_period (可选, 时间): 当 MTD 设备上设置了 Poll_Period 时,父路由器会将任何消息排队并等待子设备提交轮询数据请求

NOTE

当 poll_period > 0 时,esphome.ota 不工作,请改用 http_request.ota,需要测试 timeout 和 watchdog_timeout 以找到正确的值。可能需要大于 100 秒的值。

也可以从 Home Assistant 中的 Thread 信息提供整个 dataset TLV,各个值将自动从中提取。

# 来自 Home Assistant 中 Thread 信息的 OpenThread TLV 值示例
openthread:
tlv: 0e080000000000010000000300001035060004001fffe00208e227ac6a7f24052f0708fdb753eb517cb4d3051062b2442a928d9ea3b947a1618fc4085a030f4f70656e5468726561642d393837330102987304105330d857354330133c05e1fd7ae81a910c0402a0f7f8
  • tlv (字符串): 来自 Home Assistant 中 Thread 信息的 dataset TLV

请参阅 https://openthread.io/guides/thread-primer/node-roles-and-types

  • FTD - 全功能 Thread 设备,设置 CONFIG_OPENTHREAD_FTD,观察到的行为是这将启用 REED(路由器合格的终端设备)并可以升级为路由器。
  • MTD - 最小 Thread 设备,设置 CONFIG_OPENTHREAD_MTD,不能升级为路由器。从 MTD 切换回 FTD 不会产生 REED,除非清除非易失性存储(NVS)。

Poll Period 使设备作为 SED 运行。后续工作需要利用 esp-idf 中的电源管理和/或轻睡眠功能。 如果设备始终处于唤醒状态,API 超时为 60 秒,因此当轮询周期大于 60 秒时,ping 请求将强制与父设备交互。