我目前正在研究一个小的MQTT-Projekt,我想将树莓派连接到Windows PC。两者之间的连接可以正常工作,但是问题在于PC(MQTT-Broker处于打开状态)的启动晚于pi,因此必须延迟连接。
我在$data = json_decode($response["body"]);
$shippingCost = $data->data->amount;
session_start();
$_SESSION['shippingCost'] = $shippingCost;
方法周围做了一会儿循环,因此它将每2秒尝试连接一次。但以我为例,它尝试5次然后停止。
我还实现了一个线程,该线程启动计时器以检查是否收到消息。计时器的问题是,有时它会从20秒跳到100秒。
我想我误解了线程,但我犯了一个错误,但我不知道在哪里。
我的代码如下:
client.connect()
运行该程序将输出:
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
。
答案 0 :(得分:0)
我通过不做client.connect(xxx)
的while循环来使其工作。我首先检查了netiface库是否存在该接口,然后尝试连接到该接口。在这种情况下,它等待连接,然后开始工作。感谢@JohnAnderson,我了解到client.connect(xxx)被阻止,因此导致了一些问题。