Python Paho MQTT og IBM Watson IoT

Python Paho MQTT og IBM Watson IoT

问题描述:

我正尝试使用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 

但数据未显示...

您需要运行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