跳转到内容

通过 BLE 使用 Improv

ESPHome 中的 esp32_improv 组件实现了开放的 Improv 标准。 它通过使用蓝牙低功耗(BLE)接收凭据来在 ESP32 设备上配置 Wi-Fi。

esp32_improv 组件会自动设置 BLE 服务器。

WARNING

ESP32 上的 BLE 软件栈会占用设备上大量的 RAM。

如果你在设备的配置中包含太多额外组件,很可能出现崩溃。内存密集型组件,如语音助手和其他音频组件,最有可能引发问题。

# Example configuration entry
wifi:
# ...
esp32_improv:
authorizer: binary_sensor_id
  • authorizer (Required, ID): 用于授权的二进制传感器。 也可接受 none 以跳过授权。

  • authorized_duration (Optional, Time): 授权超时并需要 重新授权前的时长。默认为 1min。

  • status_indicator (Optional, ID): 用于向用户显示反馈的输出。

  • identify_duration (Optional, Time): 标识(identify)操作的持续时长。默认为 10s。

  • wifi_timeout (Optional, Time): 在 Wi-Fi 不再连接后、 启动 Improv 服务之前等待的时长。默认为 90s。

  • next_url (Optional, string): 配置完成后打开的 URL。默认为 https://my.home-assistant.io/redirect/config_flow_start?domain=esphome。

  • on_start (Optional, Automation): 当 Improv 正在等待授权和/或已授权时执行的操作。参见 on_start。

  • on_provisioned (Optional, Automation): 当配置流程完成时执行的操作。参见 on_provisioned。

  • on_provisioning (Optional, Automation): 当设备开始配置流程时执行的操作。参见 on_provisioning。

  • on_stop (Optional, Automation): 当 Improv 停止时执行的操作。 参见 on_stop。

  • on_state (Optional, Automation): 当 Improv 状态发生变化时执行的操作。参见 on_state。

ESP32 Improv 组件提供了多种自动化,可用于在 Improv 配置流程期间提供反馈。

当设备正在等待授权时(通常是通过按下设备上的按钮,如果已配置——参见上面的 authorizer)和/或已授权时,将触发此自动化。

esp32_improv:
on_start:
then:
- logger.log: "Improv awaiting authorization/authorized"

当配置流程完成时,将触发此自动化。

esp32_improv:
on_provisioned:
then:
- logger.log: "Improv provisioned"

当配置流程开始时,将触发此自动化。

esp32_improv:
on_provisioning:
then:
- logger.log: "Improv provisioning"

当 Improv 停止时,将触发此自动化。

esp32_improv:
on_stop:
then:
- logger.log: "Improv stopped"

此自动化将在每次状态变化时触发。

在此自动化的 lambda 中可以使用两个变量。它们是:

  • state, an enum named improv::State, having one of the following values:

    • improv::STATE_STOPPED
    • improv::STATE_AWAITING_AUTHORIZATION
    • improv::STATE_AUTHORIZED
    • improv::STATE_PROVISIONING
    • improv::STATE_PROVISIONED
  • error, an enum named improv::Error, having one of the following values:

    • improv::ERROR_NONE
    • improv::ERROR_INVALID_RPC
    • improv::ERROR_UNKNOWN_RPC
    • improv::ERROR_UNABLE_TO_CONNECT
    • improv::ERROR_NOT_AUTHORIZED
    • improv::ERROR_UNKNOWN
esp32_improv:
on_state:
then:
- if:
condition:
lambda: return state == improv::STATE_AUTHORIZED;
then:
- logger.log: "Improv state is STATE_AUTHORIZED"

status_indicator 具有以下模式:

  • 常亮:Improv 服务处于活动状态,正在等待授权。
  • 每秒闪烁一次:Improv 服务正在等待凭据。
  • 每秒闪烁 3 次,中间有间歇:客户端已使用标识(identify)命令。
  • 每秒闪烁 5 次:正在验证凭据并将凭据保存到设备。
  • 熄灭:Improv 服务未运行。