Тема блокирует консоль - PullRequest
0 голосов
/ 28 января 2019

В настоящее время я работаю над небольшим MQTT-Projekt, где я хочу подключить Raspberry Pi к ПК с Windows.Связь между этими двумя работает отлично, но проблема в том, что компьютер (где включен MQTT-Broker) запускается позже, чем pi, и поэтому соединение должно быть отложено.

Я сделал цикл while вокругclient.connect() метод, поэтому он будет пытаться подключаться каждые 2 секунды.Но в моем случае он пытается, например, 5 раз, а затем останавливается.

Я также реализую поток, который запускает таймер, который проверяет, получил ли я сообщение.Проблема с таймером заключается в том, что он иногда скачет с 20 секунд до 100.

Я думаю, что я неправильно понял темы и допустил ошибку, но не знаю, где.

Мой код выглядит так:

import threading
import time
import paho.mqtt.client as mqtt

shutdown = 0

def on_connect(client, userdata, flags, rc):
   print("Connected with result code "+str(rc))
   client.subscribe("CoreElectronics/test")
   client.subscribe("CoreElectronics/topic")

def on_message(client, userdata, msg):
   global shutdown
   shutdown = time.time()
   print(msg.topic+" "+str(msg.payload))

def check_connect():
   try:
      client.connect("192.168.xx.xx", 1883, 60)
      return True
   except:
      print("No connection")
      return False

def timer_count():
    global shutdown
    shutdown = time.time()
    elapsed = 0
    while elapsed < 10:
         elapsed = time.time()-shutdown
         print("no Message")
         time.sleep(2)

t1 = threading.Thread(target = timer_count)
t1.start()

client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message

while(True):
    if check_connect():
        break;
    else:
       time.sleep(2)


client.loop_forever()

При запуске этой программы выводится:

No Message
No Connection
No Message
No Message
No Message
No Message

Но в моем случае она должна печатать обе вещи одновременно все время.После того, как он не распечатывает No Connection, он также не подключается к Broker, когда работает ...

1 Ответ

0 голосов
/ 29 января 2019

Я заставил это работать, не делая цикл while вокруг client.connect(xxx).Сначала я проверил библиотеку netiface, был ли там интерфейс, а затем попытался подключиться к нему.В этом случае он ждал подключения, а затем он работал.Благодаря @JohnAnderson я узнал, что client.connect (xxx) блокирует и поэтому вызывает некоторые проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...