跳转到内容

通过 BLE 进行 Improv

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

esp32_improv 组件将自动设置 BLE 服务器

WARNING

ESP32 上的 BLE 软件栈会消耗设备上大量的 RAM。

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

# 示例配置条目
wifi:
# ...
esp32_improv:
authorizer: binary_sensor_id
  • authorizer (必需, ID): 用于授权的二进制传感器。 也接受 none 以跳过授权。

  • authorized_duration (可选, Time): 授权超时并需要重新授权的时间量。默认为 1min

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

  • identify_duration (可选, Time): 识别持续时间。默认为 10s

  • wifi_timeout (可选, Time): Wi-Fi 断开连接后等待多久再启动 Improv 服务的时间。默认为 90s

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

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

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

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

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

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

ESP32 Improv 组件提供各种自动化,可用于在 Improv 配置过程中提供反馈。

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

esp32_improv:
on_start:
then:
- logger.log: "Improv 等待授权/已授权"

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

esp32_improv:
on_provisioned:
then:
- logger.log: "Improv 已配置"

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

esp32_improv:
on_provisioning:
then:
- logger.log: "Improv 正在配置"

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

esp32_improv:
on_stop:
then:
- logger.log: "Improv 已停止"

每次状态变化时都会触发此自动化。

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

  • state,一个名为 improv::Stateenum,具有以下值之一:

    • improv::STATE_STOPPED
    • improv::STATE_AWAITING_AUTHORIZATION
    • improv::STATE_AUTHORIZED
    • improv::STATE_PROVISIONING
    • improv::STATE_PROVISIONED
  • error,一个名为 improv::Errorenum,具有以下值之一:

    • 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_AUTHORIZED"

status_indicator 具有以下模式:

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