diff --git a/main/tasks/sub_pub_unsub/sub_pub_unsub.c b/main/tasks/sub_pub_unsub/sub_pub_unsub.c index 4cd8815..64e3b6c 100644 --- a/main/tasks/sub_pub_unsub/sub_pub_unsub.c +++ b/main/tasks/sub_pub_unsub/sub_pub_unsub.c @@ -540,8 +540,24 @@ static void prvPublishToTopic(MQTTQoS_t xQoS, (ulNotifiedValue != ulPublishMessageId)) { ESP_LOGW(TAG, - "Error or timed out waiting for ack for publish message %" PRIu32 ". Re-attempting publish.", + "Error or timed out waiting for ack for publish message %" PRIu32 ".", ulPublishMessageId); + + /* Generate a new publish ID so that we can differentiate late + * acknowledgements. */ + xSemaphoreTake(xMessageIdSemaphore, portMAX_DELAY); + { + ++ulMessageId; + ulPublishMessageId = ulMessageId; + } + xSemaphoreGive(xMessageIdSemaphore); + + ESP_LOGW(TAG, + "Re-attempting publish with new ID %" PRIu32 ".", + ulPublishMessageId); + + /* Update publish ID in the command context. */ + xCommandContext.ulNotificationValue = ulPublishMessageId; } else {