Get option flow defaults from yaml for non configured MQTT options (#40177)

pull/40313/head
Erik Montnemery 2020-09-19 22:10:01 +02:00 committed by GitHub
parent a9168c04fd
commit a50f121011
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 30 additions and 15 deletions

View File

@ -60,6 +60,7 @@ from .const import (
CONF_RETAIN, CONF_RETAIN,
CONF_STATE_TOPIC, CONF_STATE_TOPIC,
CONF_WILL_MESSAGE, CONF_WILL_MESSAGE,
DATA_MQTT_CONFIG,
DEFAULT_BIRTH, DEFAULT_BIRTH,
DEFAULT_DISCOVERY, DEFAULT_DISCOVERY,
DEFAULT_PAYLOAD_AVAILABLE, DEFAULT_PAYLOAD_AVAILABLE,
@ -88,7 +89,6 @@ _LOGGER = logging.getLogger(__name__)
DOMAIN = "mqtt" DOMAIN = "mqtt"
DATA_MQTT = "mqtt" DATA_MQTT = "mqtt"
DATA_MQTT_CONFIG = "mqtt_config"
SERVICE_PUBLISH = "publish" SERVICE_PUBLISH = "publish"
SERVICE_DUMP = "dump" SERVICE_DUMP = "dump"

View File

@ -24,6 +24,7 @@ from .const import (
CONF_BROKER, CONF_BROKER,
CONF_DISCOVERY, CONF_DISCOVERY,
CONF_WILL_MESSAGE, CONF_WILL_MESSAGE,
DATA_MQTT_CONFIG,
DEFAULT_BIRTH, DEFAULT_BIRTH,
DEFAULT_DISCOVERY, DEFAULT_DISCOVERY,
DEFAULT_WILL, DEFAULT_WILL,
@ -162,6 +163,7 @@ class MQTTOptionsFlowHandler(config_entries.OptionsFlow):
"""Manage the MQTT options.""" """Manage the MQTT options."""
errors = {} errors = {}
current_config = self.config_entry.data current_config = self.config_entry.data
yaml_config = self.hass.data.get(DATA_MQTT_CONFIG, {})
if user_input is not None: if user_input is not None:
can_connect = await self.hass.async_add_executor_job( can_connect = await self.hass.async_add_executor_job(
try_connection, try_connection,
@ -178,20 +180,22 @@ class MQTTOptionsFlowHandler(config_entries.OptionsFlow):
errors["base"] = "cannot_connect" errors["base"] = "cannot_connect"
fields = OrderedDict() fields = OrderedDict()
fields[vol.Required(CONF_BROKER, default=current_config[CONF_BROKER])] = str current_broker = current_config.get(CONF_BROKER, yaml_config.get(CONF_BROKER))
fields[vol.Required(CONF_PORT, default=current_config[CONF_PORT])] = vol.Coerce( current_port = current_config.get(CONF_PORT, yaml_config.get(CONF_PORT))
int current_user = current_config.get(CONF_USERNAME, yaml_config.get(CONF_USERNAME))
) current_pass = current_config.get(CONF_PASSWORD, yaml_config.get(CONF_PASSWORD))
fields[vol.Required(CONF_BROKER, default=current_broker)] = str
fields[vol.Required(CONF_PORT, default=current_port)] = vol.Coerce(int)
fields[ fields[
vol.Optional( vol.Optional(
CONF_USERNAME, CONF_USERNAME,
description={"suggested_value": current_config.get(CONF_USERNAME)}, description={"suggested_value": current_user},
) )
] = str ] = str
fields[ fields[
vol.Optional( vol.Optional(
CONF_PASSWORD, CONF_PASSWORD,
description={"suggested_value": current_config.get(CONF_PASSWORD)}, description={"suggested_value": current_pass},
) )
] = str ] = str
@ -205,6 +209,7 @@ class MQTTOptionsFlowHandler(config_entries.OptionsFlow):
"""Manage the MQTT options.""" """Manage the MQTT options."""
errors = {} errors = {}
current_config = self.config_entry.data current_config = self.config_entry.data
yaml_config = self.hass.data.get(DATA_MQTT_CONFIG, {})
options_config = {} options_config = {}
if user_input is not None: if user_input is not None:
bad_birth = False bad_birth = False
@ -253,16 +258,24 @@ class MQTTOptionsFlowHandler(config_entries.OptionsFlow):
) )
return self.async_create_entry(title="", data=None) return self.async_create_entry(title="", data=None)
birth = {**DEFAULT_BIRTH, **current_config.get(CONF_BIRTH_MESSAGE, {})} birth = {
will = {**DEFAULT_WILL, **current_config.get(CONF_WILL_MESSAGE, {})} **DEFAULT_BIRTH,
**current_config.get(
CONF_BIRTH_MESSAGE, yaml_config.get(CONF_BIRTH_MESSAGE, {})
),
}
will = {
**DEFAULT_WILL,
**current_config.get(
CONF_WILL_MESSAGE, yaml_config.get(CONF_WILL_MESSAGE, {})
),
}
discovery = current_config.get(
CONF_DISCOVERY, yaml_config.get(CONF_DISCOVERY, DEFAULT_DISCOVERY)
)
fields = OrderedDict() fields = OrderedDict()
fields[ fields[vol.Optional(CONF_DISCOVERY, default=discovery)] = bool
vol.Optional(
CONF_DISCOVERY,
default=current_config.get(CONF_DISCOVERY, DEFAULT_DISCOVERY),
)
] = bool
# Birth message is disabled if CONF_BIRTH_MESSAGE = {} # Birth message is disabled if CONF_BIRTH_MESSAGE = {}
fields[ fields[

View File

@ -17,6 +17,8 @@ CONF_RETAIN = ATTR_RETAIN
CONF_STATE_TOPIC = "state_topic" CONF_STATE_TOPIC = "state_topic"
CONF_WILL_MESSAGE = "will_message" CONF_WILL_MESSAGE = "will_message"
DATA_MQTT_CONFIG = "mqtt_config"
DEFAULT_PREFIX = "homeassistant" DEFAULT_PREFIX = "homeassistant"
DEFAULT_BIRTH_WILL_TOPIC = DEFAULT_PREFIX + "/status" DEFAULT_BIRTH_WILL_TOPIC = DEFAULT_PREFIX + "/status"
DEFAULT_DISCOVERY = False DEFAULT_DISCOVERY = False