Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python on_connect()正好接受3个参数(给定4个)_Python_Mqtt - Fatal编程技术网

Python on_connect()正好接受3个参数(给定4个)

Python on_connect()正好接受3个参数(给定4个),python,mqtt,Python,Mqtt,以前我有一个本地主机的问题,但现在我得到另一个错误。我正在尝试将MQTT数据存储在raspberry上的SQLITE数据库中。我做错了什么才能得到下面的错误 代码: import paho.mqtt.client as mqtt from store_Sensor_Data_to_DB import sensor_Data_Handler # MQTT Settings MQTT_Broker = "localhost" MQTT_Port = 1883 Keep_Alive_Interva

以前我有一个本地主机的问题,但现在我得到另一个错误。我正在尝试将MQTT数据存储在raspberry上的SQLITE数据库中。我做错了什么才能得到下面的错误

代码:

import paho.mqtt.client as mqtt
from store_Sensor_Data_to_DB import sensor_Data_Handler

# MQTT Settings 
MQTT_Broker = "localhost"
MQTT_Port = 1883
Keep_Alive_Interval = 45
MQTT_Topic = "kuca/primanje/kanta01/r"

#Subscribe to all Sensors at Base Topic
def on_connect(mosq, obj, rc):
       self.subscribe(MQTT_Topic,0)

#Save Data into DB Table
def on_message(mosq, obj, msg):
        self.subscribe(MQTT_Topic, 0)
    # This is the Master Call for saving MQTT Data into DB
    # For details of "sensor_Data_Handler" function please refer "sensor_data_to_db.py"
    print "MQTT Data Received..."
    print "MQTT Topic: " + msg.topic  
    print "Data: " + msg.payload
    sensor_Data_Handler(msg.topic, msg.payload)

def on_subscribe(mosq, obj, mid, granted_qos):

    pass

mqttc = mqtt.Client()
# Assign event callbacks
mqttc.on_message = on_message
mqttc.on_connect = on_connect
mqttc.on_subscribe = on_subscribe

# Connect
mqttc.connect(MQTT_Broker, int(MQTT_Port), int(Keep_Alive_Interval))

# Continue the network loop
mqttc.loop_forever()
错误:

pi@Pi:~/Desktop/SQLITE $ python mqtt_Listen_Sensor_Data.py
Traceback (most recent call last):
  File "mqtt_Listen_Sensor_Data.py", line 46, in <module>
    mqttc.loop_forever()
  File "/usr/local/lib/python2.7/dist-packages/paho/mqtt/client.py", line 1481, in loop_forever
    rc = self.loop(timeout, max_packets)
  File "/usr/local/lib/python2.7/dist-packages/paho/mqtt/client.py", line 1003, in loop
    rc = self.loop_read(max_packets)
  File "/usr/local/lib/python2.7/dist-packages/paho/mqtt/client.py", line 1284, in loop_read
    rc = self._packet_read()
  File "/usr/local/lib/python2.7/dist-packages/paho/mqtt/client.py", line 1849, in _packet_read
    rc = self._packet_handle()
  File "/usr/local/lib/python2.7/dist-packages/paho/mqtt/client.py", line 2311, in _packet_handle
    return self._handle_connack()
  File "/usr/local/lib/python2.7/dist-packages/paho/mqtt/client.py", line 2372, in _handle_connack
    self.on_connect(self, self._userdata, flags_dict, result)
TypeError: on_connect() takes exactly 3 arguments (4 given)

我真的很抱歉给您带来这么多麻烦。

您的问题就在这里:您定义了一个函数,并在没有实际传递它的情况下解决了这个问题:

#Subscribe to all Sensors at Base Topic
def on_connect(mosq, obj, rc):
       self.subscribe(MQTT_Topic,0)
然后创建一个对象,并将函数指定为该对象的属性:

您的on_connect函数不是实例方法

调用实例方法时,自变量作为第一个参数传递


因此,当您调用mgttc.on_connectx,y,z时,实际执行的是mgttc.on_connectself,x,y,z。

您的on_connect回调必须具有以下签名:

如果要在其他类中使用它,可以使用此签名:

def on_connect(self, client, userdata, flags, rc):
此外,变量self在on_connect和on_消息回调中未定义,例如:

self.subscribe(MQTT_Topic,0)
一定是

mqttc.subscribte(MQTT_Topic, 0)

希望这对您有所帮助

嗨,谢谢您的好意。on_connect的问题已修复,但现在mqttc.loop_仍然存在错误。谢谢您的帮助。您的代码修复了on_connect的问题,但mqttc.loop_foreverSame仍然存在错误,与以前一样,只是没有TypeError:on_connect只接受3个参数4。永久循环现在是个问题
self.subscribe(MQTT_Topic,0)
mqttc.subscribte(MQTT_Topic, 0)