赞
踩
注:因为在我们这个课设项目中服务器向客户端传输图片时将一个图片分包传输,所以在客户端需要将图片按序重新组装,然后再进行人脸识别
1.通过影子设备文件获取userid
- a = []#获取userId
- with open("/home/simon/mqtt/"+"shadow.ini","r") as ud:
- mes = ud.read()
- mes_parsed = json.loads(mes)
- meslist = mes_parsed['payload']['state']['reported']['faceList']
- for i in meslist:
- #print(str(i))
- userid = i['userId']
- a.append(int(userid))
- #print(userid)
- #print(a)
2.对文件夹中的图片进行循环扫描
- def file_circle(dirs5,houzhui,i,picture):
- global picture2
- for dirs4 in dirs5:
- #print("dirs4:"+dirs4)
- d2 = os.path.basename(dirs4)#图片名加后缀
- num2 = os.path.splitext(d2)[0]#图片名
- basename2 = os.path.splitext(d2)[1] #后缀名
- if(int(num2)==i):
- with open("/home/simon/mqtt/picture_recieve/"+str(num2)+basename2,"rb") as p1:
- picture2 = picture + str(base64.b64encode(p1.read()),encoding="utf-8")#bytes
- break
- return(picture2)
3.当topic为control且type为imageUpdate时需现将存有图片的文件夹中的对应userid的图片删除
- if(msg_type=="imageUpdate"):
- rootdir = "/home/simon/mqtt/picture_recieve/"
- file_delete = os.listdir(rootdir)
- for file in file_delete:
- if houzhui in file:
- del_file = rootdir + file#当代码和要删除的文件不在同一个文件夹时,必须使用绝对路径
- os.remove(del_file)#删除文件
4.判断接收的到一个userid的图片是否全部收到
- key = len(u)-1
- if(key<0):
- u.append(useridnum)
- v[key]=1
- else:
- while(key>=0):
- if(uesridnum==u[key]):
- v[key]+=1
- else:
- u.append(useridnum)
- v[key]=1
- if(v[key]==packettotal):
- break
- key = key-1
5.一张图片接收完以后进行组装
- #一张图片全部接收后进行组装
- if(v[key]==packettotal):
- i=1
- #all = r'/home/simon/mqtt/picture_recieve'
- bool_flag2 = False#大循环跳出标志
- dirs2 = []
- dirs0 = []
- for dirs1 in glob.glob('/home/simon/mqtt/picture_recieve'+"/*"+houzhui):
- dirs2.append(dirs1)
- dirs0.append(dirs1)
- #print(dirs2)
- for dirs3 in dirs2:
- #print("dirs3:"+dirs3)
- d1 = os.path.basename(dirs3)#图片名加后缀
- num1 = os.path.splitext(d1)[0]#图片名
- basename1 = os.path.splitext(d1)[1] #后缀名
- if(int(num1)==1):
- with open("/home/simon/mqtt/picture_recieve/"+str(num1)+basename1,"rb") as p1:
- picture1 = str(base64.b64encode(p1.read()),encoding="utf-8")#bytes
- i=i+1
- bool_flag1 = False#跳出小循环标志
- while True:
- if(i!=packettotal):
- picture1 = file_circle(dirs0,houzhui,i,picture1)
- i=i+1
- if(i==packettotal):
- picture1 = file_circle(dirs0,houzhui,i,picture1)
- i=1
- bool_flag1 = True
- break
- if(bool_flag1):
- bool_flag2 = True
- temp = base64.b64decode(picture1)#bytes
- with open("/home/simon/mqtt/picture/"+str(recieve_parsed['payload']['user'])+str(recieve_parsed['payload']['userName'])+".jpg","wb") as o:
- o.write(temp)
- if(bool_flag2):
- break

6.如果get到的影子设备文件内desired有内容,即表示客户有需要我做的事情,所以完成desired的事情后,将其放置到reported内发送delta,报告给客户表明我做完了这件事
- if(shadow_desired!={}):
- if('state' in shadow_desired):
- state = shadow_desired['state']
- else:state = shadow_reported['state']
- if('faceList' in shadow_desired):
- s_d_facelist = shadow_desired['faceList']#数组
- s_d_f = ",".join('%s'%id for id in s_d_facelist)#字符串
- else:
- s_r_facelist = shadow_reported['faceList']#数组
- s_d_f = ",".join('%s'%id for id in s_r_facelist)#字符串
- data_delta = {
- "type":"delta",
- "state":{
- "reported":{
- "state":state,
- "faceList":[s_d_f]
- }
- },
- "version":shadow_version,
- "clientToken":str(clientToken)
- }
- data_delta_param = json.dumps(data_delta)
- client.publish("$shadow/operation/414ce45bde0a4bc1949fec75a7d2f699", payload=data_delta_param,qos=2,retain=False)#delta

7.循环扫描存有要发送信息的文件,有信息则发布,然后删除发送的信息,继续循环扫描
- while True:
- with open('/home/simon/mqtt/'+'FaceAndTime.json','r',encoding="utf-8") as old_f:
- #读取所有行,每行会是一个字符串
- for j in old_f.readlines():
- if(j):
- print(j)
- face = json.loads(j,object_hook=dict2Data)
- data_face = {
- "type":"history",
- "payload":{
- "history":[
- {
- "timestamp":face.timestamp,
- "history":{"name":face.name}
- }]
- },
- "clientToken":str(clientToken)
- }
- client.publish("414ce45bde0a4bc1949fec75a7d2f699/event", payload=str(data_face), qos=0,retain=False)#发送人脸数据
- with open('/home/simon/mqtt/'+'FaceAndTime.json','w+',encoding="utf-8") as new_f:
- seek_point = old_f.tell()#光标在被删除行的行首,记录该位置
- new_f.seek(seek_point,0)#设置光标位置
- old_f.readline()#读需要删除的行,光标移动到下一行行首
- next_line=old_f.readline()#被删除行的下一行读给next_line
- while next_line:#连续覆盖剩余行,后面所有行上移一行
- new_f.write(next_line)
- next_line=old_f.readline()
- new_f.truncate()

- import paho.mqtt.client as mqtt
- import json
- import base64
- import uuid
- import time
- import sys
- import multiprocessing
- import re
- import os
- from face_recognition.face_recognition_cli import image_files_in_folder
- import glob
-
- HOST = "api.yumik.top"
- PORT = 1883
- client_id="414ce45bde0a4bc1949fec75a7d2f699"
- clientToken=uuid.uuid4()
-
- class Data(object):
- def __init__(self,name,timestamp):
- self.timestamp = timestamp
- self.name = name
- def dict2Data(d):
- return Data(d['name'],d['timestamp'])
-
- a = []#获取userId
- with open("/home/simon/mqtt/"+"shadow.ini","r") as ud:
- mes = ud.read()
- mes_parsed = json.loads(mes)
- meslist = mes_parsed['payload']['state']['reported']['faceList']
- for i in meslist:
- #print(str(i))
- userid = i['userId']
- a.append(int(userid))
- #print(userid)
- #print(a)
-
- #publish event
- data_in = {
- "type":"face",
- "payload":{"userList":a,},
- #"payload":{"userList":[2],},
- "clientToken":str(clientToken)
- }
- param_in = json.dumps(data_in)
- #publish shadow/operation
- data1 = {
- "type":"get",
- "clientToken":str(clientToken)
- }
- param1 = json.dumps(data1)
-
- def on_connect(client, userdata, flags, rc):
- print("Connected with result code "+str(rc))
-
- def file_circle(dirs5,houzhui,i,picture):
- global picture2
- for dirs4 in dirs5:
- #print("dirs4:"+dirs4)
- d2 = os.path.basename(dirs4)#图片名加后缀
- num2 = os.path.splitext(d2)[0]#图片名
- basename2 = os.path.splitext(d2)[1] #后缀名
- if(int(num2)==i):
- with open("/home/simon/mqtt/picture_recieve/"+str(num2)+basename2,"rb") as p1:
- picture2 = picture + str(base64.b64encode(p1.read()),encoding="utf-8")#bytes
- break
- return(picture2)
-
- picture = ""
- houzhui = ""
- u = []#存用户的id
- v = []#存每个用户的图片数量,递增
- def on_message(client, userdata, msg):
- global picture
- global i
- global houzhui
- recieve = msg.payload.decode("utf-8")
- recieve_parsed = json.loads(recieve)
- msg_type = recieve_parsed['type']
- if(msg.topic=="414ce45bde0a4bc1949fec75a7d2f699/control" and (msg_type=="face" or msg_type=="imageUpdate")):
- print("topic:"+msg.topic+" message:"+str(msg.payload.decode('utf-8')))
- print("control achieve!")
- packetnum = recieve_parsed['payload']['packet']
- packettotal = recieve_parsed['payload']['totalPacket']
- picture = recieve_parsed['payload']['userImageBase64']
- temp = base64.b64decode(picture)#bytes
- useridnum = str(recieve_parsed['payload']['user'])
- houzhui = "."+str(recieve_parsed['payload']['user'])
- if(msg_type=="imageUpdate"):
- rootdir = "/home/simon/mqtt/picture_recieve/"
- file_delete = os.listdir(rootdir)
- for file in file_delete:
- if houzhui in file:
- del_file = rootdir + file#当代码和要删除的文件不在同一个文件夹时,必须使用绝对路径
- os.remove(del_file)#删除文件
- with open("/home/simon/mqtt/picture_recieve/"+str(packetnum)+"."+str(recieve_parsed['payload']['user']),"wb") as f:
- f.write(temp)#int
- #判断一张图片是否全部接收
- key = len(u)-1
- if(key<0):
- u.append(useridnum)
- v[key]=1
- else:
- while(key>=0):
- if(uesridnum==u[key]):
- v[key]+=1
- else:
- u.append(useridnum)
- v[key]=1
- if(v[key]==packettotal):
- break
- key = key-1
- #一张图片全部接收后进行组装
- if(v[key]==packettotal):
- i=1
- #all = r'/home/simon/mqtt/picture_recieve'
- bool_flag2 = False#大循环跳出标志
- dirs2 = []
- dirs0 = []
- for dirs1 in glob.glob('/home/simon/mqtt/picture_recieve'+"/*"+houzhui):
- dirs2.append(dirs1)
- dirs0.append(dirs1)
- #print(dirs2)
- for dirs3 in dirs2:
- #print("dirs3:"+dirs3)
- d1 = os.path.basename(dirs3)#图片名加后缀
- num1 = os.path.splitext(d1)[0]#图片名
- basename1 = os.path.splitext(d1)[1] #后缀名
- if(int(num1)==1):
- with open("/home/simon/mqtt/picture_recieve/"+str(num1)+basename1,"rb") as p1:
- picture1 = str(base64.b64encode(p1.read()),encoding="utf-8")#bytes
- i=i+1
- bool_flag1 = False#跳出小循环标志
- while True:
- if(i!=packettotal):
- picture1 = file_circle(dirs0,houzhui,i,picture1)
- i=i+1
- if(i==packettotal):
- picture1 = file_circle(dirs0,houzhui,i,picture1)
- i=1
- bool_flag1 = True
- break
- if(bool_flag1):
- bool_flag2 = True
- temp = base64.b64decode(picture1)#bytes
- with open("/home/simon/mqtt/picture/"+str(recieve_parsed['payload']['user'])+str(recieve_parsed['payload']['userName'])+".jpg","wb") as o:
- o.write(temp)
- if(bool_flag2):
- break
- if(msg.topic=="414ce45bde0a4bc1949fec75a7d2f699/control" and msg_type=="history"):
- print("topic:"+msg.topic+" message:"+str(msg.payload.decode('utf-8')))
- if(msg.topic=="$shadow/operation/result/414ce45bde0a4bc1949fec75a7d2f699"):
- #print("topic:"+msg.topic+" message:"+str(msg.payload.decode('utf-8')))
- print("shadow achieve!")
- #本地的shadow
- with open("/home/simon/mqtt/"+"shadow.ini","r") as sd:
- vsn = sd.read()
- vsn_parsed = json.loads(vsn)
- in_version = vsn_parsed['payload']['version']
- #get到的shadow
- shadow = msg.payload.decode('utf-8')
- shadow_get = json.loads(shadow)
- shadow_desired = shadow_get['payload']['state']['desired']
- shadow_reported = shadow_get['payload']['state']['reported']
- print(shadow_get)
- shadow_version = shadow_get['payload']['version']#字符串
- if(shadow_desired!={}):
- if('state' in shadow_desired):
- state = shadow_desired['state']
- else:state = shadow_reported['state']
- if('faceList' in shadow_desired):
- s_d_facelist = shadow_desired['faceList']#数组
- s_d_f = ",".join('%s'%id for id in s_d_facelist)#字符串
- else:
- s_r_facelist = shadow_reported['faceList']#数组
- s_d_f = ",".join('%s'%id for id in s_r_facelist)#字符串
- data_delta = {
- "type":"delta",
- "state":{
- "reported":{
- "state":state,
- "faceList":[s_d_f]
- }
- },
- "version":shadow_version,
- "clientToken":str(clientToken)
- }
- data_delta_param = json.dumps(data_delta)
- client.publish("$shadow/operation/414ce45bde0a4bc1949fec75a7d2f699", payload=data_delta_param,qos=2,retain=False)#delta
- elif(shadow_version!=in_version):
- client.publish("$shadow/operation/414ce45bde0a4bc1949fec75a7d2f699", payload=param1,qos=2,retain=False)#get
- with open("/home/simon/mqtt/"+"shadow.ini","w") as sd:
- sd.write(msg.payload.decode('utf-8'))
-
- def on_publish(client,userdata,mid):
- print("On onPublish: qos = %d" % mid)
-
- def on_subscribe(client, userdata, mid, granted_qos):
- print("On Subscribed: qos = %d" % granted_qos)
-
- def on_disconnect(client, userdata, rc):
- if rc != 0:
- print("Unexpected disconnection %s" % rc)
-
- def client_loop():
- while True:
- with open('/home/simon/mqtt/'+'FaceAndTime.json','r',encoding="utf-8") as old_f:
- #读取所有行,每行会是一个字符串
- for j in old_f.readlines():
- if(j):
- print(j)
- face = json.loads(j,object_hook=dict2Data)
- data_face = {
- "type":"history",
- "payload":{
- "history":[
- {
- "timestamp":face.timestamp,
- "history":{"name":face.name}
- }]
- },
- "clientToken":str(clientToken)
- }
- client.publish("414ce45bde0a4bc1949fec75a7d2f699/event", payload=str(data_face), qos=0,retain=False)#发送人脸数据
- with open('/home/simon/mqtt/'+'FaceAndTime.json','w+',encoding="utf-8") as new_f:
- seek_point = old_f.tell()#光标在被删除行的行首,记录该位置
- new_f.seek(seek_point,0)#设置光标位置
- old_f.readline()#读需要删除的行,光标移动到下一行行首
- next_line=old_f.readline()#被删除行的下一行读给next_line
- while next_line:#连续覆盖剩余行,后面所有行上移一行
- new_f.write(next_line)
- next_line=old_f.readline()
- new_f.truncate()
-
- if __name__ == '__main__':
- client = mqtt.Client(client_id)
- client.on_connect = on_connect
- client.connect(HOST, PORT, 60)
- client.on_subscribe = on_subscribe
- client.subscribe("414ce45bde0a4bc1949fec75a7d2f699/control",qos=1)
- client.subscribe("$shadow/operation/result/414ce45bde0a4bc1949fec75a7d2f699",qos=1)
- client.on_publish = on_publish
- client.publish("414ce45bde0a4bc1949fec75a7d2f699/event", payload=param_in,qos=2,retain=False)#获得图片
- client.publish("$shadow/operation/414ce45bde0a4bc1949fec75a7d2f699", payload=param1,qos=2,retain=False)#get
- client.on_message = on_message
- client.loop_start()
- client_loop()

- import paho.mqtt.client as mqtt
- import json
- import base64
- import uuid
- import time
- import sys
- import multiprocessing
- import re
- import os
- from face_recognition.face_recognition_cli import image_files_in_folder
- import glob
-
- HOST = "api.yumik.top"
- PORT = 1883
- client_id="414ce45bde0a4bc1949fec75a7d2f699"
- clientToken=uuid.uuid4()
-
- class Data(object):
- def __init__(self,name,timestamp):
- self.timestamp = timestamp
- self.name = name
- def dict2Data(d):
- return Data(d['name'],d['timestamp'])
-
- #publish shadow/operation
- data1 = {
- "type":"get",
- "clientToken":str(clientToken)
- }
- param1 = json.dumps(data1)
-
- def on_connect(client, userdata, flags, rc):
- print("Connected with result code "+str(rc))
-
- def file_circle(dirs5,houzhui,i,picture):
- global picture2
- for dirs4 in dirs5:
- d2 = os.path.basename(dirs4)#图片名加后缀
- num2 = os.path.splitext(d2)[0]#图片名
- basename2 = os.path.splitext(d2)[1] #后缀名
- if(int(num2)==i):
- with open("/home/simon/mqtt/picture_recieve/"+str(num2)+basename2,"rb") as p1:
- picture2 = picture + str(base64.b64encode(p1.read()),encoding="utf-8")#bytes
- break
- return(picture2)
-
- picture = ""
- houzhui = ""
- u = []#存用户的id
- v = []#存每个用户的图片数量,递增
- a = []#获取userId
- def on_message(client, userdata, msg):
- global picture
- global i
- global houzhui
- recieve = msg.payload.decode("utf-8")
- recieve_parsed = json.loads(recieve)
- msg_type = recieve_parsed['type']
- if(msg.topic=="414ce45bde0a4bc1949fec75a7d2f699/control" and msg_type=="history"):
- print("topic:"+msg.topic+" message:"+str(msg.payload.decode('utf-8')))
- if(msg.topic=="$shadow/operation/result/414ce45bde0a4bc1949fec75a7d2f699"):
- if(msg_type=="get"):
- print("topic:"+msg.topic+" message:"+str(msg.payload.decode('utf-8')))
- print("shadow achieve!")
- #get到的shadow
- #shadow = msg.payload.decode('utf-8')
- #shadow_get = json.loads(shadow)
- shadow_desired = recieve_parsed['payload']['state']['desired']
- shadow_reported = recieve_parsed['payload']['state']['reported']
- shadow_version = recieve_parsed['payload']['version']#字符串
- if(shadow_desired!={}):
- if('faceList' in shadow_desired):
- s_d_facelist = shadow_desired['faceList']#数组
- if('state' in shadow_desired):
- state = shadow_desired['state']
- data_delta = {
- "type":"delta",
- "state":{
- "reported":{
- "state":state,
- "faceList":s_d_facelist
- }
- },
- "version":shadow_version,
- "clientToken":str(clientToken)
- }
- else:
- data_delta = {
- "type":"delta",
- "state":{
- "reported":{
- "faceList":s_d_facelist
- }
- },
- "version":shadow_version,
- "clientToken":str(clientToken)
- }
- else:
- state = shadow_desired['state']
- data_delta = {
- "type":"delta",
- "state":{
- "reported":{
- "state":state
- }
- },
- "version":shadow_version,
- "clientToken":str(clientToken)
- }
- data_delta_param = json.dumps(data_delta)
- client.publish("$shadow/operation/414ce45bde0a4bc1949fec75a7d2f699", payload=data_delta_param,qos=2,retain=False)#delta
- else:#desired内没有内容需要完成时
- with open("/home/simon/mqtt/"+"shadow.ini","r") as ud:
- mes = ud.read()
- mes_parsed = json.loads(mes)
- meslist = mes_parsed['payload']['state']['reported']['faceList']
- for i in meslist:
- userid = i['userId']
- a.append(int(userid))
- #publish event
- data_in = {
- "type":"face",
- "payload":{"userList":a,},
- #"payload":{"userList":[2,3,4,5],},
- "clientToken":str(clientToken)
- }
- param_in = json.dumps(data_in)
- client.publish("414ce45bde0a4bc1949fec75a7d2f699/event", payload=param_in,qos=2,retain=False)#获得图片
- if(msg_type=="delta"):
- print("topic:"+msg.topic+" message:"+str(msg.payload.decode('utf-8')))
- print("shadow achieve!")
- with open("/home/simon/mqtt/"+"shadow.ini","w") as sd:
- sd.write(msg.payload.decode('utf-8'))
- with open("/home/simon/mqtt/"+"shadow.ini","r") as ud:
- mes = ud.read()
- mes_parsed = json.loads(mes)
- meslist = mes_parsed['payload']['state']['reported']['faceList']
- for i in meslist:
- userid = i['userId']
- a.append(int(userid))
- #publish event
- data_in = {
- "type":"face",
- "payload":{"userList":a,},
- #"payload":{"userList":[2,3,4,5],},
- "clientToken":str(clientToken)
- }
- param_in = json.dumps(data_in)
- client.publish("414ce45bde0a4bc1949fec75a7d2f699/event", payload=param_in,qos=2,retain=False)#获得图片
- if(msg.topic=="414ce45bde0a4bc1949fec75a7d2f699/control" and (msg_type=="face" or msg_type=="imageUpdate")):
- #print("topic:"+msg.topic+" message:"+str(msg.payload.decode('utf-8')))
- print("control achieve!")
- packetnum = recieve_parsed['payload']['packet']
- packettotal = recieve_parsed['payload']['totalPacket']
- picture = recieve_parsed['payload']['userImageBase64']
- temp = base64.b64decode(picture)#bytes
- useridnum = str(recieve_parsed['payload']['user'])
- houzhui = "."+str(recieve_parsed['payload']['user'])
- if(msg_type=="imageUpdate"):
- rootdir = "/home/simon/mqtt/picture_recieve/"
- file_delete = os.listdir(rootdir)
- for file in file_delete:
- if houzhui in file:
- del_file = rootdir + file#当代码和要删除的文件不在同一个文件夹时,必须使用绝对路径
- os.remove(del_file)#删除文件
- with open("/home/simon/mqtt/picture_recieve/"+str(packetnum)+"."+str(recieve_parsed['payload']['user']),"wb") as f:
- f.write(temp)#int
- #判断一张图片是否全部接收
- key = len(u)-1
- if(key<0):#接收第一张图片
- u.append(useridnum)
- v.append(1)
- else:
- while(key>=0):
- if(useridnum==u[key]):
- v[key]+=1
- else:
- u.append(useridnum)
- v.append(1)
- if(v[key]==packettotal):
- break
- key = key-1
- #一张图片全部接收后进行组装
- if(v[key]==packettotal):
- i=1
- bool_flag2 = False#大循环跳出标志
- dirs2 = []#大循环的数组
- dirs0 = []#小循环的数组
- for dirs1 in glob.glob('/home/simon/mqtt/picture_recieve'+"/*"+houzhui):
- dirs2.append(dirs1)
- dirs0.append(dirs1)
- for dirs3 in dirs2:
- d1 = os.path.basename(dirs3)#图片名加后缀
- num1 = os.path.splitext(d1)[0]#图片名
- basename1 = os.path.splitext(d1)[1] #后缀名
- if(int(num1)==1):#找到序号为1的照片部分
- with open("/home/simon/mqtt/picture_recieve/"+str(num1)+basename1,"rb") as p1:
- picture1 = str(base64.b64encode(p1.read()),encoding="utf-8")#bytes
- i=i+1
- bool_flag1 = False#跳出小循环标志
- while True:
- if(i!=packettotal):#不是最后一部分就一直组装照片
- picture1 = file_circle(dirs0,houzhui,i,picture1)
- i=i+1
- if(i==packettotal):#找到照片的最后一部分
- picture1 = file_circle(dirs0,houzhui,i,picture1)
- i=1
- bool_flag1 = True
- break
- if(bool_flag1):
- bool_flag2 = True
- temp = base64.b64decode(picture1)#bytes
- with open("/home/simon/mqtt/picture/"+str(recieve_parsed['payload']['user'])+str(recieve_parsed['payload']['userName'])+".jpg","wb") as o:
- o.write(temp)
- if(bool_flag2):
- break
-
- def on_publish(client,userdata,mid):
- print("On onPublish: qos = %d" % mid)
-
- def on_subscribe(client, userdata, mid, granted_qos):
- print("On Subscribed: qos = %d" % granted_qos)
-
- def on_disconnect(client, userdata, rc):
- if rc != 0:
- print("Unexpected disconnection %s" % rc)
-
- def client_loop():
- while True:
- with open('/home/simon/mqtt/'+'FaceAndTime.json','r',encoding="utf-8") as old_f:
- #读取所有行,每行会是一个字符串
- for j in old_f.readlines():
- if(j):
- print(j)
- face = json.loads(j,object_hook=dict2Data)
- data_face = {
- "type":"history",
- "payload":{
- "history":[
- {
- "timestamp":face.timestamp,
- "history":{"name":face.name}
- }]
- },
- "clientToken":str(clientToken)
- }
- client.publish("414ce45bde0a4bc1949fec75a7d2f699/event", payload=str(data_face), qos=0,retain=False)#发送人脸数据
- with open('/home/simon/mqtt/'+'FaceAndTime.json','w+',encoding="utf-8") as new_f:
- seek_point = old_f.tell()#光标在被删除行的行首,记录该位置
- new_f.seek(seek_point,0)#设置光标位置
- old_f.readline()#读需要删除的行,光标移动到下一行行首
- next_line=old_f.readline()#被删除行的下一行读给next_line
- while next_line:#连续覆盖剩余行,后面所有行上移一行
- new_f.write(next_line)
- next_line=old_f.readline()
- new_f.truncate()
-
- if __name__ == '__main__':
- client = mqtt.Client(client_id)
- client.username_pw_set("device", "15f56228e74f2c978b0c376df35d3df8166da22f858f016f6906430d0c4b6070")
- client.on_connect = on_connect
- client.connect(HOST, PORT, 60)
- client.on_subscribe = on_subscribe
- client.subscribe("414ce45bde0a4bc1949fec75a7d2f699/control",qos=1)
- client.subscribe("$shadow/operation/result/414ce45bde0a4bc1949fec75a7d2f699",qos=1)
- client.on_publish = on_publish
- client.publish("$shadow/operation/414ce45bde0a4bc1949fec75a7d2f699", payload=param1,qos=2,retain=False)#get
- client.on_message = on_message
- client.loop_start()
- client_loop()

此篇博客仅作为课设的笔记,如有错误欢迎指正~
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。