mqtt通配符订阅的回调函数必须发送主题参数

This commit is contained in:
老五 2025-06-25 10:09:37 +08:00
parent 895f1c7669
commit d5e3a39fb2

View File

@ -473,15 +473,15 @@ class MQTTClient(APITransport):
self.status_cache = {} self.status_cache = {}
self._publish_status_update(payload, self.last_status_time) self._publish_status_update(payload, self.last_status_time)
def _get_topic_handles(self, topic) -> Optional[list]: def _get_topic_handles(self, topic) -> Optional[tuple[list, bool]]:
if topic in self.subscribed_topics: if topic in self.subscribed_topics:
return self.subscribed_topics[topic][1] return self.subscribed_topics[topic][1], False
for wildcardTopic, pattern in self.regex_topics_map.items(): for wildcardTopic, pattern in self.regex_topics_map.items():
if pattern.match(topic): if pattern.match(topic):
cb_hdls = self.subscribed_topics[wildcardTopic][1].copy() cb_hdls = self.subscribed_topics[wildcardTopic][1].copy()
for cb in cb_hdls: for cb in cb_hdls:
cb.topic = topic cb.topic = topic
return cb_hdls return cb_hdls, True
else: else:
return None return None
@ -493,9 +493,11 @@ class MQTTClient(APITransport):
topic = message.topic topic = message.topic
cb_hdls = self._get_topic_handles(topic) cb_hdls = self._get_topic_handles(topic)
if cb_hdls: if cb_hdls:
cb_hdls, wildcard = cb_hdls
for hdl in cb_hdls: for hdl in cb_hdls:
self.eventloop.register_callback( self.eventloop.register_callback(
hdl.callback, message.payload) hdl.callback, message.payload,
*((hdl.topic,) if wildcard else ()))
else: else:
logging.debug( logging.debug(
f"Unregistered MQTT Topic Received: {topic}, " f"Unregistered MQTT Topic Received: {topic}, "