diff --git a/custom_components/panasonic_cc/__init__.py b/custom_components/panasonic_cc/__init__.py index 62ef278..38c14cb 100644 --- a/custom_components/panasonic_cc/__init__.py +++ b/custom_components/panasonic_cc/__init__.py @@ -25,6 +25,9 @@ DEFAULT_ENERGY_FETCH_INTERVAL, DEFAULT_ENABLE_DAILY_ENERGY_SENSOR, CONF_USE_PANASONIC_PRESET_NAMES, + DEFAULT_USE_PANASONIC_PRESET_NAMES, + CONF_FORCE_ENABLE_NANOE, + DEFAULT_FORCE_ENABLE_NANOE, PANASONIC_DEVICES, COMPONENT_TYPES, STARTUP, @@ -76,6 +79,30 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry): if PANASONIC_DEVICES not in hass.data: hass.data[PANASONIC_DEVICES] = [] + # Migrate initial setup options from entry.data to entry.options + # so that all consumers can read from entry.options consistently. + if not entry.options: + hass.config_entries.async_update_entry( + entry, + options={ + CONF_ENABLE_DAILY_ENERGY_SENSOR: conf.get( + CONF_ENABLE_DAILY_ENERGY_SENSOR, DEFAULT_ENABLE_DAILY_ENERGY_SENSOR + ), + CONF_FORCE_ENABLE_NANOE: conf.get( + CONF_FORCE_ENABLE_NANOE, DEFAULT_FORCE_ENABLE_NANOE + ), + CONF_USE_PANASONIC_PRESET_NAMES: conf.get( + CONF_USE_PANASONIC_PRESET_NAMES, DEFAULT_USE_PANASONIC_PRESET_NAMES + ), + CONF_DEVICE_FETCH_INTERVAL: conf.get( + CONF_DEVICE_FETCH_INTERVAL, DEFAULT_DEVICE_FETCH_INTERVAL + ), + CONF_ENERGY_FETCH_INTERVAL: conf.get( + CONF_ENERGY_FETCH_INTERVAL, DEFAULT_ENERGY_FETCH_INTERVAL + ), + }, + ) + username = conf[CONF_USERNAME] password = conf[CONF_PASSWORD] enable_daily_energy_sensor = entry.options.get(CONF_ENABLE_DAILY_ENERGY_SENSOR, DEFAULT_ENABLE_DAILY_ENERGY_SENSOR) diff --git a/custom_components/panasonic_cc/config_flow.py b/custom_components/panasonic_cc/config_flow.py index 8402645..e65f33d 100644 --- a/custom_components/panasonic_cc/config_flow.py +++ b/custom_components/panasonic_cc/config_flow.py @@ -40,9 +40,9 @@ class FlowHandler(config_entries.ConfigFlow, domain=PANASONIC_DOMAIN): @callback def async_get_options_flow(config_entry): """Get the options flow for this handler.""" - return PanasonicOptionsFlowHandler(config_entry) + return PanasonicOptionsFlowHandler() - async def _create_entry(self, username, password): + async def _create_entry(self, user_input): """Register new entry.""" # Check if ip already is registered for entry in self._async_current_entries(): @@ -50,21 +50,21 @@ async def _create_entry(self, username, password): return self.async_abort(reason="already_configured") return self.async_create_entry(title="", data={ - CONF_USERNAME: username, - CONF_PASSWORD: password, + CONF_USERNAME: user_input[CONF_USERNAME], + CONF_PASSWORD: user_input[CONF_PASSWORD], CONF_FORCE_OUTSIDE_SENSOR: False, - CONF_FORCE_ENABLE_NANOE: DEFAULT_FORCE_ENABLE_NANOE, - CONF_ENABLE_DAILY_ENERGY_SENSOR: DEFAULT_ENABLE_DAILY_ENERGY_SENSOR, - CONF_USE_PANASONIC_PRESET_NAMES: DEFAULT_USE_PANASONIC_PRESET_NAMES, - CONF_DEVICE_FETCH_INTERVAL: DEFAULT_DEVICE_FETCH_INTERVAL, - CONF_ENERGY_FETCH_INTERVAL: DEFAULT_ENERGY_FETCH_INTERVAL, + CONF_FORCE_ENABLE_NANOE: user_input.get(CONF_FORCE_ENABLE_NANOE, DEFAULT_FORCE_ENABLE_NANOE), + CONF_ENABLE_DAILY_ENERGY_SENSOR: user_input.get(CONF_ENABLE_DAILY_ENERGY_SENSOR, DEFAULT_ENABLE_DAILY_ENERGY_SENSOR), + CONF_USE_PANASONIC_PRESET_NAMES: user_input.get(CONF_USE_PANASONIC_PRESET_NAMES, DEFAULT_USE_PANASONIC_PRESET_NAMES), + CONF_DEVICE_FETCH_INTERVAL: user_input.get(CONF_DEVICE_FETCH_INTERVAL, DEFAULT_DEVICE_FETCH_INTERVAL), + CONF_ENERGY_FETCH_INTERVAL: user_input.get(CONF_ENERGY_FETCH_INTERVAL, DEFAULT_ENERGY_FETCH_INTERVAL), }) - async def _create_device(self, username, password): + async def _create_device(self, user_input): """Create device.""" try: client = async_get_clientsession(self.hass) - api = ApiClient(username, password, client) + api = ApiClient(user_input[CONF_USERNAME], user_input[CONF_PASSWORD], client) await api.start_session() devices = api.get_devices() @@ -82,7 +82,7 @@ async def _create_device(self, username, password): _LOGGER.exception("Unexpected error creating device", e) return self.async_abort(reason="device_fail") - return await self._create_entry(username, password) + return await self._create_entry(user_input) async def async_step_user(self, user_input=None): """User initiated config flow.""" @@ -114,14 +114,14 @@ async def async_step_user(self, user_input=None): ): int, }) ) - return await self._create_device(user_input[CONF_USERNAME], user_input[CONF_PASSWORD]) + return await self._create_device(user_input) async def async_step_import(self, user_input): """Import a config entry.""" username = user_input.get(CONF_USERNAME) if not username: return await self.async_step_user() - return await self._create_device(username, user_input[CONF_PASSWORD]) + return await self._create_device(user_input) async def async_step_reconfigure( self, entry_data: Mapping[str, Any] @@ -186,10 +186,6 @@ async def async_step_reconfigure_confirm( class PanasonicOptionsFlowHandler(config_entries.OptionsFlow): """Handle Panasonic options.""" - def __init__(self, config_entry): - """Initialize Panasonic options flow.""" - self.config_entry = config_entry - async def async_step_init( self, user_input: Optional[Dict[str, Any]] = None ) -> config_entries.ConfigFlowResult: