Home Assistant Unofficial Reference 2024.12.1
config_flow.py
Go to the documentation of this file.
1 """Config flow for the Home Assistant Green integration."""
2 
3 from __future__ import annotations
4 
5 import asyncio
6 import logging
7 from typing import Any
8 
9 import aiohttp
10 import voluptuous as vol
11 
13  HassioAPIError,
14  async_get_green_settings,
15  async_set_green_settings,
16 )
17 from homeassistant.config_entries import (
18  ConfigEntry,
19  ConfigFlow,
20  ConfigFlowResult,
21  OptionsFlow,
22 )
23 from homeassistant.core import callback
24 from homeassistant.helpers import selector
25 from homeassistant.helpers.hassio import is_hassio
26 
27 from .const import DOMAIN
28 
29 _LOGGER = logging.getLogger(__name__)
30 
31 STEP_HW_SETTINGS_SCHEMA = vol.Schema(
32  {
33  # Sorted to match front panel left to right
34  vol.Required("power_led"): selector.BooleanSelector(),
35  vol.Required("activity_led"): selector.BooleanSelector(),
36  vol.Required("system_health_led"): selector.BooleanSelector(),
37  }
38 )
39 
40 
42  """Handle a config flow for Home Assistant Green."""
43 
44  VERSION = 1
45 
46  @staticmethod
47  @callback
49  config_entry: ConfigEntry,
50  ) -> HomeAssistantGreenOptionsFlow:
51  """Return the options flow."""
53 
54  async def async_step_system(
55  self, data: dict[str, Any] | None = None
56  ) -> ConfigFlowResult:
57  """Handle the initial step."""
58  return self.async_create_entryasync_create_entryasync_create_entry(title="Home Assistant Green", data={})
59 
60 
62  """Handle an option flow for Home Assistant Green."""
63 
64  _hw_settings: dict[str, bool] | None = None
65 
66  async def async_step_init(
67  self, user_input: dict[str, Any] | None = None
68  ) -> ConfigFlowResult:
69  """Manage the options."""
70  if not is_hassio(self.hass):
71  return self.async_abortasync_abort(reason="not_hassio")
72 
73  return await self.async_step_hardware_settings()
74 
75  async def async_step_hardware_settings(
76  self, user_input: dict[str, Any] | None = None
77  ) -> ConfigFlowResult:
78  """Handle hardware settings."""
79 
80  if user_input is not None:
81  if self._hw_settings_hw_settings == user_input:
82  return self.async_create_entryasync_create_entry(data={})
83  try:
84  async with asyncio.timeout(10):
85  await async_set_green_settings(self.hass, user_input)
86  except (aiohttp.ClientError, TimeoutError, HassioAPIError) as err:
87  _LOGGER.warning("Failed to write hardware settings", exc_info=err)
88  return self.async_abortasync_abort(reason="write_hw_settings_error")
89  return self.async_create_entryasync_create_entry(data={})
90 
91  try:
92  async with asyncio.timeout(10):
93  self._hw_settings_hw_settings: dict[str, bool] = await async_get_green_settings(
94  self.hass
95  )
96  except (aiohttp.ClientError, TimeoutError, HassioAPIError) as err:
97  _LOGGER.warning("Failed to read hardware settings", exc_info=err)
98  return self.async_abortasync_abort(reason="read_hw_settings_error")
99 
100  schema = self.add_suggested_values_to_schemaadd_suggested_values_to_schema(
101  STEP_HW_SETTINGS_SCHEMA, self._hw_settings_hw_settings
102  )
103 
104  return self.async_show_formasync_show_form(step_id="hardware_settings", data_schema=schema)
HomeAssistantGreenOptionsFlow async_get_options_flow(ConfigEntry config_entry)
Definition: config_flow.py:50
ConfigFlowResult async_step_system(self, dict[str, Any]|None data=None)
Definition: config_flow.py:56
ConfigFlowResult async_step_init(self, dict[str, Any]|None user_input=None)
Definition: config_flow.py:68
ConfigFlowResult async_create_entry(self, *str title, Mapping[str, Any] data, str|None description=None, Mapping[str, str]|None description_placeholders=None, Mapping[str, Any]|None options=None)
vol.Schema add_suggested_values_to_schema(self, vol.Schema data_schema, Mapping[str, Any]|None suggested_values)
_FlowResultT async_show_form(self, *str|None step_id=None, vol.Schema|None data_schema=None, dict[str, str]|None errors=None, Mapping[str, str]|None description_placeholders=None, bool|None last_step=None, str|None preview=None)
_FlowResultT async_create_entry(self, *str|None title=None, Mapping[str, Any] data, str|None description=None, Mapping[str, str]|None description_placeholders=None)
_FlowResultT async_abort(self, *str reason, Mapping[str, str]|None description_placeholders=None)
dict async_set_green_settings(HomeAssistant hass, dict[str, bool] settings)
Definition: handler.py:104
dict[str, bool] async_get_green_settings(HomeAssistant hass)
Definition: handler.py:95
bool is_hassio(HomeAssistant hass)
Definition: __init__.py:302