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)
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"
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":
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)
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
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数据包
import base64
import request
import ujson
+import sim
+
BLOCK_SIZE = 16
NEED_SAVE_CONFIG_FILE = 0 #是否需要保存上报次数 异常重试次数 时间戳到配置文件 0不保存 1保存
#中国移动入库
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
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,
#########################第二步############自注册上报###################
#设备自注册上报
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
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"
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)):
# "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,
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)
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:
#触发异常重试进制