【问题标题】:Paho mqtt publish topic failurePaho mqtt 发布主题失败
【发布时间】:2016-01-22 15:26:41
【问题描述】:

最近尝试通过AWS IOT服务发布和订阅消息。

这是我的处理方式:

  • 订阅主题“传感器/+/阅读”(Subscribe.py)
  • 将数据发布到主题“传感器/客厅/阅读”(Publish.py)

但是,每次我将数据发布到 AWS IOT MQTT 服务器时,我的订阅脚本都会重新连接到 MQTT 服务器并且没有收到来自远程的数据。

这是我的Subscribe.py 脚本:

import sys                                 
import ssl
import paho.mqtt.client as mqtt 
import time

def on_connect(mqttc, obj, flags, rc):
    if rc==0:
        print ("Connection status: successful")
    elif rc==1:
        print ("Connection status: Connection refused")
    mqttc.subscribe("Sensor/+/reading", qos=1)

def on_subscribe(mqttc, obj, mid, granted_qos):
    print("Subscribed: "+str(mid)+" "+str(granted_qos)+"data"+str(obj))

def on_message(mqttc, obj, msg):
    print("TOPIC: "+msg.topic+"| Data Received: "+str(msg.payload))


mqttc = mqtt.Client(client_id="Yun")

mqttc.on_connect = on_connect 
mqttc.on_subscribe = on_subscribe

mqttc.tls_set("root-CA.crt",
                certfile="64bc41eab8-certificate.pem.crt",
                keyfile="64bc41eab8-private.pem.key",
                tls_version=ssl.PROTOCOL_TLSv1_2, 
                ciphers=None)

mqttc.connect("AWS Thing endpoint",port = 8883)

mqttc.loop_forever()     

这是我的Publish.py 脚本:

import sys                                 
import ssl
import json
import time
import paho.mqtt.client as mqtt

jsonstr = '{"DeviceId":0,"Readings":[{"label":"Light","data":223},{"label":"Motion","data":245}]}'

jsonReading = json.loads(jsonstr)

payloadJson = {}
payloadJson['state'] = {}
payloadJson['state']['desired'] = jsonReading

print payloadJson

def on_publish(mosq, obj, mid):
    print("mid: "+str(mid))

def on_connect(mqttc, obj, flags, rc):
    if rc==0:
        print ("Connection status: successful")
    elif rc==1:
        print ("Connection refused")
    return

def on_disconnect(client, userdata, rc):
    print("disonnected")

mqttc = mqtt.Client(client_id="Yun")


mqttc.on_publish = on_publish
mqttc.on_connect = on_connect
mqttc.on_disconnect = on_disconnect

mqttc.tls_set("root-CA.crt",
                certfile="64bc41eab8-certificate.pem.crt",
                keyfile="64bc41eab8-private.pem.key",
                tls_version=ssl.PROTOCOL_TLSv1_2, 
                ciphers=None)

mqttc.connect("AWS iot things endpoint",8883)

mqttc.loop_start()
while True:
    mqttc.publish("Sensor/livingroom/reading", json.dumps(payloadJson) , qos = 1)
    time.sleep(10)

【问题讨论】:

    标签: python amazon-web-services mqtt


    【解决方案1】:

    解决了!一个 AWS iot Thing 无法连接两个事物(连接)。只需在 AWS iot 中再添加一件事以进行提取连接,脚本就会运行良好。

    【讨论】:

      【解决方案2】:

      MQTT 客户端 ID 必须是唯一的。您正在为两个客户端使用 Yun` 的客户端 ID。

      MQTT 规范规定,当第二个客户端使用相同的客户端 ID 连接时,代理必须断开第一个客户端的连接。

      【讨论】:

        猜你喜欢
        • 2022-07-06
        • 1970-01-01
        • 2021-08-24
        • 1970-01-01
        • 1970-01-01
        • 2021-05-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多