Python - MQTT 多订阅:消息来自哪个主题

我有一个记录器来记录所有到达本地代理的 MQTT 消息。这个记录器有多个订阅,其中之一是“警报” - 它还会向用户的手机发送短信(未显示附加代码)。


我的问题(我想这有点新手)-但是有没有办法过滤到达的消息的来源?


from sys import path


path.append('/home/guy/.local/lib/python3.5/site-packages')


import paho.mqtt.client as mqtt

from threading import Thread

import datetime

import os



class 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)

江户川乱折腾
浏览 696回答 1
1回答

翻过高山走不出你

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)正如此处的文档中所述
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python