未定义全局名称“mqttClient”

2024-10-02 00:39:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我是python新手。我正试着把我的客户和经纪人联系起来。但是我收到一个错误“global name'mqttClient'is not defined”。 谁能帮我找出我的代码有什么问题吗。在

这是我的密码

测试.py

#!/usr/bin/env python

import time, threading
import mqttConnector


class UtilsThread(object):
    def __init__(self):
        thread = threading.Thread(target=self.run, args=())
        thread.daemon = True  # Daemonize thread
        thread.start()  # Start the execution


class SubscribeToMQTTQueue(object):
    def __init__(self):
        thread = threading.Thread(target=self.run, args=())
        thread.daemon = True  # Daemonize thread
        thread.start()  # Start the execution

    def run(self):
        mqttConnector.main()


def connectAndPushData():
    PUSH_DATA = "xxx"
    mqttConnector.publish(PUSH_DATA)


def main():
    SubscribeToMQTTQueue()  # connects and subscribes to an MQTT Queue that receives MQTT commands from the server
    LAST_TEMP = 25

    try:
        if LAST_TEMP > 0:
            connectAndPushData()
            time.sleep(5000)
    except (keyboardInterrupt, Exception) as e:
        print "Exception in RaspberryAgentThread (either KeyboardInterrupt or Other)"
        print ("STATS: " + str(e))
        pass


if __name__ == "__main__":
    main()

mqttConnector.py

^{pr2}$

我得到了这个

Exception in RaspberryAgentThread (either KeyboardInterrupt or Other)
STATS: global name 'mqttClient' is not defined

Tags: therunnameselfismaindefexception
2条回答

您尚未全局定义mqttClient。在

进行以下更改

import time
import paho.mqtt.client as mqtt

def on_connect(client, userdata, flags, rc):
    print("MQTT_LISTENER: Connected with result code " + str(rc))


def on_message(client, userdata, msg):
    print 'MQTT_LISTENER: Message Received by Device'


def on_publish(client, userdata, mid):
    print 'Temperature Data Published Succesfully'


def publish(msg):
    global mqttClient
    mqttClient.publish(TOPIC_TO_PUBLISH, msg)


def main():

    MQTT_IP = "IP"
    MQTT_PORT = "port"

    global TOPIC_TO_PUBLISH
    TOPIC_TO_PUBLISH = "xxx/laptop-management/001/data"

    global mqttClient
    mqttClient.on_connect = on_connect
    mqttClient.on_message = on_message
    mqttClient.on_publish = on_publish

    while True:
        try:
            mqttClient.connect(MQTT_IP, MQTT_PORT, 180)
            mqttClient.loop_forever()

        except (KeyboardInterrupt, Exception) as e:
            print "MQTT_LISTENER: Exception in MQTTServerThread (either KeyboardInterrupt or Other)"
            print ("MQTT_LISTENER: " + str(e))

            mqttClient.disconnect()
            print "MQTT_LISTENER: " + time.asctime(), "Connection to Broker closed - %s:%s" % (MQTT_IP, MQTT_PORT)


mqttClient = mqtt.Client()
if __name__ == '__main__':
    main()

由于使用以下行而发生错误:

mqttClient.on_connect = on_connect

正确的格式应该是

^{pr2}$

相关问题 更多 >

    热门问题