Fix state saving when sharing topics for MQTT entities (#79421)

* Do not write old state sharing availability topic

* Add a test

* Support for all availability topics

* delay async_write_ha_state till last callback

* Process write req after processing callback jobs

* Do not count subscription callbacks

* Simplify

* Stale docsting

* No topic needed for delays state write

* No need to clear when reloading

* Move test to test_mixins.py

* Only set up sensor platform for test
This commit is contained in:
Jan Bouwhuis 2022-10-11 10:49:54 +02:00 committed by GitHub
parent 6f7cb158d8
commit 8aa30cce26
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
23 changed files with 164 additions and 56 deletions

View file

@ -51,7 +51,7 @@ from .mixins import (
warn_for_legacy_schema,
)
from .models import MqttCommandTemplate, MqttValueTemplate
from .util import valid_publish_topic, valid_subscribe_topic
from .util import get_mqtt_data, valid_publish_topic, valid_subscribe_topic
_LOGGER = logging.getLogger(__name__)
@ -405,7 +405,7 @@ class MqttCover(MqttEntity, CoverEntity):
)
return
self.async_write_ha_state()
get_mqtt_data(self.hass).state_write_requests.write_state_request(self)
@callback
@log_messages(self.hass, self.entity_id)
@ -451,7 +451,7 @@ class MqttCover(MqttEntity, CoverEntity):
else STATE_OPEN
)
self.async_write_ha_state()
get_mqtt_data(self.hass).state_write_requests.write_state_request(self)
if self._config.get(CONF_GET_POSITION_TOPIC):
topics["get_position_topic"] = {