2017-10-10 77 views
0

我正嘗試使用Python 2.7和Paho MQTT 1.3.1將JSON數據推送到IBM Watson IoT平臺。Python Paho MQTT og IBM Watson IoT

它可以與來自IBM的Github的IoT Python客戶端一起工作,但是我的設備環境不支持此擴展。

測試時,我在IBM Watson IoT中禁用了TLS加密。

這是我的代碼:

import json 
import paho.mqtt.client as mqtt 

client = mqtt.Client('d:ORG-ID:DEVICE-TYPE:DEVICE-ID') 

client.username_pw_set('use-token-auth', 'TOKEN') 
client.connect('ORG-ID.messaging.internetofthings.ibmcloud.com', 1883, 60) 

payload = { 'temperature': 20 } 
client.publish('iot-2/evt/test/fmt/json', json.dumps(payload)) 

client.disconnect() 

我沒有收到錯誤,我的IBM沃森物聯網儀表盤並說:

Connected on Tuesday, October 10, 2017 at 12:42:26 PM from MY-IP with an insecure connection 

但數據未顯示...

回答

0

您需要運行MQTT網絡循環以確保數據在發佈之後和斷開連接之前發送。有幾種方法可以做到這一點。

最簡單的就是添加的發佈和斷開之間的通話client.loop()電話:

import json 
import paho.mqtt.client as mqtt 

client = mqtt.Client('d:ORG-ID:DEVICE-TYPE:DEVICE-ID') 

client.username_pw_set('use-token-auth', 'TOKEN') 
client.connect('ORG-ID.messaging.internetofthings.ibmcloud.com', 1883, 60) 

payload = { 'temperature': 20 } 
client.publish('iot-2/evt/test/fmt/json', json.dumps(payload)) 

client.loop() 

client.disconnect() 

另一種方法是使用單次發佈調用,它的連接,發佈並斷開所有一氣呵成。

single(topic, payload=None, qos=0, retain=False, hostname="localhost", 
port=1883, client_id="", keepalive=60, will=None, auth=None, tls=None, 
protocol=mqtt.MQTTv311) 

對單發方法的全部細節都在文檔here