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: