Improv via BLE
The esp32_improv component in ESPHome implements the open Improv standard
for configuring Wi-Fi on an ESP32 device by using Bluetooth Low Energy (BLE) to receive the credentials.
The esp32_improv component will automatically set up the BLE Server.
WARNING
The BLE software stack on the ESP32 consumes a significant amount of RAM on the device.
Crashes are likely to occur if you include too many additional components in your device’s configuration. Memory-intensive components such as Voice Assistant and other audio components are most likely to cause issues.
# Example configuration entrywifi: # ...
esp32_improv: authorizer: binary_sensor_idConfiguration variables
Section titled “Configuration variables”-
authorizer (Required, ID): A binary sensor to authorize with. Also accepts
noneto skip authorization. -
authorized_duration (Optional, Time): The amount of time until authorization times out and needs to be re-authorized. Defaults to
1min. -
status_indicator (Optional, ID): An output to display feedback to the user.
-
identify_duration (Optional, Time): The amount of time to identify for. Defaults to
10s. -
wifi_timeout (Optional, Time): The amount of time to wait before starting the Improv service after Wi-Fi is no longer connected. Defaults to
90s. -
next_url (Optional, string): The URL to open after provisioning is complete. Defaults to
https://my.home-assistant.io/redirect/config_flow_start?domain=esphome. -
on_start (Optional, Automation): An action to be performed when Improv is waiting for authorization and/or upon authorization. See
on_start. -
on_provisioned (Optional, Automation): An action to be performed when provisioning has completed. See
on_provisioned. -
on_provisioning (Optional, Automation): An action to be performed when the device begins the provisioning process. See
on_provisioning. -
on_stop (Optional, Automation): An action to be performed when Improv has stopped. See
on_stop. -
on_state (Optional, Automation): An action to be performed when an Improv state change happens. See
on_state.
Improv Automations
Section titled “Improv Automations”The ESP32 Improv component provides various automations that can be used to provide feedback during the Improv provisioning process.
on_start
Section titled “on_start”This automation will be triggered when the device is waiting for authorization (usually by pressing a button on the
device, if configured — see authorizer above) and/or upon authorization.
esp32_improv: on_start: then: - logger.log: "Improv awaiting authorization/authorized"on_provisioned
Section titled “on_provisioned”This automation will be triggered when provisioning has completed.
esp32_improv: on_provisioned: then: - logger.log: "Improv provisioned"on_provisioning
Section titled “on_provisioning”This automation will be triggered when provisioning begins.
esp32_improv: on_provisioning: then: - logger.log: "Improv provisioning"on_stop
Section titled “on_stop”This automation will be triggered when Improv has stopped.
esp32_improv: on_stop: then: - logger.log: "Improv stopped"on_state
Section titled “on_state”This automation will be triggered on every state change.
Two variables are available for use in lambdas within this automation. They are:
-
state, anenumnamedimprov::State, having one of the following values:improv::STATE_STOPPEDimprov::STATE_AWAITING_AUTHORIZATIONimprov::STATE_AUTHORIZEDimprov::STATE_PROVISIONINGimprov::STATE_PROVISIONED
-
error, anenumnamedimprov::Error, having one of the following values:improv::ERROR_NONEimprov::ERROR_INVALID_RPCimprov::ERROR_UNKNOWN_RPCimprov::ERROR_UNABLE_TO_CONNECTimprov::ERROR_NOT_AUTHORIZEDimprov::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
Section titled “Status Indicator”The status_indicator has the following patterns:
- solid: The improv service is active and waiting to be authorized.
- blinking once per second: The improv service is awaiting credentials.
- blinking 3 times per second with a break in between: The identify command has been used by the client.
- blinking 5 times per second: Credentials are being verified and saved to the device.
- off: The improv service is not running.