#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.
Все сработало после того, как я сделал следующее:
- sudo apt-получить очистку mosquitto
- sudo apt-add-repository ppa: mosquitto-dev/mosquitto-ppa
- sudo apt-получить обновление
- 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