From: p15692025051 <846603105@qq.com> Date: Tue, 14 Jan 2025 08:19:33 +0000 (+0800) Subject: 202501141619生产固件更新备份 X-Git-Url: http://git.snicker.com.cn/Users/apple/Desktop/static/gitweb.css?a=commitdiff_plain;h=f73e03e9128e303ff4302c0ec06d623c0a807281;p=mirrors%2FASR1603_G5.git 202501141619生产固件更新备份 --- diff --git a/2.sdk/project/7PIN/sdk/services/microPython/ports/quectel/core/ai_VC.py b/2.sdk/project/7PIN/sdk/services/microPython/ports/quectel/core/ai_VC.py index 41dd1428..1518324b 100644 --- a/2.sdk/project/7PIN/sdk/services/microPython/ports/quectel/core/ai_VC.py +++ b/2.sdk/project/7PIN/sdk/services/microPython/ports/quectel/core/ai_VC.py @@ -164,19 +164,13 @@ class AI_led(Abstract): self.led_blue.write(0) self.led_green.write(0) -audio_buf = ['IMEIhao', 'jianquancuowu', 'key_prompt', 'liuliangtishi', 'Low_power_warning', 'R_CHARGE_FULL', 'R_CHARGE_IN', - 'R_CHARGE_OUT', 'R_READ_TIME_0', 'R_READ_TIME_1', 'R_READ_TIME_2', 'R_READ_TIME_3', 'R_READ_TIME_4', 'R_READ_TIME_5', - 'R_READ_TIME_6', 'R_READ_TIME_7', 'R_READ_TIME_8', 'R_READ_TIME_9', 'R_READ_TIME_A', 'R_READ_TIME_B', 'R_READ_TIME_C', - 'R_READ_TIME_D', 'R_READ_TIME_E', 'R_READ_TIME_F', 'R_READ_TIME_G', 'R_READ_TIME_H', 'R_READ_TIME_I', - 'R_READ_TIME_J', 'R_READ_TIME_K', 'R_READ_TIME_L', 'R_READ_TIME_M', 'R_READ_TIME_N', 'R_READ_TIME_O', 'R_READ_TIME_P', - 'R_READ_TIME_Q', 'R_READ_TIME_R', 'R_READ_TIME_S', 'R_READ_TIME_T', 'R_READ_TIME_U', 'R_READ_TIME_V', 'R_READ_TIME_W', - 'R_READ_TIME_X', 'R_READ_TIME_Y', 'R_READ_TIME_Z', 'shouhou', 'xinhaoruo1', 'zhengzaiguanji'] +audio_buf = ['didianguanji', 'IMEIhao', 'jianquancuowu', 'key_prompt', 'liuliangtishi', 'Low_power_warning', 'R_CHARGE_FULL', 'R_CHARGE_IN', 'R_CHARGE_OUT', 'R_READ_TIME_0', 'R_READ_TIME_1', 'R_READ_TIME_2', 'R_READ_TIME_3', 'R_READ_TIME_4', 'R_READ_TIME_5', 'R_READ_TIME_6', 'R_READ_TIME_7', 'R_READ_TIME_8', 'R_READ_TIME_9', 'R_READ_TIME_A', 'R_READ_TIME_B', 'R_READ_TIME_C', 'R_READ_TIME_D', 'R_READ_TIME_E', 'R_READ_TIME_F', 'R_READ_TIME_G', 'R_READ_TIME_H', 'R_READ_TIME_I', 'R_READ_TIME_J', 'R_READ_TIME_K', 'R_READ_TIME_L', 'R_READ_TIME_M', 'R_READ_TIME_N', 'R_READ_TIME_O', 'R_READ_TIME_P', 'R_READ_TIME_Q', 'R_READ_TIME_R', 'R_READ_TIME_S', 'R_READ_TIME_T', 'R_READ_TIME_U', 'R_READ_TIME_V', 'R_READ_TIME_W', 'R_READ_TIME_X', 'R_READ_TIME_Y', 'R_READ_TIME_Z', 'shouhou', 'xinhaoruo1', 'zhengzaiguanji'] class AI_dev(Abstract): # AI def __init__(self): self.is_wdt = 1 #是否开启看门狗 - self.VBATT_tab = {"charge_full":4300,"100" :4250 , "90":3994 , "80":3883, "60": 3707, "40":3604, "20":3537, "10":3486,} + self.VBATT_tab = {"charge_full":4300,"100" :4250 , "90":3994 , "80":3883, "60": 3707, "40":3604, "20":3537, "10":3486,"5":3400,} self.KeyAI_status = 0 self.KeyAI_timer_count = 0 self.KeyAI_long_press = 0 @@ -232,10 +226,12 @@ class AI_dev(Abstract): self.usb.setCallback(self.usb_event_cb) self.usb_status = self.usb.getStatus() self.usb_charge_flag = 0 + self.Low_power_warning_timer = 0 self.AI_dev_timer = osTimer() self.AI_dev_timer.start(10000, 1, self.AI_dev_timer_cb) print("AI_dev:AI_dev_timer") self.aud = audio.Audio(0) + self.Low_power_warning_flag = 0 self.VC_TTS_volume = EventMesh.publish("get_storage_config","VC_TTS_volume")#音量配置 if self.VC_TTS_volume == None: self.VC_TTS_volume = 100 @@ -266,6 +262,7 @@ class AI_dev(Abstract): #self.aud.play(1,1,'U:/static/R_CHARGE_IN.mp3') EventMesh.publish("open_led_red")#充电红灯常亮 EventMesh.publish("audio_montage_play",["R_CHARGE_IN.mp3"]) + self.Low_power_warning_flag = 0 pass elif status == 0:#拨出usbs self.usb_status = 0 @@ -350,6 +347,8 @@ class AI_dev(Abstract): #self.aud.play(1,0,'U:/static/zhengzaiguanji.mp3')#关机音频 EventMesh.publish("open_led_red") utime.sleep_ms(2000) + self.aud.stopPlayStream() + self.aud.stopAll() Power.powerDown() #print("AI_key_release") EventMesh.publish("pwk_key_long_press") @@ -436,6 +435,8 @@ class AI_dev(Abstract): #self.aud.play(1,0,'U:/static/zhengzaiguanji.mp3')#关机音频 EventMesh.publish("open_led_red") utime.sleep_ms(3000) + self.aud.stopPlayStream() + self.aud.stopAll() Power.powerDown() #print("AI_key_release") EventMesh.publish("pwk_key_long_press") @@ -468,12 +469,22 @@ class AI_dev(Abstract): EventMesh.publish("audio_montage_play",["R_CHARGE_FULL.mp3"]) #self.aud.play(1,0,'U:/static/R_CHARGE_FULL.mp3')#充电已满 self.usb_charge_flag = 1 - if self.usb_status == 0 and Vbatt= 2: + self.Low_power_warning_timer = 0 EventMesh.publish("audio_montage_play",["Low_power_warning.mp3"]) - self.usb_charge_flag = 1 + + if self.usb_status == 0 and Vbatt= 8640:#24小时没按键,则关机 self.pwk_key_Long_Press() @@ -608,7 +619,7 @@ class device_res_author(Abstract): self.pid = "cqxJZi5CNgzjS3mX21Zw" self.dev_res_timer = osTimer() - self.dev_res_timer.start(10000, 1, self.dev_timer_cb) + self.dev_res_timer.start(20000, 1, self.dev_timer_cb) self.dev_res_timerCount = 0 self.ud_token_timer = osTimer() self.ud_token_timer.start(10000, 1, self.ud_token_timer_cb) @@ -682,7 +693,7 @@ class device_res_author(Abstract): # self.dev_active() #设备激活 # self.dev_sign_in() #设备登入 self.dev_res_timerCount+=1 - if self.dev_res_timerCount > 6: #开机一分钟内没有获取到密码和token 等下一次更新令牌在走登入 激活流程 + if self.dev_res_timerCount > 3: #开机一分钟内没有获取到密码和token 等下一次更新令牌在走登入 激活流程 self.dev_res_timerCount=0 self.dev_res_timer.stop() except Exception as e: @@ -1026,7 +1037,7 @@ class OTA(): battery = EventMesh.publish("get_battery") if battery>=40: self.ota_timer = osTimer() - self.ota_timer.start(8000, 0, self.ota_timer_cb) + self.ota_timer.start(15000, 0, self.ota_timer_cb) ret_str = 1 else: ret_str = 2 @@ -1128,19 +1139,19 @@ class AI_VC(Abstract): self.play_fd = None self.is_VC_ACK = 0 #是否开启ack应答模式 self.ai_OTA = OTA() - self.is_auth = 1 #是否开启dmp鉴权 + self.is_auth = 0 #是否开启dmp鉴权 #self.VC_mode = 0 #0:短按连续问答模式 1:长按录音模式 self.VC_mode = EventMesh.publish("get_storage_config","VC_mode")# if self.VC_mode == None : self.VC_mode = 0 - self.VC_server = 2 #0正式服务器,1:测试服务器1,2:测试服务器2 + self.VC_server = 0 #0正式服务器,1:测试服务器1,2:测试服务器2 self.server_ip = EventMesh.publish("get_storage_config","server_ip")# if self.server_ip == None: if self.VC_server == 1:# - self.server_ip="118.145.158.207:22082" + self.server_ip="118.145.158.207:22084" elif self.VC_server == 2:# self.server_ip="118.145.158.207:22082" else: @@ -1151,7 +1162,7 @@ class AI_VC(Abstract): if dev_type == "G10": self.power_on_tone = "已开机,您好!我是北科瑞讯智能 AI bot_name" else: - self.power_on_tone = "您好!我是柒牌男装AI生活好帮手-bot_name, 很高兴为您服务,我可以帮您解答日常生活、工作,旅游信息、健康咨询、教育与学习、情感交流、全球资讯等问题!请问您有什么需要我帮忙的吗?" + self.power_on_tone = "您好!我是柒牌男装AI生活好帮手-bot_name, 很高兴为您服务,我可以帮您解答柒牌公司知识库、日常生活与工作、旅游信息、健康与运动咨询、教育与学习、情感交流、全球资讯、世界文化等问题!请问您有什么需要我帮忙的吗?" #"已开机,这是升级测试前软件,可说查询版本来确认当前版本号,可说OTA升级来触发在线升级"# self.VC_record_TYPE = VC_record_TYPE_PCM #0:PCM 1:AMR self.VC_play_TYPE = VC_play_TYPE_PCM #0:PCM 1:mp3 @@ -1318,8 +1329,8 @@ class AI_VC(Abstract): self.Audio_buf_size = 16*1024 self.record = audio.Record() #self.record.end_callback(self.record_callback) - #self.record.gain_set(4,10) - self.record.gain_set(4,12) + self.record.gain_set(4,10) + #self.record.gain_set(4,12) self.aud = audio.Audio(0) self.aud.setCallback(self.audio_cb) #self.aud.setVolume(self.VC_TTS_volume //10) @@ -1574,11 +1585,11 @@ class AI_VC(Abstract): print("[Errno 22] EINVAL!!!\r\n") print("[Errno 22] EINVAL!!!\r\n") print("[Errno 22] EINVAL!!!\r\n") - # EventMesh.publish("set_storage_config",["powerRestart",1])#调试临时关闭 - # utime.sleep_ms(1000) - # self.aud.stopPlayStream() - # self.aud.stopAll() - # Power.powerRestart() + EventMesh.publish("set_storage_config",["powerRestart",1])#调试临时关闭 + utime.sleep_ms(1000) + self.aud.stopPlayStream() + self.aud.stopAll() + Power.powerRestart() self.websocket_error() @@ -1588,7 +1599,7 @@ class AI_VC(Abstract): return self.AI_client_asr_debug+=1 utime.sleep_ms(10) - #self.AI_client_asr.settimeout(6) + self.AI_client_asr.settimeout(120) #开启发送线程 if self.AI_ASR_send_data_queue_thread_id == 0: _thread.stack_size(self.Audio_buf_size+8*1024) @@ -1809,6 +1820,7 @@ class AI_VC(Abstract): self.VC_record_state_flag = 2 self.VC_state = VC_State_SpeechStart EventMesh.publish("open_led_blue") + self.AI_ASR_error_timeout = 0 pass elif jsload_data["event"] == "Changed" or jsload_data["event"] == "SentenceEnd" : #开始录音Changed @@ -1908,13 +1920,13 @@ class AI_VC(Abstract): usys.print_exception(e) except Exception as e: - error_str = str(e) - print("ASR ASR:e:{}".format(error_str)) - #usys.print_exception(e) - if error_str.find("[Errno 110]")!= -1: - #print("ASR ASR:recv TIMEDOUT 正常") - pass - else: + # error_str = str(e) + # print("ASR ASR:e:{}".format(error_str)) + # #usys.print_exception(e) + # if error_str.find("[Errno 110]")!= -1: + # #print("ASR ASR:recv TIMEDOUT 正常") + # pass + # else: usys.print_exception(e) print("{}".format(cli)) #self.websocket_error() @@ -1945,7 +1957,7 @@ class AI_VC(Abstract): json_data["payload"]["format"]='amr' pass - + self.AI_ASR_error_timeout = 5 self.AI_client_asr_send(ujson.dumps(json_data)) #ASR终止 def AI_client_asr_StopTranscription_requset(self): @@ -2114,9 +2126,20 @@ class AI_VC(Abstract): #print("VC_record_thread:{}".format(Record_len)) if Record_len > 0: read_buf = bytes(Record_read_buf[:Record_len]) - if self.record_fd != None: - self.record_fd.write(read_buf) - print("write record:{}".format(len(read_buf))) + if self.record_data_save_flag == 1: + if self.record_fd == None: + try: + uos.remove('/usr/record_data.pcm') + except Exception as e: + usys.print_exception(e) + self.record_fd = open('/usr/record_data.pcm','w') + if self.record_fd != None: + self.record_fd.write(read_buf) + print("write record:{}".format(len(read_buf))) + # count+=Record_len + # if count >150*1024: + # self.record_fd.close() + #self.record_fd = None # if self.VC_record_state_flag >= 2: # self.AI_client_asr_send(read_buf) @@ -2129,6 +2152,7 @@ class AI_VC(Abstract): else: self.AI_client_asr_send(self.AI_record_tmp_queue.get()) #发送之前存的数据 self.AI_client_asr_send(read_buf) + #print("VC_record_thread:{}".format(len(read_buf))) #count+=len(read_buf) # if count>=500*1024:#结束 @@ -2145,7 +2169,7 @@ class AI_VC(Abstract): usys.print_exception(e) #break self.VC_record_thread_lock = 0 - utime.sleep_ms(60) + utime.sleep_ms(100) #fd.close() print("VC_record_thread:exit") self.VC_record_thread_id = 0#线程退出 @@ -2238,11 +2262,11 @@ class AI_VC(Abstract): print("[Errno 22] EINVAL!!!\r\n") print("[Errno 22] EINVAL!!!\r\n") self.websocket_error() - # EventMesh.publish("set_storage_config",["powerRestart",1])#调试临时关闭 - # utime.sleep_ms(1000) - # self.aud.stopPlayStream() - # self.aud.stopAll() - # Power.powerRestart() + EventMesh.publish("set_storage_config",["powerRestart",1])#调试临时关闭 + utime.sleep_ms(1000) + self.aud.stopPlayStream() + self.aud.stopAll() + Power.powerRestart() self.websocket_error() return @@ -2253,7 +2277,7 @@ class AI_VC(Abstract): return self.AI_client_VC_debug+=1 utime.sleep_ms(10) - #self.AI_client_VC.settimeout(6) + self.AI_client_VC.settimeout(120) #self.AI_VC_send_data_queue_thread_close()#关闭发送线程 if self.AI_VC_send_data_queue_thread_id == 0: _thread.stack_size(self.Audio_buf_size+8*1024) @@ -2568,7 +2592,7 @@ class AI_VC(Abstract): self.LocalRespondingEnded_timerout = 10 #最长倒数10秒发送音频结束或者终止对话 if self.VC_mode == 0 :#连续问答模式 #EventMesh.publish("publish_AI_btnInfo",{"func":self.VC_Speech_End})#调试临时打开 - #EventMesh.publish("publish_AI_btnInfo",{"func":self.VC_Speech_Start})#开始录音 调试临时关闭 + #EventMesh.publish("publish_AI_btnInfo",{"func":self.VC_Speech_Start})#开始录音 pass if self.play_data_save_flag == 1: if self.play_fd !=None: @@ -2602,7 +2626,7 @@ class AI_VC(Abstract): else:#下发音频数据 #self.AI_ASR_str = ""#下发音频后清掉asr结果 - #print("下发音频数据1:{}".format(len(recv_data))) + print("下发音频数据1:{}".format(len(recv_data))) if self.play_data_save_flag == 1: if self.play_fd !=None: @@ -2617,12 +2641,12 @@ class AI_VC(Abstract): except Exception as e: - error_str = str(e) - #print("VC VC:e:{}".format(error_str)) - if error_str.find("[Errno 110] ETIMEDOUT")!= -1: - #print("VC VC:recv TIMEDOUT 正常") - pass - else: + # error_str = str(e) + # #print("VC VC:e:{}".format(error_str)) + # if error_str.find("[Errno 110] ETIMEDOUT")!= -1: + # #print("VC VC:recv TIMEDOUT 正常") + # pass + # else: usys.print_exception(e) #self.websocket_error() print("VC VC :读数据报错,退出") @@ -2677,7 +2701,7 @@ class AI_VC(Abstract): #self.aud.play(1,0,'U:/static/peizhichenggong.mp3')#切换成功 self.AI_TTS_str = "更改成功" return 0 - if text.find("粤") != -1 or text.find("越野") != -1 : + if text.find("粤") != -1 or text.find("越野") != -1 or text.find("广东话") != -1: if "粤" in self.VC_TTS_voice_type: self.VC_TTS_voice_key = "粤" EventMesh.publish("set_storage_config",["VC_TTS_voice_key",self.VC_TTS_voice_key]) @@ -2796,7 +2820,7 @@ class AI_VC(Abstract): return 0 if text.find("版本") != -1 : sourceVersion = versions.Build_Time - self.AI_TTS_str ="7PIN-"+sourceVersion + self.AI_TTS_str ="Mr-Seven-"+sourceVersion return 0 if text.find("升级") != -1 and (text.find("OTA") != -1 or text.find("ota") != -1): @@ -2890,7 +2914,7 @@ class AI_VC(Abstract): EventMesh.publish("system_sleep_rest")#防止黑屏 self.close_timerout += 1 - if self.close_timerout > 30:#20秒没数据就close + if self.close_timerout > 60:#20秒没数据就close if self.VC_state >= VC_State_SpeechIng: print("接口无响应,超时退出") @@ -2906,14 +2930,15 @@ class AI_VC(Abstract): if self.VC_mode == 1 :#长按单次问答模式 EventMesh.publish("publish_AI_btnInfo",{"func":self.Close}) else: + EventMesh.publish("publish_AI_btnInfo",{"func":self.VC_Speech_Start})#开始录音 #通知服务器播放结束 self.AI_client_VC_LocalRespondingEnded() self.VC_pingping_timerout+=1 - if self.VC_pingping_timerout>5: + if self.VC_pingping_timerout>3: self.VC_pingping_timerout=0 self.AI_client_VC_ping() self.asr_pingping_timerout += 1 - if self.asr_pingping_timerout>5: + if self.asr_pingping_timerout>3: self.asr_pingping_timerout=0 self.AI_client_asr_ping() if self.VC_Thinking_timerout > 0 and self.VC_Thinking_timerout < 100:#VC Thinking超时后重新开始 @@ -2939,12 +2964,7 @@ class AI_VC(Abstract): self.LocalRespondingEnded_timerout = 0 self.close_timerout = 0 - if self.record_data_save_flag == 1: - try: - uos.remove('/usr/record_data.pcm') - except Exception as e: - usys.print_exception(e) - self.record_fd = open('/usr/record_data.pcm','w') + # if self.AI_client_VC_isconnect == 0:#没连接的时候请求开始 self.websocket_connect_VC()#连接服务器 @@ -2997,8 +3017,8 @@ class AI_VC(Abstract): else: print("AI_VC_start :AI_audio_queue_thread_id != 0 ") self._1S_timer.start(1000,1,self._1S_timer_cb) - self.VC_pingping_timerout = 0 - self.asr_pingping_timerout = 0 + # self.VC_pingping_timerout = 0 + # self.asr_pingping_timerout = 0 print("AI_VC_start5") #开始会话 def AI_client_VC_start_requset(self): @@ -3106,18 +3126,18 @@ class AI_VC(Abstract): } EventMesh.publish("publish_AI_btnInfo",{"func":self.VC_init}) EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_client_VC_send,"data":ujson.dumps(json_data)}) - json_data = \ - { - "header":{ - "trace_id":self.get_trace_id(), - "event":"AAAAAAAAAAAAAA1" - }, - "payload":{ - "dialog_id":self.VC_dialog_id, - "session_id": self.session_id , - } - } - EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_client_VC_send,"data":ujson.dumps(json_data)}) + # json_data = \ + # { + # "header":{ + # "trace_id":self.get_trace_id(), + # "event":"AAAAAAAAAAAAAA1" + # }, + # "payload":{ + # "dialog_id":self.VC_dialog_id, + # "session_id": self.session_id , + # } + # } + # EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_client_VC_send,"data":ujson.dumps(json_data)}) # utime.sleep_ms(1) # self.AI_client_VC_send(ujson.dumps(json_data)) self.VC_state = VC_State_End @@ -3140,6 +3160,7 @@ class AI_VC(Abstract): # utime.sleep_ms(1) #请求TTS或者chat事件 def AI_client_VC_RequestToRespond(self): + self.session_id = self.get_session_id()#调试临时打开 json_data = \ { "header":{