代码之家  ›  专栏  ›  技术社区  ›  uhoh Jacob

在类内使用从日志回调中查找MQTT PUBACK失败,但它在平面脚本中工作

  •  0
  • uhoh Jacob  · 技术社区  · 7 年前

    puback: True

    我使用类的第二个脚本 A 做这项工作是行不通的。回调不被调用,它以 a.puback: False

    作品:

    def on_log_puback(client, userdata, level, buf):
        global puback
        if 'PUBACK' in buf:
            puback = True
            print "PUBACK!"
    
    def on_connect(client, userdata, flags, rc):
        print "Connect code: ", rc
    
    def on_disconnect(client, userdata, flags, rc=0):
        print "Disconnect code: ", rc
    
    def on_message(client, userdata, msg):
        print "    Message: ", str(msg.payload.decode("utf-8", "ignore"))
    
    def stop():
        print ("stopping loop")
        client.loop_stop()
        print "disconnecting"
        client.disconnect()
    
    import paho.mqtt.client as mqtt 
    import time
    
    client     = mqtt.Client("Luke, I am your client") 
    mqtt.Client.connected_flag = False 
    
    client.on_connect     = on_connect  
    client.on_disconnect  = on_disconnect
    client.on_log         = on_log_puback 
    client.on_message     = on_message
    
    status = client.connect(host="test.mosquitto.org",
                            keepalive=60, port=1883)
    print "connect status: ", status
    time.sleep(2)
    
    print "loop_start"
    client.loop_start()
    time.sleep(1)
    
    sret = client.subscribe("test_topic")
    print "subscribe returns sret: ", sret
    time.sleep(2)
    
    # initialize global
    puback = False
    
    # test publish with qos=1
    status, msg_id = client.publish(topic="test_topic",
                                    payload="hello!",
                                    qos=1, retain=True)   
    print "publish status: ", status
    time.sleep(2)
    
    print "puback: ", puback
    
    stop()
    

    不起作用:

    import paho.mqtt.client as mqtt 
    import time
    
    class A(object):
        def __init__(self):
    
            client                = mqtt.Client("Luke, I am your client") 
            self.client           = client
            mqtt.Client.connected_flag = False
    
            client.on_connect     = self.on_connect  
            client.on_disconnect  = self.on_disconnect
            client.on_log         = self.on_log_puback 
            client.on_message     = self.on_message
    
            status = client.connect(host="test.mosquitto.org",
                                    keepalive=60, port=1883)
            print "connect status: ", status
            time.sleep(2)
    
            print "loop_start"
            client.loop_start()
            time.sleep(1)
    
            sret = client.subscribe("test_topic")
            print "subscribe returns: ", sret
            time.sleep(2)
    
            # initialize global
            puback = False
    
            # test publish with qos=1
            status, msg_id = client.publish(topic="test_topic",
                                            payload="hello!",
                                            qos=1, retain=True)   
            print "publish status: ", status
            time.sleep(2)
    
            self.puback = puback
    
        def on_log_puback(client, userdata, level, buf):
            global puback
            if 'PUBACK' in buf:
                puback = True
                print "PUBACK!"
    
        def on_connect(client, userdata, flags, rc):
            print "Connect code: ", rc
    
        def on_disconnect(client, userdata, flags, rc=0):
            print "Disconnect code: ", rc
    
        def on_message(client, userdata, msg):
            print "    Message: ", str(msg.payload.decode("utf-8", "ignore"))
    
        def stop(self):
            print ("stopping loop")
            self.client.loop_stop()
            print "disconnecting"
            self.client.disconnect()
    
    a = A()
    
    time.sleep(2)
    print 'a.puback: ', a.puback
    a.stop()
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   uhoh Jacob    7 年前

    on_log_puback(self,...) self 到争论的开始。有了它,现在工作得很好。

    推荐文章