mirror of
https://github.com/esphome/esphome.git
synced 2024-11-21 11:37:27 +01:00
feat(MQTT): Add subscribe QoS to discovery (#7648)
This commit is contained in:
parent
2597975ae0
commit
a932ca2f64
@ -41,6 +41,7 @@ from esphome.const import (
|
||||
CONF_SHUTDOWN_MESSAGE,
|
||||
CONF_SSL_FINGERPRINTS,
|
||||
CONF_STATE_TOPIC,
|
||||
CONF_SUBSCRIBE_QOS,
|
||||
CONF_TOPIC,
|
||||
CONF_TOPIC_PREFIX,
|
||||
CONF_TRIGGER_ID,
|
||||
@ -518,6 +519,8 @@ async def register_mqtt_component(var, config):
|
||||
cg.add(var.set_qos(config[CONF_QOS]))
|
||||
if CONF_RETAIN in config:
|
||||
cg.add(var.set_retain(config[CONF_RETAIN]))
|
||||
if CONF_SUBSCRIBE_QOS in config:
|
||||
cg.add(var.set_subscribe_qos(config[CONF_SUBSCRIBE_QOS]))
|
||||
if not config.get(CONF_DISCOVERY, True):
|
||||
cg.add(var.disable_discovery())
|
||||
if CONF_STATE_TOPIC in config:
|
||||
|
@ -16,6 +16,8 @@ static const char *const TAG = "mqtt.component";
|
||||
|
||||
void MQTTComponent::set_qos(uint8_t qos) { this->qos_ = qos; }
|
||||
|
||||
void MQTTComponent::set_subscribe_qos(uint8_t qos) { this->subscribe_qos_ = qos; }
|
||||
|
||||
void MQTTComponent::set_retain(bool retain) { this->retain_ = retain; }
|
||||
|
||||
std::string MQTTComponent::get_discovery_topic_(const MQTTDiscoveryInfo &discovery_info) const {
|
||||
@ -76,6 +78,10 @@ bool MQTTComponent::send_discovery_() {
|
||||
config.command_topic = true;
|
||||
|
||||
this->send_discovery(root, config);
|
||||
// Set subscription QoS (default is 0)
|
||||
if (this->subscribe_qos_ != 0) {
|
||||
root[MQTT_QOS] = this->subscribe_qos_;
|
||||
}
|
||||
|
||||
// Fields from EntityBase
|
||||
if (this->get_entity()->has_own_name()) {
|
||||
|
@ -89,6 +89,9 @@ class MQTTComponent : public Component {
|
||||
void disable_discovery();
|
||||
bool is_discovery_enabled() const;
|
||||
|
||||
/// Set the QOS for subscribe messages (used in discovery).
|
||||
void set_subscribe_qos(uint8_t qos);
|
||||
|
||||
/// Override this method to return the component type (e.g. "light", "sensor", ...)
|
||||
virtual std::string component_type() const = 0;
|
||||
|
||||
@ -204,6 +207,7 @@ class MQTTComponent : public Component {
|
||||
bool command_retain_{false};
|
||||
bool retain_{true};
|
||||
uint8_t qos_{0};
|
||||
uint8_t subscribe_qos_{0};
|
||||
bool discovery_enabled_{true};
|
||||
bool resend_state_{false};
|
||||
};
|
||||
|
@ -180,6 +180,7 @@ constexpr const char *const MQTT_PRESET_MODE_COMMAND_TOPIC = "pr_mode_cmd_t";
|
||||
constexpr const char *const MQTT_PRESET_MODE_STATE_TOPIC = "pr_mode_stat_t";
|
||||
constexpr const char *const MQTT_PRESET_MODE_VALUE_TEMPLATE = "pr_mode_val_tpl";
|
||||
constexpr const char *const MQTT_PRESET_MODES = "pr_modes";
|
||||
constexpr const char *const MQTT_QOS = "qos";
|
||||
constexpr const char *const MQTT_RED_TEMPLATE = "r_tpl";
|
||||
constexpr const char *const MQTT_RETAIN = "ret";
|
||||
constexpr const char *const MQTT_RGB_COMMAND_TEMPLATE = "rgb_cmd_tpl";
|
||||
@ -441,6 +442,7 @@ constexpr const char *const MQTT_PRESET_MODE_COMMAND_TOPIC = "preset_mode_comman
|
||||
constexpr const char *const MQTT_PRESET_MODE_STATE_TOPIC = "preset_mode_state_topic";
|
||||
constexpr const char *const MQTT_PRESET_MODE_VALUE_TEMPLATE = "preset_mode_value_template";
|
||||
constexpr const char *const MQTT_PRESET_MODES = "preset_modes";
|
||||
constexpr const char *const MQTT_QOS = "qos";
|
||||
constexpr const char *const MQTT_RED_TEMPLATE = "red_template";
|
||||
constexpr const char *const MQTT_RETAIN = "retain";
|
||||
constexpr const char *const MQTT_RGB_COMMAND_TEMPLATE = "rgb_command_template";
|
||||
|
@ -40,6 +40,7 @@ from esphome.const import (
|
||||
CONF_SECOND,
|
||||
CONF_SETUP_PRIORITY,
|
||||
CONF_STATE_TOPIC,
|
||||
CONF_SUBSCRIBE_QOS,
|
||||
CONF_TOPIC,
|
||||
CONF_TYPE,
|
||||
CONF_TYPE_ID,
|
||||
@ -1893,9 +1894,10 @@ MQTT_COMPONENT_AVAILABILITY_SCHEMA = Schema(
|
||||
|
||||
MQTT_COMPONENT_SCHEMA = Schema(
|
||||
{
|
||||
Optional(CONF_QOS): All(requires_component("mqtt"), int_range(min=0, max=2)),
|
||||
Optional(CONF_QOS): All(requires_component("mqtt"), mqtt_qos),
|
||||
Optional(CONF_RETAIN): All(requires_component("mqtt"), boolean),
|
||||
Optional(CONF_DISCOVERY): All(requires_component("mqtt"), boolean),
|
||||
Optional(CONF_SUBSCRIBE_QOS): All(requires_component("mqtt"), mqtt_qos),
|
||||
Optional(CONF_STATE_TOPIC): All(requires_component("mqtt"), publish_topic),
|
||||
Optional(CONF_AVAILABILITY): All(
|
||||
requires_component("mqtt"), Any(None, MQTT_COMPONENT_AVAILABILITY_SCHEMA)
|
||||
|
@ -819,6 +819,7 @@ CONF_STOP = "stop"
|
||||
CONF_STOP_ACTION = "stop_action"
|
||||
CONF_STORE_BASELINE = "store_baseline"
|
||||
CONF_SUBNET = "subnet"
|
||||
CONF_SUBSCRIBE_QOS = "subscribe_qos"
|
||||
CONF_SUBSTITUTIONS = "substitutions"
|
||||
CONF_SUM = "sum"
|
||||
CONF_SUPPLEMENTAL_COOLING_ACTION = "supplemental_cooling_action"
|
||||
|
@ -227,6 +227,7 @@ datetime:
|
||||
type: date
|
||||
state_topic: some/topic/date
|
||||
qos: 2
|
||||
subscribe_qos: 2
|
||||
set_action:
|
||||
- logger.log: "set_value"
|
||||
on_value:
|
||||
|
Loading…
Reference in New Issue
Block a user