From: DXY <1731678236@qq.com> Date: Wed, 5 Jun 2024 08:55:03 +0000 (+0800) Subject: 优化移动入库,已完成移动入库测试默认是适配地址,待用户测试没有问题修改为商用地址必须手动更改代码 X-Git-Url: http://git.snicker.com.cn/?a=commitdiff_plain;ds=sidebyside;p=mirrors%2FFD230.git 优化移动入库,已完成移动入库测试默认是适配地址,待用户测试没有问题修改为商用地址必须手动更改代码 --- diff --git a/code/sdk/drivers/peripheral/slip/cat1Service/pyscript/china_mobile_dmp.py b/code/sdk/drivers/peripheral/slip/cat1Service/pyscript/china_mobile_dmp.py index e9942065f..7ed65a3c4 100644 --- a/code/sdk/drivers/peripheral/slip/cat1Service/pyscript/china_mobile_dmp.py +++ b/code/sdk/drivers/peripheral/slip/cat1Service/pyscript/china_mobile_dmp.py @@ -44,15 +44,6 @@ class chinamobile: self.config_data = {} self.__net_connected = 0 - eventMesh.subscribe("get_network_state",self.get_network_state)#订阅消息 - eventMesh.subscribe("set_network_state",self.set_network_state)#订阅消息 - - eventMesh.subscribe("set_dev_version",self.set_dev_version)#订阅消息 - eventMesh.subscribe("get_dev_version",self.get_dev_version)#订阅消息 - - eventMesh.subscribe("set_dev_mac",self.set_dev_mac)#订阅消息 - eventMesh.subscribe("get_dev_mac",self.get_dev_mac)#订阅消息 - self.regist_timeSec = 0 self.iccid_data = "" self.software_version = "" @@ -73,6 +64,14 @@ class chinamobile: self.retpoertTimerC = osTimer()#上报次数大于下一个周期再触发 self.heartreportTimer = osTimer()#心跳上报定时器 + eventMesh.subscribe("get_network_state",self.get_network_state)#订阅消息 + eventMesh.subscribe("set_network_state",self.set_network_state)#订阅消息 + + eventMesh.subscribe("set_dev_version",self.set_dev_version)#订阅消息 + eventMesh.subscribe("get_dev_version",self.get_dev_version)#订阅消息 + + eventMesh.subscribe("set_dev_mac",self.set_dev_mac)#订阅消息 + eventMesh.subscribe("get_dev_mac",self.get_dev_mac)#订阅消息 pass @@ -417,13 +416,24 @@ class chinamobile: print("retryTimerCb self.retryNum_old:{}\r\n".format(self.retryNum_old)) self.search_report_num_step() pass - + def reportTimerIntervalError(self,*argc): + self.retryNum_old = 0#保存 + self.report_Num_old = 0#保存 定时清空数据 + date_tmp = utime.localtime() + time_tmp = utime.mktime(date_tmp)#获取时间戳 + self.reportTime_Sec = time_tmp+self.reportTime*60 #(记录时间+reportTime)标识旧的时间 + self.config_data["reportTime_Sec"] = self.reportTime_Sec + self.config_data["retryNum_old"] = self.retryNum_old + self.config_data["report_Num_old"] = self.report_Num_old + self.write_config_msg_file(self.config_data) + self.search_report_num_step()#重新查询 + pass def error_retryNum_step(self):#判读报错次数是否大于self.retryNum 步骤 print("error_retryNum_step:self.retryNum_oldd:{} self.retryNum:{} self.reportTime:{}\r\n".format(self.retryNum_old,self.retryNum,self.reportTime)) if self.retryNum_old >= self.retryNum and self.retryNum_old != 0:#self.retryNum_old > 10#结束HTPP下一个最大频率周期时间间隔流程 print("error_retryNum_step:self.retryNum_old >= self.retryNum\r\n") - self.retpoertTimerC.start(self.reportTime*60*1000,0,self.reportTimerIntervalCb)#重新开始 需要清空数据 + self.retpoertTimerC.start(self.reportTime*60*1000,0,self.reportTimerIntervalError)#重新开始 需要清空数据 else: get_result = self.first_get_config_json()#发起向服务端请求配置信息下发到设备端 if get_result == 0:#获取失败或者没有网络 走异常重试机制 @@ -431,10 +441,7 @@ class chinamobile: self.config_data["report_Num_old"] = self.report_Num_old self.write_config_msg_file(self.config_data) print("error_retryNum_step:self.retryTimer.start :{} {}\r\n".format(self.report_Num_old,self.reportNum)) - if self.report_Num_old >= self.reportNum and self.report_Num_old != 0: - self.retryTimer.stop()#关定时器 - self.retpoertTimerC.stop() - self.heartreportTimer.stop() + self.checkMaxReportNum()#检查上报最大次数 self.retryTimer.start(self.retryInterval*60*1000,0,self.retryTimerCb) pass else:# @@ -443,50 +450,61 @@ class chinamobile: if get_result == 2:#请求的配置文件和本地不一致重启 self.report_Num_old+=1#请求错误请求失败都要保存上报次数 self.config_data["report_Num_old"] = self.report_Num_old - self.write_config_msg_file(self.config_data) - self.retryNum_old = 0#保存本地 配置文件不同重启模组 清空异常重试的报错次数 self.config_data["retryNum_old"] = self.retryNum_old self.write_config_msg_file(self.config_data) - self.china_mobile_init()#重新走流程读配置文件->判断上报总数->判断报错次数->获取配置文件 + self.china_mobile_init_param()#重新走流程读配置文件->判断上报总数->判断报错次数->获取配置文件 + self.search_report_num_step() return - - report_result = self.self_regis_report_cb()#注册 + self.report_Num_old+=1#请求错误请求失败都要保存上报次数 + self.config_data["report_Num_old"] = self.report_Num_old + self.write_config_msg_file(self.config_data) + if self.checkMaxReportNum() == 1:#检查上报最大次数 + self.search_report_num_step()#重新查询 + return + report_result = self.onself_regist_report_cb()#注册 #第二步触发心跳上报次数 if report_result == 1:#注册完成之后根据服务端下发的配置 间隔上报心跳 - # self.heart_report_cb() self.heartreportTimer.start(self.heartBeatTime*60*1000,1,self.heartreportTimerCb) def heartreportTimerCb(self,*argc): self.heart_report_cb() + def retpoertTimerClear(self): + date_tmp = utime.localtime() + time_tmp = utime.mktime(date_tmp)#获取时间戳 + print("retpoertTimerCB time_tmp -self.reportTime_Sec:{} time_tmp :{} self.reportTime_Sec:{}\r\n".format(self.reportTime_Sec-time_tmp,time_tmp,self.reportTime_Sec)) + self.report_Num_old = 0#清空上报总次数 #保存本地 + self.retryNum_old = 0#清空上报错误次数 #保存本地 + self.reportTime_Sec = time_tmp+self.reportTime*60#记录当前时间+reportTime的时间用于下次错判断 + self.config_data["reportTime_Sec"] = self.reportTime_Sec + self.config_data["retryNum_old"] = self.retryNum_old + self.config_data["report_Num_old"] = self.report_Num_old + self.write_config_msg_file(self.config_data) + self.retpoertTimerC.stop()#关闭定时器 + self.error_retryNum_step()#清空报错次数重新走判断报错次数 + pass def check_current_time(self):#检测当前时间是否超过self.reportTime 超过清空报错次数 清空上报总次数 # date_tmp = utime.localtime() currentTime = utime.mktime(date_tmp)#获取时间戳 reportTime = self.reportTime_Sec - print("check_current_time:time_tmp - self.reportTime_Sec:{} self.reportTime*60:{}".format(self.reportTime_Sec - currentTime ,self.reportTime*60)) - if currentTime > reportTime:#当前时间是否大于上次记录的时间 currentTime >= reportTime 直接清空 不超过定时清空数据不再上报数据 - date_tmp = utime.localtime() - time_tmp = utime.mktime(date_tmp)#获取时间戳 - self.report_Num_old = 0#清空上报总次数 #保存本地 - self.retryNum_old = 0#清空上报错误次数 #保存本地 - self.reportTime_Sec = time_tmp+self.reportTime*60#记录当前时间+reportTime的时间用于下次错判断 - self.config_data["reportTime_Sec"] = self.reportTime_Sec - self.config_data["retryNum_old"] = self.retryNum_old - self.config_data["report_Num_old"] = self.report_Num_old - self.write_config_msg_file(self.config_data) - self.error_retryNum_step() + print("check_current_time:time_tmp - self.reportTime_Sec:{} self.reportTime*60:{}".format(reportTime, currentTime,self.reportTime*60)) + if currentTime >= reportTime:#当前时间是否大于上次记录的时间 currentTime >= reportTime 直接清空 不超过定时清空数据不再上报数据 + #在规定时间内上报次数大于8次就要等下一个10分钟 或者1440分了开个定时器 + print("currentTime >= reportTime:\r\n") + self.retpoertTimerClear() else:#否则次数置零,记录一下(当前时间+reportTime)时间 - time_count = self.reportTime_Sec - currentTime#self.reportTime_Sec永远比time_tmp大 - self.retpoertTimerC.start(time_count*1000,1,self.retpoertTimerCB) + time_count = (self.reportTime_Sec - currentTime) #self.reportTime_Sec永远比time_tmp大 + print("time_count:{}".format(time_count)) + print("currentTime < reportTime:\r\n") + self.retpoertTimerC.start(time_count*1000,0,self.retpoertTimerCB) # 第一次请求的时候,记录一下(当前时间+reportTime)时间与次数,如果次数小于最大次数,直接返回true。 # 如果次数大于最大次数,则判断一下当前时间是否超过上次设置的时间,如果超过了,则表示超过最大次数;否则次数置零,记录一下(当前时间+reportTime)时间。 def retpoertTimerCB(self,*argc):#按照剩余的时间做定时器 - date_tmp = utime.localtime() time_tmp = utime.mktime(date_tmp)#获取时间戳 print("retpoertTimerCB time_tmp -self.reportTime_Sec:{} time_tmp :{} self.reportTime_Sec:{}\r\n".format(self.reportTime_Sec-time_tmp,time_tmp,self.reportTime_Sec)) @@ -497,9 +515,8 @@ class chinamobile: self.config_data["retryNum_old"] = self.retryNum_old self.config_data["report_Num_old"] = self.report_Num_old self.write_config_msg_file(self.config_data) - self.retpoertTimerC.stop()#关闭定时器 self.error_retryNum_step()#清空报错次数重新走判断报错次数 - pass + def search_report_num_step(self):#查询上报总数步骤 print("search_report_num_step:self.retryInterval:{} self.retryNum:{}".format(self.report_Num_old,self.reportNum)) @@ -513,28 +530,31 @@ class chinamobile: self.write_config_msg_file(self.config_data) self.error_retryNum_step()#查询上报错误次数 + def search_report_num_step_init(self):#查询上报总数步骤 + print("search_report_num_step:self.retryInterval:{} self.retryNum:{} self.reportTime_Sec:{}\r\n".format(self.report_Num_old,self.reportNum,self.reportTime_Sec)) + if self.report_Num_old >= self.reportNum and self.report_Num_old != 0:#查询上报的总次数是否大于存储上报总次数 + self.check_current_time()#检测当前时间是否超过self.reportTime 超过清空报错次数 清空上报总次数 + else:# + date_tmp = utime.localtime() + time_tmp = utime.mktime(date_tmp)#获取时间戳 + if self.reportTime_Sec == 0: + self.reportTime_Sec = time_tmp+self.reportTime*60 #(记录时间+reportTime)标识旧的时间 + self.config_data["reportTime_Sec"] = self.reportTime_Sec + self.write_config_msg_file(self.config_data) + self.error_retryNum_step()#查询上报错误次数 + + def reportTimerIntervalCb(self,*argc):#最大上报频率时间间隔定时器 要清空数据 print("reportTimerIntervalCb\r\n") - self.retryNum_old = 0#保存 - self.report_Num_old = 0#保存 定时清空数据 - date_tmp = utime.localtime() - time_tmp = utime.mktime(date_tmp)#获取时间戳 - self.reportTime_Sec = time_tmp+self.reportTime*60 #(记录时间+reportTime)标识旧的时间 - self.config_data["reportTime_Sec"] = self.reportTime_Sec - self.config_data["retryNum_old"] = self.retryNum_old - self.config_data["report_Num_old"] = self.report_Num_old - self.write_config_msg_file(self.config_data) self.search_report_num_step()#重新查询 - def self_regis_report_cb(self):#自注册上报信息 + def onself_regist_report_cb(self):#自注册上报信息 date_tmp = utime.localtime() time_tmp = utime.mktime(date_tmp)#获取时间戳 - + print("onself_regist_report_cb:self.report_Num_old:{} self.reportNum:{} self.reportTime_Sec:{}\r\n".format(self.report_Num_old,self.reportNum,self.reportTime_Sec)) self.report_Num_old+=1 ##保存本地 self.config_data["report_Num_old"] = self.report_Num_old self.write_config_msg_file(self.config_data) - print("self_regis_report_cb:self.report_Num_old:{} self.reportNum:{} self.reportTime_Sec:{}\r\n".format(self.report_Num_old,self.reportNum,self.reportTime_Sec)) - #设备自注册上报信息 url = "https://{}//dm-multi-accept/multi/acceptMultiTerminalRegInfo".format(self.address)#上报地址 confing_type = "autoRegist"#上报传输配置 @@ -543,67 +563,66 @@ class chinamobile: if result != 1: #触发异常重试进制 - if self.report_Num_old >= self.reportNum and self.report_Num_old != 0:#上报次数大于 - self.retryTimer.stop()#关定时器 - self.retpoertTimerC.stop() - self.heartreportTimer.stop() - if self.retryNum_old >= self.retryNum and self.retryNum_old != 0: + self.checkMaxReportNum()#检查上报最大次数 + if self.checkMaxRetryNum() == 1: print("retryTimerCb timer22")#异常重试过多重新间隔reportTime注册流程 关闭所有的定时器 - self.retryTimer.stop()#关定时器 - self.retpoertTimerC.stop() - self.heartreportTimer.stop() - self.retpoertTimerC.start(self.reportTime*60*1000,0,self.reportTimerIntervalCb)#重新开始 需要清空数据 - return + self.search_report_num_step()#重新查询 + # self.retpoertTimerC.start(self.reportTime*60*1000,0,self.reportTimerIntervalCb)#重新开始 需要清空数据 + return 0 self.retryTimer.start(self.retryInterval*60*1000,0,self.retryTimerCb) return 0 else: - if self.report_Num_old >= self.reportNum and self.report_Num_old != 0: - self.retryTimer.stop()#关定时器 - self.retpoertTimerC.stop() - self.heartreportTimer.stop() - self.retpoertTimerC.start(self.reportTime*60*1000,0,self.reportTimerIntervalCb) + if self.checkMaxReportNum() == 1: + self.search_report_num_step()#重新查询 + # self.retpoertTimerC.start(self.reportTime*60*1000,0,self.reportTimerIntervalCb) return 0 else: return 1 - - def heart_report_cb(self):#心跳上报信息 - #设备心跳上报信息 + def checkMaxReportNum(self):#检查上报次数最大值 + print("checkMaxReportNum :self.reportNum :{} self.report_Num_old:{}\r\n".format(self.reportNum,self.report_Num_old)) + if self.report_Num_old >= self.reportNum and self.report_Num_old != 0: + self.retryTimer.stop()#关定时器 + self.retpoertTimerC.stop() + self.heartreportTimer.stop() + return 1 + else: + return 0 + + def checkMaxRetryNum(self):#检查上报错误次数 + print("checkMaxRetryNum :self.retryNum:{} self.retryNum_old:{}\r\n".format(self.retryNum_old,self.retryNum)) + if self.retryNum_old >= self.retryNum and self.retryNum_old != 0:#异常重试过多重新间隔reportTime注册流程 + self.retryTimer.stop()#关定时器 + self.retpoertTimerC.stop() + self.heartreportTimer.stop()#关闭心跳定时器 + return 1 + else: + return 0 + def heart_report_cb(self):#心跳上报信息 date_tmp = utime.localtime() time_tmp = utime.mktime(date_tmp)#获取时间戳 self.report_Num_old+=1#保存本地 self.config_data["report_Num_old"] = self.report_Num_old self.write_config_msg_file(self.config_data) print("heart_report_cb:self.report_Num_old:{} self.reportNum:{} self.reportTime:{} self.reportTime_Sec:{}\r\n".format(self.report_Num_old,self.reportNum,self.reportTime,self.reportTime_Sec)) - url = "https://{}//dm-multi-accept/multi/acceptMultiTerminalHeartbeatInfo".format(self.address)#上报地址 confing_type = "keepAlive"#上报传输配置 result = self.china_mobile_autoregist_infor(url,confing_type) if result != 1: #触发异常重试进制 - if self.report_Num_old >= self.reportNum and self.report_Num_old != 0: - self.retryTimer.stop()#关定时器 - self.retpoertTimerC.stop() - self.heartreportTimer.stop() - if self.retryNum_old >= self.retryNum and self.retryNum_old != 0:#异常重试过多重新间隔reportTime注册流程 - print("retryTimerCb timer3333") - self.retryTimer.stop()#关定时器 - self.retpoertTimerC.stop() - self.heartreportTimer.stop() - self.retpoertTimerC.start(self.reportTime*60*1000,0,self.reportTimerIntervalCb)#重新开始 需要清空数据 + self.checkMaxReportNum() + if self.checkMaxRetryNum() == 1:#异常重试过多重新间隔reportTime注册流程 + self.search_report_num_step()#重新查询 + # self.retpoertTimerC.start(self.reportTime*60*1000,0,self.reportTimerIntervalCb)#重新开始 需要清空数据 return self.retryTimer.start(self.retryInterval*60*1000,0,self.retryTimerCb) return - if self.report_Num_old >= self.reportNum and self.report_Num_old != 0: - self.retryTimer.stop()#关定时器 - self.retpoertTimerC.stop() - self.heartreportTimer.stop() - print("self.retpoertTimerC.start") - self.retpoertTimerC.start(self.reportTime*60*1000,0,self.reportTimerIntervalCb) + if self.checkMaxReportNum() == 1:#上报次数大于8次 + self.search_report_num_step()#重新查询 return - def china_mobile_init(self):#初始化 + def china_mobile_init_param(self):#初始化 status = eventMesh.publish("get_factory_status") if status == None: @@ -616,7 +635,7 @@ class chinamobile: isStorage = ql_fs.path_exists("/usr/china_mobie_config.json")#移动入库的配置文件移除 if isStorage == True: uos.remove("/usr/china_mobie_config.json") - #先清空再写入 + #先清空再写入默认参数 self.init_flag = 1 self.retryInterval = 10 self.retryNum = 1#异常重试最大次数 @@ -647,9 +666,10 @@ class chinamobile: self.retryTimer.stop()#关定时器 self.retpoertTimerC.stop() self.heartreportTimer.stop() - + def china_mobile_init(self): + self.china_mobile_init_param() #查询上报总数流程 - self.search_report_num_step() + self.search_report_num_step_init()