2017-01-31 20 views
0

私はPythonには初めてです。クライアントとブローカーを接続しようとしています。しかし、 "グローバル名 'mqttClient'が定義されていません"というエラーが表示されます。 誰かが私のコードに間違っていることを助けることができます。グローバル名 'mqttClient'が定義されていません

ここ

私のコードは、

Test.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私はこれを取得してい

#!/usr/bin/env python 

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 = mqtt.Client() 
    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) 



if __name__ == '__main__': 
    main() 

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

変更'#グローバルmqttClient'を変更します。 –

答えて

0

mqttClientをグローバルに定義していません。

次のことを行いますが、 `グローバル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() 
+0

ありがとうございますこれは私のために働く:) – AnjuT

関連する問題