Fix MQTT debug info for subscriptions with wildcard. (#33744)

This commit is contained in:
Erik Montnemery 2020-04-06 19:25:09 +02:00 committed by Paulus Schoutsen
parent 8392406476
commit 8a68b1a3a9
3 changed files with 14 additions and 6 deletions

View File

@ -389,7 +389,7 @@ def wrap_msg_callback(msg_callback: MessageCallbackType) -> MessageCallbackType:
@wraps(msg_callback) @wraps(msg_callback)
async def async_wrapper(msg: Any) -> None: async def async_wrapper(msg: Any) -> None:
"""Catch and log exception.""" """Call with deprecated signature."""
await msg_callback(msg.topic, msg.payload, msg.qos) await msg_callback(msg.topic, msg.payload, msg.qos)
wrapper_func = async_wrapper wrapper_func = async_wrapper
@ -397,7 +397,7 @@ def wrap_msg_callback(msg_callback: MessageCallbackType) -> MessageCallbackType:
@wraps(msg_callback) @wraps(msg_callback)
def wrapper(msg: Any) -> None: def wrapper(msg: Any) -> None:
"""Catch and log exception.""" """Call with deprecated signature."""
msg_callback(msg.topic, msg.payload, msg.qos) msg_callback(msg.topic, msg.payload, msg.qos)
wrapper_func = wrapper wrapper_func = wrapper
@ -809,7 +809,10 @@ class MQTT:
if will_message is not None: if will_message is not None:
self._mqttc.will_set( # pylint: disable=no-value-for-parameter self._mqttc.will_set( # pylint: disable=no-value-for-parameter
*attr.astuple(will_message) *attr.astuple(
will_message,
filter=lambda attr, value: attr.name != "subscribed_topic",
)
) )
async def async_publish( async def async_publish(
@ -941,7 +944,10 @@ class MQTT:
if self.birth_message: if self.birth_message:
self.hass.add_job( self.hass.add_job(
self.async_publish( # pylint: disable=no-value-for-parameter self.async_publish( # pylint: disable=no-value-for-parameter
*attr.astuple(self.birth_message) *attr.astuple(
self.birth_message,
filter=lambda attr, value: attr.name != "subscribed_topic",
)
) )
) )
@ -977,7 +983,8 @@ class MQTT:
continue continue
self.hass.async_run_job( self.hass.async_run_job(
subscription.callback, Message(msg.topic, payload, msg.qos, msg.retain) subscription.callback,
Message(msg.topic, payload, msg.qos, msg.retain, subscription.topic),
) )
def _mqtt_on_disconnect(self, _mqttc, _userdata, result_code: int) -> None: def _mqtt_on_disconnect(self, _mqttc, _userdata, result_code: int) -> None:

View File

@ -21,7 +21,7 @@ def log_messages(hass: HomeAssistantType, entity_id: str) -> MessageCallbackType
def _log_message(msg): def _log_message(msg):
"""Log message.""" """Log message."""
debug_info = hass.data[DATA_MQTT_DEBUG_INFO] debug_info = hass.data[DATA_MQTT_DEBUG_INFO]
messages = debug_info["entities"][entity_id]["topics"][msg.topic] messages = debug_info["entities"][entity_id]["topics"][msg.subscribed_topic]
messages.append(msg.payload) messages.append(msg.payload)
def _decorator(msg_callback: MessageCallbackType): def _decorator(msg_callback: MessageCallbackType):

View File

@ -14,6 +14,7 @@ class Message:
payload = attr.ib(type=PublishPayloadType) payload = attr.ib(type=PublishPayloadType)
qos = attr.ib(type=int) qos = attr.ib(type=int)
retain = attr.ib(type=bool) retain = attr.ib(type=bool)
subscribed_topic = attr.ib(type=str, default=None)
MessageCallbackType = Callable[[Message], None] MessageCallbackType = Callable[[Message], None]