From ba08517614fdfa6151d2b3ab92f801be32941751 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=E8=83=A1=E4=BC=A0=E5=86=9B?= <1224667075@qq.com> Date: Fri, 15 Aug 2025 02:46:12 +0000 Subject: [PATCH] Merge #2082 into sdk602patch0911 from refs/changes/2082/head MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Code review from 胡传军 * refs/changes/2082/head: (4 commits squashed) - 增加循环判断条件,避免断连后一直无法正确退出循环 - Merge branch 'sdk602patch0911' of https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230 into 0911 - Merge branch 'sdk602patch0911' of https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230 into 0911 - 修改N9 tcp ota升级文件 Signed-off-by: aliyun8003852482 <1224667075@qq.com> Reviewed-by: Caisking <3449750381@qq.com> Reviewed-by: 罗正 <1732036298@qq.com> Reviewed-by: aliyun8003852482 <1224667075@qq.com> Reviewed-by: snickersun@163.com Reviewed-by: aliyun6865282430 <1624952103@qq.com> Merged-by: snickersun@163.com CR-link: https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230/change/2082 --- .../n9/fs/user/system/cat1ota/cat1Service.py | 41 ++++- .../user/system/cat1ota/china_mobile_dmp.py | 167 +++++++++++++----- .../n9/fs/user/system/cat1ota/telecom_dmp.py | 18 +- 3 files changed, 173 insertions(+), 53 deletions(-) diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/n9/fs/user/system/cat1ota/cat1Service.py b/code/sdk/build/config/target_config/brandy/mk_fs_image/n9/fs/user/system/cat1ota/cat1Service.py index d0b727137..a69f71641 100644 --- a/code/sdk/build/config/target_config/brandy/mk_fs_image/n9/fs/user/system/cat1ota/cat1Service.py +++ b/code/sdk/build/config/target_config/brandy/mk_fs_image/n9/fs/user/system/cat1ota/cat1Service.py @@ -50,11 +50,14 @@ import request import ql_fs import pm import sms +import ujson from usr.EventMesh import eventMesh + from usr.httpota import httpota -# from usr.telecom_dmp import telecomDmpCb -# from usr.china_mobile_dmp import chinamobileCb +from usr.telecom_dmp import telecomDmpCb +from usr.china_mobile_dmp import chinamobileCb + from usr.china_mobile_ai_regulation import aiRegulation # 设置日志输出级别 log.basicConfig(level=log.INFO) @@ -78,7 +81,7 @@ sms.setCallback(msg_cb)#sms注册回调 CAT1_SERVICE_HEAD = 'FE' #固定head PROJECT_NAME = "Cat1SlipUDPService" -PROJECT_VERSION = "PY_SRV_V19" +PROJECT_VERSION = "PY_SRV_V21" CONFIG_JSON="/usr/system_config.json" CURRENT_APP_TYPE="pysrv" @@ -403,9 +406,13 @@ class Cat1Service: httpota.run( str(parm).split("and")[0], str(parm).split("and")[-1]) # eventMesh.publish("set_volte_switch",int(parm)) # UDP_MSG_OTA + elif cmd == "1C":# + self.read_dev_ai_id() elif cmd == "AC":# if self.ack_sem==1: self.ack_sem=0 + + def telecom_recv_cmd(self,cmd,parm): if cmd == "10": @@ -812,7 +819,7 @@ class Cat1Service: 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() + telecomDmpCb.telecom_dmp_power_on_init() if 1: #CHINA_MOBILE_DM_FUN_ENABLE == 1: if eventMesh.publish("get_dmp_change_mode") == 2: eventMesh.publish("set_network_state",1) @@ -820,7 +827,7 @@ class Cat1Service: return self.china_mobile_init = 1 #移动入库的初始化 - # chinamobileCb.china_mobile_init() + chinamobileCb.china_mobile_init() if eventMesh.publish("get_dmp_change_mode") == 3: if self.china_mobile_ai_init == 1: return @@ -840,6 +847,30 @@ class Cat1Service: def stop(self): slip.destroy() return 0 + + def read_dev_ai_id(self): + + IFEXIST = ql_fs.path_exists("/usr/cm_ai_regulation.json") # + if IFEXIST == True: #文件存在 + fileSize = ql_fs.path_getsize('usr/cm_ai_regulation.json') + if fileSize == 0: + + print("设备信息配置文件不存在\r\n") + else: + try: + with open("/usr/cm_ai_regulation.json","r",encoding='utf-8') as fd: + try: + config_data = ujson.load(fd) #转换成json格式 + if len(config_data) != 0: + if "deviceId" in config_data:# + deviceId = str(config_data["deviceId"]) #设备ID + self.reply_cmd('1C',"{}".format(deviceId)) + except Exception as error: + print("配置文件的内容不是json格式 保存数据的时候格式不对\r\n") + except Exception as error: + print("打开配置文件失败\r\n") + + # 封装tlv数据包 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/n9/fs/user/system/cat1ota/china_mobile_dmp.py b/code/sdk/build/config/target_config/brandy/mk_fs_image/n9/fs/user/system/cat1ota/china_mobile_dmp.py index 45962cc11..8128328bd 100644 --- a/code/sdk/build/config/target_config/brandy/mk_fs_image/n9/fs/user/system/cat1ota/china_mobile_dmp.py +++ b/code/sdk/build/config/target_config/brandy/mk_fs_image/n9/fs/user/system/cat1ota/china_mobile_dmp.py @@ -28,6 +28,8 @@ import modem import base64 import request import ujson +import sim + BLOCK_SIZE = 16 NEED_SAVE_CONFIG_FILE = 0 #是否需要保存上报次数 异常重试次数 时间戳到配置文件 0不保存 1保存 #中国移动入库 @@ -154,9 +156,13 @@ class chinamobile: def china_mobile_first_get_config(self,url): ##############第一步#######获取采集规则配置####### - brand = "Watch"#品牌 - - model = "Watch"#型号 + # brand = "KUMI"#品牌 + # model = "Watch Soar"#型号 + # NWO N9 + brand = "NWO"#品牌 + model = "NWO N9"#型号 + + appKey = "M100001131"#不需要就填***appKey 厂商标识 sdkVersion = "***"#非SDK传输 apiVersion = "4.0.1"#接口定义 固定4.0.1 @@ -204,12 +210,16 @@ class chinamobile: def first_get_config_json(self):#开机上电获取配置信息 getresult = 0 print("first_get_config_json false",self.__net_connected) - if self.__net_connected != 1:#网络不正常 + network_state = eventMesh.publish("get_network_state") + if network_state != 1:#网络不正常 + print("网络不正常") 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 + print("result_json == NULL") + return 0 # { # "reportTime":1440, # "reportNum":8, @@ -277,15 +287,22 @@ class chinamobile: #########################第二步############自注册上报################### #设备自注册上报 dev_autoregist_result = 0 #默认是1成功 0是失败 - if self.__net_connected != 1:#网络不正常 + network_state = eventMesh.publish("get_network_state") + if network_state != 1:#网络不正常 return dev_autoregist_result #密钥 - key = "f74c005251dc40c4b64a283827da3812" + key = "03816c12b6d24182981325e57670e478" - brand = "{}".format("XXX")#品牌 + brand = "{}".format("NWO")#品牌 - model = "Watch"#型号 - appKey = "M100001131"#不需要就填***appKey 厂商标识 + # model = "Watch Soar"#型号 + model = "NWO N9"#型号 + + # -*- coding: UTF-8 -*- +#示例 + + + appKey = "M100001188"#不需要就填***appKey 厂商标识 sdkVersion = "***"#非SDK传输 apiVersion = "4.0.1"#接口定义 固定4.0.1 apiType = "I"#非Android @@ -297,33 +314,58 @@ class chinamobile: preField1 = "***"#预留字段1 preField2 = "***"#预留字段2 preField3 = "***"#预留字段3 + + + batteryCapacityCurr="***" + #不需要加密 #||分隔符不能超过11个 否则平台会解析出错 config_data = "{}||{}||{}||{}||{}||{}||{}||{}||{}||{}||{}||{}".format(brand,model,appKey,sdkVersion,apiVersion,apiType,templateId,imei1,imei2,configType,preField1,preField2) #需要加密的数据明文 - if (len(self.mac_data) == 0):#获取失败了 - self.mac_data = "***" + mac_data="***"#eventMesh.publish("get_dev_mac") + + if (len(mac_data) == 0):#获取失败了 + mac_data = "***" + + imsi = sim.getImsi() + print("Get IMSI : {}".format(imsi)) - MAC = self.mac_data + MAC = mac_data # base64_MAC = sha256_encode(key,MAC) - RAM = "32MB" + RAM = "***" # base64_RAM = sha256_encode(key,RAM) - ROM = "144MB" + ROM = "***" # base64_ROM = sha256_encode(key,ROM) - CPU = "YH601S" + CPU = "***" # base64_CPU = sha256_encode(key,CPU) - sysVersion = "OpenHarmony 3.2" + GPU = "***" + + imsi2="***" + + sysVersion = "***" + + board = "***" + # base64_sysVersion = sha256_encode(key,sysVersion) if (len(self.software_version) == 0):#获取失败了 - self.software_version = "Watch V1.0" - softwareVer = self.software_version + # self.software_version = "Watch Soar V1.0" + self.software_version = "NWO N9 V1.0" + + softwareVer = "NWO N9 V1.0" # base64_softwareVer = sha256_encode(key,softwareVer) - softwareName ="Watch" + # softwareName ="FD230" + softwareName ="***" + + sn="***" + + batteryCapacity="***" + + phoneNumber="***" # base64_softwareName = sha256_encode(key,softwareName) - volte="0" #0:开;1:关;-1:不支持 + volte="***" #0:开;1:关;-1:不支持 # base64_volte = sha256_encode(key,volte) - netType="4G" + netType="***" # base64_netType = sha256_encode(key,netType) resolution="466*466" @@ -331,16 +373,16 @@ class chinamobile: screenSize = "1.43" # base64_screenSize = sha256_encode(key,screenSize) - wearingStatus ="-1" + wearingStatus ="未佩戴" # base64_wearingStatus = sha256_encode(key,wearingStatus) - networkStatus ="1"#1:连接;0:未连接;-1:不支持 + networkStatus ="***"#1:连接;0:未连接;-1:不支持 routerMac = "***" wifiMac = "***" # base64_networkStatus = sha256_encode(key,networkStatus) - encyr_data = [MAC,RAM,ROM,CPU,sysVersion,softwareVer,softwareName,volte,netType,resolution,screenSize,wearingStatus,networkStatus,routerMac,wifiMac] + encyr_data = [MAC,RAM,ROM,CPU,sysVersion,softwareVer,softwareName,volte,netType,resolution,screenSize,wearingStatus,networkStatus,routerMac,wifiMac,imsi,GPU,imsi2,board,sn,batteryCapacity,phoneNumber,batteryCapacityCurr] print(len(encyr_data)) encyr_new_data=[] for i in range(len(encyr_data)): @@ -363,24 +405,63 @@ class chinamobile: # "networkStatus":"{}".format(base64_networkStatus)#网络状态 # } - deviceInfo_tmp = { - "bluetoothMac":"{}".format(encyr_new_data[0]),#mac地址可填可不填 - "ram":"{}".format(encyr_new_data[1]),#ram信息 - "rom":"{}".format(encyr_new_data[2]),#rom信息 - "cpu":"{}".format(encyr_new_data[3]),#cpu信息 - "sysVersion":"{}".format(encyr_new_data[4]),#操作系统版本号 - "softwareVer":"{}".format(encyr_new_data[5]),#固件版本号 - "softwareName":"{}".format(encyr_new_data[6]),#固件名称 - "volte":"{}".format(encyr_new_data[7]),#volte开关 默认是开 - "netType":"{}".format(encyr_new_data[8]),#当前网络类型4G - "resolution":"{}".format(encyr_new_data[9]),#屏幕分辨率466*466 - "screenSize":"{}".format(encyr_new_data[10]),#屏幕尺寸默认1.43 - "wearingStatus":"{}".format(encyr_new_data[11]),#佩戴状态不支持 - "networkStatus":"{}".format(encyr_new_data[12]),#网络状态 - "routerMac":"{}".format(encyr_new_data[13]), #路由mac地址 *** - "mac":"{}".format(encyr_new_data[14]) #wifi mac - } + if configType_data=="keepAlive": + print("keepAlive :") + deviceInfo_tmp = { + "bluetoothMac":"{}".format(encyr_new_data[0]),#mac地址可填可不填 + "ram":"{}".format(encyr_new_data[1]),#ram信息 + "rom":"{}".format(encyr_new_data[2]),#rom信息 + "cpu":"{}".format(encyr_new_data[3]),#cpu信息 + "sysVersion":"{}".format(encyr_new_data[4]),#操作系统版本号 + "softwareVer":"{}".format(encyr_new_data[5]),#固件版本号 + "softwareName":"{}".format(encyr_new_data[6]),#固件名称 + "volte":"{}".format(encyr_new_data[7]),#volte开关 默认是开 + "netType":"{}".format(encyr_new_data[8]),#当前网络类型4G + "resolution":"{}".format(encyr_new_data[9]),#屏幕分辨率466*466 + "screenSize":"{}".format(encyr_new_data[10]),#屏幕尺寸默认1.43 + "wearingStatus":"{}".format(encyr_new_data[11]),#佩戴状态不支持 + "networkStatus":"{}".format(encyr_new_data[12]),#网络状态 + "routerMac":"{}".format(encyr_new_data[13]), #路由mac地址 *** + "mac":"{}".format(encyr_new_data[14]), #wifi mac + "imsi":"{}".format(encyr_new_data[15]), #imsi + "gpu":"{}".format(encyr_new_data[16]), #GPU + "imsi2":"{}".format(encyr_new_data[17]), #imsi2 + "board":"{}".format(encyr_new_data[18]), #board + "sn":"{}".format(encyr_new_data[19]), #board + "batteryCapacity":"{}".format(encyr_new_data[20]), #board + "phoneNumber":"{}".format(encyr_new_data[21]), #board + "batteryCapacityCurr":"{}".format(encyr_new_data[22]), #board + } + else : + deviceInfo_tmp = { + "bluetoothMac":"{}".format(encyr_new_data[0]),#mac地址可填可不填 + "ram":"{}".format(encyr_new_data[1]),#ram信息 + "rom":"{}".format(encyr_new_data[2]),#rom信息 + "cpu":"{}".format(encyr_new_data[3]),#cpu信息 + "sysVersion":"{}".format(encyr_new_data[4]),#操作系统版本号 + "softwareVer":"{}".format(encyr_new_data[5]),#固件版本号 + "softwareName":"{}".format(encyr_new_data[6]),#固件名称 + "volte":"{}".format(encyr_new_data[7]),#volte开关 默认是开 + "netType":"{}".format(encyr_new_data[8]),#当前网络类型4G + "resolution":"{}".format(encyr_new_data[9]),#屏幕分辨率466*466 + "screenSize":"{}".format(encyr_new_data[10]),#屏幕尺寸默认1.43 + "wearingStatus":"{}".format(encyr_new_data[11]),#佩戴状态不支持 + "networkStatus":"{}".format(encyr_new_data[12]),#网络状态 + "routerMac":"{}".format(encyr_new_data[13]), #路由mac地址 *** + "mac":"{}".format(encyr_new_data[14]), #wifi mac + "imsi":"{}".format(encyr_new_data[15]), #imsi + "gpu":"{}".format(encyr_new_data[16]), #GPU + "imsi2":"{}".format(encyr_new_data[17]), #imsi2 + "board":"{}".format(encyr_new_data[18]), #board + "sn":"{}".format(encyr_new_data[19]), #board + "batteryCapacity":"{}".format(encyr_new_data[20]), #board + "phoneNumber":"{}".format(encyr_new_data[21]), #board + + } json_data = ujson.dumps(deviceInfo_tmp)#需要转义的字符串 + + + send_autoregist = { "endpoint":config_data, @@ -621,6 +702,7 @@ class chinamobile: self.config_data["report_Num_old"] = self.report_Num_old self.write_config_msg_file(self.config_data) #设备自注册上报信息 + print("onself_regist_report_cb:self.china_mobile_autoregist_infor") url = "https://{}//dm-multi-accept/multi/acceptMultiTerminalRegInfo".format(self.address)#上报地址 confing_type = "autoRegist"#上报传输配置 result = self.china_mobile_autoregist_infor(url,confing_type) @@ -674,6 +756,7 @@ class chinamobile: url = "https://{}//dm-multi-accept/multi/acceptMultiTerminalHeartbeatInfo".format(self.address)#上报地址 confing_type = "keepAlive"#上报传输配置 + print("heart_report_cb:self.china_mobile_autoregist_infor") result = self.china_mobile_autoregist_infor(url,confing_type) if result != 1: #触发异常重试进制 diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/n9/fs/user/system/cat1ota/telecom_dmp.py b/code/sdk/build/config/target_config/brandy/mk_fs_image/n9/fs/user/system/cat1ota/telecom_dmp.py index 28c8dc69c..289ba2b79 100644 --- a/code/sdk/build/config/target_config/brandy/mk_fs_image/n9/fs/user/system/cat1ota/telecom_dmp.py +++ b/code/sdk/build/config/target_config/brandy/mk_fs_image/n9/fs/user/system/cat1ota/telecom_dmp.py @@ -32,7 +32,7 @@ REGIST_POWER_ON_TIME=5*60 #开机5分钟内就必须自注册触发 MULTI_DAY_RESEND_T = 30*24*60*60-12*60*60#多日重发的机制的周期T 30天 MULTI_DAY_RESEND_t = 12*60*60#多日重发的机制的周期t 0.5天 def get_report_url_website(mode = None):#获取上报网址 - url = "http://zzhc.vnet.cn:9998/"#上报网址 + url = "https://zzhc.vnet.cn/pi/"#上报网址 return url class telecomDmp: @@ -234,16 +234,20 @@ class telecomDmp: print(cell_data) sendCellid = "{}".format(cell_data) REGVER = "12.0"#当前数据域协议版本号 - MODEL = "TXB-Watch Soar"#机型字段 -前面是厂商名 -后面是设备名 + + # MODEL = "TXB-Watch Soar"#机型字段 -前面是厂商名 -后面是设备名 + + MODEL = "KNZ-NWO N9"#机型字段 -前面是厂商名 -后面是设备名 + get_dev_version = eventMesh.publish("get_dev_version")#订阅消息 if get_dev_version == None: get_dev_version = "" - SWVER = get_dev_version #软件版本号 + SWVER = "NWO N9 V1.0"#get_dev_version #软件版本号 UETYPE = "12"#终端类型 12是智能手表 11是儿童手表 SIM1ICCID = iccid SIM1LTEIMSI = IMSI MACID = ""#可用WALN的地址 终端布支持WLAN 就是不可上网 - OSVER = "RTOS"#操作系统版本号 + OSVER = "OHOS 5.0"#操作系统版本号 IMEI1 = imei#"876226002021717"#imei SIM1CELLID = sendCellid#下发的小区ID data = { @@ -257,7 +261,8 @@ class telecomDmp: "OSVER":OSVER, "IMEI1":IMEI1, "SIM1CELLID":SIM1CELLID, - "NETWORKTYPE":4 + # "NETWORKTYPE":4 + "NWTYPE1":4, } data_infor=ujson.dumps(data)#将字典转换成json格式 json_bytes = bytes(data_infor, 'utf-8')#转换成字节数 @@ -266,7 +271,8 @@ class telecomDmp: headers_T = {'Content-Type':'application/encrypted-json'} #请求头信息 按照实际要求填写 request_result = 0 try: - response = request.post("http://zzhc.vnet.cn:9998/", data=data_encode,headers =headers_T) + # https://zzhc.vnet.cn/pi + response = request.post("https://zzhc.vnet.cn/pi/", data=data_encode,headers =headers_T) request_result = 1 if response.status_code == 200 : #返回状态码 200服务器正常解析数据 content = response.content#后台返回的结果 -- 2.17.1