Use QOS1 for rarely sent discovery and availability messages #18756
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Specifically discovery and availability depending on the set up, it's possible for these messages to be silently discarded by the broker.
Sending them as QOS1 means the underlying MQTT library used will resend them until it gets an ACK.
Ensuring delivery is particularly important for messages that are rarely sent like discovery or availability as they are only sent when there are changes, and if the broker silently drops the message for whatever reason (congestion, or broker clustering issues), this will impede proper functioning of Z2M with home assistant due to missing/stale retained messages.
And at-least-once semantics seem to be an appropriate fit for discovery and availability messages.
Specifically on my setup with a EMQ X broker on kubernetes. I've observed some discovery messsages just outright going missing or getting dropped by broker and sending them at QOS1 seems to resolve it.