python Paho 客户端 MQTT:写入多个文件

python Paho client MQTT : writing to multiple files

初始化一个 MQTT 客户端,连接到特定主题的 MQTT 代理,对于在该主题上收到的每条消息执行一个函数调用来检查消息中的属性长度是否大于 200,如果是则查找陀螺仪读数:GyroX 并保存到文件,确保文件大小保持小于 400MB,如果不是,则打开一个新文件并开始写入。

引用 post :

我想写入多个文件,即 post 传入的 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()

None 第一次调用 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")