按需修改日程提醒,单次/响两次隔五分钟/响三次隔五分钟
authorazao <821478748@qq.com>
Wed, 29 Oct 2025 06:28:51 +0000 (14:28 +0800)
committerazao <821478748@qq.com>
Wed, 29 Oct 2025 06:28:51 +0000 (14:28 +0800)
2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/ai_alarm.py

index da0cd5d..4e1baae 100644 (file)
@@ -840,14 +840,29 @@ class schedule(Abstract):
         self.is_schedule = 0
         self.old_minute = 0
         self.schedule_play_count = 0
-        self.schedule_play_count_tmp=0
         EventMesh.subscribe("AI_schedule_open",self.AI_schedule_open)#
         EventMesh.subscribe("set_schedule_info",self.set_schedule_info)#
         EventMesh.subscribe("clear_shcheude_flag",self.clear_shcheude_flag)
         self.schedule_play_timer = osTimer()
-        self.base_sentence = ""
+        self.timer_flag = 0#定时器开启状态
         self.schedul_timer_default = 60*5 #默认5分钟提醒一次日程
 
+        # 分别存储所有日程的定时器:key=日程ID,value=当前活跃的定时器
+        self.schedule_list = dict()
+
+
+
+    def add_schedule(self,remind_times,name,descrip,current_round =1):
+        #添加新日程,remind_times为提醒次数(2/3,name为日程名字,descrip为播报内容
+        schedule_id = name
+        self.schedule_list[schedule_id] ={ 
+                                        "total_times" : remind_times,#总提醒次数
+                                        "current_round" : current_round,#当前轮次
+                                        "descrip" : descrip#播报内容
+                                    }
+        print("已添加日程 {},将提醒 {} 次(间隔5分钟)".format(schedule_id,remind_times))
+        return schedule_id
+    
     def set_schedule_info(self,event=None,msg=None):
         print("msg:{}".format(msg))
         self.schedule_array=msg
@@ -899,6 +914,7 @@ class schedule(Abstract):
                 date_day = int(date.split("-")[2])
                 set_hour = int(((alarm["time"]).split(':'))[0])
                 set_min = int(((alarm["time"]).split(':'))[1])
+                repeat = alarm["repeat"]
 
                 time_tuple = utime.localtime()#获取当前日期&时间的元组
                 year_now = time_tuple[0]
@@ -927,24 +943,25 @@ class schedule(Abstract):
                     break
 
             if self.is_schedule == 1: #需要执行闹钟响铃声
-                self.schedule_array.pop(current_index)
+                # self.schedule_array.pop(current_index)
                 alarm_TTS_str = alarm_tts_info["description"]
                 AringTimes  = alarm_tts_info["repeat"]
-                self.base_sentence = ""
-                self.base_sentence = "{}".format(alarm_TTS_str)
+                name = alarm_tts_info["title"]
                 if AringTimes == 0:
                     AringTimes = 1
-                repeat_sentence = (self.base_sentence + ",") * AringTimes  # 重复5次并加逗号分隔
+                repeat_sentence = (alarm_TTS_str + ",")  # 重复5次并加逗号分隔
                 final_sentence = repeat_sentence.rstrip(",")
                 final_sentence = "日程提醒: " + final_sentence
-                self.schedule_play_timer.stop()
                 self.schedule_play_count = AringTimes
-                self.schedule_play_count_tmp=1
                 EventMesh.publish("play_tts",[final_sentence,1])  #播放tts闹钟文本内容
+                self.schedule_array.pop(current_index)
                 EventMesh.publish("set_storage_config",["schedule",self.schedule_array])#读取闹钟数组
+                # print("正在判断是否重复:{}".format(AringTimes))
                 if AringTimes > 1: #只有次数大于2才开定时器播放重复的内容
-                    self.schedule_play_timer.start(self.schedul_timer_default*1000,0,self.shchedu_play_repeat_timer)
-
+                    self.add_schedule(AringTimes,name,alarm_TTS_str)
+                    if self.timer_flag == 0:
+                        self.schedule_play_timer.start(self.schedul_timer_default*1000,1,self.shchedu_play_repeat_timer)
+                        self.timer_flag = 1
                 
                 print("日程:{} self.schedule_array :{}".format(final_sentence,self.schedule_array))
     #循环播放定时器
@@ -953,26 +970,41 @@ class schedule(Abstract):
         if self.schedule_array == []:
             print("清除日程clear_shcheude_flag!!!!!!!!!!{}".format(self.schedule_play_count))
             self.schedule_play_timer.stop()
+            self.timer_flag = 0
             self.schedule_play_count=0
-            self.schedule_play_count_tmp=0
-            self.base_sentence=""
         pass
+
     def shchedu_play_repeat_timer(self,*argc):
-        print("播放日程提醒定时器{} {} self.base_sentence:{}".format(self.schedule_play_count,self.schedule_play_count_tmp,self.base_sentence))
-        if self.schedule_play_count <= 1 or self.schedule_array == None or self.schedule_array == []:
-            self.schedule_play_count=0
-            self.schedule_play_count_tmp=0
-            return
-        if len(self.base_sentence) != 0:
-            repeat_sentence = (self.base_sentence + ",") * self.schedule_play_count  # 重复5次并加逗号分隔
-            final_sentence = repeat_sentence.rstrip(",") #截掉最后一个逗号
-            EventMesh.publish("play_tts",[final_sentence,1])  #播放tts闹钟文本内容
-        self.schedule_play_count_tmp+=1
-        if self.schedule_play_count_tmp >= self.schedule_play_count:
-            self.schedule_play_count=0
-            self.schedule_play_count_tmp=0
-            return
-        self.schedule_play_timer.start(self.schedul_timer_default*1000,0,self.shchedu_play_repeat_timer)
+        #遍历字典键和值
+        for key,value in self.schedule_list.items():
+            print("日程 {} 第 {} 次提醒!".format(key,value["current_round"]))
+            print("播放日程提醒定时器{}".format(self.schedule_play_count))
+            #判断是否已经播放完毕
+            if value["current_round"] >= value["total_times"]:
+                print("进入日程33333!!!!!")
+                # 所有轮次完成,从存储中删除该日程
+                if key in self.schedule_list:
+                        del self.schedule_list[key]
+                print("日程 {} 所有提醒完成".format(key))
+                return
+            #次数小于等于1,不需要重复
+            if value["total_times"] <= 1 :
+                print("进入日程11111!!!!!")
+                # 所有轮次完成,从存储中删除该日程
+                if key in self.schedule_list:
+                    del self.schedule_list[key]
+                return
+            if value["current_round"] != None:
+                print("进入日程22222!!!!!")
+                value["current_round"] += 1
+                final_sentence = "日程提醒: " + value["descrip"] 
+                print("再次播报日程")
+                EventMesh.publish("play_tts",[final_sentence,1])  #播放tts闹钟文本内容
+            if self.schedule_list is False:#当字典为空
+                self.schedule_play_timer.stop()
+                self.timer_flag = 0
+                print("字典为空,清除定时器")
+