mirror of
https://github.com/home-assistant/core.git
synced 2025-07-21 20:27:08 +00:00
Adapt MQTT config flow to default birth and will (#37875)
This commit is contained in:
parent
1b09c65e74
commit
53d6f4948e
@ -56,9 +56,14 @@ from .const import (
|
|||||||
CONF_RETAIN,
|
CONF_RETAIN,
|
||||||
CONF_STATE_TOPIC,
|
CONF_STATE_TOPIC,
|
||||||
CONF_WILL_MESSAGE,
|
CONF_WILL_MESSAGE,
|
||||||
|
DEFAULT_BIRTH,
|
||||||
DEFAULT_DISCOVERY,
|
DEFAULT_DISCOVERY,
|
||||||
|
DEFAULT_PAYLOAD_AVAILABLE,
|
||||||
|
DEFAULT_PAYLOAD_NOT_AVAILABLE,
|
||||||
|
DEFAULT_PREFIX,
|
||||||
DEFAULT_QOS,
|
DEFAULT_QOS,
|
||||||
DEFAULT_RETAIN,
|
DEFAULT_RETAIN,
|
||||||
|
DEFAULT_WILL,
|
||||||
MQTT_CONNECTED,
|
MQTT_CONNECTED,
|
||||||
MQTT_DISCONNECTED,
|
MQTT_DISCONNECTED,
|
||||||
PROTOCOL_311,
|
PROTOCOL_311,
|
||||||
@ -110,10 +115,7 @@ PROTOCOL_31 = "3.1"
|
|||||||
DEFAULT_PORT = 1883
|
DEFAULT_PORT = 1883
|
||||||
DEFAULT_KEEPALIVE = 60
|
DEFAULT_KEEPALIVE = 60
|
||||||
DEFAULT_PROTOCOL = PROTOCOL_311
|
DEFAULT_PROTOCOL = PROTOCOL_311
|
||||||
DEFAULT_PREFIX = "homeassistant"
|
|
||||||
DEFAULT_TLS_PROTOCOL = "auto"
|
DEFAULT_TLS_PROTOCOL = "auto"
|
||||||
DEFAULT_PAYLOAD_AVAILABLE = "online"
|
|
||||||
DEFAULT_PAYLOAD_NOT_AVAILABLE = "offline"
|
|
||||||
|
|
||||||
ATTR_PAYLOAD_TEMPLATE = "payload_template"
|
ATTR_PAYLOAD_TEMPLATE = "payload_template"
|
||||||
|
|
||||||
@ -139,20 +141,6 @@ CLIENT_KEY_AUTH_MSG = (
|
|||||||
"the MQTT broker configuration"
|
"the MQTT broker configuration"
|
||||||
)
|
)
|
||||||
|
|
||||||
DEFAULT_BIRTH = {
|
|
||||||
ATTR_TOPIC: DEFAULT_PREFIX + "/status",
|
|
||||||
CONF_PAYLOAD: DEFAULT_PAYLOAD_AVAILABLE,
|
|
||||||
ATTR_QOS: DEFAULT_QOS,
|
|
||||||
ATTR_RETAIN: DEFAULT_RETAIN,
|
|
||||||
}
|
|
||||||
|
|
||||||
DEFAULT_WILL = {
|
|
||||||
ATTR_TOPIC: DEFAULT_PREFIX + "/status",
|
|
||||||
CONF_PAYLOAD: DEFAULT_PAYLOAD_NOT_AVAILABLE,
|
|
||||||
ATTR_QOS: DEFAULT_QOS,
|
|
||||||
ATTR_RETAIN: DEFAULT_RETAIN,
|
|
||||||
}
|
|
||||||
|
|
||||||
MQTT_WILL_BIRTH_SCHEMA = vol.Schema(
|
MQTT_WILL_BIRTH_SCHEMA = vol.Schema(
|
||||||
{
|
{
|
||||||
vol.Inclusive(ATTR_TOPIC, "topic_payload"): valid_publish_topic,
|
vol.Inclusive(ATTR_TOPIC, "topic_payload"): valid_publish_topic,
|
||||||
|
@ -9,6 +9,7 @@ from homeassistant import config_entries
|
|||||||
from homeassistant.const import (
|
from homeassistant.const import (
|
||||||
CONF_HOST,
|
CONF_HOST,
|
||||||
CONF_PASSWORD,
|
CONF_PASSWORD,
|
||||||
|
CONF_PAYLOAD,
|
||||||
CONF_PORT,
|
CONF_PORT,
|
||||||
CONF_PROTOCOL,
|
CONF_PROTOCOL,
|
||||||
CONF_USERNAME,
|
CONF_USERNAME,
|
||||||
@ -23,9 +24,9 @@ from .const import (
|
|||||||
CONF_BROKER,
|
CONF_BROKER,
|
||||||
CONF_DISCOVERY,
|
CONF_DISCOVERY,
|
||||||
CONF_WILL_MESSAGE,
|
CONF_WILL_MESSAGE,
|
||||||
|
DEFAULT_BIRTH,
|
||||||
DEFAULT_DISCOVERY,
|
DEFAULT_DISCOVERY,
|
||||||
DEFAULT_QOS,
|
DEFAULT_WILL,
|
||||||
DEFAULT_RETAIN,
|
|
||||||
)
|
)
|
||||||
from .util import MQTT_WILL_BIRTH_SCHEMA
|
from .util import MQTT_WILL_BIRTH_SCHEMA
|
||||||
|
|
||||||
@ -220,6 +221,8 @@ class MQTTOptionsFlowHandler(config_entries.OptionsFlow):
|
|||||||
except vol.Invalid:
|
except vol.Invalid:
|
||||||
errors["base"] = "bad_birth"
|
errors["base"] = "bad_birth"
|
||||||
bad_birth = True
|
bad_birth = True
|
||||||
|
if not user_input["birth_enable"]:
|
||||||
|
options_config[CONF_BIRTH_MESSAGE] = {}
|
||||||
|
|
||||||
if "will_topic" in user_input:
|
if "will_topic" in user_input:
|
||||||
will_message = {
|
will_message = {
|
||||||
@ -234,6 +237,8 @@ class MQTTOptionsFlowHandler(config_entries.OptionsFlow):
|
|||||||
except vol.Invalid:
|
except vol.Invalid:
|
||||||
errors["base"] = "bad_will"
|
errors["base"] = "bad_will"
|
||||||
bad_will = True
|
bad_will = True
|
||||||
|
if not user_input["will_enable"]:
|
||||||
|
options_config[CONF_WILL_MESSAGE] = {}
|
||||||
|
|
||||||
options_config[CONF_DISCOVERY] = user_input[CONF_DISCOVERY]
|
options_config[CONF_DISCOVERY] = user_input[CONF_DISCOVERY]
|
||||||
|
|
||||||
@ -246,29 +251,8 @@ class MQTTOptionsFlowHandler(config_entries.OptionsFlow):
|
|||||||
)
|
)
|
||||||
return self.async_create_entry(title="", data=None)
|
return self.async_create_entry(title="", data=None)
|
||||||
|
|
||||||
birth_topic = None
|
birth = {**DEFAULT_BIRTH, **current_config.get(CONF_BIRTH_MESSAGE, {})}
|
||||||
birth_payload = None
|
will = {**DEFAULT_WILL, **current_config.get(CONF_WILL_MESSAGE, {})}
|
||||||
birth_qos = DEFAULT_QOS
|
|
||||||
birth_retain = DEFAULT_RETAIN
|
|
||||||
if CONF_BIRTH_MESSAGE in current_config:
|
|
||||||
birth_topic = current_config[CONF_BIRTH_MESSAGE][ATTR_TOPIC]
|
|
||||||
birth_payload = current_config[CONF_BIRTH_MESSAGE][ATTR_PAYLOAD]
|
|
||||||
birth_qos = current_config[CONF_BIRTH_MESSAGE].get(ATTR_QOS, DEFAULT_QOS)
|
|
||||||
birth_retain = current_config[CONF_BIRTH_MESSAGE].get(
|
|
||||||
ATTR_RETAIN, DEFAULT_RETAIN
|
|
||||||
)
|
|
||||||
|
|
||||||
will_topic = None
|
|
||||||
will_payload = None
|
|
||||||
will_qos = DEFAULT_QOS
|
|
||||||
will_retain = DEFAULT_RETAIN
|
|
||||||
if CONF_WILL_MESSAGE in current_config:
|
|
||||||
will_topic = current_config[CONF_WILL_MESSAGE][ATTR_TOPIC]
|
|
||||||
will_payload = current_config[CONF_WILL_MESSAGE][ATTR_PAYLOAD]
|
|
||||||
will_qos = current_config[CONF_WILL_MESSAGE].get(ATTR_QOS, DEFAULT_QOS)
|
|
||||||
will_retain = current_config[CONF_WILL_MESSAGE].get(
|
|
||||||
ATTR_RETAIN, DEFAULT_RETAIN
|
|
||||||
)
|
|
||||||
|
|
||||||
fields = OrderedDict()
|
fields = OrderedDict()
|
||||||
fields[
|
fields[
|
||||||
@ -277,24 +261,48 @@ class MQTTOptionsFlowHandler(config_entries.OptionsFlow):
|
|||||||
default=current_config.get(CONF_DISCOVERY, DEFAULT_DISCOVERY),
|
default=current_config.get(CONF_DISCOVERY, DEFAULT_DISCOVERY),
|
||||||
)
|
)
|
||||||
] = bool
|
] = bool
|
||||||
|
|
||||||
|
# Birth message is disabled if CONF_BIRTH_MESSAGE = {}
|
||||||
fields[
|
fields[
|
||||||
vol.Optional("birth_topic", description={"suggested_value": birth_topic})
|
vol.Optional(
|
||||||
|
"birth_enable",
|
||||||
|
default=CONF_BIRTH_MESSAGE not in current_config
|
||||||
|
or current_config[CONF_BIRTH_MESSAGE] != {},
|
||||||
|
)
|
||||||
|
] = bool
|
||||||
|
fields[
|
||||||
|
vol.Optional(
|
||||||
|
"birth_topic", description={"suggested_value": birth[ATTR_TOPIC]}
|
||||||
|
)
|
||||||
] = str
|
] = str
|
||||||
fields[
|
fields[
|
||||||
vol.Optional(
|
vol.Optional(
|
||||||
"birth_payload", description={"suggested_value": birth_payload}
|
"birth_payload", description={"suggested_value": birth[CONF_PAYLOAD]}
|
||||||
)
|
)
|
||||||
] = str
|
] = str
|
||||||
fields[vol.Optional("birth_qos", default=birth_qos)] = vol.In([0, 1, 2])
|
fields[vol.Optional("birth_qos", default=birth[ATTR_QOS])] = vol.In([0, 1, 2])
|
||||||
fields[vol.Optional("birth_retain", default=birth_retain)] = bool
|
fields[vol.Optional("birth_retain", default=birth[ATTR_RETAIN])] = bool
|
||||||
|
|
||||||
|
# Will message is disabled if CONF_WILL_MESSAGE = {}
|
||||||
fields[
|
fields[
|
||||||
vol.Optional("will_topic", description={"suggested_value": will_topic})
|
vol.Optional(
|
||||||
|
"will_enable",
|
||||||
|
default=CONF_WILL_MESSAGE not in current_config
|
||||||
|
or current_config[CONF_WILL_MESSAGE] != {},
|
||||||
|
)
|
||||||
|
] = bool
|
||||||
|
fields[
|
||||||
|
vol.Optional(
|
||||||
|
"will_topic", description={"suggested_value": will[ATTR_TOPIC]}
|
||||||
|
)
|
||||||
] = str
|
] = str
|
||||||
fields[
|
fields[
|
||||||
vol.Optional("will_payload", description={"suggested_value": will_payload})
|
vol.Optional(
|
||||||
|
"will_payload", description={"suggested_value": will[CONF_PAYLOAD]}
|
||||||
|
)
|
||||||
] = str
|
] = str
|
||||||
fields[vol.Optional("will_qos", default=will_qos)] = vol.In([0, 1, 2])
|
fields[vol.Optional("will_qos", default=will[ATTR_QOS])] = vol.In([0, 1, 2])
|
||||||
fields[vol.Optional("will_retain", default=will_retain)] = bool
|
fields[vol.Optional("will_retain", default=will[ATTR_RETAIN])] = bool
|
||||||
|
|
||||||
return self.async_show_form(
|
return self.async_show_form(
|
||||||
step_id="options", data_schema=vol.Schema(fields), errors=errors,
|
step_id="options", data_schema=vol.Schema(fields), errors=errors,
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
"""Constants used by multiple MQTT modules."""
|
"""Constants used by multiple MQTT modules."""
|
||||||
|
from homeassistant.const import CONF_PAYLOAD
|
||||||
|
|
||||||
ATTR_DISCOVERY_HASH = "discovery_hash"
|
ATTR_DISCOVERY_HASH = "discovery_hash"
|
||||||
ATTR_DISCOVERY_PAYLOAD = "discovery_payload"
|
ATTR_DISCOVERY_PAYLOAD = "discovery_payload"
|
||||||
ATTR_DISCOVERY_TOPIC = "discovery_topic"
|
ATTR_DISCOVERY_TOPIC = "discovery_topic"
|
||||||
@ -15,10 +17,28 @@ CONF_RETAIN = ATTR_RETAIN
|
|||||||
CONF_STATE_TOPIC = "state_topic"
|
CONF_STATE_TOPIC = "state_topic"
|
||||||
CONF_WILL_MESSAGE = "will_message"
|
CONF_WILL_MESSAGE = "will_message"
|
||||||
|
|
||||||
|
DEFAULT_PREFIX = "homeassistant"
|
||||||
|
DEFAULT_BIRTH_WILL_TOPIC = DEFAULT_PREFIX + "/status"
|
||||||
DEFAULT_DISCOVERY = False
|
DEFAULT_DISCOVERY = False
|
||||||
DEFAULT_QOS = 0
|
DEFAULT_QOS = 0
|
||||||
|
DEFAULT_PAYLOAD_AVAILABLE = "online"
|
||||||
|
DEFAULT_PAYLOAD_NOT_AVAILABLE = "offline"
|
||||||
DEFAULT_RETAIN = False
|
DEFAULT_RETAIN = False
|
||||||
|
|
||||||
|
DEFAULT_BIRTH = {
|
||||||
|
ATTR_TOPIC: DEFAULT_BIRTH_WILL_TOPIC,
|
||||||
|
CONF_PAYLOAD: DEFAULT_PAYLOAD_AVAILABLE,
|
||||||
|
ATTR_QOS: DEFAULT_QOS,
|
||||||
|
ATTR_RETAIN: DEFAULT_RETAIN,
|
||||||
|
}
|
||||||
|
|
||||||
|
DEFAULT_WILL = {
|
||||||
|
ATTR_TOPIC: DEFAULT_BIRTH_WILL_TOPIC,
|
||||||
|
CONF_PAYLOAD: DEFAULT_PAYLOAD_NOT_AVAILABLE,
|
||||||
|
ATTR_QOS: DEFAULT_QOS,
|
||||||
|
ATTR_RETAIN: DEFAULT_RETAIN,
|
||||||
|
}
|
||||||
|
|
||||||
MQTT_CONNECTED = "mqtt_connected"
|
MQTT_CONNECTED = "mqtt_connected"
|
||||||
MQTT_DISCONNECTED = "mqtt_disconnected"
|
MQTT_DISCONNECTED = "mqtt_disconnected"
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user