Клиент MQTT не получает сообщений

#python #publish-subscribe #mqtt

#python #опубликовать-подписаться #mqtt

Вопрос:

Я использую следующий код из проекта MQTT Paho для подписки на сообщения от моего брокера mqtt. Я протестировал соединение с помощью mosquitto_sub и получаю сообщения там. Однако, когда я запускаю следующий код, он не получает никаких сообщений, и выходные данные не печатаются. Я проверил тему и хост.

 import paho.mqtt.client as mqtt

# The callback for when the client receives a CONNACK response from the server.
def on_connect(client, userdata, rc):
    print("Connected with result code " str(rc))
    # Subscribing in on_connect() means that if we lose the connection and
    # reconnect then subscriptions will be renewed.
    client.subscribe("test")

# The callback for when a PUBLISH message is received from the server.
def on_message(client, userdata, msg):
    print(msg.topic " " str(msg.payload))

client = mqtt.Client()

client.on_connect = on_connect
client.on_message = on_message

client.connect("localhost", 1883, 60)
client.loop_forever()
 

Брокер регистрирует следующую ошибку:

 Invalid protocol "MQTT" in CONNECT from ::1.
Socket read error on client (null), disconnecting.
 

РЕДАКТИРОВАТЬ Спасибо @hardillb за указание устаревшей версии MQTT.

Все сработало после того, как я сделал следующее:

  1. sudo apt-получить очистку mosquitto
  2. sudo apt-add-repository ppa: mosquitto-dev/mosquitto-ppa
  3. sudo apt-получить обновление
  4. sudo apt-get установить mosquitto

Комментарии:

1. Когда вы говорите, что это не работает, получаете ли вы вообще какой-либо результат? Кроме того, на какой платформе вы это используете?

2. Вообще никакого выхода.

3. Если вы даже не получаете сообщение «Связано с кодом результата …», то вам следует проверить журналы брокера, чтобы узнать, показывает ли это, почему клиент не подключился. Опубликованный вами код здесь работает нормально

4. Я добавил сообщение об ошибке, которое регистрируется брокером

5. Какого брокера и какую версию вы используете?

Ответ №1:

Скорее всего, это связано с тем, что вы используете старую версию mosquitto, а python ожидает более новую сборку, поддерживающую MQTT 3.1.1

Попробуйте изменить код, как показано на рисунке:

 import paho.mqtt.client as mqtt

# The callback for when the client receives a CONNACK response from the server.
def on_connect(client, userdata, rc):
    print("Connected with result code " str(rc))
    # Subscribing in on_connect() means that if we lose the connection and
    # reconnect then subscriptions will be renewed.
    client.subscribe("test")

# The callback for when a PUBLISH message is received from the server.
def on_message(client, userdata, msg):
    print(msg.topic " " str(msg.payload))

# Change made HERE 
client = mqtt.Client(protocol=MQTTv31)

client.on_connect = on_connect
client.on_message = on_message

client.connect("localhost", 1883, 60)
client.loop_forever()
 

Вы также должны обновить свой брокер как можно скорее, эта версия невероятно устарела и имеет ряд известных проблем, текущая версия 1.4.10