इसलिए मैं एक एमक्यूटीटी प्रकाशक पर काम कर रहा हूं और एक पब क्लास बनाना चाहता हूं। मुझे एक समान प्रश्न यहां मिला, लेकिन मुझे नहीं पता कि यह मेरी समस्या का कैसे अनुवाद करता है।

यह मेरा कोड है:

def send_on_sensor(q, topic, delay, pub):

    while q.empty is not True:
        payload = json.dumps(q.get())
        pub.publish(payload)
        time.sleep(delay)


class Pub:
    def __init__(self, MQTT_BROKER, MQTT_TOPIC):
        self.MQTT_BROKER = MQTT_BROKER
        self.MQTT_TOPIC = MQTT_TOPIC
        self.mqttc = mqtt.Client()

        self.mqttc.on_connect = self.on_connect
        self.mqttc.publish = self.publish

        # Connect automatically on the creation of the object, but disconnect manually
        self.connect()

    def on_connect(self, client, userdata, flags, rc):
        print("Connecting to {}. Connection returned result: {}".format(self.MQTT_BROKER, rc))
        self.mqttc.subscribe(self.MQTT_TOPIC)

    def publish(self, MQTT_MSG):
        self.mqttc.publish(self.MQTT_TOPIC, MQTT_MSG)

    def connect(self):
        self.mqttc.connect(self.MQTT_BROKER)

    def disconnect(self):
        self.mqttc.disconnect()

मुझे यह त्रुटि मिलती है:

Exception in thread Thread-4:
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/threading.py", line 917, in _bootstrap_inner
    self.run()
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/threading.py", line 865, in run
    self._target(*self._args, **self._kwargs)
  File "/Users//PycharmProjects//V3_multiTops/mt_GenPub.py", line 76, in send_on_sensor
    pub.publish(payload)
  File "/Users//PycharmProjects//V3_multiTops/mt_GenPub.py", line 129, in publish
    self.mqttc.publish(self.MQTT_TOPIC, MQTT_MSG)
TypeError: publish() takes 2 positional arguments but 3 were given

यहां वास्तव में क्या समस्या है और मैं इसे कैसे ठीक करूं?

0
Philipp 21 जिंदा 2019, 02:52

1 उत्तर

सबसे बढ़िया उत्तर

आप प्रकाशित करने के लिए दो तर्क पारित कर रहे हैं ():

self.mqttc.publish(self.MQTT_TOPIC, MQTT_MSG)

लेकिन फ़ंक्शन को केवल एक तर्क लेने के लिए परिभाषित किया गया था (self से अलग, जो स्वचालित रूप से पारित हो जाता है):

def publish(self, MQTT_MSG):

आप MQTT_TOPIC क्यों पास कर रहे हैं?

0
John Gordon 21 जिंदा 2019, 03:04