K01:
authordxy15521469561 <1731678236@qq.com>
Thu, 16 Nov 2023 01:41:16 +0000 (09:41 +0800)
committerdxy15521469561 <1731678236@qq.com>
Thu, 16 Nov 2023 01:41:16 +0000 (09:41 +0800)
鉴权系统

2.sdk/project/K01/sdk/services/microPython/ports/quectel/core/mgr.py
2.sdk/project/K01/sdk/services/microPython/ports/quectel/core/protocol.py

index 1be60a7..56a1b2d 100644 (file)
@@ -2981,13 +2981,19 @@ class getBootOffManager(Abstract):#开关机时间
             
         return [self.off_msg,flag]
 
-
 class testSmsSetIPManager(Abstract):#
     def __init__(self):
         self.timer = osTimer()
-        self.newip = "api.xcloudtech.com"#默认防走丢协议
-        self.newcom = 9000
-        self.newmd5 = "bZld0ALsZTt15tKEZhOlLPgbsO75BLTP"
+        self.newip = "8.134.110.49"
+        # "8.134.110.49"#默认大锤服务器 在大锤服务器更改要连接新的服务器地址
+        self.newcom = 30346
+        # 31379
+       
+        self.new_key = "3JyCjsw4ryXKzjzudayY"
+        self.new_pid = "qAELPTKmFanR4RHe"
+        self.server_sate = 0
+        #  d_server_addr = "tcp.tx.kidxin.com"
+        #  d_server_port = 20500
         tmp_data = EventMesh.publish("get_storage_config","set_new_ip_addr")
         if tmp_data != None:
             self.newip = tmp_data
@@ -2998,12 +3004,52 @@ class testSmsSetIPManager(Abstract):#
         if tmp_data != None:
             self.newmd5 = tmp_data    
 
+        tmp_data = EventMesh.publish("get_storage_config","set_new_key")
+        if tmp_data != None:
+            self.new_key = tmp_data 
+
+        tmp_data = EventMesh.publish("get_storage_config","set_new_pid")
+        if tmp_data != None:
+            self.new_pid = tmp_data 
+
+        tmp_data = EventMesh.publish("get_storage_config","get_server_sate")
+        if tmp_data != None:
+            self.server_sate = tmp_data 
+        
+        
+
 
 
     def post_processor_after_instantiation(self):
         EventMesh.subscribe("set_new_ip", self.set_new_ip)#设置关机时间
         EventMesh.subscribe("get_new_ip", self.get_new_ip)
 
+        EventMesh.subscribe("get_new_key_cb", self.get_new_key_cb)#获取key
+        EventMesh.subscribe("set_new_key_cb", self.set_new_key_cb)#获取key
+
+        EventMesh.subscribe("set_new_pid_cb", self.set_new_pid_cb)#获取pid
+        EventMesh.subscribe("get_new_pid_cb", self.get_new_pid_cb)#获取pid
+
+        EventMesh.subscribe("set_server_state", self.set_server_state)#
+        EventMesh.subscribe("get_server_state", self.get_server_state)#
+
+        EventMesh.subscribe("get_new_key_pid", self.get_new_key_pid)#获取pid和key
+
+
+    def set_new_key_cb(self, event, msg): 
+        self.new_key = msg
+        EventMesh.publish("set_storage_config",["set_new_key",self.new_key])
+
+    def get_new_key_cb(self, event, msg):
+        return self.new_key
+    
+    def set_new_pid_cb(self, event, msg): 
+        self.new_pid = msg
+        EventMesh.publish("set_storage_config",["set_new_pid",self.new_pid])
+
+    def get_new_pid_cb(self, event, msg):
+        return self.new_pid
+
     def set_new_ip(self, event, msg): 
         self.newip = str(msg[0])
         self.newcom = int(msg[1])
@@ -3016,6 +3062,7 @@ class testSmsSetIPManager(Abstract):#
         EventMesh.publish("set_storage_config",["set_new_ip_addr",self.newip])
         EventMesh.publish("set_storage_config",["set_new_com",self.newcom])
 
+
         number = str(msg[2])
         sms.sendPduMsg(number, 'set ok', 'UCS2')
         self.timer.start(10*1000,0,self.fun)
@@ -3024,8 +3071,24 @@ class testSmsSetIPManager(Abstract):#
         Power.powerRestart()
 
     def get_new_ip(self, event, msg):
-        tmp_data = EventMesh.publish("get_storage_config","set_new_ip_addr")
-        # return [self.newip,self.newcom,self.newmd5]
+        tmp_addr = EventMesh.publish("get_storage_config","set_new_ip_addr")
+        tmp_com = EventMesh.publish("get_storage_config","set_new_com")
+        if tmp_addr != None:
+            self.newip = tmp_addr
+        if tmp_com != None:
+            self.newcom = tmp_com
+        return [self.newip,self.newcom]
+
+    def get_new_key_pid(self, event, msg):
+        return [self.new_key,self.new_pid]
+    
+    def set_server_state(self, event, msg):
+        EventMesh.publish("set_storage_config",["get_server_sate",msg])
+        self.server_sate = msg
+
+    def get_server_state(self, event, msg):
+        return self.server_sate
+    
 class setkeyboardManager(Abstract):#设置键盘开关状态
     def __init__(self):
         self.key_state = 0
index c404315..4ee7dc2 100644 (file)
@@ -17,15 +17,15 @@ import usocket
 import osTimer
 
 import machine
-
+import urandom
 import _thread
-
+import request
 import usys
 
 def server_init(server_type = None):
     #服务器选择1,防走丢,2大锤,3三基同创,4童信 5云米
     if server_type == None:
-        server_type = 5
+        server_type = 2
     #print("server_init:server_type:{}".format(server_type))
     d_server_addr = "api.xcloudtech.com"
     d_server_port = 9000
@@ -49,8 +49,8 @@ def server_init(server_type = None):
         d_md5_key = ""
         d_PID = "3G"
     elif  server_type == 4:
-         d_server_addr = "tcp.tx.kidxin.com"
-         d_server_port = 20500
+        d_server_addr = "tcp.tx.kidxin.com"
+        d_server_port = 20500
     elif server_type == 5:
         d_server_addr = "device.miwitracker.com"
         d_server_port = 8505
@@ -165,6 +165,7 @@ class SockManager(Abstract):
                 self.sock.close()
             self.sock = usocket.socket(usocket.AF_INET, usocket.SOCK_STREAM)
             #self.sock.setblocking(False) &self.sock.settimeout(0)不阻塞
+
             self.sock.connect((self.server_addr, self.server_port))
             
             #utime.sleep_ms(500)
@@ -180,6 +181,95 @@ class SockManager(Abstract):
         self.reconnect_flag = 0
     def publish_timer_cb(self, *args):
         EventMesh.publish(constants.PROTOCOL.LK_SEND)
+        self.authen_set()
+    def authen_set(self):
+        sever_state = EventMesh.publish("get_server_state")#获取修改服务器状态
+        if sever_state != None:
+            if sever_state == 0:
+                new_ip_data = EventMesh.publish("get_new_ip")
+
+                new_key_data = EventMesh.publish("get_new_key_pid")#获取pid和key
+
+                imei = EventMesh.publish(constants.EVENT.GET_IMEI)
+                server_data = server_init()
+                key_data = server_data[2]
+                pid_data = server_data[3]
+                sonce_data = str(urandom.getrandbits(32))#随机生成32位的随机数
+                md5_data = "{}*{}*{}*{}".format(imei,pid_data,sonce_data,key_data)#md5签名
+                sign_data = ""
+                hash_obj = uhashlib.md5(md5_data)
+                res = hash_obj.digest()
+
+                # 转成十六进制表示
+                sign_data = ubinascii.hexlify(res)
+                sign_data = sign_data.decode('ascii')
+                print("sign_data:{} sonce_data:{}".format(md5_data,sign_data))
+                # sign_data = MD5_head
+                # http://8.134.110.49:31379/dev/device/check?imei=&bid=sonce=sign=
+                url = "http://8.134.110.49:31379/dev/device/check?imei={}&bid={}&sonce={}&sign={}".format(imei,pid_data,sonce_data,sign_data)
+
+                response = request.get(url)
+                data_tmp ={}
+                # d_server_addr = "device.miwitracker.com"
+                # d_server_port = 8505
+                # d_md5_key = ""
+                # d_PID = "3G"
+                # response.content = {'protocolType': '', 'host': 'device.miwitracker.com', 'secretKey': '', 'port': 8505, 'bid': '3G', 'extJsonStr': ''}
+                # response.status_code=200
+                # print("test-{}".format(response.status_code))
+                if response.status_code == 200:
+                    content = response.content
+                    c = next(content)
+                    # "api.xcloudtech.com"
+                    # d_server_port = 9000
+                    jsload_data =  ujson.loads(c)
+                    # print("jsload_data-{}".format(jsload_data))
+                    # jsload_data = {'data':'111','protocolType':'', 'host':'device.miwitracker.com', 'secretKey': 'bZld0ALsZTt15tKEZhOlLPgbsO75BLTP', 'port':8505, 'bid': '3G', 'extJsonStr': ''}
+                    # ujson.loads(c)
+                    
+                    if "success" in jsload_data:
+                        success = jsload_data["success"]
+                        if success == True:#合法设备
+                            if "data" in jsload_data:
+                                data_tmp = jsload_data["data"]#返回的数据 
+                                print("data_tmp:{}".format(data_tmp))
+                                code = jsload_data["code"]
+                                if code == 20000:#合法的设备
+                                    protocloType = data_tmp["protocolType"]#协议类型
+                                    host = data_tmp["host"]#服务骑地址
+                                    secretKey = data_tmp["secretKey"]#
+                                    pid = data_tmp["bid"]#产品型号
+                                    port = data_tmp["port"]#端口号
+                                    if new_ip_data != None:
+                                        # host = "tcptest.tx.kidxin.com"#童信
+                                        # port = 20500
+                                        # d_md5_key = "bZld0ALsZTt15tKEZhOlLPgbsO75BLTP"
+                                        if host != '':
+                                            self.server_addr = host
+                                
+                                            EventMesh.publish("set_storage_config",["set_new_ip_addr",self.server_addr])
+                                            
+                                        if port != '' and port != -1:
+                                            self.server_port = port
+                                            EventMesh.publish("set_storage_config",["set_new_com",self.server_port])
+                                            # EventMesh.publish("set_new_ip",[new_ip_data[0],self.server_port])
+                                    # pid = "SZKW"
+                                    # secretKey = "bZld0ALsZTt15tKEZhOlLPgbsO75BLTP"
+                                    if new_key_data != None:
+                                        if secretKey != '':
+                                            EventMesh.publish("set_new_key_cb", secretKey)#获取pid和key
+                                            
+                                        if pid != '':
+                                            EventMesh.publish("set_new_pid_cb",pid)#获取pid和key
+                                    
+                                    EventMesh.publish("set_server_state",1)#获取修改服务器状态
+                                    self.reconnect_timer_cb()#重连设备
+                            # print("self.server_addr",self.server_addr,self.server_port)
+                # key_data = EventMesh.publish("get_new_key_pid")#获取pid和key
+                # print("self.server_addr-{}-self.server_port:{}-key_data:{}-{}".format(self.server_addr,self.server_port,key_data[0],key_data[1]))
+                # print("response.status_code-{}-{}-{}-{}".format(response.status_code,url,response.content,response.text))
+        
+
         
     def check(self, *args):
         if (not self.run_flag) or (self.connect_tmp == 0) : #7分钟无数据读取,则认为是掉线了
@@ -350,22 +440,33 @@ class ProtoCol(Abstract):
         self.imsi = EventMesh.publish(constants.EVENT.GET_IMSI)
         self.key = EventMesh.publish(constants.EVENT.GET_KEY)
         self.HEADER = self.HEADER.format(self.TYPE)
-        server_data = server_init()
-        self.md5_key = server_data[2]
-        self.PID = server_data[3]
-        
-        
-        # ip_infor = {}
-        # ip_infor = EventMesh.publish("get_new_ip")
-        # if ip_infor != None:
-        #     self.md5_key = ip_infor[2]
-        # print("md5_key",self.md5_key)
+        # server_data = server_init()
+        self.md5_key = ''
+        self.PID = ''
+        server_data = EventMesh.publish("get_new_key_pid")#获取pid和key
+        if server_data == None:
+            server_data = server_init()#如果获取的数据是None,就用默认的大锤key和pid
+            self.md5_key = server_data[2]
+            self.PID = server_data[3]
+        else:
+            self.md5_key = server_data[0]
+            self.PID = server_data[1]
 
     def initialization(self, *args, **kwargs):
         EventMesh.subscribe(self.TYPE + "_SEND", self.handler)
         EventMesh.subscribe(self.TYPE + "_RECV", self.handler)
 
     def handler(self, event, msg):
+        server_data = EventMesh.publish("get_new_key_pid")#获取pid和key
+        # print("handler",server_data)
+        if server_data != None:
+            if self.md5_key != server_data[0]:
+                print("change md5key",self.md5_key,server_data[0])
+                self.md5_key = server_data[0]
+            if self.PID != server_data[1]:
+                print("change md5PID",self.PID,server_data[1])
+                self.PID = server_data[1] 
+
         self.password = EventMesh.publish(constants.EVENT.GET_PASSWORD)
         self.imei = EventMesh.publish(constants.EVENT.GET_IMEI)#"867387060319166"#EventMesh.publish(constants.EVENT.GET_IMEI)#"867387060319166" #EventMesh.publish(constants.EVENT.GET_IMEI)#"867387060319166"#EventMesh.publish(constants.EVENT.GET_IMEI) #"867387060319166"#EventMesh.publish(constants.EVENT.GET_IMEI) #"867387060319166"#"867387060319188"#"867387060319177"#"867387060319166"#"860132060004322"#"867387060319166"#"860132060004322"#EventMesh.publish(constants.EVENT.GET_IMEI)
         self.cid = EventMesh.publish(constants.EVENT.GET_CID)
@@ -447,7 +548,7 @@ class LK_ProtoCol(ProtoCol):
         EventMesh.publish(constants.PROTOCOL.TIME_SEND)
         EventMesh.publish(constants.EVENT.START_LOCATION,constants.PROTOCOL.UD_SEND) #开始UD定位
         EventMesh.publish(constants.EVENT.START_LOCATION,constants.PROTOCOL.WT_SEND) #开始WT定位
-        EventMesh.publish(constants.PROTOCOL.MFCODE_FRIEND_REQ_SEND)
+        EventMesh.publish(constants.PROTOCOL.MFCODE_FRIEND_REQ_SEND)#开机获取一次好友列表
 
 class PING_ProtoCol(ProtoCol):
     """获取绑定状态"""