增加main协议
authord15521469561 <d155214695615@qq.com>
Fri, 12 May 2023 02:11:21 +0000 (10:11 +0800)
committerd15521469561 <d155214695615@qq.com>
Fri, 12 May 2023 02:11:21 +0000 (10:11 +0800)
3.code/1.watch/2.code/main_1.py
3.code/1.watch/2.code/mgr.py

index 3c5822e..ad3dccb 100644 (file)
@@ -131,13 +131,13 @@ if __name__ == '__main__':
     
 
     from protocol import LK_ProtoCol,PING_ProtoCol,HEART_ProtoCol,OXYGEN_ProtoCol,OXYGEN_One_ProtoCol,HRSTART_ProtoCol,CENTER_ProtoCol,UPLOAD_ProtoCol,\
-        TEMP_ProtoCol,DLT_ProtoCol,WT_ProtoCol,UD_ProtoCol,REMIND_ProtoCol, CR_ProtoCol,KA_ProtoCol,FIND_ProtoCol,POWEROFF_ProtoCol,\
+        TEMP_ProtoCol,DLT_ProtoCol,WT_ProtoCol,UD_ProtoCol,REMIND_ProtoCol, CR_ProtoCol,KA_ProtoCol,FIND_ProtoCol,POWEROFF_ProtoCol,sosHome_dial_ProtoCol,\
             ProtoColResolver,PHL_ProtoCol,MONITOR_ProtoCol,bootoff_ProtoCol
     import mgr as mgr
     print("init7:{}".format(utime.localtime()))
     
     from mgr import ConfigStoreManager, LocationManager, SockManager,getVolumSizeManager,gethistoryDataManager,getUpLoadDataManager, \
-    NetManager,AddrBookManager,MsgdetailManager,PhoneCallingManager,getStorageDataManager,getBrightnessManager,getHrTimeManager
+    NetManager,AddrBookManager,MsgdetailManager,PhoneCallingManager,getStorageDataManager,getBrightnessManager,getHrTimeManager,getSosFlagManager
     print("init8:{}".format(utime.localtime()))
     
     
@@ -180,6 +180,7 @@ if __name__ == '__main__':
     app.append_manager(getStorageDataManager())
     app.append_manager(getUpLoadDataManager())
     app.append_manager(getVolumSizeManager())
+    app.append_manager(getSosFlagManager())
 
     print("init11:{}".format(utime.localtime()))    
     pcr = ProtoColResolver()
@@ -206,6 +207,8 @@ if __name__ == '__main__':
     # pcr.add_support(CENTER_ProtoCol())
     pcr.add_support(CENTER_ProtoCol())
     pcr.add_support(bootoff_ProtoCol())
+    pcr.add_support(sosHome_dial_ProtoCol())
+
     sm = SockManager()
     sm.add_support_resolver(pcr)
     app.append_manager(sm)
index 1ea1541..98bf563 100644 (file)
@@ -19,6 +19,7 @@ from misc import USB, Power, ADC
 from machine import ExtInt, Pin,Timer,RTC,UART
 import EventMesh
 import audio
+from machine import I2C
 from Gsensor import SC7A20
 from Hsensor import GH3018
 import quecgnss
@@ -435,6 +436,10 @@ class ConfigStoreManager(Abstract):
 def voice_callback(args):
    print('voicecall iinfo:{}'.format(args))
    if args[0] == 10:
+        get_UI_high_priority = EventMesh.publish("get_UI_high_priority")#如果在拨出去或者通话中屏蔽来电
+        if get_UI_high_priority == 1:
+            EventMesh.publish("set_interrup_incall",1)
+            return
         print('voicecall incoming call, PhoneNO.: ', args[6])
         size_len = len(str(args[6]))
         tmp = []
@@ -447,6 +452,12 @@ def voice_callback(args):
         EventMesh.publish("load_screen", {"screen": "incoming_call","meta":str(tmp)})
 
    elif args[0] == 11:
+        EventMesh.publish("set_UI_high_priority",0)
+        sos_flag = EventMesh.publish("get_sos_flag")
+        if sos_flag == 1:
+            sos_flag = 0
+            EventMesh.publish("set_sos_flag",0)
+
         print('voicecall connected, PhoneNO.: ', args[6])
         size_len = len(str(args[6]))
         tmp = []
@@ -458,12 +469,67 @@ def voice_callback(args):
         EventMesh.publish("load_screen", {"screen": "on_call","meta":str(tmp)})
 
    elif args[0] == 12:
+        set_interrup_call = EventMesh.publish("get_interrup_incall")#打断这次不需要来电的ui事件 以免通话中退出当前界面进不去了
+        if set_interrup_call == 1:
+            EventMesh.publish("set_interrup_incall",0)
+            return
+    
+        EventMesh.publish("set_interrup_incall",0)
+        EventMesh.publish("set_UI_high_priority",0)
         print('voicecall disconnect')
-        EventMesh.publish("load_screen", {"screen": "main_menu"})
+        EventMesh.publish("load_screen", {"screen": "main_menu"})  
+        sos_flag = EventMesh.publish("get_sos_flag")
+        if sos_flag == 0:
+            EventMesh.publish("set_sos_num",0)
+        else:
+            num = EventMesh.publish("get_sos_num")
+            number = EventMesh.publish("get_dial_sos_number")
+            if len(number) > 0:
+                if num == None:
+                    num = 0
+                num+=1
+                num_len = 0
+
+                if len(number) == 1:
+                    num_len = len(number)
+                elif len(number) == 2:
+                    num_len = len(number)+1
+                elif len(number) == 3:
+                    num_len = len(number)+2  
+                # print("number:{} number_len :{} num:{} num_len:{}".format(number,len(number),num,num_len))
+                if num > num_len :
+                    EventMesh.publish("set_sos_flag",0)
+                    EventMesh.publish("set_sos_num",0)
+                else:
+                    # print("number:{} number_len :{}".format(number,len(number)))
+                    EventMesh.publish("set_sos_num",num)
+                    if len(number) == 1:
+                        EventMesh.publish("set_callnumer_cb",number[0])
+                        print("phone 1")
+                    elif len(number) == 2:
+                        if num == 1 or num == 3:
+                            print("phone 2")
+                            EventMesh.publish("set_callnumer_cb",number[1])
+                        elif num == 2:
+                            print("phone 3")
+                            EventMesh.publish("set_callnumer_cb",number[0])
+                    elif len(number) == 3:
+                        if num == 1 or num == 4:
+                            EventMesh.publish("set_callnumer_cb",number[1])
+                            print("phone 4")
+                        elif num == 2 or num == 5:
+                            print("phone 5")
+                            EventMesh.publish("set_callnumer_cb",number[2])
+                        elif num == 3:
+                            print("phone 6")
+                            EventMesh.publish("set_callnumer_cb",number[0])
+        print('voicecall disconnect end')
+        
 
    elif args[0] == 13:
         print('voicecall is waiting, PhoneNO.: ', args[6])
    elif args[0] == 14:
+
         print('voicecall dialing, PhoneNO.: ', args[6])
         EventMesh.publish("load_screen", {"screen": "dialing"})
         
@@ -537,6 +603,9 @@ class DeviceInfoManager(Abstract):
             print('GNSS init ok.')
         else:
             print('GNSS init failed.')
+
+        self.i2c0 = I2C(I2C.I2C0, I2C.STANDARD_MODE)
+        self.stop_temp( None, None)
         
     def post_processor_after_instantiation(self):
         print("post_processor_after_instantiation:1")
@@ -575,6 +644,10 @@ class DeviceInfoManager(Abstract):
         EventMesh.subscribe(constants.EVENT.GET_BLOOD_OXYGEN, self.get_blood_oxygen)
         EventMesh.subscribe(constants.EVENT.GET_HEART, self.get_heart)
 
+        EventMesh.subscribe(constants.EVENT.START_TEMP, self.start_temp)
+        EventMesh.subscribe(constants.EVENT.STOP_TEMP, self.stop_temp)
+        EventMesh.subscribe(constants.EVENT.GET_TEMP, self.get_temp)
+
         print("post_processor_after_instantiation:2")
         self.timer_push_schedule.start(10000, 1, self.publish_event)
         # self.battery_push_schedule.start(3000, 1, self.__check_battery)
@@ -603,11 +676,13 @@ class DeviceInfoManager(Abstract):
         self.timer_push = 0
         date_tmp = utime.localtime()
         time_tmp = utime.mktime(date_tmp)
+        print("date_tmp......01....{} time_tmp:{}\r\n".format(date_tmp,time_tmp))
+
         if  math.fabs(time_tmp - self.KA_time) > 7*60: #7分钟一次心跳
             self.KA_time = time_tmp
             EventMesh.publish(constants.PROTOCOL.KA_SEND)
         self.upload_time = EventMesh.publish("get_upload_data")
-        
+        #print("self.upload_time:{} math.fabs(time_tmp - self.UD_time):{}".format(self.upload_time,math.fabs(time_tmp - self.UD_time)))
         if self.upload_time != None:
             if  math.fabs(time_tmp - self.UD_time) > self.upload_time: #7分钟一次定位
                 self.UD_time = time_tmp
@@ -649,7 +724,7 @@ class DeviceInfoManager(Abstract):
             self.bat_time = 0
             if battery[1] == 20:
                 EventMesh.publish("load_screen", {"screen": "LOW_POWER"})
-        print("battery:{}".format(battery))
+        
         #消息已满
         msg_nums = sms.getMsgNums() #获取短信条数
         self.sms_full_flag+=10
@@ -658,12 +733,12 @@ class DeviceInfoManager(Abstract):
             if msg_nums >= 50:
                 EventMesh.publish("load_screen", {"screen": "message_full"})
         
-        #print("hr......01....{}\r\n".format(hr_time))
+        
         if EventMesh.publish(constants.EVENT.GET_CONNECT) == 1 or battery[1] != 1:
             if hr_time != None:
                 # print("hr......01....{}\r\n".format(hr_time))
                 if hr_time > 0:
-                    # print("get_hr_state:{} get_spo2_state:{} self.old_time:{} hr_time:{}".format(self.get_hr_state,self.get_spo2_state,self.old_time,hr_time))
+                    #print("get_hr_state:{} get_spo2_state:{} self.old_time:{} hr_time:{}".format(self.get_hr_state,self.get_spo2_state,self.old_time,hr_time))
                     if self.get_hr_state != 1 and self.get_spo2_state != 1:
                         if self.get_hr_state == 0 and self.get_spo2_state == 0:
                             if self.HR_state == 0 or self.HR_state == 3:
@@ -742,11 +817,10 @@ class DeviceInfoManager(Abstract):
                                 EventMesh.publish("set_old_spo2_data",spo2_value)
                                 EventMesh.publish(constants.PROTOCOL.OXYGEN_SEND,spo2_value)
                             self.HR_state = 3
-                        
                     else:
-                        self.SENSOR_time = time_tmp
                         self.HR_state = 0
-                        self.old_time = 0 
+                        self.old_time = hr_time
+
                     if self.HR_state == 3 or self.HR_state == 0:#只有不在测量的时候才测单次的
                         if self.get_spo2_state == 3 or self.get_hr_state == 3:#单次测量
                             self.HR_state = 0
@@ -830,11 +904,9 @@ class DeviceInfoManager(Abstract):
                         else:
                             self.HR_Onestate = 0
                             self.HR_OneTime = 0
-                        
                 else:
-                    # print("hr......01....{} {} self.HR_Onestate {} {}".format(self.get_hr_state,self.get_spo2_state,self.HR_OneTime,self.HR_Onestate))
+                    #print("hr......01....{} {} self.HR_Onestate {} {}".format(self.get_hr_state,self.get_spo2_state,self.HR_OneTime,self.HR_Onestate))
                     self.SENSOR_time = time_tmp#进入最后一次的时间戳
-                    self.old_time = 0
 
                     if self.get_hr_state != 1 and self.get_spo2_state != 1:#没有设置间隔时间单次测量
                         if self.get_spo2_state == 3 or self.get_hr_state == 3:#单次测量
@@ -1162,7 +1234,32 @@ class DeviceInfoManager(Abstract):
     def get_heart(self, topic, msg):
         data = self.hsensor.get_all_data()
         return data[0]
+    
 
+    def start_temp(self, topic, msg):
+        WHO_AM_I = bytearray([0x01, 0])
+        I2C_SLAVE_ADDR = 0x49
+        r_data = bytearray(2)
+        data = bytearray([0x61A0, 0])   # 唤醒
+        return self.i2c0.write(I2C_SLAVE_ADDR, WHO_AM_I, 1, data, 2)
+    def stop_temp(self, topic, msg):
+        WHO_AM_I = bytearray([0x01, 0])
+        I2C_SLAVE_ADDR = 0x49
+        r_data = bytearray(2)
+        data = bytearray([0x60A0, 0])   #休眠
+        return self.i2c0.write(I2C_SLAVE_ADDR, WHO_AM_I, 1, data, 2)
+        
+    def get_temp(self, topic, msg):
+        WHO_AM_I = bytearray([0x00, 0])
+        I2C_SLAVE_ADDR = 0x49
+        r_data = bytearray(2)
+        self.i2c0.read(I2C_SLAVE_ADDR, WHO_AM_I, 1, r_data, 2, 0)
+        #print("temp_data:{}".format(r_data))
+        temp_s = ((r_data[0]<<8) | (r_data[1]))>>4
+        #print("temp_s:{}".format(temp_s))
+        temp_data = temp_s * 0.0625
+        #print("temp_data:{}".format(temp_data))
+        return temp_data
  
             
 
@@ -1263,7 +1360,7 @@ class SockManager(Abstract):
                 _thread.start_new_thread(self.reconnect, ())
                 break
             data = data + r
-            if data[-1] != 0x5d and len(data)<10*1024: #']':
+            if data[-1] != 0x5d and len(data)<20*1024: #']':
                 continue
             self.connect_tmp = 1 #有数据,就认为是连接状态
             print("TCP:recv: data:{}".format(data))
@@ -1415,7 +1512,11 @@ class LocationManager(Abstract):
         data = ""
         self.location_timer_count = self.location_timer_count +1
         self.location_check_data_timer_count = self.location_check_data_timer_count+1
-        if self.location_check_data_timer_count > 5 :#5秒查一次
+
+        match_gga_data = []
+        match_gsv_data = []
+
+        if self.location_check_data_timer_count > 2 :#5秒查一次
             self.location_check_data_timer_count = 0
             #print(self.location_timer_count)
             #检查wifi数据
@@ -1427,6 +1528,8 @@ class LocationManager(Abstract):
                 data = quecgnss.read(4096)
                 #print(data[1].decode())
                 if data[0] > 0 : #有数据
+                    match_gga_data = self.match.GxGGA(data[1]).split(",")
+                    match_gsv_data = self.match.GxGSV(data[1]).split(",")
                     if self.gps.__check_gps_valid(data[1].decode()): #数据齐全
                         match_gmc_data = self.match.GxRMC(data[1]).split(",")
                         match_vtg_data = self.match.GxVTG(data[1]).split(",")
@@ -1460,14 +1563,17 @@ class LocationManager(Abstract):
         if self.location_type == 1: #测试模式
               EventMesh.publish("PUSH_LOCATION_DATA", [data,self.wifi_data,self.cell_data]) 
         elif self.location_type == 0: #正常模式     
-            if self.gps_data  != [] or self.location_timer_count > 60: #or( self.wifi_data != [] and self.cell_data != []): 
+            if self.gps_data  != [] or self.location_timer_count > 40: #or( self.wifi_data != [] and self.cell_data != []): 
                 #print("publish:READ_LOCATION")
                 EventMesh.publish(constants.EVENT.READ_LOCATION, [self.gps_data,self.wifi_data,self.cell_data])
                 EventMesh.publish(constants.EVENT.CLOSE_LOCATION)#关闭定位
-            # if self.location_timer_count > 60 : #1分钟定位超时,超时发送数据,停止定时器及关闭定位
-            #     EventMesh.publish(constants.EVENT.CLOSE_LOCATION)#关闭定位
-            #     EventMesh.publish(constants.EVENT.READ_LOCATION, [self.gps_data,self.wifi_data,self.cell_data])#发送数据
-        
+
+            if len(match_gsv_data) >= 3:
+                #print("match_gsv_data[3]:{}".format(match_gsv_data[3]))  
+                if (int(match_gsv_data[3]) < 3 and self.wifi_data != [] and self.cell_data != [] and self.location_timer_count > 10): #超过10秒且卫星个数少于3
+                    #print("publish:READ_LOCATION")
+                    EventMesh.publish(constants.EVENT.READ_LOCATION, [self.gps_data,self.wifi_data,self.cell_data])
+                    EventMesh.publish(constants.EVENT.CLOSE_LOCATION)#关闭定位    
         
             
 
@@ -1889,7 +1995,7 @@ class getVolumSizeManager(Abstract):#设置或获取音量大小数据
         self.volume_size = 8
         self.read_data = {}
         check = ql_fs.path_exists("/ext/static/storage_file/config.json")
-        print("check:{}".format(check))
+        
         if check == True:
             with open("/ext/static/storage_file/config.json","r") as fd:
                 self.read_data = ujson.load(fd)
@@ -1901,6 +2007,7 @@ class getVolumSizeManager(Abstract):#设置或获取音量大小数据
                         self.volume_size = 8
         else:
             self.volume_size = 8
+        # print("self.volume_size:{}".format(self.volume_size))
     def post_processor_after_instantiation(self):
         EventMesh.subscribe("set_volum_size", self.set_volum_size)
         EventMesh.subscribe("get_volum_size", self.get_volum_size)
@@ -1911,4 +2018,207 @@ class getVolumSizeManager(Abstract):#设置或获取音量大小数据
     def get_volum_size(self, event, msg): 
         return self.volume_size
 
+class getSosFlagManager(Abstract):#设置或获取音量大小数据
+    def __init__(self):
+        self.sos_flag = 0
+        self.sos_num = 0
+        self.call_timer = osTimer()
+        self.sos_numer1 = []
+        self.callnumer =""
+        self.read_data = {}
+        check = ql_fs.path_exists("/ext/static/storage_file/config.json")
+        
+        if check == True:
+            with open("/ext/static/storage_file/config.json","r") as fd:
+                self.read_data = ujson.load(fd)
+                if self.read_data != {}:
+                    b1 = str("SOS_NUMBER1") in self.read_data.keys()
+                    if b1 == True:
+                        self.sos_numer1 = [self.read_data["SOS_NUMBER1"]]
+                    b2 = str("SOS_NUMBER2") in self.read_data.keys()
+                    if b2 == True:
+                        self.sos_numer1 = [self.read_data["SOS_NUMBER1"], self.read_data["SOS_NUMBER2"]]
+
+                    b3 = str("SOS_NUMBER3") in self.read_data.keys()
+                    if b3 == True:
+                        self.sos_numer1 = [self.read_data["SOS_NUMBER1"], self.read_data["SOS_NUMBER2"],self.read_data["SOS_NUMBER3"]]
+                        
+        # print("self.sos_numer1:{} self.read_data:{}".format(self.sos_numer1,self.read_data))
+
+    def post_processor_after_instantiation(self):
+        EventMesh.subscribe("set_sos_flag", self.set_sos_flag)#设置sos拨打标识
+        EventMesh.subscribe("get_sos_flag", self.get_sos_flag)
+
+        EventMesh.subscribe("set_sos_num", self.set_sos_num)#设置拨打循环次数
+        EventMesh.subscribe("get_sos_num", self.get_sos_num)
+
+        EventMesh.subscribe("set_dial_sos_number", self.set_dial_sos_number)
+
+        EventMesh.subscribe("set_callnumer_cb", self.set_callnumer_cb)#延时回调
+
+        EventMesh.subscribe("get_dial_sos_number", self.get_dial_sos_number)#设置家庭号码三个
+
+    def set_sos_flag(self, event, msg): 
+        self.sos_flag = msg
+        if self.sos_flag == 1:
+            number = EventMesh.publish("get_dial_sos_number")
+            if len(number) > 0 and number != None:
+                EventMesh.publish("save_phonename",number[0])
+                EventMesh.publish("save_phonenum",number[0])
+                voiceCall.callStart(str(number[0]))
+
+
+    def set_callnumer_cb(self, event, msg):
+        self.callnumer = msg
+        self.call_timer.start(5000, 0, self.call_timer_cb)#延迟1S 继续拨打
+
+    def call_timer_cb(self, *args, **kwargs):
+        # print("call_timer_cb:{}".format(self.callnumer))
+        EventMesh.publish("save_phonename",str(self.callnumer))
+        EventMesh.publish("save_phonenum",str(self.callnumer))
+        voiceCall.callStart(str(self.callnumer))
+
+    def get_sos_flag(self, event, msg): 
+        return self.sos_flag
+    
+    def set_sos_num(self, event, msg): 
+        self.sos_num = msg
+
+    def get_sos_num(self, event, msg): 
+        return self.sos_num
+    
+    def set_dial_sos_number(self, event, msg): 
+        self.sos_numer1 = msg
+        # print("self.sos_numer1:{}".format(self.sos_numer1))
+
+    def get_dial_sos_number(self, event, msg): 
+        return self.sos_numer1
+
+
+class getBootOffManager(Abstract):#开关机时间
+    def __init__(self):
+        self.read_data = {}
+        self.off_msg = []
+        check = ql_fs.path_exists("/ext/static/storage_file/config.json")
+        
+        if check == True:
+            with open("/ext/static/storage_file/config.json","r") as fd:
+                self.read_data = ujson.load(fd)
+                if self.read_data != {}:
+                    b1 = str("off_on") in self.read_data.keys()
+                    if b1 == True:
+                        self.off_on = self.read_data["off_on"]
+                    b2 = str("off_start") in self.read_data.keys()
+                    if b2 == True:
+                        self.off_start= self.read_data["off_start"]
+
+                    b3 = str("off_end") in self.read_data.keys()
+                    if b3 == True:
+                        self.off_end = self.read_data["off_end"]
+                        
+        # print("self.sos_numer1:{} self.read_data:{}".format(self.sos_numer1,self.read_data))
+
+    def post_processor_after_instantiation(self):
+        EventMesh.subscribe("set_boot_off_time", self.set_boot_off_time)#设置关机时间
+        EventMesh.subscribe("get_boot_off_time", self.get_boot_off_time)
+
+    # def _rtc_callback(self,args):
+    #     print("---!!!!!!alarm_ring!!!!!!!---,idx:",args)
+
+    # def set_boot_off_time(self, event, msg): 
+
+    #     self.off_msg = msg
+    #     if msg[0] == 0:
+    #         return
+      
+    #     rtc_now_time = self.rtc.datetime()
+
+    #     # data = RTC().datetime()
+    #     # hour = data[4]
+    #     # min = data[5]
+
+
+       
+    #     current_minute = rtc_now_time[4]*60 + rtc_now_time[5] #当前的分钟数不包含年月日
+    #     off_msg1 = msg[1]
+    #     off_msg2 = msg[2]
+    #     msg_tmp1 = off_msg1.split(':')
+    #     msg_tmp2 = off_msg2.split(':')
+    #     start_min = msg_tmp1[0]*60+msg_tmp1[1]
+    #     end_min = msg_tmp2[0]*60+msg_tmp2[1]
+    #     #9:00 6:00 
+    #     if current_minute >  start_min:#如果当前的分钟数 大于开始的关机时间分钟数 则认为是第二天6:00需要开机 23:00需要关机
+    #         next_alarm_time = utime.localtime(next_alarm_mktime)
+    #         pass
+
+
+    #     print("04当前的rtc_total_minutes:{}".format(current_minute))  
+
+    #     if current_minute in minute_list:
+    #         print("当前时间和闹钟列表时间重复,删除重复的时间")
+    #         minute_list.remove(current_minute)
+
+    #     minute_list.append(current_minute)
+
+    #     # 对分钟数列表进行排序,并获取当前时间分钟数所在的位置
+    #     minute_list = sorted(minute_list)
+    #     current_index = minute_list.index(current_minute)
+
+    #     print("05将当前时间插入min_list后的min_list:{}".format(minute_list))  
+    #     print("06当前时间所在位置:{}".format(current_index))  
+
+    #     next_index = current_index + 1
+    #     if next_index >= len(minute_list):
+    #         next_minute = minute_list[0]
+    #         print("07下一个闹钟的分钟数:", next_minute)
+    #     else:
+    #         next_minute = minute_list[next_index]
+    #         print("07下一个闹钟的分钟数:", next_minute)
+
+    #     if next_minute >= current_minute:
+    #         interval_minute = next_minute - current_minute
+    #         print("08距离下一次响铃的的分钟数:", interval_minute)
+    #     else:
+    #         interval_minute = end_minute - current_minute + next_minute
+    #         print("08距离下一次响铃的的分钟数:", interval_minute)
+
+    #     #反向获取时间戳
+    #     time = utime.localtime()
+    #     print("09获取utime的时间戳:", time)
+    #     rtc_mktime = utime.mktime(time)
+    #     print("10反向获取utime的mktime:", rtc_mktime)
+
+    #     #加上下一次响铃需要的时间
+    #     next_alarm_mktime = rtc_mktime + interval_minute*60
+    #     print("11下一次响铃的mktime:", next_alarm_mktime)
+
+    #     #格式化时间戳,得到下一次闹钟的时间
+    #     next_alarm_time = utime.localtime(next_alarm_mktime)
+    #     print("12下一次响铃的准确时间:", next_alarm_time)
+    #     #将时间转换为rtc的格式
+    #     data_l = [2021, 7, 9, 5, 12, 30, 0, 0]
+    #     #给rtc时间赋值
+    #     data_l[0] = next_alarm_time[0] #year
+    #     data_l[1] = next_alarm_time[1] #month                    
+    #     data_l[2] = next_alarm_time[2] #day                     
+    #     data_l[4] = next_alarm_time[3] #hour               
+    #     data_l[5] = next_alarm_time[4] #minute               
+    #     #转换为元组       
+    #     data_e=tuple(data_l)
+    #     print("13将该时间转换为RTC元组:", data_e)
+       
+    #     #设置rtc闹钟时间
+    #     self.rtc.register_callback(self._rtc_callback)
+
+    #     FLAG = self.rtc.set_alarm(data_e)
+    #     if FLAG == 0:
+    #         print("成功设置rtc的到期时间:", data_e)
+    #     else:
+    #         print("设置rtc的到期时间失败:", data_e)
+        
+    #     self.rtc.enable_alarm(1)
+
+    # def get_boot_off_time(self, event, msg):
+    #     return self.off_msg
 
+    
\ No newline at end of file