import ql_fs
import pm
import sms
-from usr.EventMesh import eventMesh,CHINA_TELECOM_DM_FUN_ENABLE
+from usr.EventMesh import eventMesh,CHINA_TELECOM_DM_FUN_ENABLE,CHINA_MOBILE_DM_FUN_ENABLE
# CHINA_TELECOM_DM_FUN_ENABLE = 1 #是否开启电信入库功能 1开启 0关闭
if CHINA_TELECOM_DM_FUN_ENABLE == 1:#防止两边不同步修改 用于包含头文件信息
from usr.telecom_dmp import telecomDmpCb
+if CHINA_MOBILE_DM_FUN_ENABLE == 1:
+ from usr.china_mobile_dmp import chinamobileCb
def msg_cb(args):
index = args[1]
CAT1_SERVICE_HEAD = 'FE' #固定head
PROJECT_NAME = "Cat1SlipUDPService"
-PROJECT_VERSION = "PY_SRV_V7"
+PROJECT_VERSION = "PY_SRV_V8"
CONFIG_JSON="/usr/system_config.json"
CURRENT_APP_TYPE="pysrv"
self.iccid_data = ""
self.software_version = ""
-
+ self.deletSmsTimer = osTimer()
+
eventMesh.subscribe("set_telecom_dmp_switch",self.set_telecom_dmp_switch)
eventMesh.subscribe("get_telecom_dmp_switch",self.get_telecom_dmp_switch)
eventMesh.subscribe("delete_sms_event",self.delete_sms_event)
eventMesh.subscribe("get_all_sms_data",self.get_all_sms_data)#获取所有的短信内容
eventMesh.subscribe("send_singal_data_toBle",self.send_singal_data_toBle)
eventMesh.subscribe("delete_sms_single_data",self.delete_sms_single_data)
+
+ eventMesh.subscribe("get_factory_status",self.get_factory_status)
+ eventMesh.subscribe("set_factory_status",self.set_factory_status)
eventMesh.publish("delete_sms_event")
- self.deletSmsTimer = osTimer()
+
self.telecom_dmp_switch = 0
self.send_data = []
#
self.msg_nums = 0
self.msg_nums_old = 0
+ self.china_mobile_init = 0
+ self.factory_status = 0
sms_get = sms.getSaveLoc()
if(sms_get != -1):
sms_lacv = sms_get[0][0]
self.reply_cmd('09',"{}".format("at error"))
elif cmd == "10" or cmd == "12" or cmd == "14":#获取固件版本号或者获取BT保存的SIM卡的ICCID BLE那边是否开启电信入库功能
- if CHINA_TELECOM_DM_FUN_ENABLE == 1:
+ if CHINA_TELECOM_DM_FUN_ENABLE == 1 :
if eventMesh.publish("get_telecom_dmp_switch") == 1:
self.telecom_recv_cmd(cmd,parm)
+ else:
+ pass
+
+ if CHINA_MOBILE_DM_FUN_ENABLE == 1:
+ self.china_mobile_recv_cmd(cmd,parm)
+ else:
+ pass
pass
elif cmd == "13":
if CHINA_TELECOM_DM_FUN_ENABLE == 1:
self.telecom_recv_cmd(cmd,parm)
+ elif cmd == "16":
+ if CHINA_MOBILE_DM_FUN_ENABLE == 1:
+ self.china_mobile_recv_cmd(cmd,parm)
+ else:
+ pass
+ elif cmd == "17":#用于CAT1恢复出厂需要清空数据的标识通用
+ eventMesh.publish("set_factory_status",int(parm))
def telecom_recv_cmd(self,cmd,parm):#电信入库
eventMesh.publish("set_regist_time",[0,time])
pass
+ def china_mobile_recv_cmd(self,cmd,parm):#移动入库相关指令
+ if cmd == "10":
+ self.software_version = str(parm)
+ eventMesh.publish("set_dev_version",self.software_version)
+ print("software_version:{},{}".format(self.software_version,parm))
+ elif cmd == "16":#获取BLE mac地址
+ eventMesh.publish("set_dev_mac",str(parm))
+ print("parm:{}\r\n".format(parm))
+
+ pass
+ def get_factory_status(self,event,msg):
+ return self.factory_status
+ def set_factory_status(self,event,msg):
+ self.factory_status = int(msg)
+ if self.factory_status == 0:#只有为的时候才设置进去 1不再设置
+ self.reply_cmd('17',"{}".format(1))
+
+
def set_telecom_dmp_switch(self,event,msg):
self.telecom_dmp_switch = msg
def delete_sms_single_data(self,event,msg):#删除单条信息
if CHINA_TELECOM_DM_FUN_ENABLE == 1:
if eventMesh.publish("get_telecom_dmp_switch") == 1:
eventMesh.publish("set_network_state",self.__net_connected)
+
+ if CHINA_MOBILE_DM_FUN_ENABLE == 1:
+ eventMesh.publish("set_network_state",self.__net_connected)
+
self.__waiting_netstat = 0
return -1
cat1service.ipconfig()
if CHINA_TELECOM_DM_FUN_ENABLE == 1:#电信入库功能 不使用设置 0 防止两边不同步修改
if eventMesh.publish("get_telecom_dmp_switch") == 1:
+ eventMesh.publish("set_network_state",1)
telecomDmpCb.telecom_dmp_power_on_init()
+ if CHINA_MOBILE_DM_FUN_ENABLE == 1:
+ eventMesh.publish("set_network_state",1)
+ if self.china_mobile_init == 1:
+ return
+ self.china_mobile_init = 1
+ chinamobileCb.china_mobile_init()
def cat1_reply_iccid_to_ble(self,event,msg):
ICCID_DATA = str("ICCID:")+str(msg)
if CHINA_TELECOM_DM_FUN_ENABLE == 1:#这是手表每30s检查一次
if eventMesh.publish("get_telecom_dmp_switch") == 1:
telecomDmpCb.telecom_dmp_power_on_count()
-
+
_thread.start_new_thread(cat1service.wait_network_ready, ())
# time=utime.localtime()
# zone=utime.getTimeZone()
import base64
import request
import ujson
-
+BLOCK_SIZE = 16
#中国移动入库
class chinamobile:
def __init__(self):
- self.retryIntervalTimer = osTimer()#异常重试定时器
self.multiDayResend_timer = osTimer()#12小时定时器 多日重发的机制
self.multimer_count = 0#多日重发机制周期Count
self.timerPowerNum = 0
self.telecom_init_state = 0#初始化状态开机检查标识
self.isRegistOk = 0#注册成功
+ self.config_data = {}
- self.regist_queue = Queue()
- _thread.stack_size(10*1024)
- _thread.start_new_thread(self.regist_queue_thread, ())
- _thread.stack_size(8*1024)
-
- eventMesh.subscribe("publish_message_event_registinfor",self.publish_message_event_registinfor)
self.__net_connected = 0
eventMesh.subscribe("get_network_state",self.get_network_state)#订阅消息
eventMesh.subscribe("set_network_state",self.set_network_state)#订阅消息
self.software_version = ""
self.mac_data =""
+ self.retryInterval = 10
+ self.retryNum = 1#异常重试最大次数
+ self.heartBeatTime = 1440#心跳上报频率 单位分钟
+ self.reportTime = 1440#最大上报频率 自注册+心跳上报的频率次数不能大于最大上报频率次数
+ self.reportNum = 8 #最大上报次数
- self.retryInterval = 0#异常重试间隔时间 单位分钟
- self.retryNum = 0#异常重试最大次数
- self.heartBeatTime = 0#心跳上报频率 单位分钟
- self.reportTime = 0#最大上报频率 自注册+心跳上报的频率次数不能大于最大上报频率次数
- self.reportNum = 0 #最大上报次数
-
- self.reportTime_old = 0 #保存本地 保存时间戳下一次开机使用
+ self.reportTime_Sec = 0 #保存本地 保存时间戳下一次开机使用
self.report_Num_old = 0#保存本地
self.retryNum_old = 0#保存本地
self.init_flag = 0#初始化状态指初始化一次
self.retryTimer = osTimer()#异常重试定时器
self.retpoertTimerC = osTimer()#上报次数大于下一个周期再触发
self.heartreportTimer = osTimer()#心跳上报定时器
- self.reportTime_Sec = 0
pass
- def regist_queue_thread(self):
- while True:
- data = self.regist_queue.get()
- #EventMesh.debug_log("regist_queue:data = {}".format(data))
- if data != None:
- try:
- data["func"](data["data"])
- except Exception as e:
- print("regist_queue:ERROR:{}".format(e))
- usys.print_exception(e)
- def publish_message_event_registinfor(self,event,msg):
- self.regist_queue.put(msg)
-
- def publish_regist_event_cb(self, *args, **kwargs):
- eventMesh.publish("publish_message_event_registinfor",{"func":self.timer_cb,"data":0})
+
def set_network_state(self,event,msg):#设置网络是否正常
self.__net_connected = int(msg)
data_encode = msg_tmp.decode('ascii')#转换成字符串
return data_encode
+ #写文件信息
+ def write_config_msg_file(self,msg):
+ print("write_config_msg_file msg:{}\r\n".format(msg))
+ with open("/usr/config_msg.json",'w+',encoding="utf-8") as fd:
+ ujson.dump(msg,fd)
+ #读文件信息
+ def read_config_msg_file(self):
+ IFEXIST = ql_fs.path_exists("/usr/config_msg.json") #不存在
+ if IFEXIST == True:
+ with open("/usr/config_msg.json","r",encoding='utf-8') as fd:
+ self.config_data = ujson.load(fd)
+ print("read_config_msg_file self.config_data:{}\r\n".format(self.config_data))
def china_mobile_first_get_config(self,url):
##############第一步#######获取采集规则配置#######
def first_get_config_json(self):#开机上电获取配置信息
getresult = 0
+ print("first_get_config_json false",self.__net_connected)
if self.__net_connected != 1:#网络不正常
return getresult
url = "https://b.fxltsbl.com//dm-multi-accept/multi/getMultiTerminalConfig"
# }#默认采集规则配置
#默认参数
-
+ retryInterval = self.retryInterval
+ heartBeatTime = self.heartBeatTime
+ reportTime = self.reportTime
+ reportNum = self.reportNum
+ retryNum = self.retryNum
+ print("get_config_json old:{} {} {} {} {}\r\n".format(reportTime,heartBeatTime,reportNum,retryInterval,retryNum))
if "rspCode" in result_json:#返回结课code 0000成功 其他参考文档
rspCode = result_json["rspCode"]
rspCode_zh = result_json["rspMsg"]
msg_data = result_json["result"] #采集规则配置信息
if "ruleConfig" in msg_data:#不存在就是空
msg_data = msg_data["ruleConfig"]
-
msg_data = ujson.loads(msg_data)#转换成json格式
if "reportTime" in msg_data:
self.reportTime = int(msg_data["reportTime"])
self.retryInterval = int(msg_data["retryInterval"])
if "retryNum" in msg_data:
self.retryNum = int(msg_data["retryNum"])
- print(self.reportTime,self.heartBeatTime,self.reportNum,self.retryInterval,self.retryNum)
+ print("get_config_json new:{} {} {} {} {}\r\n".format(self.reportTime,self.heartBeatTime,self.reportNum,self.retryInterval,self.retryNum))
print("true")
else:
print("false")
+ if getresult == 1:#请求配置文件成功
+ if (self.retryInterval != retryInterval) or (self.retryNum != retryNum) or (self.heartBeatTime != heartBeatTime) or (self.reportTime != reportTime) or (self.reportNum != reportNum):
+ #重新走注册流程 清空报错次数 记录当前时间戳
+ print("new config not old config!!!\r\n")#拉取的配置文件和保存本地的不一致
+ return 2
return getresult #1 获取成功 0 获取失败
#需要加密的数据明文
- if (len(self.mac_data) == 0)#获取失败了
- self.mac_data = "28:09:78:56:01:06"
+ if (len(self.mac_data) == 0):#获取失败了
+ self.mac_data = "***"
MAC = self.mac_data
# base64_MAC = sha256_encode(key,MAC)
# base64_CPU = sha256_encode(key,CPU)
sysVersion = "OpenHarmony 3.2"
# base64_sysVersion = sha256_encode(key,sysVersion)
- if (len(self.software_version) == 0)#获取失败了
+ if (len(self.software_version) == 0):#获取失败了
self.software_version = "Watch Soar V1.0"
softwareVer = self.software_version
# base64_softwareVer = sha256_encode(key,softwareVer)
wearingStatus ="***"
# base64_wearingStatus = sha256_encode(key,wearingStatus)
- networkStatus ="0"#1:连接;0:未连接;-1:不支持
+ networkStatus ="1"#1:连接;0:未连接;-1:不支持
# base64_networkStatus = sha256_encode(key,networkStatus)
encyr_data = [MAC,RAM,ROM,CPU,sysVersion,softwareVer,softwareName,volte,netType,resolution,screenSize,wearingStatus,networkStatus]
print(len(encyr_data))
encyr_new_data=[]
for i in range(len(encyr_data)):
- tmp_data = sha256_encode(key,encyr_data[i])
+ tmp_data = self.sha256_encode(key,encyr_data[i])
encyr_new_data.append(tmp_data)
# deviceInfo_tmp = {
c = next(content)
result_json = ujson.loads(c)#解析成json格式
else:
+ dev_autoregist_result = 0
if "rspCode" in result_json:
dev_autoregist_result = 0
return dev_autoregist_result
-
+
def read_config_file(self):#获取配置文件,一开机是没有配置文件的
- self.retryInterval = 10
- self.retryNum = 1#异常重试最大次数
- self.heartBeatTime = 1440#心跳上报频率 单位分钟
- self.reportTime = 1440#最大上报频率 自注册+心跳上报的频率次数不能大于最大上报频率次数
- self.reportNum = 8 #最大上报次数
- msg = None
- IFEXIST = ql_fs.path_exists("/usr/config_msg.json") #不存在
- if IFEXIST == True:
- with open("/usr/config_msg.json","r",encoding='utf-8') as fd:
- msg = ujson.loads(fd)
-
- if msg != None:
- if "retryInterval" in msg:
- self.retryInterval = int(msg["retryInterval"])
- if "retryNum" in msg:
- self.retryNum = int(msg["retryNum"])
- if "heartBeatTime" in msg:
- self.heartBeatTime = int(msg["heartBeatTime"])
- if "reportTime" in msg:
- self.reportTime = int(msg["reportTime"])
- if "reportNum" in msg:
- self.reportNum = int(msg["reportNum"])
- print("read_config_file:self.retryInterval:{} self.retryNum:{} self.heartBeatTime:{} self.reportTime:{} self.reportNum:{}".format(self.retryInterval,self.retryNum,self.heartBeatTime,self.reportTime,self.reportNum))
+
+ self.read_config_msg_file()#读文件信息
+ if self.config_data != {}:
+ if "retryInterval" in self.config_data:
+ self.retryInterval = int(self.config_data["retryInterval"])
+ if "retryNum" in self.config_data:
+ self.retryNum = int(self.config_data["retryNum"])
+ if "heartBeatTime" in self.config_data:
+ self.heartBeatTime = int(self.config_data["heartBeatTime"])
+ if "reportTime" in self.config_data:
+ self.reportTime = int(self.config_data["reportTime"])
+ if "reportNum" in self.config_data:
+ self.reportNum = int(self.config_data["reportNum"])
+
+ #终端本地需要保存本地的数据
+ # self.reportTime_Sec = 0 #保存本地 保存时间戳下一次开机使用
+ # self.report_Num_old = 0#保存本地
+ # self.retryNum_old = 3#保存本地
+
+ if "reportTime_Sec" in self.config_data:
+ self.reportTime_Sec = int(self.config_data["reportTime_Sec"])
+ if "report_Num_old" in self.config_data:
+ self.report_Num_old = int(self.config_data["report_Num_old"])
+ if "retryNum_old" in self.config_data:
+ self.retryNum_old = int(self.config_data["retryNum_old"])
+
+ print("read_config_file self.config_data:{} ".format(self.config_data))
def retryTimerCb(self,*argc):#异常重试机制定时器回调
- self.retryNum_old+=1 #保存本地
-
- if self.retryNum_old > self.retryNum:
- self.retryTimer.stop()
+ #保存本地
+ self.search_report_num_step()
+ self.retryNum_old+=1 #1 self.reportNum = 1
+ self.config_data["retryNum_old"] = self.retryNum_old
+ self.write_config_msg_file(self.config_data)
+ print("retryTimerCb self.retryNum_old:{}\r\n".format(self.retryNum_old))
+ if self.retryNum_old >= self.retryNum and self.retryNum_old != 0:
+ print("retryTimerCb timer")
+ self.retpoertTimerC.start(self.reportTime*60*1000,0,self.reportTimerIntervalCb)#重新开始 需要清空数据
return
#触发查询上报总数流程
- self.search_report_num_step()
+
+
pass
def error_retryNum_step(self):#判读报错次数是否大于self.retryNum 步骤
- print("error_retryNum_step:self.retryNum_oldd:{} self.retryNum:{}".format(self.retryNum_old,self.retryNum))
- if self.retryNum_old > self.retryNum:#self.retryNum_old > 10
- self.retpoertTimerC.start(self.reportTime*60*1000,0,self.reportTimerIntervalCb)
+ 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)#重新开始 需要清空数据
else:
+ date_tmp = utime.localtime()
+ time_tmp = utime.mktime(date_tmp)#获取时间戳
+ if self.reportTime_Sec == 0:
+
+ self.reportTime_Sec = time_tmp#记录最大上报频率时间用于下次开机做判断 保存时间戳
+ print("error_retryNum_step:self.reportTime_Sec:{}\r\n".format(self.reportTime_Sec))
+ self.config_data["reportTime_Sec"] = self.reportTime_Sec
+ self.write_config_msg_file(self.config_data)
+
get_result = self.first_get_config_json()#发起向服务端请求配置信息下发到设备端
- if get_result != 1:#获取失败或者没有网络 走异常重试机制
+ if get_result == 0:#获取失败或者没有网络 走异常重试机制
+ self.report_Num_old+=1#请求错误请求失败都要保存上报次数
+ 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.retryTimer.start(self.retryInterval*60*1000,0,self.retryTimerCb)
pass
- else:#清空报错次数
- self.retryNum_old = 0#保存本地
- data = {
- "retryInterval":self.retryInterval,
- "retryNum":self.retryNum,
- "reportTime":self.reportTime,
- "reportTime":self.reportTime,
- "reportNum":self.reportNum
- }
- with open("/usr/config_msg.json", 'w+',encoding='utf-8') as fd:#写文件数据
- ujson.dump(data,fd)
- #服务端注册返回成功
+ else:#
+
#第一步触发自注册
- report_result = self.self_regis_report_cb()
+ 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()#重新走流程读配置文件->判断上报总数->判断报错次数->获取配置文件
+ return
+ report_result = self.self_regis_report_cb()#注册
#第二步触发心跳上报次数
if report_result == 1:#注册完成之后根据服务端下发的配置 间隔上报心跳
- self.heart_report_cb()
+ # self.heart_report_cb()
self.heartreportTimer.start(self.heartBeatTime*60*1000,1,self.heartreportTimerCb)
- self.heartreportTimerCb(self,*argc):
+ def heartreportTimerCb(self,*argc):
self.heart_report_cb()
def check_current_time(self):#检测当前时间是否超过self.reportTime 超过清空报错次数 清空上报总次数
#
date_tmp = utime.localtime()
time_tmp = utime.mktime(date_tmp)#获取时间戳
- if time_tmp < self.reportTime_old:
- time_tmp = self.reportTime_old
- if self.reportTime_old == 0:
- self.reportTime_old = time_tmp
- #self.reportTime = 20*60
- print("check_current_time:time_tmp - self.reportTime_old:{} self.reportTime*60:{}".format(time_tmp - self.reportTime_old,self.reportTime*60))
- if (time_tmp - self.reportTime_old) >= self.reportTime*60:#是否大于上报的时间self.reportTime 清空保存的上报总数 self.report_Num_old = 0 上报错误次数 self.retryNum_old = 0
- #大于一个周期时间需要等下一个周期触发 不能立马去检查 需要定时reportTime之后再去清空数据
- self.reportTime_Sec = time_tmp
- self.retpoertTimerC.start(10*60*1000,1,self.retpoertTimerCB)
-
- else:#当前时间-旧的保存时间 小于reportTime 判断报错次数是否大于retryNum=10
+
+ print("check_current_time:time_tmp - self.reportTime_Sec:{} self.reportTime*60:{}".format(time_tmp - self.reportTime_Sec,self.reportTime*60))
+ if (time_tmp - self.reportTime_Sec) >= self.reportTime*60:#判断报错次数
self.error_retryNum_step()
+ else:#当前时间-旧的保存时间 小于reportTime 并且次数大于8次了
+ time_count = time_tmp - self.reportTime_Sec
+ self.retpoertTimerC.start(time_count*1000,1,self.retpoertTimerCB)
def retpoertTimerCB(self,*argc):
+
date_tmp = utime.localtime()
time_tmp = utime.mktime(date_tmp)#获取时间戳
- if time_tmp - self.reportTime_Sec >= self.reportTime*60:
- self.report_Num_old = 0#清空上报总次数 #保存本地
- self.retryNum_old = 0#清空上报错误次数 #保存本地
+ print("retpoertTimerCB time_tmp -self.reportTime_Sec:{} time_tmp :{} self.reportTime_Sec:{}\r\n".format(time_tmp-self.reportTime_Sec,time_tmp,self.reportTime_Sec))
+ self.report_Num_old = 0#清空上报总次数 #保存本地
+ self.retryNum_old = 0#清空上报错误次数 #保存本地
+ self.reportTime_Sec = 0
+ 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()#清空报错次数重新走判断报错次数
+ 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))
- if self.report_Num_old > self.reportNum:#查询上报的总次数是否大于存储上报总次数
- #答:报错次数过多,结束LWM2M是结束这次会话,ruleConfig有最大上报时间频率,
- # reportTime字段,有最大上报次数,reportNum字段。表示最大上报时间频率内,不能超过最大上报次数,
- # 如reportTime=10,reportNum=3表示10分钟内最大上报3次,如果超过3次,则需要等待10分钟之后再重新发起注册流程。
- #检查当前时间是否大于reportTimer 1440分钟之内最多上报8次 需要自注册上报或者心跳上报成功后保存当前的时间戳 如果下一个心跳间隔时间到了次数加1大于上报最大次数
- #用时间戳相减 大于 reportTimer就不上报了 就等下一个14440分钟了
- #
+ if self.report_Num_old >= self.reportNum and self.report_Num_old != 0:#查询上报的总次数是否大于存储上报总次数
self.check_current_time()#检测当前时间是否超过self.reportTime 超过清空报错次数 清空上报总次数
- else:#读取报错次数
+ else:#查询报错次数
self.error_retryNum_step()
def reportTimerIntervalCb(self,*argc):#最大上报频率时间间隔定时器
+ print("reportTimerIntervalCb\r\n")
+ self.retryNum_old = 0#保存
+ self.report_Num_old = 0#保存 定时清空数据
+ self.reportTime_Sec = 0
+ 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):#自注册上报信息
date_tmp = utime.localtime()
time_tmp = utime.mktime(date_tmp)#获取时间戳
- print("self_regis_report_cb:self.report_Num_old:{} self.reportNum:{}".format(self.report_Num_old,self.reportNum))
+ if self.reportTime_Sec == 0:
+ self.reportTime_Sec = time_tmp #需要保存本地
+ self.config_data["reportTime_Sec"] = self.reportTime_Sec
+ self.write_config_msg_file(self.config_data)
+
self.report_Num_old+=1 ##保存本地
- if report_Num_old > self.reportNum:
-
- self.retryTimer.stop()#关定时器
- self.retpoertTimerC.stop()
- self.heartreportTimer.stop()
- self.reportTime_old = time_tmp #需要保存本地
- self.retpoertTimerC.start(self.reportTime*60*1000,0,self.reportTimerIntervalCb)
- return 0
- self.reportTime_old = time_tmp #需要保存本地
+ 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://b.fxltsbl.com//dm-multi-accept/multi/acceptMultiTerminalRegInfo"#上报地址
confing_type = "autoRegist"#上报传输配置
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()
self.retryTimer.start(self.retryInterval*60*1000,0,self.retryTimerCb)
return 0
else:
- return 1
+ 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)
+ return 0
+ else:
+ return 1
def heart_report_cb(self):#心跳上报信息
#设备心跳上报信息
- print("heart_report_cb:self.report_Num_old:{} self.reportNum:{}".format(self.report_Num_old,self.reportNum))
+
date_tmp = utime.localtime()
time_tmp = utime.mktime(date_tmp)#获取时间戳
self.report_Num_old+=1#保存本地
- if report_Num_old > self.reportNum:
- self.retryTimer.stop()#关定时器
- self.retpoertTimerC.stop()
- self.heartreportTimer.stop()
- self.reportTime_old = time_tmp#需要保存本地
-
- self.retpoertTimerC.start(self.reportTime*60*1000,0,self.reportTimerIntervalCb)
- return
+ 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://b.fxltsbl.com//dm-multi-accept/multi/acceptMultiTerminalHeartbeatInfo"#上报地址
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.reportTime_Sec == 0:
+ self.reportTime_Sec = time_tmp#需要保存本地
+ self.config_data["reportTime_Sec"] = self.reportTime_Sec
+ self.write_config_msg_file(self.config_data)
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()
+ if self.reportTime_Sec == 0:
+ self.reportTime_Sec = time_tmp#需要保存本地
+ self.config_data["reportTime_Sec"] = self.reportTime_Sec
+ self.write_config_msg_file(self.config_data)
+
+ print("self.retpoertTimerC.start")
+ self.retpoertTimerC.start(self.reportTime*60*1000,0,self.reportTimerIntervalCb)
+ return
def china_mobile_init(self):#初始化
+
+ status = eventMesh.publish("get_factory_status")
+ if status == None:
+ status = 0
+ if status == 0:#恢复出厂或者新的机器需要清空不必要的数据
+ if self.init_flag == 0:
+ self.init_flag = 1
+ self.retryInterval = 10
+ self.retryNum = 1#异常重试最大次数
+ self.heartBeatTime = 1440#心跳上报频率 单位分钟
+ self.reportTime = 1440#最大上报频率 自注册+心跳上报的频率次数不能大于最大上报频率次数
+ self.reportNum = 8 #最大上报次数
+
+ self.reportTime_Sec = 0 #保存本地 保存时间戳下一次开机使用
+ self.report_Num_old = 0#保存本地
+ self.retryNum_old = 0#保存本地
+
+ self.config_data["retryInterval"] = self.retryInterval
+ self.config_data["retryNum"] = self.retryNum
+ self.config_data["heartBeatTime"] = self.heartBeatTime
+ self.config_data["reportTime"] = self.reportTime
+ self.config_data["reportNum"] = self.reportNum
+
+ self.config_data["report_Num_old"] = self.report_Num_old
+ self.config_data["retryNum_old"] = self.retryNum_old
+ self.config_data["reportTime_Sec"] = self.reportTime_Sec
+
+ self.write_config_msg_file(self.config_data)
#读配置文件
self.read_config_file()#只读一下配置文件
+
+ self.retryTimer.stop()#关定时器
+ self.retpoertTimerC.stop()
+ self.heartreportTimer.stop()
+
#查询上报总数流程
self.search_report_num_step()