mqtt_client: Added MQTTClientComponent::unsubscribe() (#1672)

Co-authored-by: Otto Winter <otto@otto-winter.com>
This commit is contained in:
Anthony Uk 2021-04-08 14:21:42 +02:00 committed by GitHub
parent bf01c22e1f
commit 76a6c39f25
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 29 additions and 0 deletions

View file

@ -347,6 +347,26 @@ void MQTTClientComponent::subscribe_json(const std::string &topic, mqtt_json_cal
this->subscriptions_.push_back(subscription); 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 // Publish
bool MQTTClientComponent::publish(const std::string &topic, const std::string &payload, uint8_t qos, bool retain) { 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); return this->publish(topic, payload.data(), payload.size(), qos, retain);

View file

@ -159,6 +159,15 @@ class MQTTClientComponent : public Component {
*/ */
void subscribe_json(const std::string &topic, mqtt_json_callback_t callback, uint8_t qos = 0); 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 /** Publish a MQTTMessage
* *
* @param message The message. * @param message The message.