初始化一个 MQTT 客户端,连接到特定主题的 MQTT 代理,对于在该主题上接收到的每条消息,执行一个函数调用以检查消息中属性的长度是否大于 200,如果是,则查找陀螺仪读数: GyroX & 保存到文件确保文件大小保持小于 400MB,否则打开一个新文件并开始写入。我想写入多个文件,即根据大小将传入的 json 消息发布到不同的文件,而不仅仅是一个文件。怎么做 ?任何帮助表示赞赏file_name='/tmp/gyro_256'+"_"+timestr+".csv"def on_message(client, userdata, message): y = json.loads(message.payload) v = (len(y['sec_data'])) p = int(v) if p >= 200: d = (y["sec_data"][10]["GyroX"]) with open(file_name,'a+') as f: f.write(d + "\n")client = mqttClient.Client("123") #create new instanceclient.username_pw_set(user, password=password) #set username and client.on_connect= on_connect #attach function to client.on_message= on_message #attach function to client.connect(broker_address,port,100) #connectclient.subscribe("tes1") #subscribeclient.loop_start() #then keep listening foreverif int(os.path.getsize(file_name)) > 47216840 : client.loop_stop() timestr = time.strftime("%Y%m%d%H%M%S") file_name = '/vol/vol_HDB/data/gyro_256'+"_"+timestr+".csv"client.loop_start()
1 回答
幕布斯6054654
TA贡献1876条经验 获得超7个赞
第一次调用之后的任何代码client.loop_start()都不会运行,因为该调用永远阻塞。
如果要更改文件名,则必须在on_message回调中进行文件大小测试。
def on_message(client, userdata, message):
global filename
y = json.loads(message.payload)
v = (len(y['sec_data']))
p = int(v)
if int(os.path.getsize(file_name)) > 47216840 :
timestr = time.strftime("%Y%m%d%H%M%S")
file_name = '/vol/vol_HDB/data/gyro_256'+"_"+timestr+".csv"
if p >= 200:
d = (y["sec_data"][10]["GyroX"])
with open(file_name,'a+') as f:
f.write(d + "\n")
添加回答
举报
0/150
提交
取消