Сообщения не попадают в очередь RabbitMQ при отправке из ESP32 через MQTT, но могут быть использованы в реальном времениPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Сообщения не попадают в очередь RabbitMQ при отправке из ESP32 через MQTT, но могут быть использованы в реальном времени

Сообщение Anonymous »

Я запускаю сценарий на плате ESP32, который пытается опубликовать данные на сервере RabbitMQ с использованием библиотеки PubSubClient.
Клиент определен на плате ESP следующим образом:< /p>

Код: Выделить всё

WiFiClient espClient;
PubSubClient client(espClient);
Клиент инициализируется (где mqtt_server — это адрес сервера, а mqtt_port — 1883, порт MQTT по умолчанию:

Код: Выделить всё

client.setServer(mqtt_server, mqtt_port);
Клиент подключается с помощью (где имя пользователя и пароль определены соответствующим образом):

Код: Выделить всё

client.connect("ESP32Client", mqtt_user, mqtt_pass)

Код: Выделить всё

client.loop();
запускается в начале функции цикла().`
Я публикую, используя эти строки (где jsonBuffer имеет тип char и состоит из сериализованного документа Json) :

Код: Выделить всё

client.publish("device/status", jsonBuffer, true)

Код: Выделить всё

client.publish("sensors/data", jsonBuffer, true)
На моем сервере RabbitMQ есть очередь mqtt_queue со следующими привязками:
Из mqtt_exchange с ключом маршрутизации device/status >; Из mqtt_exchange с датчиками/данными ключа маршрутизации
Когда я смотрю на онлайн-графический интерфейс RabbitMQ во время выполнения кода ESP, очередь показывает, что там не публикуются сообщения .
Очередь имеет следующие свойства:

Код: Выделить всё

features:       durable:true
expires:    2419200000
max-length: 10000
queue-mode: lazy
queue-version:  2
Однако, когда я запускаю следующий скрипт Python, он получает каждый пакет по мере его отправки и может записать его в файл, то есть они определенно покидают доску.

Код: Выделить всё

import paho.mqtt.client as mqtt

# Define the callback for connection
def on_connect(client, userdata, flags, rc):
if rc == 0:
print("Connected to broker")
client.subscribe("sensors/data")
client.subscribe("device/status")
else:
print("Connection failed with code ", rc)

# Define the callback for receiving messages
def on_message(client, userdata, message):
payload = message.payload.decode()
print(f"Message received from topic {message.topic}: {payload}")

if message.topic == "sensors/data":
with open("sensor_data.txt", "a") as file:
file.write(f"{payload}\n")
elif message.topic == "device/status":
with open("device_status.txt", "a") as file:
file.write(f"{payload}\n")

# Create an MQTT client instance
client = mqtt.Client()

# Set username and password
client.username_pw_set("example_username", password='example_password')

# Connect to the MQTT broker
client.connect("example_server.com", 1883)

# Attach callback functions
client.on_connect = on_connect
client.on_message = on_message

# Start the network loop
client.loop_forever()

Я отправлял сообщения с помощью MQTT PubSubClient с платы ESP32, ожидая, что они будут помещены в очередь AMQP, но этого не произошло.

Подробнее здесь: https://stackoverflow.com/questions/787 ... t-can-be-c
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»