65 lines
2.2 KiB
Markdown
65 lines
2.2 KiB
Markdown
---
|
|
title: Integration Configuration Options
|
|
sidebar_label: Configuration Options
|
|
---
|
|
|
|
An integration that is configured via a config entry can expose options to the user to allow tweaking behavior of the integration, like which devices or locations should be integrated.
|
|
|
|
Config Entry Options uses the [Data Flow Entry framework](data_entry_flow_index.md) to allow users to update a config entries options. Components that want to support config entry options will need to define an Options Flow Handler.
|
|
|
|
## Options support
|
|
|
|
For an integration to support options it needs to have an `async_get_options_flow` method in its config flow handler. Calling it will return an instance of the components options flow handler.
|
|
|
|
```python
|
|
@staticmethod
|
|
@callback
|
|
def async_get_options_flow(config_entry):
|
|
return OptionsFlowHandler()
|
|
```
|
|
|
|
## Flow handler
|
|
|
|
The Flow handler works just like the config flow handler, except that the first step in the flow will always be `async_step_init`.
|
|
|
|
```python
|
|
class OptionsFlowHandler(config_entries.OptionsFlow):
|
|
async def async_step_init(self, user_input=None):
|
|
"""Manage the options."""
|
|
if user_input is not None:
|
|
return self.async_create_entry(title="", data=user_input)
|
|
|
|
return self.async_show_form(
|
|
step_id="init",
|
|
data_schema=vol.Schema(
|
|
{
|
|
vol.Required(
|
|
"show_things",
|
|
default=self.config_entry.options.get("show_things"),
|
|
): bool
|
|
}
|
|
),
|
|
)
|
|
```
|
|
|
|
## Signal updates
|
|
|
|
If the component should act on updated options, you can register an update listener to the config entry that will be called when the entry is updated.
|
|
|
|
```python
|
|
unsub = entry.add_update_listener(update_listener)
|
|
```
|
|
|
|
The Listener shall be an async function that takes the same input as async_setup_entry. Options can then be accessed from `entry.options`.
|
|
|
|
```python
|
|
async def update_listener(hass, entry):
|
|
"""Handle options update."""
|
|
```
|
|
|
|
Don't forget to unsubscribe the update listener when your config entry is unloaded. You can do this by calling the unsubscribe function returned from adding the listener:
|
|
|
|
```python
|
|
unsub()
|
|
```
|