2016-10-15 6 views
0

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

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-надстройки репозитория PPA: mosquitto-DEV/mosquitto-PPA
  3. Sudo APT-получить обновление
  4. Sudo APT-получить установку mosquitto
+0

Когда вы говорите, что не работает, вы вообще ничего не получаете? И на какой платформе вы работаете? – hardillb

+0

Нет вывода вообще. – Andrei

+0

Если вы даже не получили сообщение «Connected with result code ...», вам следует проверить журналы брокера, чтобы узнать, показывает ли он, почему клиент не подключился. Код, который вы опубликовали, отлично работает здесь – hardillb

ответ

1

Это скорее всего потому, что вы используете старую версию mosquitto и питон е xpecting более новый билд, который поддерживает 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

 Смежные вопросы

  • Нет связанных вопросов^_^