初始化一个 MQTT 客户端,连接到特定主题上的 MQTT 代理,对于在该主题上收到的每条消息执行函数调用以检查消息中的属性长度是否大于 200,如果是,则查找 Gyro 仪表读数: GyroX 并保存到文件,确保文件大小小于 400MB,否则打开一个新文件并开始写入。
参考帖子:https : //stackoverflow.com/a/54306598/12097046
我想写入多个文件,即根据大小将传入的 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 instance
client.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) #connect
client.subscribe("tes1") #subscribe
client.loop_start() #then keep listening forever
if 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()
第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")
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句