CONFIGMODEL_ITEM_DMP_CHANGE_MODE_OLD,//入库切换模式旧模式 防止切换来回数据不清楚问题 默认是1 电信入库 2-255其他是移动入库
CONFIGMODEL_ITEM_24HOUR,//默认24小时模式显示
+ CONFIGMOFEL_ITEM_DMP_CHINA_MOBILE_ADDRESS,//移动入库地址默认测试是适配地址 b.fxltsbl.com 出正式需要修改商用地址 a.fxltsbl.com
CONFIGMODEL_ITEM_MAX,
} ;
std::string GetpyVer();
std::string GetmoderVer();
std::string GetRegistTime();
+ std::string GetDmp_CM_address();
void Setimei(char *str);
void SetpyVer(char *str);
void SetSimIccid(char *str);
void SetRegistTime(char *time);
+
+ void SetDmp_CM_address(char *address);
void SetCat1_4Gability(bool state);
bool GetCat1_4Gability();
{ConfigDataType::DATATYPE_INT, "dmp_change_mode", "0" },//CONFIGMODEL_ITEM_DMP_CHANGE_MODE 入库切换模式 默认值 1
{ConfigDataType::DATATYPE_INT, "dmp_change_mode_old", "0" },//CONFIGMODEL_ITEM_DMP_CHANGE_MODE_OLD 默认值 1 要和新默认值一致
#endif
- {ConfigDataType::DATATYPE_INT, "time_hour_show_model", "24" }//CONFIGMODEL_ITEM_24HOUR,//默认24小时模式显示 ,12 12小时显示 ,24 24小时显示
-
+ {ConfigDataType::DATATYPE_INT, "time_hour_show_model", "24" },//CONFIGMODEL_ITEM_24HOUR,//默认24小时模式显示 ,12 12小时显示 ,24 24小时显示
+ {ConfigDataType::DATATYPE_STRING, "dmp_china_mobile_address", "b.fxltsbl.com"}//CONFIGMOFEL_ITEM_DMP_CHINA_MOBILE_ADDRESS 移动入库地址 测试使用适配地址 IP = b.fxltsbl.com 出正式使用商用地址 IP = a.fxltsbl.com
};
ConfigModel(); // 私有构造函数,确保无法在外部实例化
ConfigModel(const ConfigModel &) = delete; // 禁止拷贝构造
int ConfigModel::GetDmpChangeModeOld(void)
{
return get_configData_int(CONFIGMODEL_ITEM_DMP_CHANGE_MODE_OLD);
+ }
+ std::string ConfigModel::GetDmp_CM_address(void) //获取移动入库地址
+ {
+ return get_configData_string(CONFIGMOFEL_ITEM_DMP_CHINA_MOBILE_ADDRESS);
+ }
+
+ void ConfigModel::SetDmp_CM_address(char *address) //设置移动入库地址
+ {
+ set_condigData_String(CONFIGMOFEL_ITEM_DMP_CHINA_MOBILE_ADDRESS,address);
}
/*
* @brief 设置震动模式强度
UDP_MSG_SEND_BLE_MAC_TO_CAT1 = 0x16,//发送BLE MAC地址->CAT1
UDP_MSG_RECV_DMP_FACTORY = 0x17,//用于入库配置flag 0已经恢复出厂过 1代表没有恢复出厂过
+
+ UDP_MSG_SEND_DMP_CM_ADDRESS = 0x18,//用于BLE发送移动入库地址 to CAT1 接收
};
static uint8_t g_msg_format_type = 0;// 0: old format , 1: new format
OHOS::ConfigModel::GetInstance()->SetDmpFactoryStatus(state);
}
+void send_dmp_cm_address_toCat1(void)//发送移动入库的地址to CAT1
+{
+ char address_buf[30] = {0};
+ const char *address_str = const_cast<char*>(OHOS::ConfigModel::GetInstance()->GetDmp_CM_address().c_str());
+ int len = strlen(address_str);
+ if(len != 0)
+ {
+ printf("address_str:%s\r\n",address_str);
+ sprintf_s(address_buf,30,address_str);
+ udp_send_msg_toCat1(UDP_MSG_SEND_DMP_CM_ADDRESS,address_buf);
+ }
+}
+
+void set_dmp_cm_address_toCat1(char *address)//设置保存移动入库下发的上报地址
+{
+ printf("set_dmp_cm_address_toCat1 %s\r\n",address);
+ if(strncmp(address,"address:",8) == 0)//字符串是否有address:字符串
+ {
+ char* ppbuf = NULL;
+ ppbuf = address+8;
+
+ OHOS::ConfigModel::GetInstance()->SetDmp_CM_address(ppbuf);
+ }
+ return;
+}
+
static int udp_packet_parse(char *rx_buffer, int len)
{
}else {
get_software_version_toCat1();
send_ble_mac_toCat1();
+ send_dmp_cm_address_toCat1();
send_dmp_factory_flag();
}
}
break;
case UDP_MSG_GET_TELECON_DMP_TIMESEC://暂时不用
+ break;
+ case UDP_MSG_SEND_DMP_CM_ADDRESS://#接收移动入库CAT1下发的地址 BLE需要保存
+ set_dmp_cm_address_toCat1(msg_buffer);
break;
case UDP_CMD_GET_CAT1VER:
index = cat1_handle_version_msg(msg_buffer);
import _thread
import usys
import ql_fs
-CHINA_TELECOM_DM_FUN_ENABLE = 0 #是否开启电信入库的功能
-CHINA_MOBILE_DM_FUN_ENABLE = 0 #开启移动入库功能
+CHINA_TELECOM_DM_FUN_ENABLE = 1 #是否开启电信入库的功能
+CHINA_MOBILE_DM_FUN_ENABLE = 1 #开启移动入库功能
class EventStore(object):
def __init__(self):
self.map = dict()
import ql_fs
import pm
import sms
-from usr.EventMesh import eventMesh,CHINA_TELECOM_DM_FUN_ENABLE,CHINA_MOBILE_DM_FUN_ENABLE
+from usr.EventMesh import eventMesh
from usr.telecom_dmp import telecomDmpCb
from usr.china_mobile_dmp import chinamobileCb
eventMesh.subscribe("get_factory_status",self.get_factory_status)
eventMesh.subscribe("set_factory_status",self.set_factory_status)
+ eventMesh.subscribe("send_dmp_cm_address_toBLE",self.send_dmp_cm_address_toBLE)
eventMesh.publish("delete_sms_event")
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 1: #CHINA_TELECOM_DM_FUN_ENABLE == 1 :
if eventMesh.publish("get_dmp_change_mode") == 1:
self.telecom_recv_cmd(cmd,parm)
else:
pass
- if CHINA_MOBILE_DM_FUN_ENABLE == 1:
+ if 1:#CHINA_MOBILE_DM_FUN_ENABLE == 1:
if eventMesh.publish("get_dmp_change_mode") > 1:
self.china_mobile_recv_cmd(cmd,parm)
else:
eventMesh.publish("set_dmp_change_mode",on)
elif cmd == "16":
- if CHINA_MOBILE_DM_FUN_ENABLE == 1:
+ if 1: #CHINA_MOBILE_DM_FUN_ENABLE == 1:
if eventMesh.publish("get_dmp_change_mode") > 1:
self.china_mobile_recv_cmd(cmd,parm)
else:
pass
elif cmd == "17": #用于CAT1恢复出厂需要清空数据的标识通用
eventMesh.publish("set_factory_status",int(parm))
-
+ elif cmd == "18":
+ eventMesh.publish("set_dmp_cm_address",str(parm))
def telecom_recv_cmd(self,cmd,parm): #电信入库
if cmd == "10":
if self.factory_status == 0: #只有为的时候才设置进去 1不再设置
self.reply_cmd('17',"{}".format(1))
+ def send_dmp_cm_address_toBLE(self,event,msg):
+ buf_tmp = "address:"+str(msg)
+ self.reply_cmd('18',"{}".format(buf_tmp))
def set_dmp_change_mode(self,event,msg):
self.telecom_dmp_switch = msg
cat1service.ipconfig()
if eventMesh.publish("get_dmp_change_mode") == 0:#入库功能关闭
return
- if CHINA_TELECOM_DM_FUN_ENABLE == 1:#电信入库功能 不使用设置 0 防止两边不同步修改
+ if 1: #CHINA_TELECOM_DM_FUN_ENABLE == 1:#电信入库功能 不使用设置 0 防止两边不同步修改
if eventMesh.publish("get_dmp_change_mode") == 1:
eventMesh.publish("set_network_state",1)
telecomDmpCb.telecom_dmp_power_on_init()
- if CHINA_MOBILE_DM_FUN_ENABLE == 1:
+ if 1: #CHINA_MOBILE_DM_FUN_ENABLE == 1:
if eventMesh.publish("get_dmp_change_mode") > 1:
eventMesh.publish("set_network_state",1)
if self.china_mobile_init == 1:
def checknet_cb(arg):
print("start checktime!!")
- if CHINA_TELECOM_DM_FUN_ENABLE == 1:#这是手表每30s检查一次
+ if 1: #CHINA_TELECOM_DM_FUN_ENABLE == 1:#这是手表每30s检查一次
if eventMesh.publish("get_dmp_change_mode") == 1:
telecomDmpCb.telecom_dmp_power_on_count()
self.iccid_data = ""
self.software_version = ""
self.mac_data =""
- self.address = "b.fxltsbl.com"
+ self.address = "a.fxltsbl.com"
+
+ self.new_address = "a.fxltsbl.com"
self.retryInterval = 10
self.retryNum = 1#异常重试最大次数
eventMesh.subscribe("set_dev_mac",self.set_dev_mac)#订阅消息
eventMesh.subscribe("get_dev_mac",self.get_dev_mac)#订阅消息
+
+ eventMesh.subscribe("set_dmp_cm_address",self.set_dmp_cm_address)#订阅消息
+ eventMesh.subscribe("get_dmp_cm_address",self.get_dmp_cm_address)#订阅消息
+
pass
+ def set_dmp_cm_address(self,event,msg):#设置网络是否正常
+ self.address = str(msg)
+ self.new_address = str(msg)
+
+ def get_dmp_cm_address(self,event,msg):#获取网络是否正常
+ return self.address
def set_network_state(self,event,msg):#设置网络是否正常
self.__net_connected = int(msg)
url = "https://{}//dm-multi-accept/multi/getMultiTerminalConfig".format(self.address)
headers_T ={"Content-Type":"application/json"}
print("ujson.dumps(config_data):{}".format(ujson.dumps(config_data)))
- response = request.post(url, data=ujson.dumps(config_data),headers =headers_T)
+ request_result = 0
+ try:
+ response = request.post(url, data=ujson.dumps(config_data),headers =headers_T)
+ request_result = 1
+ except Exception as e:
+ print("response:{}".format(e))
+ request_result = 0
+
result_json = ""
+ if request_result == 0: #请求出错了
+ return result_json
+
if response.status_code == 200:#服务器响应成功并返回数据
content = response.content
c = next(content)
return getresult
url = "https://{}//dm-multi-accept/multi/getMultiTerminalConfig".format(self.address)
result_json = self.china_mobile_first_get_config(url)
+ if result_json == "":
+ return 0
# {
# "reportTime":1440,
# "reportNum":8,
reportTime = self.reportTime
reportNum = self.reportNum
retryNum = self.retryNum
- address = self.address
- print("get_config_json old:{} {} {} {} {} {}\r\n".format(reportTime,heartBeatTime,reportNum,retryInterval,retryNum,address))
+ new_address = self.address
+ print("get_config_json old:{} {} {} {} {} {}\r\n".format(reportTime,heartBeatTime,reportNum,retryInterval,retryNum,new_address))
if "rspCode" in result_json:#返回结课code 0000成功 其他参考文档
rspCode = result_json["rspCode"]
rspCode_zh = result_json["rspMsg"]
print("true")
else:
print("false")
- self.config_data["reportTime"] = self.reportTime
- self.config_data["heartBeatTime"] = self.heartBeatTime
- self.config_data["reportNum"] = self.reportNum
- self.config_data["retryNum"] = self.retryNum
- self.config_data["retryInterval"] = self.retryInterval
- self.config_data["address"] = str(self.address)
-
if getresult == 1:#请求配置文件成功
if (self.retryInterval != retryInterval) or (self.retryNum != retryNum) or (self.heartBeatTime != heartBeatTime) or\
- (self.reportTime != reportTime) or (self.reportNum != reportNum) or (self.address != address):
+ (self.reportTime != reportTime) or (self.reportNum != reportNum) or (self.address != new_address):
#重新走注册流程 清空报错次数 记录当前时间戳
print("new config not old config!!!\r\n")#拉取的配置文件和保存本地的不一致
+ self.config_data["reportTime"] = self.reportTime
+ self.config_data["heartBeatTime"] = self.heartBeatTime
+ self.config_data["reportNum"] = self.reportNum
+ self.config_data["retryNum"] = self.retryNum
+ self.config_data["retryInterval"] = self.retryInterval
+ # self.config_data["address"] = str(self.address)
+ if new_address != self.address : #服务器下发和本地不一致需要用服务器下发的最新的IP 并把这个IP发送到BLE保存
+ eventMesh.publish("send_dmp_cm_address_toBLE",str(self.address))
+
self.write_config_msg_file(self.config_data) #保存新的配置文件
return 2
return getresult #1 获取成功 0 获取失败
test_data = ujson.dumps(send_autoregist)#需要转义的字符串
print("test_data:{}".format(test_data))
headers_T ={"Content-Type":"application/json"}
- response = request.post(url, data=ujson.dumps(send_autoregist),headers =headers_T)
- result_json = ""
-
- if response.status_code == 200:
- dev_autoregist_result = 1
- content = response.content
- c = next(content)
- result_json = ujson.loads(c)#解析成json格式
- else:
+ response = 0
+ request_result = 0
+ print("shangbao address:{}\r\n".format(url))
+ try:
+ response = request.post(url, data=ujson.dumps(send_autoregist),headers =headers_T)
+ request_result = 1
+ print("response success:\r\n")
+ except Exception as e:
+ print("response:{}".format(e))
+ request_result = 0
+
+ if request_result == 0:#请求出错了
dev_autoregist_result = 0
+ return dev_autoregist_result
+ else:
+ result_json = ""
-
- if "rspCode" in result_json:
- rspCode = result_json["rspCode"]
- rspMsg = result_json["rspMsg"]
- if rspCode == "0000" or rspMsg == "成功":
+ if response.status_code == 200:
dev_autoregist_result = 1
+ content = response.content
+ c = next(content)
+ result_json = ujson.loads(c)#解析成json格式
else:
dev_autoregist_result = 0
- else:
- dev_autoregist_result = 0
-
- return dev_autoregist_result
+
+
+ if "rspCode" in result_json:
+ rspCode = result_json["rspCode"]
+ rspMsg = result_json["rspMsg"]
+ if rspCode == "0000" or rspMsg == "成功":
+ dev_autoregist_result = 1
+ else:
+ dev_autoregist_result = 0
+ else:
+ dev_autoregist_result = 0
+ return dev_autoregist_result
def read_config_file(self):#获取配置文件,一开机是没有配置文件的
self.reportTime_Sec = 0 #保存本地 保存时间戳下一次开机使用
self.report_Num_old = 0#保存本地
self.retryNum_old = 0#保存本地
-
- self.address = "b.fxltsbl.com"#默认
+ get_address = eventMesh.publish("get_dmp_cm_address")
+ if get_address == None:#获取出来地址是空的使用适配地址
+ self.address = "a.fxltsbl.com"#默认
+ else: #恢复出厂使用BLE传送过来的地址
+ self.address = str(eventMesh.publish("get_dmp_cm_address"))
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["address"] = self.address
+ # self.config_data["address"] = self.address
self.config_data["report_Num_old"] = self.report_Num_old
self.config_data["retryNum_old"] = self.retryNum_old
data_encode = base64.b64encode(json_bytes)#再转换成base64的编码格式 密文
print("data_infor:{} data:{}".format(data_encode,data))
headers_T = {'Content-Type':'application/encrypted-json'} #请求头信息 按照实际要求填写
- response = request.post("http://zzhc.vnet.cn:9998/", data=data_encode,headers =headers_T)
+
+ request_result = 0
+ try:
+ response = request.post("http://zzhc.vnet.cn:9998/", data=data_encode,headers =headers_T)
+ request_result = 1
+ except Exception as e:
+ print("response:{}".format(e))
+ request_result = 0
print("response.status_code:{}".format(response.status_code))
- if response.status_code == 200: #返回状态码 200服务器正常解析数据
+ if response.status_code == 200 and request_result == 1: #返回状态码 200服务器正常解析数据
content = response.content#后台返回的结果
c = next(content)
self.multiple_day_resend()
#上报成功后 需要29.5或者30.5天后重发 初始值为0.5也就是12小时 30天后再重发一次也是一个月后重发数据自注册域
print("regist success:!!!!!")
- return
+ return 1
if resultCode == "1":
print("Decode error")#解码错误 设备编码不正确
if resultCode == "2":#
print("Check error")#校验错误 设备里面数据不正确 有些数据不应该为空
+ return 0
def timer_cb(self,data):#定时器回调
self.telecom_regeist_infor()#重新进行自注册
print("get_network_state:\r\n",network_state)
if network_state == 0:#网络不正常就不需要重发了等下一个周期
return
- self.telecom_regist_infor_init()#要自注册数据域信息发送完才初始化t
+ result = self.telecom_regist_infor_init()#要自注册数据域信息发送完才初始化t
+ if result == 0: #上报出错了
+ return
self.mulit_day_timesec = time_tmp+MULTI_DAY_RESEND_t # 重发后 初始化t = 0.5天
REGIST_buf = str("REGIST:")+str(self.mulit_day_timesec)
eventMesh.publish("set_regist_time",REGIST_buf)