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)
+ EventMesh.subscribe("GET_NEED_SCHEDULE_REPORT_INFO",self.get_need_schedule_report_info)#上传日程数组
self.schedule_play_timer = osTimer()
self.timer_flag = 0#定时器开启状态
self.schedul_timer_default = 60*5 #默认5分钟提醒一次日程
"descrip" : descrip#播报内容
}
print("已添加日程 {},将提醒 {} 次(间隔5分钟)".format(schedule_id,remind_times))
+ EventMesh.publish("GET_NEED_SCHEDULE_REPORT_INFO")
return schedule_id
def set_schedule_info(self,event=None,msg=None):
if year_now != date_year or (year_now == date_year and month_now > date_month) or (year_now == date_year and month_now == date_month and day_now >date_day): #当前年份大于设置的年份清除这个
print("当前年份大于设置的年份")
self.schedule_array.pop(i)
- EventMesh.publish("set_storage_config",["schedule",self.schedule_array])#读取闹钟数组
+ EventMesh.publish("set_storage_config",["schedule",self.schedule_array])#读取日程数组
+ EventMesh.publish("GET_NEED_SCHEDULE_REPORT_INFO")
continue
if (year_now == date_year and month_now == date_month and date_day == day_now):
if hour_now*60 + minute_now > set_hour*60 +set_min: #年月日相等 时间分钟大于设置分钟数不再检查当前index了
print("时间过了")
self.schedule_array.pop(i)
- EventMesh.publish("set_storage_config",["schedule",self.schedule_array])#读取闹钟数组
+ EventMesh.publish("set_storage_config",["schedule",self.schedule_array])#读取日程数组
+ EventMesh.publish("GET_NEED_SCHEDULE_REPORT_INFO")
continue
if year_now == date_year and month_now == date_month and date_day == day_now and set_hour == hour_now and set_min == minute_now: #该提醒了
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))
#循环播放定时器
def clear_shcheude_flag(self,event = None,msg = None):
self.schedule_play_timer.stop()
self.timer_flag = 0
print("字典为空,清除定时器")
+ def get_need_schedule_report_info(self,event=None,Num=None):#上报日程
+ print("上报日程协议->IOT平台")
+ schedule_list = []
+ date_tmp = utime.localtime()
+ time_tmp = utime.mktime(date_tmp)
+ if len(self.schedule_array) > 0:
+ for _schedule in self.schedule_array:
+ schedule_info = {}
+ if len(_schedule["name"]) == 0:
+ _schedule["name"] = "闹钟"
+
+ schedule_info["name"] = _schedule["name"]
+ schedule_info["loop"] = _schedule["loop"]
+ schedule_info["state"] = _schedule["state"]
+ schedule_info["time"] = _schedule["time"]
+ schedule_info["ringTimes"] = _schedule["ringTimes"]
+ schedule_info["scheduleMode"] = _schedule["scheduleMode"]
+ schedule_info["shakeType"] = _schedule["shakeType"]
+ schedule_list.append(schedule_info)
+ schedule_send = {
+ "cmd":"post_schedule",
+ "ts":time_tmp,
+ "msg":"上报日程",
+ "data":schedule_list
+ }
+ EventMesh.publish("REPORT_SCHEDULE_TO_IOT",schedule_send)
+ return schedule_send
+ def read_schedule_list(self,event=None,Num=None):#读日程全列表
+ schedulelist_TTS_str =""#日程全列表播放tts字符串
+ if len(self.schedule_array) == 0:
+ schedulelist_TTS_str = "当前日程列表没有闹钟信息"
+ EventMesh.publish("play_tts",[schedulelist_TTS_str,1])
+ return
+
+ time_tuple = utime.localtime()#获取当前日期&时间的元组
+ year_now = time_tuple[0]
+ month_now = time_tuple[1]
+ day_now = time_tuple[2]
+ hour_now = time_tuple[3]
+ minute_now = time_tuple[4]
+ schedulelist_TTS_str += "当前日程信息如下:"
+ for i,_schedule in enumerate(self.schedule_array):
+ if "interval" in _schedule :#间隔提醒日程
+ continue
+
+ state = schedule["state"]
+ loop = _schedule["loop"]
+ descrp = _schedule["name"]
+ set_hour = int((_schedule["time"]).split(":")[0])
+ set_min = int((_schedule["time"]).split(":")[1])
+
+ week = ""
+ final_sentence = ""
+ for n,we in enumerate(loop):
+ week_t = n
+ if we == "1":
+ if n == 0:
+ week_t = 7
+ final_sentence+=self.get_week_str(week_t)+","
+ print("final_sentence = {}".format(final_sentence))
+ week = final_sentence.rstrip(",")
+ if len(week) != 0:
+ schedulelist_TTS_str += "日程{},{},{}点{}分提醒您:{}。".format(i+1,week,set_hour,set_min,descrp)
+ else:
+ schedulelist_TTS_str += "日程{},{}点{}分提醒您:{}。".format(i+1,set_hour,set_min,descrp)
+ pass
+ print("self.schedulelist_TTS_str = {}".format(schedulelist_TTS_str))
+ EventMesh.publish("play_tts",[schedulelist_TTS_str,1])
+ def AI_delete_schedule(self,event=None,Num=None):#删除日程
+ self.schedule_array =[]#日程队列清空
+ clear_ttr = "日程列表已清空"
+ date_tmp = utime.localtime()
+ time_tmp = utime.mktime(date_tmp)
+ try:
+ EventMesh.publish("set_storage_config",["schedule_list",self.schedule_array])
+ schedule_send = {
+ "cmd":"post_schedule",
+ "ts":time_tmp,
+ "msg":"上报日程",
+ "data":self.schedule_array
+ }
+ EventMesh.publish("REPORT_schedule_TO_IOT",schedule_send)
+ except Exception as e:
+ usys.print_exception(e)
+ clear_ttr = "清除日程列表失败"
+ return clear_ttr
+ def delete_single_schedule(self,event=None,Num=None): #删除单个日程
+ if len(self.schedule_array) == 0:
+ return
+ if len(self.schedule_array) >= Num: #只有大于等于列表个数才能删除对应日程信息
+ self.schedule_array.pop(Num)
+ EventMesh.publish("set_storage_config",["schedule_list",self.schedule_array])
+ EventMesh.publish("get_need_schedule_report_info")
+ pass
POST_ALARM_R_CMD = "post_alarm_R"
POST_ALARM_S_CMD = "post_alarm_S"
+ POST_SCHEDULE_R_CMD = "post_schedule_R"
+ POST_SCHEDULE_S_CMD = "post_schedule_S"
FIND_DEVCE_R_CMD = "find_device_R"
FIND_DEVCE_S_CMD = "find_device_S"
ALARM_LIST_R_CMD = "alarm_list_R"
ALARM_LIST_S_CMD = "alarm_list_S"
+ SCHEDULE_LIST_R_CMD = "schedule_list_R"
+ SCHEDULE_LIST_S_CMD = "schedule_list_S"
+
SOS_LIST_R_CMD ="sos_list_R"
SOS_LIST_S_CMD ="sos_list_S"
return self.send_data
elif msg == WEB_CMD_ENUM.POST_ALARM_S_CMD:
self.send_data = self.alarm_config_send_data()
+ elif msg == WEB_CMD_ENUM.POST_SCHEDULE_S_CMD:
+ self.send_data = self.schedule_config_send_data()
return self.send_data
# 心率上报数据格式
}
return alarm_data
+ #日程配置上报数据格式
+ def schedule_config_send_data(self):
+ schedule_data = {
+ "cmd":"post_schedule",
+ "ts":self.time_tmp,
+ "msg":"上报日程",
+ "data":[
+ {
+ "name":"喝水",
+ "loop":"0101001",
+ "state":"0",
+ "time":"14:34",
+ "ringTimes":1,
+ "alarmMode":"ring",
+ "shakeType":"short"
+ },
+ {
+ "name":"起床",
+ "loop":"0101001",
+ "state":"0",
+ "time":"07:40",
+ "ringTimes":1,
+ "alarmMode":"ring",
+ "shakeType":"short"
+ }
+ ]
+ }
+
+ return schedule_data
#解析收到的数据协议
def playpolad_data(data):
if(isinstance(data, bytes) == 0 or len(data) <= PROTOCLO_LEN):
self.locate_duration_state = self.location_info["state"] #是否开启频率定位
pass
EventMesh.subscribe("REPORT_ALARM_TO_IOT",self.report_alarm_to_iot)
+ EventMesh.subscribe("REPORT_SCHEDULE_TO_IOT",self.report_schedule_to_iot)
def report_alarm_to_iot(self,event,msg):
EventMesh.publish(WEB_CMD_ENUM.POST_ALARM_S_CMD,msg)
pass
+ def report_schedule_to_iot(self,event,msg):
+ EventMesh.publish(WEB_CMD_ENUM.POST_SCHEDULE_S_CMD,msg)
+ pass
def usb_event_cb(self, state):
status = state
def post_processor_after_instantiation(self):
@param msg: 接收到的下行数据
"""
print("recv get_chat_config{}".format(msg))
+
+#上报日程列表
+class IOTWeb_post_scheduleProtoCol(ProtoCol):
+ """post_schedule"""
+ TYPE = "post_schedule"
+
+ def send(self, event, msg):
+ print("send post_schedule{}".format(msg))
+ # 通过websocket发送到服务器端
+
+ send_data = b''
+ send_data = protocol_send_total_data(msg)
+ print("send send_data{}".format(send_data))
+ EventMesh.publish("CHANNEL_IOT_WEB_SEND",send_data)
+
+ def recv(self, event, msg):
+ """
+
+ @param event:post_schedule
+ @param msg: 接收到的下行数据
+ """
+ print("recv post_schedule{}".format(msg))
+
+#日程列表(NLP识别下发)
+class IOTWeb_schedule_listProtoCol(ProtoCol):
+ """schedule_list"""
+ TYPE = "schedule_list"
+
+ def send(self, event, msg):
+ print("send schedule_list {}".format(msg))
+ # 通过websocket发送到服务器端
+ date_tmp = utime.localtime()
+ time_tmp = utime.mktime(date_tmp)
+ rest = "error"
+ if msg == 1:
+ rest = "success"
+ schedule_list ={
+ "cmd":"dispatch_rest",
+ "ts":time_tmp,
+ "msg":"消息收到响应",
+ "data":{
+ "cmd":"schedule_list",
+ "rest":rest,
+ "msg":"日程配置成功."
+ }
+ }
+ send_data = b''
+ send_data = protocol_send_total_data(schedule_list)
+ print("send_data schedule_list {}".format(msg))
+ EventMesh.publish("CHANNEL_IOT_WEB_SEND", send_data)
+
+ def recv(self, event, msg):
+ """
+
+ @param event:上行下发闹钟配置
+ @param msg: 接收到的下行数据
+ """
+ # 定义要添加的新元素
+ # new_item = {'time': '11:30','index': 1}
+ # data = [{"index":1,"name":"hihihi1"},{"index":2,"name":"hihihi2"},{"index":0,"name":"hihihi0"}]
+ # len_t = len(data)
+ # j = 0
+ # for i in range(len_t):
+ # if data[j]['index'] == 1:
+ # removed_item = data.pop(j)
+ # print(data)
+ # j=0
+ # continue
+ # j+=1
+ # len_t = len(data)
+ # print(len_t)
+ # for i in range(len(data)):
+ # data[i]["index"] = i
+
+ # url = http://220.160.104.34:30800/ws-bus/test/voice-record/876226211472149?state=1
+ # url = http://220.160.104.34:30800/ws-bus/test/876226211472149?testType = alarmList
+
+ schedule_list=[]
+ ret = 1
+ if "data" in msg:
+ data = msg["data"]
+ if isinstance(data,list) == True:
+ for i in range(len(data)):
+ data_list = data[i]
+ data_list["index"] = i
+ print("schedule_list:{}".format(data_list))
+ schedule_list.append(data_list)
+ schedule_list.sort(key=lambda x: x['index'])
+ EventMesh.publish("set_storage_config",["schedule_list",schedule_list])
+ EventMesh.publish("set_schedule_info",schedule_list)
+ schedule_list = EventMesh.publish("get_storage_config","alarm_list")
+ print("schedule_list:{}".format(schedule_list))
+ else:
+ ret = 0
+
+ EventMesh.publish(WEB_CMD_ENUM.SCHEDULE_LIST_S_CMD,ret)
+
#下发日程
class IOTWeb_scheduleProtoCol(ProtoCol):
"""schedule"""