空中更新
ESPHome 支持”空中”(OTA)远程更新设备。每个更新机制都是基本 ota 组件的一个平台,并将有自己的配置变量。
在 2024.6.0 版本中,ota 组件从独立组件转变为平台组件。此更改是为了便于使用多种更新机制,实现更大的灵活性。
可用平台:
- esphome:使用 ESPHome 原生协议的默认 OTA 方法(由仪表板和 CLI 使用)
- http_request:从远程 Web 服务器拉取固件更新
- web_server:通过设备的 Web 界面启用固件上传
# 示例配置条目ota: - platform: ...-
on_progress (可选, 自动化):OTA 更新进行期间(大约每秒)要执行的动作。请参阅
on_progress。 -
on_state_change (可选, 自动化):OTA 更新状态更改时要执行的动作。请参阅
on_state_change。
OTA 自动化
Section titled “OTA 自动化”OTA 组件提供各种 自动化,可用于在 OTA 更新过程中提供反馈。使用这些自动化触发器时,请注意:
-
OTA 更新在进行时会阻塞主应用程序循环。您将无法使用仅在其
loop()方法中更新输出的组件来表示状态变化。换句话说:如果您尝试使用组件 X 显示 OTA 进度,但更新仅在 OTA 更新完成后才出现,则组件 X 不能用于提供 OTA 更新反馈。 -
您的自动化动作不得消耗任何大量时间;否则,OTA 更新可能会失败。
on_begin
Section titled “on_begin”当 OTA 更新开始时将触发此自动化。
ota: - platform: ... on_begin: then: - logger.log: "OTA 开始"on_progress
Section titled “on_progress”使用此自动化,可以报告 OTA 更新进度。它将在 OTA 更新期间重复触发。您可以从触发器的变量 x 获取实际进度百分比(0 到 100 之间的值)。
ota: - platform: ... on_progress: then: - logger.log: format: "OTA 进度 %0.1f%%" args: ["x"]on_end
Section titled “on_end”当 OTA 更新成功完成时,在设备重启之前立即触发此自动化。
由于更新已完成,您可以安全地使用需要一些时间完成的自动化动作。例如,如果您想让 LED 闪烁,在重启前需要多次暂停/延迟。此时 OTA 更新不会失败,因为已经完成。
ota: - platform: ... on_end: then: - logger.log: "OTA 结束"on_error
Section titled “on_error”当 OTA 更新失败时将触发此自动化。您可以从变量 x 获取内部错误代码。
就像 on_end 一样,您可以安全地使用需要一些时间完成的自动化,因为 OTA 更新过程已经完成。
ota: - platform: ... on_error: then: - logger.log: format: "OTA 更新错误 %d" args: ["x"]on_state_change
Section titled “on_state_change”每次状态更改时都会触发此自动化。您可以从变量 state 获取实际状态,它将包含 OTAState 枚举的值之一。这些值是:
ota::OTA_STARTEDota::OTA_IN_PROGRESS(将在更新期间重复调用)ota::OTA_COMPLETEDota::OTA_ERROR
ota: - platform: ... on_state_change: then: - if: condition: lambda: return state == ota::OTA_STARTED; then: - logger.log: "OTA 开始"除了 OTA 更新外,ESPHome 还支持”安全模式”以帮助在更新不如预期时进行恢复。这由 ota 组件自动启用,但如果需要可以禁用。有关详细信息,请参阅 安全模式。