2016-12-26 9 views
0

MQTTとPythonについては幾分経験がありますが、これは過去1時間ほど私を困惑させました。MQTTはPython上で公開しません

これは、私が働いているスクリプトです:このコードは実行されません

#!/usr/bin/python 
import json 
import socket 
import paho.mqtt.client as mqtt 

client = mqtt.Client() 
try: 
     client.connect('localhost', 4444) 
except: 
     print "ERROR: Could not connect to MQTT." 

mode_msg = { 
     'mode': '2' 
} 

client.publish("set", payload=json.dumps(mode_msg), qos=2, retain=False) 

。なぜ私は考えていない。ほとんどのバッフェリングは、私が "client.loop_forever()"を下に追加すると実行されます...

私は接続を切断するために "client.disconnect()"を追加してみましたしかし、それはすべて役に立たないでしょう。私は今、欠けているものがありますか?

答えて

2

で述べたように、loop()機能の一部を呼び出す必要が実現するために、PAHOクライアントだけを行うには、特定のメッセージを持っていますそれ。

#!/usr/bin/python 
import paho.mqtt.publish as publish 
mode_msg = { 
     'mode': '2' 
} 

publish.single("paho/test/single", payload=json.dumps(mode_msg), qos=2, hostname="localhost", port=4444) 

あなたの元のコードの問題は、あなたが(あなたが公開のブローカの通知に返信する必要のQoS = 2で公開されているためと)パブリッシュ処理するために、ネットワークのループを実行する必要があるということですそれは名前が示唆する、それが永遠にループまさにんので、ごclient.disconnect()に達することはないので、

#!/usr/bin/python 
import json 
import paho.mqtt.client as mqtt 

run = True 

def on_publish(client, userdata, mid): 
    run = False; 

client = mqtt.Client() 
client.on_publish = on_publish 
try: 
     client.connect('localhost', 4444) 
except: 
     print "ERROR: Could not connect to MQTT." 

mode_msg = { 
     'mode': '2' 
} 

client.publish("set", payload=json.dumps(mode_msg), qos=2, retain=False) 
while run: 
    client.loop() 
client.disconnect() 

client.loop_forever()が動作しません:次のように、あなたはそれを行うことができます。これはon_publishコールバックを使用してループを中断してclient.loop()を呼び出して切断します。

0

paho.mqttクライアント・ライブラリーは、MQTTプロトコルを適切に処理および保守するために実行する必要のあるイベント・ループを中心に構築されています。

は、このように物事はあなたが単一のメッセージを公開しようとしているように見えますdocumentation

関連する問題