mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-31 15:12:06 +00:00 
			
		
		
		
	mqtt_client: Added MQTTClientComponent::unsubscribe() (#1672)
Co-authored-by: Otto Winter <otto@otto-winter.com>
This commit is contained in:
		| @@ -347,6 +347,26 @@ void MQTTClientComponent::subscribe_json(const std::string &topic, mqtt_json_cal | ||||
|   this->subscriptions_.push_back(subscription); | ||||
| } | ||||
|  | ||||
| void MQTTClientComponent::unsubscribe(const std::string &topic) { | ||||
|   uint16_t ret = this->mqtt_client_.unsubscribe(topic.c_str()); | ||||
|   yield(); | ||||
|   if (ret != 0) { | ||||
|     ESP_LOGV(TAG, "unsubscribe(topic='%s')", topic.c_str()); | ||||
|   } else { | ||||
|     delay(5); | ||||
|     ESP_LOGV(TAG, "Unsubscribe failed for topic='%s'.", topic.c_str()); | ||||
|     this->status_momentary_warning("unsubscribe", 1000); | ||||
|   } | ||||
|  | ||||
|   auto it = subscriptions_.begin(); | ||||
|   while (it != subscriptions_.end()) { | ||||
|     if (it->topic == topic) | ||||
|       it = subscriptions_.erase(it); | ||||
|     else | ||||
|       ++it; | ||||
|   } | ||||
| } | ||||
|  | ||||
| // Publish | ||||
| bool MQTTClientComponent::publish(const std::string &topic, const std::string &payload, uint8_t qos, bool retain) { | ||||
|   return this->publish(topic, payload.data(), payload.size(), qos, retain); | ||||
|   | ||||
| @@ -159,6 +159,15 @@ class MQTTClientComponent : public Component { | ||||
|    */ | ||||
|   void subscribe_json(const std::string &topic, mqtt_json_callback_t callback, uint8_t qos = 0); | ||||
|  | ||||
|   /** Unsubscribe from an MQTT topic. | ||||
|    * | ||||
|    * If multiple existing subscriptions to the same topic exist, all of them will be removed. | ||||
|    * | ||||
|    * @param topic The topic to unsubscribe from. | ||||
|    * Must match the topic in the original subscribe or subscribe_json call exactly. | ||||
|    */ | ||||
|   void unsubscribe(const std::string &topic); | ||||
|  | ||||
|   /** Publish a MQTTMessage | ||||
|    * | ||||
|    * @param message The message. | ||||
|   | ||||
		Reference in New Issue
	
	Block a user