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
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]
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))
#循环播放定时器
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("字典为空,清除定时器")
+