Python on_connect()正好接受3个参数(给定4个)
以前我有一个本地主机的问题,但现在我得到另一个错误。我正在尝试将MQTT数据存储在raspberry上的SQLITE数据库中。我做错了什么才能得到下面的错误 代码: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
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)