Добрый день, столкнулся с проблемой. Есть импортированный в код модуль paho MQTT, в нем есть функция on_message, которая получает из подключения значения msg.topic и msg.payload. Пожалуйста, подскажите, как вытащить полученные значения из этой функции, если сама она выглядит вот так, то есть ни через return, ни через добавление в очередь из нее самой, эти значения у меня достать никак не получилось. Мне же нужно, чтобы при получении сообщений код перебрасывал их в отдельно мною созданный класс очереди, откуда бы дальше с ним шла дальнейшая работа. Пожалуйста, помогите, весь мозг уже себе сломал, никак не получается. def on_message(client, userdata, msg): print(msg.topic, msg.payload) - эти значения мне нужно вычленить в основной код отсюда. client.on_message = on_message (так эта функция выглядит в основном коде) мне нужно что-то вроде return хотя бы как в обычных функциях это всегда работало или хотя бы понять, как реализовать, чтобы из функции можно было перекидывать данные во что-то, что было бы доступно основной программе далее в коде.
import psycopg2
from psycopg2 import Error
import collections
import time
import paho.mqtt.client as mqtt
import logger_file
import postgre
import codecs
import config
class Data_MQTT():
"""Общий класс входящей информации"""
def __init__(self, topic, payload):
self.topic = str(topic)
self.payload = str(payload, 'UTF-8')
def connection():
try:
client.connect('host', 'port')
except OSError:
logger_file.logging.error('OSError: [Errno 51] Network is unreachable', exc_info=True)
print('Ошибка соединения!')
time.sleep(1)
connection()
def on_connect(client, userdata, flags, rc):
print("Connected with result code", rc)
client.subscribe("some_topic/#")
def on_message(client, userdata, msg):
# print(msg.topic, msg.payload)
data_mqtt = Data_MQTT(msg.topic, msg.payload)
# logger_file.logging.info(msg.topic)
# logger_file.logging.info(msg.payload)
queue_to.append(msg.payload)
topic_to_record = data_mqtt.topic
# print(data_mqtt.topic)
record_to = data_mqtt.payload
queue_to.popleft()
postgre.postgre_code(record_to, topic_to_record)
queue_to = collections.deque()
client = mqtt.Client(client_id="client",
clean_session=True,
userdata=None,
protocol=mqtt.MQTTv311,
transport="tcp")
client.on_connect = on_connect
client.on_message = on_message
client.username_pw_set(username=config.config['mqtt']['user'],
password=config.config['mqtt']['password'])
print("Connecting...")
connection()
client.connect(config.config['mqtt']['host'], int(config.config['mqtt']['port']))
client.loop_forever()