我有一個記錄器來記錄所有到達本地代理的 MQTT 消息。這個記錄器有多個訂閱,其中之一是“警報” - 它還會向用戶的手機發送短信(未顯示附加代碼)。我的問題(我想這有點新手)-但是有沒有辦法過濾到達的消息的來源?from sys import pathpath.append('/home/guy/.local/lib/python3.5/site-packages')import paho.mqtt.client as mqttfrom threading import Threadimport datetimeimport osclass LogMQTTactivity(Thread): def __init__(self, sid=None, mqtt_server="192.168.2.113", username=None, password=None, topics=None, topic_qos=None, filename='/home/guy/MQTTlogger.log'): Thread.__init__(self) self.sid = sid self.mqtt_server = mqtt_server self.filename = filename self.username = username self.password = password self.topics = topics self.topic_qos = topic_qos self.output2screen = 1 self.client, self.arrived_msg = None, None self.check_logfile_valid() self.log_header() def log_header(self): text = ' Connect to following topics ' x = 12 self.append_log('*' * x + text + x * "*") for topic in self.topics: self.append_log(topic) self.append_log('*' * 2 * x + len(text) * "*") def run(self): self.client = mqtt.Client(str(self.sid)) self.client.on_connect = self.on_connect self.client.on_message = self.on_message if self.username is not None and self.password is not None: self.client.username_pw_set(self.username, self.password) self.client.connect(self.mqtt_server, 1883, 60) self.client.loop_forever() def on_connect(self, client, obj, flags, rc): self.append_log(">> Connecting to MQTT mqtt_server %s: %d" % (self.mqtt_server, rc)) for topic in self.topics: self.append_log(">> Subscribe topic: %s" % topic) self.client.subscribe(topic, qos=self.topic_qos) def on_message(self, client, obj, msg): self.arrived_msg = msg.payload.decode() self.append_log(self.arrived_msg)
1 回答

翻過高山走不出你
TA貢獻1875條經驗 獲得超3個贊
msg傳入on_message回調的對象有一個topic字段,其中包含消息發布到的主題。
def on_message(self, client, obj, msg):
print(msg.topic)
self.arrived_msg = msg.payload.decode()
self.append_log(self.arrived_msg)
正如此處的文檔中所述
添加回答
舉報
0/150
提交
取消