mirror of
https://github.com/esphome/esphome.git
synced 2025-09-27 07:32:22 +01:00
feat(MQTT): Add subscribe QoS to discovery (#7648)
This commit is contained in:
@@ -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";
|
||||
|
Reference in New Issue
Block a user