--- /dev/null
+from common import Abstract, LogAdapter
+import EventMesh
+import uwebsocket
+import usys
+import gc
+import urandom
+import uhashlib
+import ubinascii
+import ujson
+import osTimer
+import _thread
+from queue import Queue
+import utime
+import audio
+import uos
+from machine import Pin
+from machine import ExtInt
+from machine import WDT
+import modem
+import sim
+import net
+import base64
+import ucryptolib
+import urandom as random
+import request
+import ql_fs
+from misc import Power,USB,PowerKey
+import ntptime
+import machine
+import dataCall
+import constants
+import versions
+from machine import RTC
+from led import open_all_ledm,white_green_open,white_green_close,led_mode,open_led_red,close_led_red,open_led_green,open_led_white,close_led_green,close_led_white,close_all_ledm,white_light_fast
+from misc import USB
+
+#import VAD
+#dev_type = "G10"
+dev_type = "7PIN_BK"#小瑞
+#dev_type = "7PIN"#柒牌
+#dev_type = 'momo'#食梦貘
+#dev_type = 'sjgq'#四季甘泉
+#dev_type = 'szbst'#深圳百事通
+class AI_led(Abstract):
+ def __init__(self):
+ if dev_type == "G10":
+ self.led_red = Pin(Pin.GPIO36, Pin.OUT, Pin.PULL_PD, 0)
+ self.led_green = Pin(Pin.GPIO44, Pin.OUT, Pin.PULL_PD, 1)
+ self.led_blue = Pin(Pin.GPIO21, Pin.OUT, Pin.PULL_PD, 1)
+ else:
+ self.led_red = Pin(Pin.GPIO36, Pin.OUT, Pin.PULL_PD, 0)
+ self.led_green = Pin(Pin.GPIO21, Pin.OUT, Pin.PULL_PD, 1)
+ self.led_blue = Pin(Pin.GPIO19, Pin.OUT, Pin.PULL_PD, 1)
+
+ #=1 红灯闪,=2白灯闪,=3绿灯闪,=4全部灯闪
+ self.led_flicker_flag = 0
+ self.led_flicker_on_off_flag = 0
+ self.led_flicker_timer = osTimer()
+
+ EventMesh.subscribe("open_led_red",self.open_led_red)
+ EventMesh.subscribe("open_led_blue",self.open_led_blue)
+ EventMesh.subscribe("open_led_green",self.open_led_green)
+ EventMesh.subscribe("open_led_all",self.open_led_all)
+ EventMesh.subscribe("open_led_red_blue",self.open_led_red_blue)
+ EventMesh.subscribe("open_led_red_green",self.open_led_red_green)
+ EventMesh.subscribe("flicker_led_red",self.flicker_led_red)
+ EventMesh.subscribe("flicker_led_blue",self.flicker_led_blue)
+ EventMesh.subscribe("flicker_led_green",self.flicker_led_green)
+ EventMesh.subscribe("flicker_led_all",self.flicker_led_all)
+ EventMesh.subscribe("close_led",self.close_led)
+ EventMesh.publish("open_led_red")
+
+ def flicker_led_red(self,event,msg):
+ self.led_flicker_flag = 1
+ self.led_flicker_timer.start(1500, 1, self.led_flicker_timer_cb)
+
+ def flicker_led_blue(self,event,msg):
+ self.led_flicker_flag = 2
+ self.led_flicker_timer.start(1500, 1, self.led_flicker_timer_cb)
+
+ def flicker_led_green(self,event,msg):
+ self.led_flicker_flag = 3
+ self.led_flicker_timer.start(1500, 1, self.led_flicker_timer_cb)
+
+ def flicker_led_all(self,event,msg):
+ self.led_flicker_flag = 4
+ self.led_flicker_timer.start(1500, 1, self.led_flicker_timer_cb)
+
+ def led_flicker_timer_cb(self, *args, **kwargs):
+ EventMesh.publish("publish_AI_btnInfo",{"func":self.led_flicker_timer_cb_})
+ def led_flicker_timer_cb_(self):
+ if self.led_flicker_flag == 0:
+ self.led_flicker_timer.stop()
+ return
+ if self.led_flicker_on_off_flag == 0:
+ self.led_red.write(0)
+ self.led_blue.write(0)
+ self.led_green.write(0)
+ self.led_flicker_on_off_flag = 1
+ else:
+ self.led_flicker_on_off_flag = 0
+ if self.led_flicker_flag == 1:
+ self.led_blue.write(0)
+ self.led_green.write(0)
+ self.led_red.write(1)
+ elif self.led_flicker_flag == 2:
+ self.led_red.write(0)
+ self.led_green.write(0)
+ self.led_blue.write(1)
+ elif self.led_flicker_flag == 3:
+ self.led_red.write(0)
+ self.led_blue.write(0)
+ self.led_green.write(1)
+ elif self.led_flicker_flag == 4:
+ self.led_blue.write(1)
+ self.led_green.write(1)
+ self.led_red.write(1)
+
+ def open_led_red(self,event,msg):
+ #print("open_led_red")
+ self.led_flicker_flag = 0
+ #self.led_red.write(0)
+ self.led_blue.write(0)
+ self.led_green.write(0)
+ self.led_red.write(1)
+
+ def open_led_blue(self,event,msg):
+ #print("open_led_blue")
+ self.led_flicker_flag = 0
+ self.led_red.write(0)
+ #self.led_blue.write(0)
+ self.led_green.write(0)
+ self.led_blue.write(1)
+
+ def open_led_green(self,event,msg):
+ #print("open_led_green")
+ self.led_flicker_flag = 0
+ self.led_red.write(0)
+ self.led_blue.write(0)
+ #self.led_green.write(0)
+ self.led_green.write(1)
+
+ def open_led_red_blue(self,event,msg):
+ #print("open_led_blue")
+ self.led_flicker_flag = 0
+ self.led_red.write(1)
+ #self.led_blue.write(0)
+ self.led_green.write(0)
+ self.led_blue.write(1)
+
+ def open_led_red_green(self,event,msg):
+ #print("open_led_blue")
+ self.led_flicker_flag = 0
+ self.led_red.write(1)
+ #self.led_blue.write(0)
+ self.led_green.write(1)
+ self.led_blue.write(0)
+
+ def open_led_all(self,event,msg):
+ #print("open_led_all")
+ self.led_flicker_flag = 0
+ #self.led_red.write(0)
+ self.led_blue.write(1)
+ self.led_green.write(1)
+ self.led_red.write(1)
+
+ def close_led(self,event,msg):
+ #print("close_led")
+ self.led_flicker_flag = 0
+ self.led_red.write(0)
+ self.led_blue.write(0)
+ self.led_green.write(0)
+
+audio_buf = ['chenggong', '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', 'send_tone', 'shouhou', 'xinhaoruo1', 'zhengzaiguanji']
+class AI_dev(Abstract):
+ # AI
+ def __init__(self):
+ self.is_wdt = 0 #是否开启看门狗
+
+ self.VBATT_tab = {"charge_full":4300,"100" :4250 , "90":4179 , "80":4070, "60": 3883, "40":3770, "20":3699, "10":3652,"5":3600,}
+ self.KeyAI_status = 0
+ self.KeyAI_timer_count = 0
+ self.KeyAI_long_press = 0
+ self.KeyAI_press = 0
+ if self.is_wdt == 1:
+ self.wdt = WDT(30) #开启看门狗
+ # self.wdt_timer = osTimer()
+ # self.wdt_timer.start(5000, 1, self.wdt_timer_cb)
+ count = 0
+ while True:
+ count += 1
+ if count > 20 :
+ break
+ data = dataCall.getInfo(1, 0)
+ print("data call INFO {}".format(data))
+ if data[2][0]:
+ self.network_state = 1
+ break
+ print("等待网络 {}...".format(count))
+ utime.sleep_ms(500)
+ self.KeyAI_timer = osTimer()
+ # if dev_type == "G10":
+ # self.extint_AI = ExtInt(ExtInt.GPIO19,ExtInt.IRQ_RISING_FALLING, ExtInt.PULL_PU, self.keyAI_extint_cb)
+ # self.pwk_key = ExtInt(ExtInt.GPIO26, ExtInt.IRQ_RISING_FALLING, ExtInt.PULL_PU, self.pwk_extint_cb)
+ # else:
+ # self.pwk_key = ExtInt(ExtInt.GPIO26, ExtInt.IRQ_RISING_FALLING, ExtInt.PULL_PU, self.pwk_extint_cb)
+
+ self.pwk_key_status = 0
+ self.pwk_key_timer_count = 0
+ self.pwk_key_long_press = 0
+ self.pwk_key_press = 0
+ self.pwk_key_timer = osTimer()
+ #self.pwk_key = ExtInt(ExtInt.GPIO26, ExtInt.IRQ_RISING_FALLING, ExtInt.PULL_DISABLE, self.pwk_extint_cb)
+
+ # self.pwk_key.enable()
+ print("AI_dev:1")
+ self.btnInfo_queue = Queue(100)
+ self.btnInfo_queue_count = 0
+ _thread.stack_size(16*1024)
+ self.btnInfo_queue_thread_id = _thread.start_new_thread(self.btnInfo_queue_thread, ())
+ _thread.stack_size(8*1024)
+ EventMesh.subscribe("publish_AI_btnInfo",self.publish_AI_btnInfo)
+ EventMesh.subscribe("get_battery",self.get_battery)
+ EventMesh.subscribe("audio_montage_play",self.audio_montage_play)
+ EventMesh.subscribe("paly_iccid_imei",self.paly_iccid_imei)
+ EventMesh.subscribe("paly_device_res_error",self.paly_device_res_error)
+ EventMesh.subscribe("Power_off",self.pwk_key_Long_Press)
+ EventMesh.subscribe("keyAI_extint_cb", self.keyAI_extint_cb)
+ EventMesh.subscribe("get_usb_state", self.get_usb_state)
+ print("AI_dev:2")
+ self.pk = PowerKey()
+ self.pk.powerKeyEventRegister(self.powerKey_callback)
+ self.usb = USB()
+ 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_ai_config","VC_TTS_volume")#音量配置
+ if self.VC_TTS_volume == None:
+ self.VC_TTS_volume = 100
+ self.aud.setVolume(self.VC_TTS_volume //10)
+ #self.aud.play(1,0,'U:/static/xianyikaiji.mp3')#开机音频
+ #EventMesh.publish("audio_montage_play",["xianyikaiji.mp3"])
+ #EventMesh.publish("publish_AI_btnInfo",{"func":self.ntptime_cb})
+ self.check_rest_timer_count = 0
+ print("AI_dev:end")
+ def ntptime_cb(self):
+ #ntptime.settime(8)
+ print("timer:{}!!!!!!!!\r\n".format(utime.localtime()))
+ def usb_event_cb(self, state):
+ EventMesh.publish("publish_AI_btnInfo",{"func":self.usb_event,"data":state})
+
+ def usb_event(self, state):
+ status = state
+ self.usb_charge_flag = 0
+ if status == 1:#插入USB
+ print("charge R_CHARGE_in")
+ self.usb_status = 1
+ VC_satrt_flag = EventMesh.publish("get_VC_satrt_flag")#获取vc是否在运行
+ if VC_satrt_flag == None:
+ VC_satrt_flag = 0
+ if VC_satrt_flag == 0:
+ self.aud.stop()
+ #EventMesh.publish("flicker_led_red")#充电闪灯
+ #self.aud.play(1,1,'U:/static/R_CHARGE_IN.mp3')
+ # EventMesh.publish("open_led_red")#充电红灯常亮
+ close_all_ledm()
+ open_led_red()
+ #EventMesh.publish("audio_montage_play",["R_CHARGE_IN.mp3"])
+ self.aud.play(1,1,'U:/static/R_CHARGE_IN.mp3')
+ self.Low_power_warning_flag = 0
+ pass
+ elif status == 0:#拨出usbs
+ self.usb_status = 0
+ VC_satrt_flag = EventMesh.publish("get_VC_satrt_flag")#获取vc是否在运行
+ if VC_satrt_flag == None:
+ VC_satrt_flag = 0
+ if VC_satrt_flag == 0:
+ self.aud.stop()
+ # EventMesh.publish("close_led")
+ close_all_ledm()
+ #EventMesh.publish("audio_montage_play",["R_CHARGE_OUT.mp3"])
+ self.aud.play(1,1,'U:/static/R_CHARGE_OUT.mp3')
+ def get_usb_state(self,event,msg):#插入为1 拔出为0
+ return self.usb_status
+ def btnInfo_queue_thread(self):
+ while True:
+ data = self.btnInfo_queue.get()
+ self.btnInfo_queue_count-=1
+ #EventMesh.debug_log("Info_queue:data = {}".format(data))
+ if data != None:
+ try:
+ if "data" in data :
+ data["func"](data["data"])
+ else :
+ data["func"]()
+ except Exception as e:
+ #EventMesh.debug_log("btnInfo_queue:ERROR:{}".format(e))
+ usys.print_exception(e)
+ def publish_AI_btnInfo(self,event,msg):
+ #print("publish_AI_btnInfo 1")
+ self.btnInfo_queue.put(msg)
+ self.btnInfo_queue_count+=1
+ if self.btnInfo_queue_count > 80:
+ self.btnInfo_queue_count =0
+ print("事件处理线程队列出问题,重启!!!!!!!!!!!!!!")
+ print("线程:{} 队列:{}".format(_thread.threadIsRunning(self.btnInfo_queue_thread_id),self.btnInfo_queue.size()))
+ # if _thread.threadIsRunning(self.btnInfo_queue_thread_id):
+ # _thread.stop_thread(self.btnInfo_queue_thread_id)
+ # _thread.stack_size(10*1024)
+ # self.btnInfo_queue_thread_id = _thread.start_new_thread(self.btnInfo_queue_thread, ())
+ # _thread.stack_size(8*1024)
+ # self.btnInfo_queue.clear()
+ # self.btnInfo_queue = Queue(100)
+ EventMesh.publish("VC_error") #播放报错
+ utime.sleep_ms(1000)
+ self.aud.stopPlayStream()
+ self.aud.stopAll()
+ Power.powerRestart()
+ EventMesh.publish("set_storage_ai_config",["powerRestart",1])
+ #print("publish_AI_btnInfo 2")
+ def powerKey_callback(self, status):
+ print("powerKey_callback:{}".format(status))
+
+ def pwk_extint_cb(self,args):#pwk
+ try:
+ print("pwk已经按下")
+ self.pwk_key_status = int(args[1])
+ if self.pwk_key_status == 0:
+ self.pwk_key_status = 1
+ else:
+ self.pwk_key_status = 0
+ pass
+ if self.pwk_key_status == 0:#按下
+
+ if self.pwk_key_press == 0 :
+ # self.pwk_key.disable()
+ self.pwk_key_press = 1
+ self.pwk_key_long_press = 0
+ self.pwk_key_timer.start(100, 1, self.pwk_key_timer_cb)
+ self.pwk_key_timer_count = 0
+ EventMesh.publish("close_led")
+ EventMesh.publish("pwk_key_release")
+ #EventMesh.publish("AI_key_press")
+ except Exception as e:
+ usys.print_exception(e)
+ def pwk_key_timer_cb(self, *args, **kwargs):
+ # EventMesh.publish("publish_AI_btnInfo",{"func":self.pwk_key_timer_cb_})
+ # def pwk_key_timer_cb_(self) :
+ try:
+ # self.pwk_key_status = self.pwk_key.read_level()
+ self.pwk_key_timer_count +=1
+ if self.pwk_key_timer_count >= 10*3: #长按3s
+ #print("pwk_key_long_press {}".format(self.pwk_key_long_press))
+ if self.pwk_key_long_press == 0:
+ self.pwk_key_long_press = 1
+ #EventMesh.publish("AI_key_long_press")
+ EventMesh.publish("audio_montage_play",["zhengzaiguanji.mp3"])
+ #self.aud.play(1,0,'U:/static/zhengzaiguanji.mp3')#关机音频
+ self.aud.play(1,1,'U:/static/R_POWER_OFF_1.mp3')
+ utime.sleep_ms(2000)
+ self.aud.stopPlayStream()
+ self.aud.stopAll()
+ Power.powerDown()
+ #print("AI_key_release")
+ #EventMesh.publish("pwk_key_long_press")
+ #EventMesh.publish("publish_AI_btnInfo",{"func":self.pwk_key_Long_Press})
+ if self.pwk_key_status == 1:#松开
+ #print("pwk_key_timer_cb:{}".format(self.pwk_key_timer_count))
+ key_count = 5
+ if dev_type == "7PIN_BK":
+ key_count = 3
+ if self.pwk_key_timer_count >= key_count: #防抖200ms
+ #EventMesh.publish("AI_key_release")
+ EventMesh.publish("publish_AI_btnInfo",{"func":self.pwk_key_release})
+ # self.pwk_key.enable()
+ self.pwk_key_timer.stop()
+ self.pwk_key_timer_count = 0
+ self.pwk_key_press = 0
+
+ except Exception as e:
+ usys.print_exception(e)
+
+ def keyAI_extint_cb(self,args):#call 2
+ try:
+ print("AI 已经按下")
+ #print("AI_btn:keyAI_extint_cb{}".format(args[1]))
+ self.KeyAI_status = int(args[1])
+ if self.KeyAI_status == 0:
+ self.KeyAI_status = 1
+ else:
+ self.KeyAI_status = 0
+
+ if self.KeyAI_status == 0:#按下
+ if self.KeyAI_press == 0 :
+ EventMesh.publish(constants.EVENT.SYSTEM_UP)#唤醒休眠
+ self.extint_AI.disable()
+ self.KeyAI_press = 1
+ self.KeyAI_long_press = 0
+ self.KeyAI_timer.start(100, 1, self.KeyAI_timer_cb)
+ self.KeyAI_timer_count = 0
+ #EventMesh.publish("AI_key_press")
+ # if dev_type == "7PIN" :
+ self.aud.aud_tone_play(10,200)#播放按键音
+ EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_key_press})
+ except Exception as e:
+ usys.print_exception(e)
+ def KeyAI_timer_cb(self, *args, **kwargs):
+ # EventMesh.publish("publish_AI_btnInfo",{"func":self.KeyAI_timer_cb_})
+ # def KeyAI_timer_cb_(self):
+ try:
+ self.KeyAI_status = self.extint_AI.read_level()
+ self.KeyAI_timer_count +=1
+ if self.KeyAI_timer_count >= 10*1: #长按3s
+ if self.KeyAI_long_press == 0:
+ self.KeyAI_long_press = 1
+ #EventMesh.publish("AI_key_long_press")
+ EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_key_long_press})
+ if self.KeyAI_status == 1:#松开
+ #print("KeyAI_timer_cb:{}".format(self.KeyAI_timer_count))
+ key_count = 5
+ if dev_type == "7PIN_BK":
+ key_count = 3
+ if self.KeyAI_timer_count >= key_count: #防抖200ms
+ #EventMesh.publish("AI_key_release")
+ EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_key_release})
+ self.extint_AI.enable()
+ self.KeyAI_timer.stop()
+ self.KeyAI_timer_count = 0
+ self.KeyAI_press = 0
+
+ except Exception as e:
+ usys.print_exception(e)
+
+ def AI_key_press(self,event,msg):
+ self.check_rest_timer_count = 0
+ print("AI_key_press")
+
+ EventMesh.publish("AI_key_press")
+
+ def AI_key_long_press(self):
+ self.check_rest_timer_count = 0
+ print("AI_key_long_press")
+ EventMesh.publish("AI_key_long_press_cb")
+
+ def AI_key_release(self):
+ print("AI_key_release")
+ EventMesh.publish("AI_key_release")
+
+ def pwk_key_Long_Press(self,event=None,msg=None):
+ self.check_rest_timer_count = 0
+ print("pwk_key_long_press!!!!!!!")
+ print("pwk_key_long_press!!!!!!!")
+
+ # EventMesh.publish("paly_iccid_imei")
+ # return
+ EventMesh.publish("audio_montage_play",["zhengzaiguanji.mp3"])
+ #self.aud.play(1,0,'U:/static/zhengzaiguanji.mp3')#关机音频
+ EventMesh.publish("AI_client_VC_synevent","正在关机中")#用TTS读
+ utime.sleep_ms(3000)
+ self.aud.stopPlayStream()
+ self.aud.stopAll()
+ Power.powerDown()
+ #print("AI_key_release")
+ #EventMesh.publish("pwk_key_long_press")
+
+ def pwk_key_release(self):
+ self.check_rest_timer_count = 0
+ #print("pwk_key_release")
+ EventMesh.publish("pwk_key_release_cb")
+
+
+ def wdt_timer_cb(self, *args, **kwargs):
+ if self.is_wdt == 1:
+ self.wdt.feed()
+
+ def AI_dev_timer_cb(self, *args, **kwargs):
+ #print("AI_dev_timer_cb")
+ EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_dev_timer_event})
+ def AI_dev_timer_event(self):
+ if self.is_wdt == 1:
+ self.wdt.feed()
+ VC_satrt_flag = EventMesh.publish("get_VC_satrt_flag")#获取vc是否在运行
+ if VC_satrt_flag == None:
+ VC_satrt_flag = 0
+ Vbatt = Power.getVbatt()
+ if self.usb_status == 1 and VC_satrt_flag == 0:
+ # EventMesh.publish("open_led_red")#充电红灯常亮
+ open_led_red()
+ if self.usb_status == 1 and Vbatt>=self.VBATT_tab["charge_full"]and VC_satrt_flag == 0:#充电充满
+ # EventMesh.publish("open_led_green")
+
+ if self.usb_charge_flag == 0 :
+ open_power = EventMesh.publish("get_power_on_state")#获取开机标识
+ open_power_off = EventMesh.publish("get_power_off_state")#获取开机标识
+ if open_power != None and open_power_off != None:
+ if open_power == 0 or open_power_off == 1:
+ #EventMesh.publish("audio_montage_play",["R_CHARGE_FULL.mp3"])
+ close_all_ledm()
+ open_led_green()
+ self.aud.play(1,0,'U:/static/R_CHARGE_FULL.mp3')#充电已满
+ self.usb_charge_flag = 1
+ if self.usb_status == 0 and Vbatt<self.VBATT_tab["20"]and VC_satrt_flag == 0 and self.Low_power_warning_flag ==0:#低电报警
+ self.Low_power_warning_flag = 1
+ EventMesh.publish("flicker_led_red")
+ #self.aud.play(1,0,'Low_power_warning.mp3')
+ # self.Low_power_warning_timer+=1
+ # if self.Low_power_warning_timer >= 2:
+ # self.Low_power_warning_timer = 0
+ EventMesh.publish("audio_montage_play",["Low_power_warning.mp3"])
+ if self.usb_status == 0 and Vbatt<self.VBATT_tab["5"]:
+ # if self.usb_status == 0 and Vbatt<self.VBATT_tab["5"]:
+ EventMesh.publish("audio_montage_play",["didianguanji.mp3"])
+ utime.sleep_ms(4500)
+ self.aud.stopPlayStream()
+ self.aud.stopAll()
+ Power.powerDown()
+
+ self.check_rest_timer_count += 1
+ if self.check_rest_timer_count >= 8640:#24小时没按键,则关机
+ self.pwk_key_Long_Press()
+
+ def get_battery(self, event=None, msg=None):
+ Vbatt = Power.getVbatt()
+ if Vbatt>self.VBATT_tab["90"]:
+ return 100
+ if Vbatt>self.VBATT_tab["80"]:
+ return 90
+ if Vbatt>self.VBATT_tab["60"]:
+ return 80
+ if Vbatt>self.VBATT_tab["40"]:
+ return 60
+ if Vbatt>self.VBATT_tab["20"]:
+ return 40
+ if Vbatt>self.VBATT_tab["10"]:
+ return 20
+ if Vbatt<=self.VBATT_tab["10"]:
+ return 10
+ def audio_montage_play(self,event,msg):
+ self.aud.stopPlayStream()
+ self.aud.stopAll()
+ str_data='mp3files='
+ for i in msg:
+ try:
+ str_tmp = i.replace(".mp3","")
+ str_data+="{}.mp3+".format(audio_buf.index(str_tmp))
+ except Exception as e:
+ usys.print_exception(e)
+ str_data = str_data[:-1]
+ print("audio_montage_play:{}".format(str_data))
+ #self.aud.montage_play('U:/static/audio.bin',1,1,str_data)
+
+ def paly_iccid_imei(self,event,msg):
+ str_data = 'mp3files={}.mp3+'.format(audio_buf.index("liuliangtishi"))#流量提示
+ imei = modem.getDevImei()
+ iccid = sim.getIccid()
+ print("paly_iccid_imei:ICCID:{}".format(iccid))
+ if iccid != -1 and len(iccid) > 5:
+ iccid = iccid.upper()
+ if len(iccid) <20:
+ for i in range(20-len(iccid)):
+ iccid = "0"+iccid
+ str_data += '{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+'.format(audio_buf.index("R_READ_TIME_{}".format(iccid[0]))\
+ ,audio_buf.index("R_READ_TIME_{}".format(iccid[1])),audio_buf.index("R_READ_TIME_{}".format(iccid[2])),audio_buf.index("R_READ_TIME_{}".format(iccid[3])),\
+ audio_buf.index("R_READ_TIME_{}".format(iccid[4])),audio_buf.index("R_READ_TIME_{}".format(iccid[5])),audio_buf.index("R_READ_TIME_{}".format(iccid[6])),audio_buf.index("R_READ_TIME_{}".format(iccid[7])),\
+ audio_buf.index("R_READ_TIME_{}".format(iccid[8])),audio_buf.index("R_READ_TIME_{}".format(iccid[9])),audio_buf.index("R_READ_TIME_{}".format(iccid[10])),audio_buf.index("R_READ_TIME_{}".format(iccid[11])),\
+ audio_buf.index("R_READ_TIME_{}".format(iccid[12])),audio_buf.index("R_READ_TIME_{}".format(iccid[13])),audio_buf.index("R_READ_TIME_{}".format(iccid[14])),audio_buf.index("R_READ_TIME_{}".format(iccid[15])),\
+ audio_buf.index("R_READ_TIME_{}".format(iccid[16])),audio_buf.index("R_READ_TIME_{}".format(iccid[17])),audio_buf.index("R_READ_TIME_{}".format(iccid[18])),audio_buf.index("R_READ_TIME_{}".format(iccid[19])))
+ str_data += '{}.mp3+'.format(audio_buf.index("shouhou"))#可联系售后解决,联系方式见售后客服电话是400-886-8777或到微信公众号柒牌SEVENBRAND自行充值:
+ self.aud.montage_play('U:/static/audio.bin',1,1,str_data)
+ #鉴权出错,播放imei号
+ def paly_device_res_error(self,event,msg):
+ str_data = 'mp3files={}.mp3+'.format(audio_buf.index("jianquancuowu"))#AI功能异常,请联系客户查询,设备号为:
+ imei = modem.getDevImei()
+ imei = imei.upper()
+ str_data += '{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(imei[0]))\
+ ,audio_buf.index("R_READ_TIME_{}".format(imei[1])),audio_buf.index("R_READ_TIME_{}".format(imei[2])),audio_buf.index("R_READ_TIME_{}".format(imei[3])),\
+ audio_buf.index("R_READ_TIME_{}".format(imei[4])),audio_buf.index("R_READ_TIME_{}".format(imei[5])),audio_buf.index("R_READ_TIME_{}".format(imei[6])),audio_buf.index("R_READ_TIME_{}".format(imei[7])),\
+ audio_buf.index("R_READ_TIME_{}".format(imei[8])),audio_buf.index("R_READ_TIME_{}".format(imei[9])),audio_buf.index("R_READ_TIME_{}".format(imei[10])),audio_buf.index("R_READ_TIME_{}".format(imei[11])),\
+ audio_buf.index("R_READ_TIME_{}".format(imei[12])),audio_buf.index("R_READ_TIME_{}".format(imei[13])),audio_buf.index("R_READ_TIME_{}".format(imei[14])))
+ #print("str_data:{}".format(str_data))
+ self.aud.montage_play('U:/static/audio.bin',1,1,str_data)
+
+#存储信息
+class getStorageDataManager(Abstract):#获取内存数据
+ def __init__(self):
+ self.config_data = {}
+ check = ql_fs.path_exists("/usr/static/storage_file/config_ai.json")
+ if check == True:
+ with open("/usr/static/storage_file/config_ai.json","r") as fd:
+ self.config_data = ujson.load(fd)
+ else :
+ self.config_data = {'old_time': 0, 'flip_sw': 0}
+ pass
+
+ def post_processor_after_instantiation(self):
+ EventMesh.subscribe("set_storage_ai_data", self.set_storage_ai_data)
+ EventMesh.subscribe("set_storage_ai_config", self.set_storage_ai_config)
+ EventMesh.subscribe("get_storage_ai_data", self.get_storage_ai_data)
+ EventMesh.subscribe("get_storage_ai_config", self.get_storage_ai_config)
+
+ def set_storage_ai_data(self, event, msg):
+ # EventMesh.debug_log("set_storage_ai_data:{}".format(msg))
+ if msg != None:
+ self.config_data = msg
+ with open("/usr/static/storage_file/config_ai.json",'w+',encoding="utf-8") as fd:
+ ujson.dump(self.config_data,fd)
+
+
+ def set_storage_ai_config(self,event,msg):
+ # EventMesh.debug_log("set_storage_key_data1:{}".format(msg))
+ if len(msg) >= 2:
+ self.config_data[msg[0]]=msg[1]
+ # EventMesh.debug_log("set_storage_key_data2:{}".format(self.config_data[msg[0]]))
+ EventMesh.publish("publish_message_event_ui",{"func":self.set_storage_save,"data":0})
+ def set_storage_save(self, data):
+ with open("/usr/static/storage_file/config_ai.json",'w+',encoding="utf-8") as fd:
+ ujson.dump(self.config_data,fd)
+ def get_storage_ai_data(self, event, msg):
+ # EventMesh.debug_log("get_storage_ai_data:{}".format(self.config_data))
+ return self.config_data
+ def get_storage_ai_config(self,event,msg):
+ # EventMesh.debug_log("get_storage_key_data1:{}".format(msg))
+ b = msg in self.config_data.keys()
+ if b == True:
+ # EventMesh.debug_log("get_storage_key_data2:{}".format(self.config_data[msg]))
+ return self.config_data[msg]
+ else :
+ return None
+ # try:
+ # return self.config_data[msg]
+ # except:
+ # EventMesh.debug_log("get_storage_key_data:none key:{}",msg)
+ # return None
+#设备资源授权平台
+class device_res_author(Abstract):
+
+ def __init__(self) :
+ print("device_res_author __init__ start !!!!!!!!!!!!!!!!!")
+ self.deviceId = modem.getDevImei()#"876226002022574"
+ self.SHA1_BLOCK_SIZE = 64
+ self.PAD_BLOCK_SIZE = 16
+ self.SHA256 = uhashlib.sha256
+ self.pad = lambda s: s + chr(self.PAD_BLOCK_SIZE - len(s) % self.PAD_BLOCK_SIZE) * (self.PAD_BLOCK_SIZE - len(s) % self.PAD_BLOCK_SIZE)
+ # 除去补16字节的多余字符
+ self.unpad = lambda s: s[:-s[-1]]
+ #K01
+ # self.key = b"MWrMZjdtcPhj41jWuoqFAhTmqyFluqj1"
+ # self.pid = "qAtdDOGXgXYjT2HGFr3a"
+ #G15
+ # self.key = b"3LWfBicxfRZ3ZAqmZCFuvMdGUXdAFWkb"
+ # self.pid = "qLx4Pu4mSUQxyfVKGLXG"
+ #7pin
+ self.key = b"uKLrChwrxA1LklgBc3VwawYjUkbT3BgX"
+ self.pid = "cqxJZi5CNgzjS3mX21Zw"
+
+ self.dev_res_timer = osTimer()
+ 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)
+ self.ud_token_timer_Count = 0
+ self.dev_token = None
+ self.res_error_count = 0
+ self.ntptime_flag = 0
+ EventMesh.subscribe("get_dev_token", self.get_dev_token)
+ EventMesh.subscribe("update_dev_token", self.update_dev_token)
+ EventMesh.subscribe("dev_active", self.dev_active)
+ EventMesh.subscribe("dev_sign_in", self.dev_sign_in)
+ EventMesh.subscribe("dev_NTP", self.dev_NTP)
+ #EventMesh.publish_async("dev_NTP",thread_size = 8192)
+
+ # count = 0
+ # while True:
+ # if self.ntptime_flag == 1:
+ # break
+ # utime.sleep_ms(1)
+ # count+=1
+ # if count>600:
+ # break
+ # EventMesh.publish_async("dev_active",thread_size = 8192)
+ # EventMesh.publish_async("dev_sign_in",thread_size = 8192)
+
+ self.dev_NTP()#获取时间
+ self.dev_active() #设备激活
+ self.dev_sign_in() #设备登入
+ print("device_res_author __init__ end !!!!!!!!!!!!!!!!!")
+
+ def get_dev_token(self, event, msg):
+ return self.dev_token
+ #网络校时
+ def dev_NTP(self, event=None, msg=None):
+ response = None
+ try:
+ print("dev_NTP1")
+ url = "http://dmp.raisound.com/bz-api/dev/time"
+ response = request.get(url,timeout=5)
+ data = response.json()
+ print("dev_NTP:{}".format(data))
+ if data:
+ try:
+ timeSecond = data["data"]["timestamp"]//1000
+
+ next_alarm_time = utime.localtime(timeSecond)
+ print("timeSecond {} next_alarm_time {}".format(timeSecond,next_alarm_time))
+ machine.RTC().datetime((next_alarm_time[0],next_alarm_time[1],next_alarm_time[2],next_alarm_time[6],next_alarm_time[3],next_alarm_time[4],next_alarm_time[5],0))
+ self.ntptime_flag = 1
+ except Exception as e:
+ usys.print_exception(e)
+ except Exception as e:
+ usys.print_exception(e)
+ if response != None:
+ response.close()
+ print("dev_NTP end")
+ def dev_timer_cb(self, *args): #设备资源管理鉴权平台定时器
+ EventMesh.publish("publish_AI_btnInfo",{"func":self.dev_timer_cb_})
+
+ def dev_timer_cb_(self):
+ #if EventMesh.DEV_RES_MANAGE_AUTHEN_PLATFORM == 1:
+ try:
+ if self.dev_token == None:
+ if self.ntptime_flag == 0:
+ self.ntptime_flag = 1
+ EventMesh.publish_async("dev_NTP",thread_size = 8192)
+ #EventMesh.publish("publish_AI_btnInfo",{"func":self.dev_NTP})
+ print("timer:{}!!!!!!!!\r\n".format(utime.localtime()))
+ EventMesh.publish_async("dev_active",thread_size = 8192)
+ EventMesh.publish_async("dev_sign_in",thread_size = 8192)
+ # self.dev_active() #设备激活
+ # self.dev_sign_in() #设备登入
+ self.dev_res_timerCount+=1
+ if self.dev_res_timerCount > 3: #开机一分钟内没有获取到密码和token 等下一次更新令牌在走登入 激活流程
+ self.dev_res_timerCount=0
+ self.dev_res_timer.stop()
+ except Exception as e:
+ usys.print_exception(e)
+ def ud_token_timer_cb(self, *args):
+ EventMesh.publish("publish_AI_btnInfo",{"func":self.ud_token_timer_cb_})
+
+ def ud_token_timer_cb_(self):
+ try:
+ #print("ud_token_timer_!!!!")
+ self.ud_token_timer_Count+=1
+ if self.ud_token_timer_Count >= 720: #定时10*3000s时更新token
+ self.ud_token_timer_Count = 0
+ EventMesh.publish_async("dev_sign_in",thread_size = 8192)
+ except Exception as e:
+ usys.print_exception(e)
+ def get_sim_Status(self):
+ return sim.getStatus()
+ def HMAC(self,k, m):
+
+ KEY_BLOCK = k + (b'\0' * (self.SHA1_BLOCK_SIZE - len(k)))
+ KEY_INNER = bytes((x ^ 0x36) for x in KEY_BLOCK)
+ KEY_OUTER = bytes((x ^ 0x5C) for x in KEY_BLOCK)
+ inner_message = KEY_INNER + m
+ outer_message = KEY_OUTER + self.SHA256(inner_message).digest()
+ return self.SHA256(outer_message)
+ def get_hmac_sha256(self,k, m):
+ data = self.HMAC(k, m).digest()
+ # print("HMAC(k, m).digest():", data)
+ # print("HMAC(k, m).digest():", ubinascii.hexlify(data))
+ hex_data = ubinascii.hexlify(data)
+ hex_data = hex_data.decode('ascii')
+ return hex_data
+ # 加密函数
+ def aes_CBC_Encrypt(self,data, key, iv): # CBC模式的加密函数,data为明文,key为16字节密钥,iv为16字节的偏移量
+ key = key.encode('utf-8')
+ iv = iv.encode('utf-8') # CBC 模式下的偏移量
+ data = self.pad(data) # 补位
+ data = data.encode('utf-8')
+ aes = ucryptolib.aes(key,ucryptolib.MODE_CBC,iv)
+ result = base64.b64encode(aes.encrypt(data))
+ return str(result, 'utf-8') # 以字符串的形式返回
+
+ # 解密函数
+ def aes_CBC_Decrypt(self,data, key, iv): # CBC模式的解密函数,data为密文,key为16字节密钥
+ key = key.encode('utf-8')
+ iv = iv.encode('utf-8')
+
+ aes = ucryptolib.aes(key,ucryptolib.MODE_CBC,iv) #CBC模式
+
+ # decrypt AES解密 B64decode为base64 转码
+ result = aes.decrypt(base64.b64decode(data))
+ result = self.unpad(result) # 除去补16字节的多余字符
+ return str(result, 'utf-8') # 以字符串的形式返回
+ #激活接口 没有密码走激活
+ def dev_active(self, event=None, msg=None):
+ signal = net.csqQueryPoll()
+ if signal == -1 or self.get_sim_Status() != 1:#网络不正常
+ print("dev_active 无 SIM卡!!!!!!!!\r\n")
+ return
+ print("dev_active 1\r\n")
+ # 签名内容: = deviceId+pid+timeStamp
+ dev_pass = ""
+ dev_pass = EventMesh.publish("get_storage_ai_config","dev_pass")
+ print("dev_pass:{}\r\n".format(dev_pass))
+ if dev_pass == None:
+ dev_pass = ""
+ if dev_pass == "" or dev_pass == None:
+ try:
+ date_tmp = utime.localtime() #获取当前时间
+ print("date_tmp:{}\r\n".format(date_tmp)) #转换时间戳s
+ timeStamp = (utime.mktime(date_tmp))*1000#获取时间戳ms
+ deviceId = self.deviceId #"876226002022574" #以imei号
+ pid = self.pid
+ key = self.key
+ sign_data = "{}{}{}".format(deviceId,pid,timeStamp) #签名内容
+ print("sign_data:{}\r\n".format(sign_data))
+ sha256_hex = self.get_hmac_sha256(key,sign_data)
+ print("sha256_hex:{}\r\n".format(sha256_hex))
+
+ data = {
+ "deviceId":"{}".format(deviceId), #设备名
+ "pid":pid, #产品PID
+ "sign":"{}".format(sha256_hex), #HMACSHA256签名后的数据
+ "timeStamp":timeStamp, #要以ms的形式
+ "signMethod":"HMACSHA256" #签名方式 HMACSHA256
+ }
+ print(ujson.dumps(data))
+ headers_T ={"Content-Type":"application/json"}
+ url = "http://dmp.raisound.com/bz-api/dev/auth/active"
+ data =ujson.dumps(data)
+ response = None
+ response_result = 0
+ try:
+ response = request.put(url,data=data,headers = headers_T,timeout=5)
+ response_result = 1
+ except Exception as e:
+ usys.print_exception(e)
+ print("put error!!!!!\r\n")
+ response_result = 0
+
+ IV = "" #偏移量
+ PASSWORD= "" #服务器返回后的加密内容 密码
+ if response_result == 1: #访问成功ip
+ if response.status_code == 200:
+ print("headers:{}".format(response.headers))
+ content = response.content
+ c = next(content)
+ # "api.xcloudtech.com"
+ # d_server_port = 9000
+ data = ujson.loads(c)
+ # data = response.json()
+ print("data-{}".format(data))
+ if data != None:
+ if "success" in data:
+ if data['success'] == True:
+ if "data" in data:
+ data_tmp = data["data"]
+ if "nonce" in data_tmp: #偏移量
+ IV = data_tmp["nonce"]
+ if "password" in data_tmp:
+ PASSWORD = data_tmp["password"]
+ # EventMesh.publish("set_storage_ai_config",["dev_pass",PASS])
+ if data["code"] == 20001:#鉴权成功
+ pass
+ elif data["code"] > 50000:#时间错误
+ self.res_error_count+=1
+ if self.res_error_count>=3:
+ self.res_error_count = 0
+ #EventMesh.publish("paly_device_res_error")
+ if data["code"] == 50003:#时间错误
+ self.ntptime_flag = 0
+ if PASSWORD != None and IV != None:
+ if len(PASSWORD) != 0 and len(IV) != 0:
+ password = PASSWORD
+ iv = IV
+ #解密 之后保存本地下一次登入做使用
+ decrypt_data = self.aes_CBC_Decrypt(password, self.key, iv) #对服务器下发的密码进行解密
+ print("decrypt_data {}".format(decrypt_data))
+ EventMesh.publish("set_storage_ai_config",["dev_pass",decrypt_data])
+ print("IV:{}\r\n PASS:{}".format(IV,PASSWORD))
+ if response != None:
+ response.close()
+ except Exception as e:
+ usys.print_exception(e)
+ print("dev_active end\r\n")
+ return [response_result,PASSWORD,IV]
+ #随机生成16个字节的字符串作为加密的IV 偏移量
+ def generate_random_string(self,length=16):
+ random_str = ""
+ chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
+ for i in range(length):
+ random_str+=chars[random.randint(0,length)]
+ return random_str
+
+ #设备登入 没有Token 走登入获取token
+ def dev_sign_in(self, event=None, msg=None):
+ signal = net.csqQueryPoll()
+ if signal == -1 or self.get_sim_Status() != 1:#网络不正常
+ print("dev_sign_in 无 SIM卡!!!!!!!!\r\n")
+ return
+ print("dev_sign_in 1")
+ token = ""
+ try:
+ token = self.dev_token
+ dev_pass = EventMesh.publish("get_storage_ai_config","dev_pass")
+ #print("token:{}\r\n".format(token))
+ if token == None:
+ token = ""
+ if dev_pass == None:
+ dev_pass = ""
+ if len(dev_pass) == 0:#没有密码
+ return
+ #if token == None or token == "":
+ if 1: #返回结果成功
+ #获取本地保存的密码
+ decrypt_data=EventMesh.publish("get_storage_ai_config","dev_pass")
+ # decrypt_data = self.aes_CBC_Decrypt(password, self.key, iv) #对服务器下发的密码进行解密
+ print("decrypt_data {}".format(decrypt_data))
+ #随机生成16个字符串 设备生成做加密使用
+ random_string = self.generate_random_string(16) #随机的16个字符串
+ enc_iv = random_string #加密的IV偏移量
+ #设备端进行密码加密
+ encrypt_data = self.aes_CBC_Encrypt(decrypt_data, self.key, enc_iv)
+ print("encrypt_data {}".format(encrypt_data))
+
+ #登入数据
+ deviceId = self.deviceId
+ sign_in_data = {
+ "deviceId":"{}".format(deviceId), #设备ID
+ "password":"{}".format(encrypt_data), #加密的数据
+ "nonce":"{}".format(random_string) #随机的16个字符串
+ }
+ print(ujson.dumps(sign_in_data))
+ sign_url = "http://dmp.raisound.com/bz-api/dev/auth/sign_in" #登入地址
+ headers_T ={"Content-Type":"application/json"}
+ response_result = 0
+ response = 0
+ try:
+ response = request.post(sign_url,data=ujson.dumps(sign_in_data),headers = headers_T,timeout=5)
+ response_result = 1
+ except Exception as e:
+ usys.print_exception(e)
+ print("post error!!!!!\r\n")
+ response_result = 0
+ # {'msg': '', 'code': 20001, 'success': True,
+ # 'data': {'deviceId': '876226002022574',
+ # 'token': '95436a9e09fd0ff89feb8825257dca982f'}
+ # }
+
+ #self.dev_token = ""
+ if response_result == 1:
+ if response.status_code == 200:
+ content = response.content
+ c = next(content)
+ data = ujson.loads(c)
+ print("data-{}".format(data))
+ if data != None:
+ if "success" in data:
+ if data['success'] == True: #登入成功
+ if "data" in data:
+ data_tmp = data["data"]
+ if "token" in data_tmp: #token
+ self.dev_token = data_tmp["token"]
+ if data["code"] == 50003:#时间错误
+ self.ntptime_flag = 0
+ print("token:{}\r\n".format(self.dev_token))
+ if response != None:
+ response.close()
+ pass
+ except Exception as e:
+ print("post error!!!!!\r\n")
+ response_result = 0
+ print("dev_sign_in end")
+ #获取新的令牌 更新token
+ def update_dev_token(self, event=None, msg=None):
+ print("update_dev_token")
+ try:
+ dev_pass = ""
+ dev_pass = EventMesh.publish("get_storage_ai_config","dev_pass")
+
+ if dev_pass == None:
+ dev_pass = ""
+ if len(dev_pass) == 0: #没有密码走激活
+ print("no dev_pass:{}\r\n".format(dev_pass))
+ EventMesh.publish("dev_active")
+ token = self.dev_token
+ if token == None:
+ token = ""
+ if len(token) == 0: #没有token走登入
+ print("no dev_token:{}\r\n".format(token))
+ #self.dev_sign_in()
+ EventMesh.publish("dev_sign_in")
+ dev_tokenip = "http://dmp.raisound.com/bz-api/dev/auth/token" #设备新令牌更新地址
+ token = self.dev_token
+ if token == None:
+ token = ""
+ if len(token) != 0:
+ response_result=0
+ response = None
+ headers_T = {"bz-dt":"{}".format(token)}
+ try:
+ response = request.get(dev_tokenip,headers = headers_T,timeout=5)
+ response_result = 1
+ except Exception as e:
+ print("get error!!!!!\r\n")
+ response_result = 0
+ if response_result == 1:
+ if response.status_code == 200:
+ try:
+ headers_data = response.headers
+ # print("headers_data!!!!! headers_data:{}\r\n".format(headers_data))
+ if "bz-dt" in headers_data: #bz-dt字段是否在头部数据里面 如果有就需要更新
+ bz_dt = headers_data["bz-dt"]
+ self.dev_token = bz_dt.replace(" ", "") #去掉所有的空格符
+ print("update_dev_token:{}".format(self.dev_token))
+ except Exception as e:
+ print("headers_data!!!!! error\r\n")
+ if response != None:
+ response.close()
+ except Exception as e:
+ usys.print_exception(e)
+ print("update_dev_token end")
+
+#OTA升级
+class OTA():
+ def __init__(self):
+ #EventMesh.subscribe("min_sys_ota",self.min_sys_ota)
+ self.downloadFileVoURL1= ""
+ self.downloadFileVoURL2= ""
+ #小系统升级,返回0,没有升级;返回,1有升级,正在执行升级;返回2,电压不够
+ def min_sys_ota(self,event=None,msg=None):
+ print("min_sys_ota")
+ signal = net.csqQueryPoll()
+ if signal == -1 or sim.getStatus() != 1:#网络不正常
+ print("min_sys_ota 无 SIM卡!!!!!!!!\r\n")
+ return 0
+ # return 0
+ response = None
+ ret_str =0
+ self.downloadFileVoURL1= ""
+ self.downloadFileVoURL2= ""
+ try:
+ sourceVersion = versions.Build_Time
+ sourceVersion = "7PIN-"+sourceVersion[:10]+"-"+sourceVersion[11:-3]
+ print("sourceVersion:{}".format(sourceVersion))
+ sourceVersion = sourceVersion.replace(" ", "0")
+ print("sourceVersion2:{}".format(sourceVersion))
+ #url = "http://iot.api.thisiot.com/ota/task?deviceId=860132060348836&sourceVersion=2024-12-20-15:35-1"
+ url = "http://dmp.raisound.com/bz-api/ota/task?deviceId={}&sourceVersion={}".format(modem.getDevImei(),sourceVersion)
+ print(url)
+ response = request.get(url,timeout=5)
+ if response.status_code == 200:
+ data = response.json()
+ print("min_sys_ota1:{}".format(data))
+
+ if data:
+ try:
+ if data["code"] == 20007:#有新版本
+ if "fileList"in data["data"]:
+ if len(data["data"]["fileList"]) == 2:
+ for fileList in data["data"]["fileList"]:
+ if fileList["fileName"] == "dfota_2.bin":
+ self.downloadFileVoURL2 = fileList["url"]
+ elif fileList["fileName"] == "dfota_1.bin":
+ self.downloadFileVoURL1 = fileList["url"]
+
+ if data["code"] == 20006:#已是最新版本
+ ret_str = 0
+
+ except Exception as e:
+ usys.print_exception(e)
+ else:
+ print("min_sys_ota get error")
+ response.close()
+ except Exception as e:
+ usys.print_exception(e)
+ if response != None:
+ response.close()
+
+ print("min_sys_ota:downloadFileVoURL1:{},\ndownloadFileVoURL2:{}".format(self.downloadFileVoURL1,self.downloadFileVoURL2))
+ print("min_sys_ota end")
+ if self.downloadFileVoURL2!="" and self.downloadFileVoURL1!="":
+ battery = EventMesh.publish("get_battery")
+ if battery>=40:
+ self.ota_timer = osTimer()
+ self.ota_timer.start(15000, 0, self.ota_timer_cb)
+ ret_str = 1
+ else:
+ ret_str = 2
+ return ret_str
+
+ def ota_timer_cb(self, *args, **kwargs):
+ import fota
+ fota_obj = fota()
+ fota_obj.httpDownload(url1=self.downloadFileVoURL1,url2=self.downloadFileVoURL2)
+ #ota升级结果返回,开机时调用一次即可
+ def ota_result(self,event=None,msg=None):
+ response = None
+ try:
+ currentVersion = versions.Build_Time
+ currentVersion = "7PIN-"+currentVersion[:10]+"-"+currentVersion[11:-3]
+ print("currentVersion1:{}".format(currentVersion))
+ currentVersion = currentVersion.replace(" ", "0")
+ print("currentVersion2:{}".format(currentVersion))
+ url = "http://dmp.raisound.com/bz-api/ota/result?deviceId={}¤tVersion={}".format(modem.getDevImei(),currentVersion)
+ print(url)
+ response = request.post(url,timeout=5)
+ if response.status_code == 200:
+ data = response.json()
+ print("ota_result:{}".format(data))
+ else:
+ print("ota_result error!!!!")
+ for i in response.text:
+ print(i)
+ response.close()
+ except Exception as e:
+ usys.print_exception(e)
+ if response != None:
+ response.close()
+ #ICCID上传
+ def pots_ICCID(self,event=None,msg=None):
+ response = None
+ try:
+ iccid = sim.getIccid()
+ if iccid != -1 and len(iccid) > 5:
+ print("pots_ICCID:{}".format(iccid))
+ #Headers = {'Transfer-Encodong':'chunked'}
+ #http://dmp.raisound.com/bz-api/dev/iccid?deviceId=866610001099679&iccid=89860002192307889057
+ url = "http://dmp.raisound.com/bz-api/dev/iccid?deviceId={}&iccid={}".format(modem.getDevImei(),iccid)
+ print(url)
+ response = request.post(url,timeout=5)
+ if response.status_code == 200:
+ data = response.json()
+ print("pots_ICCID:{}".format(data))
+ else:
+ print("pots_ICCID error!!!!")
+ for i in response.text:
+ print(i)
+ response.close()
+ except Exception as e:
+ usys.print_exception(e)
+ if response != None:
+ response.close()
+#阿里VC状态枚举
+VC_State_None=0
+VC_State_Listening=1#听
+VC_State_SpeechStart=2#说开始
+VC_State_SpeechIng=3#正在说
+VC_State_SpeechEnd=4#说结束
+VC_State_RequestToRespond=5 #TTS请求或者chat请求
+VC_State_Thinking=6#想(chat)
+VC_State_Responding=7#音频播放
+VC_State_TTSStart=8
+VC_State_TTSData=9
+VC_State_TTSFinish=10
+VC_State_TTSEnd=11
+VC_State_TTSError=12
+VC_State_DialogError=13
+VC_State_End=14
+
+VC_record_TYPE_PCM = 0
+VC_record_TYPE_AMR = 1
+VC_play_TYPE_PCM = 0
+VC_play_TYPE_MP3 = 1
+
+#websocket发送数据编号
+# AI_client_asr_num = 0
+# AI_client_chat_num = 1
+# AI_client_tts_num = 2
+AI_client_VC_num = 3
+AI_client_asr_num = 4
+
+
+class AI_VC(Abstract):
+ # AI
+
+ def __init__(self):
+ try:
+ self.http_get_config()#获取/更新配置参数
+ except Exception as e:
+ usys.print_exception(e)
+ self.VC_30S_timer = osTimer()
+ self.VC_30S_timer.start(30000, 1, self.VC_30S_timer_cb)
+ self.get_config_timer_count = 0
+ self.record_data_save_flag = 0 #是否保存录音文件
+ self.play_data_save_flag = 0#是否保存tts数据到文件
+ self.record_fd = None
+ self.play_fd = None
+ self.is_VC_ACK = 0 #是否开启ack应答模式
+ self.is_long_record = 0 #是否开启长录音模式(语音打断模式)
+ self.ai_OTA = OTA()
+ self.is_auth = 0 #是否开启dmp鉴权
+ self.VC_mode = EventMesh.publish("get_storage_ai_config","VC_mode")#
+ self.VC_mode = 1 #0:短按连续问答模式 1:长按录音模式
+ if self.VC_mode == None :
+ self.VC_mode = 0
+ self.is_up_error= 0 #是否上传错误id
+ self.Close_flag =0 #=1时,连续对话播放完音频就退出
+
+ self.error_data = []
+ self.asr_taskid = ""
+ self.VC_taskid = ""
+ self.VC_server = 86 #0柒牌正式服务器,1:测试服务器1,2:测试服务器2
+
+ self.usb_state = 2 #USB状态初始值
+
+ self.server_ip = EventMesh.publish("get_storage_ai_config","server_ip")#
+ if self.server_ip == None:
+ if self.VC_server == 1:#
+ self.server_ip="118.145.158.207:22083"
+ elif self.VC_server == 2:#
+ self.server_ip="118.145.158.207:22082"
+ elif self.VC_server == 4:#
+ self.server_ip="118.145.158.207:22084"
+ elif self.VC_server == 5:#
+ self.server_ip="amp-wss.raisound.com"
+ elif self.VC_server == 6:#
+ self.server_ip="118.145.158.207:22080"
+ elif self.VC_server == 7:#
+ self.server_ip="118.145.158.207:22080"
+ elif self.VC_server == 8:#
+ self.server_ip="115.190.94.208:22080"
+ elif self.VC_server == 86:#
+ self.server_ip="118.145.158.207:22086"
+ else:
+ #self.server_ip="sevenpin.qipai.com.cn"
+ self.server_ip="118.145.158.207:22082"
+ if dev_type == 'momo':#
+ self.server_ip="118.145.158.207:22080"
+ # elif dev_type == "7PIN":
+ # self.server_ip="sevenpin.qipai.com.cn"
+
+ elif dev_type == "sjgq":
+ self.server_ip="118.145.158.207:22084"
+
+ #开机提示音
+ self.power_on_tone = EventMesh.publish("get_storage_ai_config","power_on_tone")#
+ if dev_type != "7PIN":
+ self.power_on_tone = None
+ if self.power_on_tone == None:
+ if dev_type == "G10":
+ self.power_on_tone = "已开机,您好!我是北科瑞讯智能 AI bot_name"
+ elif dev_type == "7PIN_BK":
+ self.power_on_tone = "小瑞来了!我们一起来愉快地聊天吧!"
+ elif dev_type == "momo":
+ self.power_on_tone = "DuloDulo,我是上古神兽食梦貘,主人可以叫我momo,我来自《山海经》,是一只以梦为食的神秘灵兽,每当颜色朦胧、人们入睡时,我就会悄悄飞到人们的床头,用我长长的鼻子把噩梦统统吞噬掉,只留下甜甜的美梦。从今往后,就由我守护在主人身边,一起度过每一个星河璀璨的夜晚。"
+ elif dev_type == "sjgq":
+ self.power_on_tone = "您好!我是巴马四季甘泉的智能助手。我可以为你解答各种各样的问题,像是有关巴马四季甘泉知识库、中基长寿科学产品、卫斯曼院士国际先进医疗中心的问题,还有日常生活与工作、旅游信息、健康咨询、教育与学习、情感交流、全球资讯、世界文化等方面的问题哦。你有没有这方面的问题想要问我呀?"
+ elif dev_type == "szbst":
+ self.power_on_tone = "深圳百事通来了!请问您有什么需要我帮忙的吗?"
+ else:
+ self.power_on_tone = "您好!我是世界首创柒牌男装AI生活好帮手-bot_name, 很高兴为您服务,我可以帮您解答柒牌公司知识库、日常生活与工作、旅游信息、健康与运动咨询、教育与学习、情感交流、全球资讯、世界文化等问题!请问您有什么需要我帮忙的吗?"
+
+
+ self.VC_record_TYPE = VC_record_TYPE_PCM #0:PCM 1:AMR
+ self.VC_play_TYPE = VC_play_TYPE_PCM #0:PCM 1:mp3
+ self.VC_record_samplerate = 16000
+ self.VC_play_samplerate = 16000
+ self.VAD_data_len = 640 #10ms数据
+ self.is_VAD = 0#=1打开vad打断
+ # ARG_sample_rate, // 采样率
+ # ARG_channel, // 通道数
+ # ARG_frame_size, // 每帧字节数
+ # ARG_energy_threshold, // 能量阈值
+ # ARG_voice_time, // 语音持续时间阈值(ms)
+ # ARG_silence_time, // 静音持续时间阈值(ms)
+ # ARG_silence_start_threshold, // 静音开始阈值(ms)
+ self.vad = None
+ if self.is_VAD == 1:
+ self.vad = VAD.VAD(self.VC_record_samplerate ,1,self.VAD_data_len,600,100,300,100)
+ self.speech_rate = EventMesh.publish("get_storage_ai_config","speech_rate")#语速配置
+ if self.speech_rate == None:
+ self.speech_rate = 0
+ self.VC_TTS_voice_type = EventMesh.publish("get_storage_ai_config","VC_TTS_voice_type")#音色配置
+ if self.VC_TTS_voice_type == None or ("男" in self.VC_TTS_voice_type) == False:
+ if dev_type == "G10" or dev_type == "7PIN_BK"or dev_type == "szbst":
+ self.VC_TTS_voice_type = {
+ "女":{
+ "bot_name":"小瑞",
+ "voice":"zh_female_wanwanxiaohe_moon_bigtts" ,
+ "lang":"zh-cn"
+ },
+ "男":{
+ "bot_name":"小瑞",
+ "voice":"zh_male_wennuanahu_moon_bigtts" ,
+ "lang":"zh-cn"
+ },
+ "童":{
+ "bot_name":"小瑞",
+ "voice":"ICL_zh_female_huoponvhai_tob" ,
+ "lang":"zh-cn"
+ },
+ "粤":{
+ "bot_name":"小瑞",
+ "voice":"zh_female_wanqudashu_moon_bigtts" ,
+ "lang":"zh-hk"
+ },
+ "四川":{
+ "bot_name":"小瑞",
+ "voice":"zh_female_daimengchuanmei_moon_bigtts",
+ "lang":"&lang=zh-cn-sc"
+ },
+ "个性":{
+ "bot_name":"小瑞",
+ "voice":"zh_male_sunwukong_mars_bigtts" ,
+ "lang":"zh-cn"
+ }
+
+ }
+ elif dev_type == 'momo':
+ self.VC_TTS_voice_type = {
+ "女":{
+ "bot_name":"食梦貘",
+ "voice":"zh_female_shaoergushi_mars_bigtts" ,
+ "lang":"zh-cn"
+ },
+ "男":{
+ "bot_name":"食梦貘",
+ "voice":"zh_male_yangguangqingnian_mars_bigtts" ,
+ "lang":"zh-cn"
+ },
+ "童":{
+ "bot_name":"食梦貘",
+ "voice":"ICL_zh_female_huoponvhai_tob" ,
+ "lang":"zh-cn"
+ },
+ }
+ elif dev_type == 'sjgq':
+ self.VC_TTS_voice_type = {
+ "女":{
+ "bot_name":"小巴",
+ "voice":"zh_female_wanwanxiaohe_moon_bigtts" ,
+ "lang":"zh-cn"
+ },
+ "男":{
+ "bot_name":"小巴",
+ "voice":"zh_male_wennuanahu_moon_bigtts" ,
+ "lang":"zh-cn"
+ },
+ "童":{
+ "bot_name":"小巴",
+ "voice":"ICL_zh_female_huoponvhai_tob" ,
+ "lang":"zh-cn"
+ },
+ }
+ else:
+ #女,男,童,粤,川,个性声
+ self.VC_TTS_voice_type = {
+ "女":{
+ "bot_name":"柒妹妹",
+ "voice":"zh_female_wanwanxiaohe_moon_bigtts" ,
+ "lang":"zh-cn"
+ },
+ "男":{
+ "bot_name":"柒先生",
+ "voice":"zh_male_wennuanahu_moon_bigtts" ,
+ "lang":"zh-cn"
+ },
+ "童":{
+ "bot_name":"柒乐乐",
+ "voice":"ICL_zh_female_huoponvhai_tob" ,
+ "lang":"zh-cn"
+ },
+ "粤":{
+ "bot_name":"柒先生",
+ "voice":"zh_female_wanqudashu_moon_bigtts" ,
+ "lang":"zh-hk"
+ },
+ "四川":{
+ "bot_name":"柒妹妹",
+ "voice":"zh_female_daimengchuanmei_moon_bigtts",
+ "lang":"&lang=zh-cn-sc"
+ },
+ "个性":{
+ "bot_name":"柒先生",
+ "voice":"zh_male_sunwukong_mars_bigtts" ,
+ "lang":"zh-cn"
+ },
+ "英语":{
+ "bot_name":"柒先生",
+ "voice":"en_male_smith_mars_bigtts" ,
+ "lang":"zh-cn"
+ }
+
+
+ }
+
+ # self.VC_TTS_voice_type = {0:"zh_female_xinlingjitang_moon_bigtts",1:"zh_male_wennuanahu_moon_bigtts",2:"ICL_zh_female_huoponvhai_tob",
+ # 3:"aliyun::longjiaxin",4:"zh_female_daimengchuanmei_moon_bigtts"}
+ #self.VC_TTS_voice_type = ["aliyun::longxiaoxia","aliyun::longnan","aliyun::longling"]
+
+ #EventMesh.publish("set_storage_ai_config",["VC_TTS_voice_type",self.VC_TTS_voice_type])
+
+ try:
+ self.VC_TTS_voice_key = EventMesh.publish("get_storage_ai_config","VC_TTS_voice_key")#音色配置
+ if self.VC_TTS_voice_key == None :
+ if dev_type == "7PIN_BK":
+ self.VC_TTS_voice_key = "童"
+ #self.VC_TTS_voice_key = "男"
+ elif dev_type == "momo":
+ self.VC_TTS_voice_key = "男"
+ else:
+ self.VC_TTS_voice_key = "男"
+ if self.VC_TTS_voice_key in self.VC_TTS_voice_type:
+ pass
+ else:
+ self.VC_TTS_voice_key = list(self.VC_TTS_voice_type.keys())[0]
+ print("音色配置:{}:{}\r\n\r\n".format(self.VC_TTS_voice_key,self.VC_TTS_voice_type[self.VC_TTS_voice_key]))
+ self.VC_TTS_volume = EventMesh.publish("get_storage_ai_config","VC_TTS_volume")#音量配置
+ except Exception as e:
+ usys.print_exception(e)
+ #配置词
+ self.commands_mode = 1 #=1用大模型判断命令,=0用服务器本地插件判断命令 =2用设备本地判断方式
+ if dev_type == "7PIN_BK":
+ pass
+ # self.commands_mode = 1
+ self.commands = [
+ {
+ "command": "切换音色",#命令
+ "patterns": [ #多种问法,说法
+ "声音改成", "声音改为", "改成", "改为", "换成", "切换成", "变成", "声音"
+ "使用", "设置声音为", "把声音改成", "声音切换到", "用","声音切换的"
+ ],
+ "exact_matches": ["声音改成", "声音改为", "改成", "改为"],#精确匹配的完整短语
+ "has_param": True,# 是否包含参数
+ "param_regexp": r"(?P<cmd_parameter>(男|难|女|童|同|粤|广东话|粤语|四川话|川普|四川口音))",#参数提取正则表达式
+ "require_full_match": False,#是否要求完全匹配
+ "negative_patterns": [],#否定模式(避免误触发)
+ "keyword_threshold": 0.6#关键词匹配阈值
+ },
+ {
+ "command": "音量加大",
+ "patterns": [
+ "音量加大","音量大", "声音大" ,"声音加大","听不清楚","声音太小","太小声了"
+ ],
+ "exact_matches": [],
+ "has_param": False,
+ "param_regexp": "",
+ "require_full_match": False,
+ "negative_patterns": ["声音太大"],
+ "keyword_threshold": 1
+ },
+ {
+ "command": "音量减小",
+ "patterns": [
+ "音量减小","音量小", "声音小","你太吵了","声音太大","太大声了"
+ ],
+ "exact_matches": [],
+ "has_param": False,
+ "param_regexp": "",
+ "require_full_match": False,
+ "negative_patterns": ["声音太小"],
+ "keyword_threshold": 0.8
+ },
+ {
+ "command": "关机",
+ "patterns": [
+ "关机", "关闭电源"
+ ],
+ "exact_matches": ["关机", "关闭电源"],
+ "has_param": False,
+ "param_regexp": "",
+ "require_full_match": True,
+ "negative_patterns": [],
+ "keyword_threshold": 0.8
+ },
+ {
+ "command": "进入工厂模式",
+ "patterns": [
+ "进入工厂模式"
+ ],
+ "exact_matches": ["进入工厂模式"],
+ "has_param": False,
+ "param_regexp": "",
+ "require_full_match": True,
+ "negative_patterns": [],
+ "keyword_threshold": 0.8
+ },
+ {
+
+ "command": "再见",
+ "patterns": [
+ "再见","拜拜","我要走了"
+ ],
+ "exact_matches": [],
+ "has_param": False,
+ "param_regexp": "",
+ "require_full_match": False,
+ "negative_patterns": [],
+ "keyword_threshold": 0.8
+ },
+ {
+
+ "command": "查询信号",
+ "patterns": [
+ "查询信号","信号怎样","信号是多少","信号怎么样"
+ ],
+ "exact_matches": [],
+ "has_param": False,
+ "param_regexp": "",
+ "require_full_match": False,
+ "negative_patterns": ["查询"],
+ "keyword_threshold": 0.8
+ },
+ {
+
+ "command": "查询卡号",
+ "patterns": [
+ "查询卡号","卡号","iccid号","ICCID号"
+ ],
+ "exact_matches": [],
+ "has_param": False,
+ "param_regexp": "",
+ "require_full_match": False,
+ "negative_patterns": ["查询"],
+ "keyword_threshold": 0.8
+ },
+ {
+
+ "command": "查询设备号",
+ "patterns": [
+ "设备号","查询设备号","查询IMEI号"
+ ],
+ "exact_matches": [],
+ "has_param": False,
+ "param_regexp": "",
+ "require_full_match": False,
+ "negative_patterns": ["查询"],
+ "keyword_threshold": 0.8
+ },
+ {
+ "command": "OTA升级",
+ "patterns": [
+ "OTA升级"
+ ],
+ "exact_matches": ["OTA升级"],
+ "has_param": False,
+ "param_regexp": "",
+ "require_full_match": True,
+ "negative_patterns": [],
+ "keyword_threshold": 1
+ },
+ {
+ "command": "查询服务器地址",
+ "patterns": [
+ "查询服务器地址"
+ ],
+ "exact_matches": [],
+ "has_param": False,
+ "param_regexp": "",
+ "require_full_match": False,
+ "negative_patterns": ["查询"],
+ "keyword_threshold": 0.9
+ }
+ ,
+ {
+ "command": "切换对话模式",
+ "patterns": [
+ "切换对话模式","切换兑换模式"
+ ],
+ "exact_matches": [],
+ "has_param": False,
+ "param_regexp": "",
+ "require_full_match": False,
+ "negative_patterns": [],
+ "keyword_threshold": 0.8
+ },
+ {
+ "command": "查询版本",
+ "patterns": [
+ "查询版本号","软件版本"
+ ],
+ "exact_matches": [],
+ "has_param": False,
+ "param_regexp": "",
+ "require_full_match": False,
+ "negative_patterns": ["查询"],
+ "keyword_threshold": 0.6
+ },
+ ]
+ if self.VC_TTS_volume == None:
+ self.VC_TTS_volume = 100
+ self.AI_audio_queue_thread_id = 0
+ self.AI_audio_queue_thread_lock = 0
+ self.AI_VC_send_data_queue_thread_id = 0
+ self.AI_VC_send_data_queue_thread_lock = 0
+ self.AI_ASR_send_data_queue_thread_id = 0
+ self.AI_ASR_send_data_queue_thread_lock = 0
+ self.AI_record_tmp_queue = Queue(100)
+ self.AI_ASR_send_data_queue = Queue(200)
+ self.AI_VC_send_data_queue = Queue(100)
+ self.AI_audio_queue = Queue(100)
+ #self.AI_WS_connect_Queue = Queue(100) #释放用
+ self.AI_TTS_str = ""
+ self.AI_ASR_str = ""
+ self.AI_ASR_flag = 0
+ self.AI_ASR_str_tmp = ""
+ self.AI_ASR_send_buf_len = 0
+ self.AI_ASR_text_tmp = ""
+ self.AI_ASR_text_repet_count = 0
+ # #开始线程
+ # if self.AI_audio_queue_thread_id ==0:
+ # self.AI_audio_queue_thread_id = _thread.start_new_thread(self.AI_audio_queue_thread, ())
+ # else:
+ # print("AI_VC_start :AI_audio_queue_thread_id != 0 ")
+ # if self.AI_VC_send_data_queue_thread_id == 0:
+ # self.AI_VC_send_data_queue_thread_id = _thread.start_new_thread(self.AI_VC_send_data_queue_thread, ())
+
+ self.VC_state = VC_State_None #阿里ai VC状态
+ self.VC_dialog_id = ""#
+ self.VC_message_id=None
+ self.VC_task_id =None
+ self.AI_client_VC = None
+ self.AI_client_VC_recv_id = 0
+ self.AI_client_VC_recv_lock = 0
+ self.AI_client_VC_isconnect =0
+ self.AI_client_VC_debug =0
+
+ self.asr_state = VC_State_None #阿里VC_ASR VC状态
+ self.key_state = 0
+
+ self.AI_client_asr = None
+ self.AI_client_asr_recv_id = 0
+ self.AI_client_asr_recv_lock = 0
+ self.AI_client_asr_isconnect =0
+ self.AI_ASR_timer = osTimer()
+ self.AI_ASR_timer_count = 0
+ self.AI_client_asr_debug =0
+ self.AI_ASR_check_timeout = 0
+ self.AI_ASR_error_timeout = 0
+ self.VC_Thinking_timerout = 0
+
+ self.record_pcm = None
+ self.play_pcm = None
+ self.VC_record_thread_id = 0
+ self.VC_record_thread_lock = 0
+ self.VC_pingping_timerout = 0
+ self.asr_pingping_timerout = 0
+ self.factory_timer = osTimer()
+ self._1S_timer = osTimer()
+ 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.aud = audio.Audio(0)
+ self.aud.setCallback(self.audio_cb)
+ #self.aud.setVolume(self.VC_TTS_volume //10)
+ self.audio_play_state = 1 #音频播放完状态
+ self.close_timerout = 0
+ self.LocalRespondingEnded_timerout = 0
+
+ self.VC_Play_flag = 0
+ self.play_flag = 0
+ self.VC_record_state_flag = 0
+ self.AI_key_long_press_flag = 0
+ self.websocket_error_count = 0
+
+ self.tts_in_data_len = 0
+ self.tts_out_data_len = 0
+ self.VC_satrt_flag = 0
+ self.session_id = ""
+ EventMesh.subscribe("AI_key_press", self.AI_key_press_cb)
+ EventMesh.subscribe("AI_key_release", self.AI_key_release)
+ EventMesh.subscribe("AI_key_long_press", self.AI_key_long_press_cb)
+ EventMesh.subscribe("pwk_key_release", self.pwk_key_release_cb)
+ EventMesh.subscribe("get_AI_audio_queue", self.get_AI_audio_queue)
+ EventMesh.subscribe("get_VC_satrt_flag", self.get_VC_satrt_flag)
+ EventMesh.subscribe("VC_error", self.VC_error)
+ #TTS语音
+ EventMesh.subscribe("AI_client_VC_synevent",self.AI_client_VC_synevent)
+ #EventMesh.publish("AI_client_VC_synevent","")
+ EventMesh.publish("close_led")
+
+ self.bot_name = "柒先生"
+ try:
+ if "bot_name" in self.VC_TTS_voice_type[self.VC_TTS_voice_key]:
+ self.bot_name = self.VC_TTS_voice_type[self.VC_TTS_voice_key]["bot_name"]
+ else:
+ print("not bot_name!!!!!!!!!!!!!!!!!!!!!!")
+ except Exception as e:
+ usys.print_exception(e)
+ try:
+ if self.ai_OTA.min_sys_ota()==1:
+ #if 0:
+ self.AI_TTS_str = "检测到有新版本需要升级啦!升级时可千万别断电或乱按哦,升级完成后设备会自动重启,重启就代表升级成功"
+ EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_VC_start})
+ # if self.ai_OTA.min_sys_ota()==2:
+ # self.AI_TTS_str = "检测到有新版本需要升级啦!电量低于40%,无法保证升级正常执行,请充满电后重启设备再次升级!"
+ # EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_VC_start})
+ else:
+ try:
+ self.ai_OTA.ota_result()
+ self.ai_OTA.pots_ICCID()
+ except Exception as e:
+ usys.print_exception(e)
+ #开机提示语,如果联网失败,直接提示信号弱
+
+ #"voice":{"女":"柒妹妹-huoshan::zh_female_wanwanxiaohe_moon_bigtts","男":"柒先生-huoshan::zh_male_wennuanahu_moon_bigtts","童":"柒乐乐huoshan::ICL_zh_female_huoponvhai_tob","广东":"柒先生-huoshan::zh_female_wanqudashu_moon_bigtts","四川":"柒妹妹-huoshan::zh_female_daimengchuanmei_moon_bigtts","个性":"柒先生-zh_male_sunwukong_mars_bigtts"}
+ #EventMesh.publish("get_storage_ai_config",["powerRestart",1])
+ powerRestart = EventMesh.publish("get_storage_ai_config","powerRestart")#=1非正常重启
+ if powerRestart == None:
+ powerRestart = 0
+ if powerRestart == 1:
+ EventMesh.publish("set_storage_ai_config",["powerRestart",0])
+
+ else:
+ pass
+ #self.AI_TTS_str = self.power_on_tone.replace("bot_name", self.bot_name)
+ print("开机提示:{}".format(self.AI_TTS_str))
+ # EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_VC_start})
+
+
+
+ except Exception as e:
+ usys.print_exception(e)
+
+
+ def post_processor_after_instantiation(self):
+ pass
+ def get_AI_audio_queue(self, event, msg):
+ return self.AI_audio_queue
+ def get_VC_satrt_flag(self, event, msg):
+ return self.VC_satrt_flag
+
+
+ def VC_30S_timer_cb(self, *args): #
+ EventMesh.publish("publish_AI_btnInfo",{"func":self.VC_30S_timer_cb_})
+
+ def VC_30S_timer_cb_(self):
+ self.get_config_timer_count += 1
+ if self.get_config_timer_count >= 2*60*2:#2小时更新配置参数
+ self.get_config_timer_count = 0
+ try:
+ self.http_get_config()#获取/更新配置参数
+ except Exception as e:
+ usys.print_exception(e)
+ #提交错误id
+ def ud_error(self,error_data):
+ response = None
+ if self.is_up_error == 1:
+ try:
+ # currentVersion = versions.Build_Time
+ # currentVersion = "7PIN-"+currentVersion[:10]+"-"+currentVersion[11:-3]
+ url = "http://{}/health?task_id={}".format(self.server_ip,error_data[0]+error_data[1])
+ print(url)
+ response = request.get(url,timeout=5)
+ if response.status_code == 200:
+
+ print("ud_error:ok")
+ else:
+ print("ud_error error!!!!")
+ for i in response.text:
+ print(i)
+ response.close()
+ except Exception as e:
+ usys.print_exception(e)
+ if response != None:
+ response.close()
+ #获取配置参数
+ def http_get_config(self, event=None, msg=None):
+ print("http_get_config")
+
+ response = None
+ #http://180.184.206.142/bz-api/dev/config?deviceId=xxx
+ try:
+ url = "http://dmp.raisound.com/bz-api/dev/config/{}".format(modem.getDevImei())
+ print(url)
+ response = request.get(url,timeout=5)
+ if response.status_code == 200:
+ data = response.json()
+ print("http_get_config:{}".format(data))
+
+ if data:
+ try:
+ if data["code"] == 20000:#有配置
+ if data["data"] :
+ if "version" in data["data"]:
+ config_version = EventMesh.publish("get_storage_ai_config","config_version")#音量配置
+ if config_version != data["data"]["version"]:
+ config_version = data["data"]["version"]
+ EventMesh.publish("set_storage_ai_config",["config_version",config_version])
+ if "VC_TTS_voice_type" in data["data"]:
+ self.VC_TTS_voice_type = data["data"]["VC_TTS_voice_type"]
+ EventMesh.publish("set_storage_ai_config",["VC_TTS_voice_type",self.VC_TTS_voice_type])
+ print("配置VC_TTS_voice_type成功")
+ if "server_ip" in data["data"]:
+ self.server_ip = data["data"]["server_ip"]
+ EventMesh.publish("set_storage_ai_config",["server_ip",self.server_ip])
+ print("配置server_ip成功")
+ if "power_on_tone" in data["data"]:
+ self.power_on_tone = data["data"]["power_on_tone"]
+ EventMesh.publish("set_storage_ai_config",["power_on_tone",self.power_on_tone])
+ print("配置power_on_tone成功")
+
+ except Exception as e:
+ usys.print_exception(e)
+ else:
+ print("status_code:{}".format(response.status_code))
+ print("http_get_config:error!!!!!!!!!!")
+ response.close()
+ except Exception as e:
+ usys.print_exception(e)
+ if response != None:
+ response.close()
+
+ def audio_cb(self,event):
+ if event == 0:
+ self.audio_play_state =1
+ #EventMesh.publish("set_audio_state", 1)
+ print('audio-play start.')
+ elif event == 7:
+ self.audio_play_state = 0
+ #EventMesh.publish("set_audio_state", 0)
+ print('audio-play finish.!!!!!!')
+
+ def AI_key_press_cb(self,event,msg):#按键按下
+ print("AI_key_press")
+ self.get_config_timer_count = 0
+ self.key_state = 1
+ self.Close()
+ if dev_type == "7PIN" :
+ self.aud.aud_tone_play(10,200)#播放按键音
+ #self.aud.aud_tone_play(10,200)#播放按键音
+ self.AI_TTS_str = ""#你好,有什么吩咐"
+ self.AI_ASR_str = ""
+ self.AI_ASR_str_tmp = ""
+ self.VC_state = VC_State_None
+ # if self.VC_state != VC_State_None:
+ # EventMesh.publish("publish_AI_btnInfo",{"func":self.Close})
+ # EventMesh.publish("publish_AI_btnInfo",{"func":utime.sleep_ms,'data':(10)})
+ #if self.VC_record_state_flag >1:#如果在录音,就先停止录音
+ self.VC_Speech_End()
+
+ self.VC_Speech_Start()
+ self.AI_VC_start()
+ #self.chenggong_tone()
+ # self.Close()
+ # self.AI_VC_start()
+ self.AI_key_long_press_flag = 0
+
+
+ def AI_key_release(self, event, msg):#按键弹起
+ print("AI_key_release123")
+ self.key_state = 0
+ if self.AI_key_long_press_flag == 1 :#有长按
+ #self.AI_client_VC_end_speech()
+ #EventMesh.publish("publish_AI_btnInfo",{"func":utime.sleep_ms,'data':(1000)})
+ #EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_client_asr_StopTranscription_requset})
+ #self.AI_client_asr_StopTranscription_requset()#请求停止
+ if self.VC_mode == 1 :#长按单次问答模式
+ # if self.AI_ASR_str_tmp != "":
+ print("AI_key_release:asr_str:{}".format(self.AI_ASR_str))
+ EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_VC_start})
+ self.AI_TTS_str = "请您按住中间的按钮开始讲话,讲完松开即可 "
+ # EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_VC_start})
+ self.AI_client_VC_end_speech()
+ pass
+
+ else :
+ if self.VC_mode == 1 :#长按单次问答模式
+ try:
+ EventMesh.publish("publish_AI_btnInfo",{"func":self.Close})
+ except Exception as e:
+ usys.print_exception(e)
+ EventMesh.publish("publish_AI_btnInfo",{"func":self.key_prompt}) #提示请您按住中间的按钮开始讲话,讲完松开即可
+ # self.AI_TTS_str = "请您按住中间的按钮开始讲话,讲完松开即可 "
+ # EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_VC_start})
+ pass
+
+ #self.VC_Speech_End()
+ def AI_key_long_press_cb(self, event, msg):#按键长按
+ print("AI_key_long_press")
+ self.AI_key_long_press_flag = 1
+
+ def pwk_key_release_cb(self, event, msg):#电源键短按,关闭
+ print("pwk_key_release")
+ EventMesh.publish("close_hr_sop2")#关闭健康测试
+ if self.AI_TTS_str == "":
+ #close_all_ledm()
+ EventMesh.publish("close_all_led")
+ #EventMesh.publish("stop_led_timer")
+ EventMesh.publish("publish_AI_btnInfo",{"func":self.Close})
+
+ def key_prompt(self):
+ EventMesh.publish("audio_montage_play",["key_prompt.mp3"])
+ #self.aud.play(1,1,'U:/static/key_prompt.mp3')#提示请您按住中间的按钮开始讲话,讲完松开即可
+ def VC_error(self, event, msg):#错误播报
+ self.websocket_error()
+ #EventMesh.publish("publish_AI_btnInfo",{"func":self.websocket_error})
+ def set_VC_record_state_flag(self,data):
+
+ self.VC_record_state_flag = data
+ print("set_VC_record_state_flag:{}".format(self.VC_record_state_flag))
+ #开始录音,不缓存,直接发
+ def VC_Speech_Start_now(self):
+ self.VC_Speech_Start()
+ if self.VC_record_state_flag == 1:
+ self.VC_record_state_flag =2
+ print("VC_Speech_Start_now:{}".format(self.VC_record_state_flag))
+ #开始录音,先缓存到buf,等服务器响应再发
+ def VC_Speech_Start(self):
+ try:
+
+ #self.VC_state = VC_State_SpeechStart
+ print("VC_Speech_Start VC_record_state_flag:{} self.AI_ASR_flag:{}!!!!!!!!".format(self.VC_record_state_flag,self.AI_ASR_flag))
+ if self.AI_ASR_flag != 0:
+ return
+
+ if self.VC_record_state_flag == 0:
+
+ self.VC_record_thread_close()#关闭录音线程
+ _thread.stack_size(self.Audio_buf_size+8*1024)
+ self.VC_record_thread_id = _thread.start_new_thread(self.VC_record_thread,())
+ _thread.stack_size(8*1024)
+ print("self.VC_record_thread_id:{}".format(self.VC_record_thread_id))
+ try:
+
+ if self.VC_record_TYPE == VC_record_TYPE_AMR :
+ try :
+ self.record.stream_start(audio.Record.AMRNB, self.VC_record_samplerate, 0)
+ except Exception as e:
+ usys.print_exception(e)
+ elif self.VC_record_TYPE == VC_record_TYPE_PCM:
+ print("record_pcm.stream_read_start()!!!!!!!!!!!!")
+ self.record.stream_start(audio.Record.WAV, self.VC_record_samplerate, 0)
+ # if self.record_pcm != None:
+ # try:
+ # self.record_pcm.stream_stop()
+ # self.record_pcm.close()
+ # self.record_pcm = None
+ # except Exception as e:
+ # usys.print_exception(e)
+ # if self.record_pcm == None:
+ # ret = self.record_pcm = audio.Audio.PCM(0,1,16000,0,1,2)
+ # print("audio.Audio.PCM:ret:{}".format(ret))
+ # ret = self.record_pcm.stream_read_start()
+ # print("self.record_pcm.stream_read_start:ret:{}".format(ret))
+ except Exception as e:
+ usys.print_exception(e)
+
+ self.VC_record_state_flag = 1
+
+ except Exception as e:
+ self.websocket_error()
+ self.VC_record_state_flag = 1
+ self.VC_Speech_End()#关闭录音
+ usys.print_exception(e)
+ #停止录音
+ def VC_Speech_End(self):
+ try:
+ self.AI_ASR_flag = 0
+ self.AI_ASR_str_tmp = ""
+ self.AI_ASR_str = ""
+ #EventMesh.publish("publish_AI_btnInfo",{"func":self.websocket_deconnect_asr})
+
+ if self.VC_record_state_flag == 0:
+ return
+ #self.AI_client_asr_StopTranscription_requset()#请求停止
+ if self.VC_record_TYPE == VC_record_TYPE_AMR:
+ self.record.stream_stop()
+ self.record.stop()#关闭录音
+ Record_read_buf = bytearray(self.Audio_buf_size)
+ for i in range(10):
+ Record_len = self.record.stream_read(Record_read_buf, self.Audio_buf_size)
+ print("Record_len:!!!!!!{}".format(Record_len))
+ if Record_len <= 0:
+ break
+ elif self.VC_record_TYPE == VC_record_TYPE_PCM:
+ self.record.stream_stop()
+ self.record.stop()#关闭录音
+ Record_read_buf = bytearray(self.Audio_buf_size)
+ for i in range(10):
+ Record_len = self.record.stream_read(Record_read_buf, self.Audio_buf_size)
+ print("Record_len:!!!!!!{}".format(Record_len))
+ if Record_len <= 0:
+ break
+ # if self.record_pcm != None:
+ # try:
+ # self.record_pcm.stream_stop()
+ # self.record_pcm.close()
+ # self.record_pcm = None
+ # except Exception as e:
+ # usys.print_exception(e)
+ except Exception as e:
+ usys.print_exception(e)
+ self.VC_record_thread_close()#关闭录音线程
+ if self.AI_record_tmp_queue.empty() != True:
+ self.AI_record_tmp_queue.clear()
+
+ self.VC_record_state_flag = 0
+ print("VC_Speech_End VC_record_state_flag:{}!!!!!!!!".format(self.VC_record_state_flag))
+ #关闭录音线程
+ def VC_record_thread_close(self):
+ if self.VC_record_thread_id != 0:
+ count =50
+ while True:
+ count -= 1
+ if self.VC_record_thread_lock == 1:
+ self.VC_record_thread_lock = 2
+ if self.VC_record_thread_lock == 0 or count <=0:
+ break
+ else:
+ print("VC_record_thread_thread going:{}...".format(count))
+ utime.sleep_ms(1)
+ self.VC_record_thread_lock = 0
+ print("VC_record_thread_thread_close")
+ try:
+ _thread.stop_thread(self.VC_record_thread_id)
+ except Exception as e:
+ usys.print_exception(e)
+ self.VC_record_thread_id = 0
+ #获取录音数据
+ def VC_record_thread(self):
+ ##return
+ print("VC_record_thread start!!!!!!!!!!!!!!!!!!!!\r\n")
+ count = 0
+ RequestToSpeak_flag = 0
+ # try:
+ # uos.remove('/usr/test.pcm')
+ # except Exception as e:
+ # usys.print_exception(e)
+ #record_data_queue = Queue(100)
+ #fd = open('/usr/test.pcm','w')
+ # if self.VC_record_TYPE == 1:
+ # h_data= [0x23,0x21 ,0x41 ,0x4D ,0x52 ,0x0A ]
+ # h_data_b = bytes(h_data)
+ # self.AI_client_VC_send(h_data_b)
+ AI_record_tmp_queue_len = 0
+ vad_buf = bytearray()
+ VAD_data_count = 0
+ vad_state = 0
+ self.VAD_count = 0
+ while True:
+ try:
+ if self.VC_record_thread_lock == 2:
+ break
+ self.VC_record_thread_lock = 1
+ # 死循环接收数据
+ #if self.VC_state == VC_State_SpeechStart:
+ Record_read_buf = bytearray(self.Audio_buf_size)
+
+ Record_len = 0
+ if self.VC_record_TYPE == VC_record_TYPE_PCM:#pcm
+ Record_len = self.record.stream_read(Record_read_buf, self.Audio_buf_size)
+ #utime.sleep_ms(60)
+
+ else :
+
+ Record_len = self.record.stream_read(Record_read_buf, self.Audio_buf_size)
+ utime.sleep_ms(600)
+
+ #Record_len = 1024*2
+ #print("VC_record_thread:{}".format(Record_len))
+ if Record_len > 0:
+ read_buf = bytes(Record_read_buf[:Record_len])
+ # print("Record_len:{},{},{}".format(Record_len,self.VC_state,self.VC_record_state_flag))
+ #VAD检测
+ if self.is_VAD == 1:
+ vad_state = 0
+ tmp_c = 1000
+ while True:
+ tmp_c -=1
+ if tmp_c <=0:
+ break
+ #vad_buf_len = len(vad_buf)
+ if VAD_data_count == 0:#没数据的时候
+ vad_buf = Record_read_buf[:self.VAD_data_len]
+ VAD_data_count = self.VAD_data_len
+ self.vad.custom_vad_reset()#重置vad
+ else:#有数据的时候
+ if Record_len - VAD_data_count < self.VAD_data_len :#剩余长度不够一次填充,先保留,但不填算法
+ vad_buf = Record_read_buf[VAD_data_count:Record_len]
+ VAD_data_count = 0
+ break
+ else:#剩余长度够填一次数据
+ vad_buf = Record_read_buf[VAD_data_count:VAD_data_count+self.VAD_data_len]
+ VAD_data_count += len(vad_buf)
+ #print("vad_buf_len:{},{}".format(len(vad_buf),VAD_data_count))
+
+ if len(vad_buf) >= self.VAD_data_len:
+ vad_state = self.vad.custom_vad_process(vad_buf,len(vad_buf))#给vad数据
+ #print("vad_state:{}".format(vad_state))
+
+ if VAD_data_count >= Record_len:
+ VAD_data_count = 0
+ break
+ if vad_state == 1:
+ print("检测到VAD=1!!!!!!!!!!!!!")
+ print("检测到VAD=1!!!!!!!!!!!!!")
+ print("检测到VAD=1!!!!!!!!!!!!!")
+
+ EventMesh.publish("publish_AI_btnInfo",{"func":self.VC_Play_Pause,"data":1})#停止音频
+ # EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_client_VC_RequestToSpeak})#打断
+ # RequestToSpeak_flag = 1
+
+ self.VAD_count+=1
+ if self.VAD_count >= 2:
+ EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_client_VC_RequestToSpeak})#打断
+
+ else:
+ if self.VAD_count != 0:
+ EventMesh.publish("publish_AI_btnInfo",{"func":self.VC_Play_Pause,"data":0})#恢复音频播放
+ self.VAD_count = 0
+ if self.VC_state >= VC_State_TTSStart:
+ pass
+ if vad_state == 1:
+ self.AI_record_tmp_queue.put(read_buf)#入缓存队列
+ AI_record_tmp_queue_len += len(read_buf)
+
+
+ else:
+ VAD_data_count = 0
+ if self.VC_record_state_flag <=1 :#没发送前先存起来
+ self.AI_record_tmp_queue.put(read_buf)
+ AI_record_tmp_queue_len += len(read_buf)
+ else:
+ AI_record_tmp_queue_len = 0
+ while True:
+ if self.AI_record_tmp_queue.empty() == True:
+ break
+ else:
+ pass
+ self.AI_client_VC_send(self.AI_record_tmp_queue.get()) #发送之前存的数据
+ self.AI_client_VC_send(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
+
+
+
+
+ #print("VC_record_thread:{}".format(len(read_buf)))
+ #count+=len(read_buf)
+ # if count>=500*1024:#结束
+ # self.AI_client_VC_end_speech()
+ # break
+ # count+=1
+ # if count %10 == 0:
+ # print("VC_record_thread on line {} asr recv :{} send:{}".format(self.VC_record_state_flag,_thread.threadIsRunning(self.AI_client_asr_recv_id),_thread.threadIsRunning(self.AI_VC_send_data_queue_thread_id)))
+
+ # if self.VC_state >= VC_State_SpeechEnd:
+ # break
+
+ except Exception as e:
+ usys.print_exception(e)
+ #break
+ self.VC_record_thread_lock = 0
+ utime.sleep_ms(100)
+ #fd.close()
+ print("VC_record_thread:exit")
+ self.VC_record_thread_id = 0#线程退出
+ self.VC_record_thread_lock = 0
+###################################################### VC ###################################################################################
+ def websocket_connect_VC(self):
+ print("websocket_connect_VC:{} e:{}!!!!!!!!!!!!!!!!!!!!!".format(self.AI_client_VC_isconnect,self.AI_client_VC_debug))
+ if self.AI_client_VC_isconnect == 1:
+ return
+ # 创建VC客户端
+ try:
+ signal = net.csqQueryPoll()
+ if signal == -1 or sim.getStatus() != 1:#网络正常
+ self.websocket_error()
+ return
+
+ req_str = ""
+ ack = ""
+ if self.is_VC_ACK == 1:
+ ack = "ack=1"
+ lang = "lang=zh-cn"#普通话测试环境
+ try:
+ if "loang" in self.VC_TTS_voice_type[self.VC_TTS_voice_key]:
+ lang = self.VC_TTS_voice_type[self.VC_TTS_voice_key]["lang"]
+ else:
+ print("not lang!!!!!!!!!!!!!!!!!!!!!!")
+ except Exception as e:
+ usys.print_exception(e)
+ if dev_type == "G10":
+ platform = "platform=huoshan&is_boot=1"
+ #platform = "platform=raisound"
+ #platform = "platform=aliyun"
+ elif dev_type == "7PIN_BK":
+ platform = "platform=huoshan"
+ #platform = "platform=raisound&bot_type=dify"
+ platform = "platform=raisound&bot_type=fourseason_water"
+ pass
+ elif dev_type == 'momo':#
+ #22080/voice-chat/v2.1/ws?platform=raisound&bot_type=deepseek
+ platform = "platform=raisound&bot_type=shimeng_mo"
+ elif dev_type == "sjgq":
+ platform = "platform=raisound"
+ else:
+ platform = "platform=huoshan"
+ #platform = "platform=huoshan&is_boot=1"
+ #女,男,童,粤,川
+ self.bot_name = "柒先生"
+ try:
+ if "bot_name" in self.VC_TTS_voice_type[self.VC_TTS_voice_key]:
+ self.bot_name = self.VC_TTS_voice_type[self.VC_TTS_voice_key]["bot_name"]
+ else:
+ print("not bot_name!!!!!!!!!!!!!!!!!!!!!!")
+ except Exception as e:
+ usys.print_exception(e)
+
+ # Headers = {'X-NLS-Token':'0c8b8f05a46f423096be64a9c4c46310'}
+ # self.AI_client_VC = uwebsocket.Client.connect('wss://nls-gateway-cn-beijing.aliyuncs.com/ws/v1',headers=Headers, debug=False)
+ token = EventMesh.publish("get_dev_token")
+ print("token:{}".format(token))
+ if dev_type == 'momo' :#
+ req_str = "voice-chat/v2.1/ws?is_auth={}&{}&{}".format(self.is_auth,platform,lang)
+ elif dev_type == '7PIN_BK':
+ #req_str = "voice-chat/v2.1/ws?is_auth={}&{}&{}".format(self.is_auth,platform,lang)
+ req_str = "voice-chat/ws?is_auth={}&{}&{}".format(self.is_auth,platform,lang)
+ elif dev_type == "sjgq":
+ req_str = "22085/voice-chat/ws?is_auth={}&{}&{}".format(self.is_auth,platform,lang)
+ elif dev_type == "G10":
+ req_str = "vc/chat?is_auth={}".format(self.is_auth)
+ else:
+ req_str = "voice-chat/ws?is_auth={}&{}&{}".format(self.is_auth,platform,lang)
+ req_str = "vc/chat?is_auth={}".format(self.is_auth)
+ url = 'ws://{}/{}&dt={}'.format(self.server_ip,req_str,token)
+ #url = 'ws://115.190.94.208:22080/vc/coze?dt={}'.format(token)
+
+ print("VC VC:url{}".format(url))
+ self.AI_client_VC = uwebsocket.Client.connect(url, debug=True)
+ #self.AI_WS_connect_Queue.put(self.AI_client_VC)
+
+
+ print("websocket_connect_VC:OK!!!!!!!!!!!!!!!!!!!!!")
+ except Exception as e: #网络连接异常
+ usys.print_exception(e)
+ print("websocket_connect_VC error!!!\r\n")
+ str_error = str(e)
+ if str_error.find("[Errno 22] EINVAL")!= -1:
+ print("websocket_connect_VC:str_error:{}".format(str_error))
+ print("[Errno 22] EINVAL!!!\r\n")
+ print("[Errno 22] EINVAL!!!\r\n")
+ print("[Errno 22] EINVAL!!!\r\n")
+ print("[Errno 22] EINVAL!!!\r\n")
+ self.websocket_error()
+ EventMesh.publish("set_storage_ai_config",["powerRestart",1])#调试临时关闭
+ utime.sleep_ms(1000)
+ self.aud.stopPlayStream()
+ self.aud.stopAll()
+ Power.powerRestart()
+
+ self.websocket_error()
+ return
+ #print("AI_client_VC:{}".format(self.AI_client_VC))
+ if self.AI_client_VC == None:
+ EventMesh.publish("update_dev_token")#获取token
+ self.websocket_error()
+ return
+ self.AI_client_VC_debug+=1
+ utime.sleep_ms(10)
+ self.AI_client_VC.settimeout(5)
+ #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)
+ self.AI_VC_send_data_queue_thread_id = _thread.start_new_thread(self.AI_VC_send_data_queue_thread, ())
+ _thread.stack_size(8*1024)
+ print("AI_VC_start :AI_VC_send_data_queue_thread_id :{} ".format(self.AI_VC_send_data_queue_thread_id))
+ self.AI_client_VC_recv_thread_close()#关闭读线程
+ # 线程接收数据
+ _thread.stack_size(self.Audio_buf_size+8*1024)
+ self.AI_client_VC_recv_id = _thread.start_new_thread(self.AI_client_VC_recv, (self.AI_client_VC,))
+ _thread.stack_size(8*1024)
+ self.AI_client_VC_isconnect = 1
+ print("websocket_connect_VC end")
+
+ def websocket_error(self,TTS_str=None):
+ print("websocket_error1!!!!")
+ self.Close()
+ print("websocket_error1.1!!!!")
+ print("websocket_error!!!!")
+ print("websocket_error!!!!")
+ self.VC_Thinking_timerout = 0
+ self.VC_satrt_flag = 0
+ self.AI_TTS_str = ""
+ self.AI_ASR_str = ""
+ self.AI_ASR_str_tmp = ""
+ self.AI_ASR_flag = 0
+ self.VC_Speech_End()
+ EventMesh.publish("close_led")
+ if TTS_str == None:
+ self.websocket_error_count+=1
+ # if self.websocket_error_count <=3:
+ # EventMesh.publish("audio_montage_play",["xinhaoruo1.mp3"])
+ if self.websocket_error_count <10 :
+ EventMesh.publish("audio_montage_play",["xinhaoruo1.mp3"])
+ elif self.websocket_error_count >=10:
+ EventMesh.publish("paly_iccid_imei")
+ # else:
+ # EventMesh.publish("audio_montage_play",["R_SIM_FAILE.mp3"])
+ self.aud.play(1,1,'U:/static/R_SIM_FAILE.mp3')
+ if self.websocket_error_count <3 :
+ utime.sleep_ms(3000)
+ EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_VC_start})
+ else:
+ print("websocket_error:tts:{}".format(TTS_str))
+ self.AI_TTS_str = TTS_str
+ EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_VC_start})
+ print("websocket_error2")
+
+
+ print("websocket_error4")
+
+
+ def websocket_deconnect_VC(self):
+ #print("websocket_deconnect_VC {}!!!!!!!".format(self.AI_client_VC_isconnect))
+ print("websocket_deconnect_VC!!!!!!!")
+ self.AI_client_VC_recv_thread_close()#关闭读线程
+ self.AI_client_VC_recv_id = 0
+ if self.AI_client_VC_isconnect == 1 or self.AI_client_VC!=None:
+ try:
+ self.AI_client_VC_isconnect = 0
+ count = 500
+ while True:#等待发完数据
+ count-=1
+ if count <=0 or self.AI_VC_send_data_queue_thread_lock == 0:
+ break
+ utime.sleep_ms(1)
+
+ try:
+ self.AI_client_VC.close()
+ self.AI_client_VC_debug -=1
+ #self.AI_client_VC=None
+ except Exception as e:
+ usys.print_exception(e)
+ try :
+ self.AI_client_VC.close()
+ self.AI_client_VC_debug -=1
+ #self.AI_client_VC=None
+ except Exception as e:
+ usys.print_exception(e)
+ try :
+ self.AI_client_VC._close()
+ except Exception as e:
+ usys.print_exception(e)
+ self.AI_client_VC = None
+ except Exception as e:
+ usys.print_exception(e)
+ print("websocket_deconnect_VC {}!!!!!!!".format(self.AI_client_VC_isconnect))
+ #websocket发送ping
+ def AI_client_VC_ping(self):
+ pass
+ if self.AI_client_VC_isconnect == 1:
+ #self.AI_client_VC.write_frame(0x09,b'ping ping')
+ self.AI_client_VC_send("ping")
+ print("VC: ping ping")
+
+ #websocket发送数据
+ def AI_client_VC_send(self,data_str):
+ # if isinstance(data_str, str):#是字符串
+ # print("AI_client_VC_send:{}".format(data_str))
+ # pass
+ # else:
+ # print("AI_client_VC_send:len{}".format(len(data_str)))
+ self.AI_VC_send_data_queue.put([AI_client_VC_num,data_str])
+ #关闭数据发送线程
+ def AI_VC_send_data_queue_thread_close(self):
+ if self.AI_VC_send_data_queue_thread_id != 0:
+ count =500
+ while True:
+ count -= 1
+ if self.AI_VC_send_data_queue_thread_lock == 0 or count <=0:
+ break
+ else:
+ self.AI_VC_send_data_queue_thread_lock = 2
+ print("AI_VC_send_data_queue_thread going:{}...".format(count))
+ utime.sleep_ms(1)
+ if self.AI_VC_send_data_queue.empty()!=True:
+ self.AI_VC_send_data_queue.clear()
+ self.AI_VC_send_data_queue_thread_lock = 0
+ print("AI_VC_send_data_queue_thread_close")
+ try:
+ _thread.stop_thread(self.AI_VC_send_data_queue_thread_id)
+ except Exception as e:
+ usys.print_exception(e)
+ self.AI_VC_send_data_queue_thread_id = 0
+ #发送数据队列
+ def AI_VC_send_data_queue_thread(self):
+ print("AI_VC_send_data_queue_thread:start")
+ count_t = 0
+ while True:
+ if self.AI_VC_send_data_queue_thread_lock == 2:
+ print("AI_VC_send_data_queue_thread,该退出了")
+ break
+ if self.AI_VC_send_data_queue.empty() :#不能去掉,去掉会卡死
+ self.AI_VC_send_data_queue_thread_lock = 0
+ count_t+=1
+ # if count_t%200 == 0:
+ # print("self.AI_VC_send_data_queue.empty")
+ utime.sleep_ms(1)
+ else:
+ #data[0]是websocket连接对象编号,data[1]是数据
+ #print("AI_VC_send_data_queue_thread:get")
+
+ self.AI_VC_send_data_queue_thread_lock = 1
+ data = self.AI_VC_send_data_queue.get()
+
+
+ #print("AI_VC_send_data_queue_thread:num{} len{}".format(data[0],len(data[1])))
+ if data != None:
+ try:
+ #data["func"](data["data"])
+ # 发送数据
+ #bytes_data = bytes(data[1])
+ #data[0].send(data[1])
+ #print("AI_VC_send_data_queue_thread:len:{}".format(len(data[1])))
+ #print("AI_VC_send_data_queue_thread on line asr recv :{} vc recv:{}".format(_thread.threadIsRunning(self.AI_client_asr_recv_id),_thread.threadIsRunning(self.AI_client_VC_recv_id)))
+ if data[0] == AI_client_VC_num:
+
+ if isinstance(data[1], str):#是字符串
+ self.VC_pingping_timerout = 0
+ print("VC VC: send_data:{}".format(data[1]))
+ else:
+ pass
+ # print("VC: send_data len:{}".format(len(data[1])))
+ if self.AI_client_VC != None and self.AI_client_VC_isconnect == 1:
+ self.AI_client_VC.send(data[1])
+ else:
+ print("VC VC: send_data:ERROR:{}".format(len(data[1])))
+ #print("VC: send_data end")
+
+ #print("VC: send_data end")
+ except Exception as e:
+ print("DeviceInfo_queue_thread:ERROR:{}".format(e))
+ usys.print_exception(e)
+ if data[0] == AI_client_VC_num:
+ #self.websocket_error()
+ pass
+
+
+ try:
+ if self.AI_client_VC_isconnect != 0:
+ print("VC发送数据错误,退出")
+ EventMesh.publish("publish_AI_btnInfo",{"func":self.websocket_error,"data":"VC发送出错了,请重试"})
+ self.ud_error(["VC",self.VC_taskid])
+ except Exception as e: #网络连接异常
+ usys.print_exception(e)
+
+ utime.sleep_ms(1)
+ self.AI_VC_send_data_queue_thread_lock = 0
+ #VC关闭读线程
+ def AI_client_VC_recv_thread_close(self):
+ if self.AI_client_VC_recv_id != 0:
+ count =500
+ while True:
+ count -= 1
+ if self.AI_client_VC_recv_lock == 1:
+ self.AI_client_VC_recv_lock = 2
+ if self.AI_client_VC_recv_lock == 0 or count <=0:
+ break
+ else:
+ print("AI_client_VC_recv_thread going:{}...".format(count))
+ utime.sleep_ms(1)
+ self.AI_client_VC_recv_lock = 0
+ print("AI_client_VC_recv_thread_close")
+ try:
+ _thread.stop_thread(self.AI_client_VC_recv_id)
+ except Exception as e:
+ usys.print_exception(e)
+ self.AI_client_VC_recv_id = 0
+ #Ai VC websocket返回数据
+ def AI_client_VC_recv(self,cli):
+ count = 0
+ asr_led_flag = 0
+ tts_led_flag = 0
+ while True:
+ try:
+ # 死循环接收数据
+ self.AI_client_VC_recv_lock = 0
+
+ count+=1
+ if self.VC_state >= VC_State_TTSStart and (self.tts_in_data_len - self.tts_out_data_len > 64*1024 or count>5):
+ count = 0
+ utime.sleep_ms(1)
+ if self.VC_state < VC_State_TTSStart:
+ utime.sleep_ms(1)
+ recv_data = cli.recv()
+ if self.AI_client_VC_recv_lock == 2:
+ print("AI_client_VC_recv 该退出了")
+ break
+ self.AI_client_VC_recv_lock = 1
+ self.close_timerout = 0#服务器有返回清零退出时间
+ if recv_data == "websocket close":
+ # 服务器关闭连接
+ print("VC 服务器关闭连接!!!!!!!!!!!!!!!!!!!!!!!!!!!")
+ #self.AI_client_VC_isconnect = 0
+ #self.websocket_deconnect_VC()
+ #EventMesh.publish("publish_AI_btnInfo",{"func":self.websocket_deconnect_asr})
+ # #EventMesh.publish("publish_AI_btnInfo",{"func":utime.sleep_ms,'data':(1500)})
+ #EventMesh.publish("publish_AI_btnInfo",{"func":self.websocket_connect_asr})
+ EventMesh.publish("publish_AI_btnInfo",{"func":self.websocket_error,"data":"VC连接断开了,请重试"})
+ self.ud_error(["VC",self.VC_taskid])
+ break
+ elif recv_data == "":#客户端关闭连接
+ print("VC VC :客户端关闭连接")
+ EventMesh.publish("publish_AI_btnInfo",{"func":self.websocket_error,"data":"VC连接断开了,请重试"})
+ self.ud_error(["VC",self.VC_taskid])
+ break
+ try:
+ self.websocket_error_count = 0
+ if isinstance(recv_data, str):#返回的是字符串
+ print("VC VC:recv_data:{}".format(recv_data))
+ jsload_data = ujson.loads(recv_data)
+ #print("AI_client_VC_recv jsload_data = {}".format(jsload_data))
+ #self.LocalRespondingEnded_timerout = 0
+ if jsload_data["event"] == "started" :#会话开始
+ #payload = jsload_data["payload"]
+ # self.VC_dialog_id = payload["dialog_id"]
+ # self.VC_task_id = jsload_data["task_id"]
+ EventMesh.publish("open_led_blue")
+ print("VC:Started str{}!!!!!!!!\r\n".format(self.AI_TTS_str))
+ if self.AI_TTS_str == "":
+ #开始上传语音
+
+ if self.VC_mode == 0 :
+ self.VC_record_state_flag =2
+ else:
+ EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_client_VC_send_speech})
+
+
+ else:
+ EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_client_VC_synthesis})
+ self.VC_state = VC_State_None
+ elif jsload_data["event"] == "asr.started" :#asr开始
+ self.VC_state = VC_State_SpeechStart
+ if self.VC_mode == 1 :
+ self.VC_record_state_flag = 2
+ EventMesh.publish("open_led_blue")
+ elif jsload_data["event"] == "asr.result" :#asr结果
+ self.AI_ASR_str = jsload_data["payload"]["content"]
+ if self.commands_mode ==2:
+ ret= self.check_text(self.AI_ASR_str)
+ if ret == 0:#配置指令
+
+ if self.AI_VC_send_data_queue.empty()!=True:
+ self.AI_VC_send_data_queue.clear()
+ if self.AI_ASR_send_data_queue.empty()!=True:
+ self.AI_ASR_send_data_queue.clear()
+ self.AI_ASR_send_buf_len = 0
+ EventMesh.publish("open_led_all")
+ try:
+
+ EventMesh.publish("publish_AI_btnInfo",{"func":self.VC_Speech_End})
+ EventMesh.publish("publish_AI_btnInfo",{"func":self.websocket_deconnect_VC})
+ EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_VC_start})
+ except Exception as e:
+ usys.print_exception(e)
+ continue
+ elif ret == 1:#不处理
+ pass
+ EventMesh.publish("open_led_blue")
+ elif jsload_data["event"] == "asr.completed" :#asr 终止的标识
+ #self.VC_Speech_End()
+ #EventMesh.publish("publish_AI_btnInfo",{"func":self.VC_Speech_End})
+ if self.record_data_save_flag == 1:
+ if self.record_fd :
+ self.record_fd.close()
+ self.record_fd = None
+ # if dev_type != "7PIN" :
+ #EventMesh.publish("publish_AI_btnInfo",{"func":self.send_tone})
+ elif jsload_data["event"] == "vad.silence" :#VAD 终止的标识
+ pass
+ #EventMesh.publish("publish_AI_btnInfo",{"func":self.VC_Speech_End})
+ elif jsload_data["event"] == "llm.created" :#会话开始
+ self.VC_state = VC_State_Thinking
+ # EventMesh.publish("publish_AI_btnInfo",{"func":self.VC_Play_Start})
+ pass
+ elif jsload_data["event"] == "llm.delta" :#llm返回数据
+ if self.is_VAD == 0:
+ if self.VC_record_state_flag == 1:#llm返回数据还没停止,就先停止
+ EventMesh.publish("publish_AI_btnInfo",{"func":self.VC_Speech_End})
+ elif jsload_data["event"] == "tts.started" :#tts开始
+ self.VC_state = VC_State_TTSStart
+ if self.is_VAD == 0:
+ EventMesh.publish("publish_AI_btnInfo",{"func":self.VC_Speech_End})
+ EventMesh.publish("publish_AI_btnInfo",{"func":self.VC_Play_Start})
+
+ #self.VC_Play_Start()
+ elif jsload_data["event"] == "tts.completed" :#tts结束
+ EventMesh.publish("publish_AI_btnInfo",{"func":self.VC_Play_Start})
+ self.LocalRespondingEnded_timerout = 8
+ self.VC_state = VC_State_TTSEnd
+ pass
+
+ elif jsload_data["event"] == "canceled" :#打断
+ EventMesh.publish("publish_AI_btnInfo",{"func":self.VC_Speech_Start_now})#开始录音
+ self.VC_state = VC_State_None
+ elif jsload_data["event"] == "completed" :#会话结束
+ #EventMesh.publish("open_led_green")#绿色
+
+ self.LocalRespondingEnded_timerout = 8
+ self.VC_state = VC_State_End
+ pass
+ # self.AI_client_VC_send_speech()#开始上传语音
+ # self.VC_record_state_flag = 2
+ elif jsload_data["event"] == "command" :#命令匹配
+ ret = -1
+ try:
+ if self.commands_mode ==1:
+ if len(jsload_data["payload"]["functions"])>0:
+
+ cmd = jsload_data["payload"]["functions"][0]["function"]["arguments"]
+ print("llm:cmd:{}".format(cmd))
+ cmd = ujson.loads(cmd)
+ ret = self.check_text_llm(cmd)
+ elif self.commands_mode ==0:
+
+ cmd = jsload_data["payload"]
+ print("server:cmd:{}".format(cmd))
+ ret = self.check_text_server(cmd)
+ except Exception as e:
+ usys.print_exception(e)
+ if ret == -1:
+ if self.AI_TTS_str =="":
+ self.AI_TTS_str = "抱歉,没找到对应操作,可以换个说法试试"
+ #EventMesh.publish("publish_AI_btnInfo",{"func":utime.sleep_ms,'data':(10)})
+ EventMesh.publish("publish_AI_btnInfo",{"func":self.VC_Speech_End})
+ EventMesh.publish("publish_AI_btnInfo",{"func":self.websocket_deconnect_VC})
+ EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_VC_start})
+ else:#下发音频数据
+ #self.AI_ASR_str = ""#下发音频后清掉asr结果
+
+
+ EventMesh.publish("open_led_green")#绿色
+
+ print("下发音频数据1:{}".format(len(recv_data)))
+
+ if self.play_data_save_flag == 1:
+ if self.play_fd ==None:
+ try:
+ uos.remove('/usr/play_data.pcm')
+ except Exception as e:
+ usys.print_exception(e)
+ self.play_fd = open('/usr/play_data.pcm','w')
+ if self.play_fd !=None:
+ self.play_fd.write(recv_data)
+ # print("下发音频数据2:{}".format(len(recv_data)))
+ #if self.VC_state >= VC_State_TTSStart:
+ #self.put_record_data([recv_data,""])
+ # if self.VC_play_TYPE == VC_play_TYPE_PCM:
+ # if self.play_pcm != None:
+ # try:
+ # #print("play_pcm.stream_write !!!")
+ # buf_len = self.play_pcm.stream_get_buf_len()
+ # count_tmp = 1000
+ # while buf_len < len(recv_data):
+ # utime.sleep_ms(1)
+ # count_tmp-=1
+ # if count_tmp<=0:
+ # break
+ # buf_len = self.play_pcm.stream_get_buf_len()
+ # #print("buf已满,等待释放:buf_len:{},count_tmp:{}".format(buf_len,count_tmp))
+ # except Exception as e:
+ # usys.print_exception(e)
+ EventMesh.publish("publish_AI_btnInfo",{"func":self.put_record_data,"data":[recv_data,""]})
+ utime.sleep_ms(1)
+ except Exception as e:
+ usys.print_exception(e)
+
+ 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:
+ usys.print_exception(e)
+ #self.websocket_error()
+ print("VC VC :读数据报错,退出")
+ EventMesh.publish("publish_AI_btnInfo",{"func":self.websocket_error,"data":"VC出错了,请重试"})
+ self.ud_error(["VC",self.VC_taskid])
+ break
+ self.AI_client_VC_isconnect = 0
+ self.AI_client_VC_recv_id = 0
+ self.AI_client_VC_recv_lock = 0
+ print("AI_client_VC_recv END!!!!!!!!!!!!!!!!!!!!!!!!!!!")
+ def put_record_data(self,data):
+ #print("下发音频数据1:{}".format(len(data[0])))
+ ret=self.AI_audio_queue.put(data)
+ self.tts_in_data_len += len(data[0])
+ #print("下发音频数据2:{},{}".format(len(data[0]),self.tts_in_data_len))
+ def check_text_server(self,cmd):
+ # if len(text)>60:
+ # return -1
+ try:
+ text = cmd["command"]
+ if text.find("切换音色") != -1 :
+ try:
+ text = cmd["params"]["cmd_parameter"]
+ for key in self.VC_TTS_voice_type:
+ if text.find(key) != -1 :
+ self.VC_TTS_voice_key = key
+ EventMesh.publish("set_storage_ai_config",["VC_TTS_voice_key",self.VC_TTS_voice_key])
+ self.AI_TTS_str = "更改成功"
+ return 0
+ except Exception as e:
+ usys.print_exception(e)
+ if text.find("男") != -1 :
+ if "男" in self.VC_TTS_voice_type:
+ self.VC_TTS_voice_key = "男"
+ EventMesh.publish("set_storage_ai_config",["VC_TTS_voice_key",self.VC_TTS_voice_key])
+ # EventMesh.publish("audio_montage_play",["peizhichenggong.mp3"])
+ #self.aud.play(1,0,'U:/static/peizhichenggong.mp3')#切换成功
+ self.AI_TTS_str = "更改成功"
+ return 0
+ if text.find("女") != -1 :
+ if "女" in self.VC_TTS_voice_type:
+ self.VC_TTS_voice_key = "女"
+ EventMesh.publish("set_storage_ai_config",["VC_TTS_voice_key",self.VC_TTS_voice_key])
+ # EventMesh.publish("audio_montage_play",["peizhichenggong.mp3"])
+ #self.aud.play(1,0,'U:/static/peizhichenggong.mp3')#切换成功
+ self.AI_TTS_str = "更改成功"
+ return 0
+ if text.find("同声") != -1 or text.find("童") != -1 :
+ if "童" in self.VC_TTS_voice_type:
+ self.VC_TTS_voice_key = "童"
+ EventMesh.publish("set_storage_ai_config",["VC_TTS_voice_key",self.VC_TTS_voice_key])
+ # EventMesh.publish("audio_montage_play",["peizhichenggong.mp3"])
+ #self.aud.play(1,0,'U:/static/peizhichenggong.mp3')#切换成功
+ self.AI_TTS_str = "更改成功"
+ return 0
+ 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_ai_config",["VC_TTS_voice_key",self.VC_TTS_voice_key])
+ # EventMesh.publish("audio_montage_play",["peizhichenggong.mp3"])
+ #self.aud.play(1,0,'U:/static/peizhichenggong.mp3')#切换成功
+ self.AI_TTS_str = "更改成功"
+ return 0
+ if text.find("四川") != -1 :
+ if "四川" in self.VC_TTS_voice_type:
+ self.VC_TTS_voice_key = "四川"
+ EventMesh.publish("set_storage_ai_config",["VC_TTS_voice_key",self.VC_TTS_voice_key])
+ # EventMesh.publish("audio_montage_play",["peizhichenggong.mp3"])
+ #self.aud.play(1,0,'U:/static/peizhichenggong.mp3')#切换成功
+ self.AI_TTS_str = "更改成功"
+ return 0
+ if text.find("个性") != -1 :
+ if "个性" in self.VC_TTS_voice_type:
+ self.VC_TTS_voice_key = "个性"
+ EventMesh.publish("set_storage_ai_config",["VC_TTS_voice_key",self.VC_TTS_voice_key])
+ # EventMesh.publish("audio_montage_play",["peizhichenggong.mp3"])
+ #self.aud.play(1,0,'U:/static/peizhichenggong.mp3')#切换成功
+ self.AI_TTS_str = "更改成功"
+ return 0
+ if text.find("英语") != -1 :
+ if "英语" in self.VC_TTS_voice_type:
+ self.VC_TTS_voice_key = "英语"
+ EventMesh.publish("set_storage_ai_config",["VC_TTS_voice_key",self.VC_TTS_voice_key])
+ # EventMesh.publish("audio_montage_play",["peizhichenggong.mp3"])
+ #self.aud.play(1,0,'U:/static/peizhichenggong.mp3')#切换成功
+ self.AI_TTS_str = "更改成功"
+ return 0
+ self.AI_TTS_str = "更改失败,没找到对应声音"
+ return 0
+ if text.find("切换对话模式") != -1:
+ if self.VC_mode == 0:
+ self.VC_mode = 1
+ self.AI_TTS_str = "已切换到单对话模式"
+ else:
+ self.VC_mode = 0
+ self.AI_TTS_str = "已切换到长对话模式"
+ EventMesh.publish("set_storage_ai_config",["VC_mode",self.VC_mode])
+ # EventMesh.publish("audio_montage_play",["peizhichenggong.mp3"])
+ #self.aud.play(1,0,'U:/static/peizhichenggong.mp3')#切换成功
+
+ return 0
+ if text.find("音量") != -1:
+ if text.find("加") != -1 :
+ self.VC_TTS_volume += 10
+ if self.VC_TTS_volume > 100:
+ #EventMesh.publish("audio_montage_play",["yinliangyizuida.mp3"])
+ #self.aud.play(1,0,'U:/static/yinliangyizuida.mp3')#音量已最大
+ self.AI_TTS_str = "音量已最大"
+ self.VC_TTS_volume = 100
+ else:
+ self.aud.setVolume(self.VC_TTS_volume //10)
+ EventMesh.publish("set_storage_ai_config",["VC_TTS_volume",self.VC_TTS_volume])
+ #EventMesh.publish("audio_montage_play",["peizhichenggong.mp3"])
+ #self.aud.play(1,0,'U:/static/peizhichenggong.mp3')#配置成功
+ self.AI_TTS_str = "配置成功,当前音量 {}".format(self.VC_TTS_volume)
+
+ return 0
+ if text.find("减") != -1:
+ self.VC_TTS_volume -= 10
+ if self.VC_TTS_volume < 0:
+ self.VC_TTS_volume = 0
+ #EventMesh.publish("audio_montage_play",["yinliangyizuixiao.mp3"])
+ #self.aud.play(1,0,'U:/static/yinliangyizuixiao.mp3')#音量已最小
+ self.AI_TTS_str = "音量已最小"
+ else:
+ self.aud.setVolume(self.VC_TTS_volume //10)
+ EventMesh.publish("set_storage_ai_config",["VC_TTS_volume",self.VC_TTS_volume])
+ #EventMesh.publish("audio_montage_play",["peizhichenggong.mp3"])
+ #self.aud.play(1,0,'U:/static/peizhichenggong.mp3')#配置成功
+ self.AI_TTS_str = "配置成功,当前音量 {}".format(self.VC_TTS_volume)
+ return 0
+
+ if text.find("进入工厂模式") != -1 :
+ self.factory_mode()
+ return 1
+ if text.find("查询") != -1:
+
+ if text.find("信号") != -1 :
+ signal = net.csqQueryPoll()
+
+ self.AI_TTS_str = "当前信号{}".format(signal)
+ return 0
+ if text.find("电量") != -1 :
+ battery = EventMesh.publish("get_battery")
+ print("电量查询:{}".format(battery))
+ #EventMesh.publish("audio_montage_play",["dianliangshengyu{}.mp3".format(battery)])
+ #self.aud.play(1,0,'U:/static/dianliangshengyu{}.mp3'.format(battery))#电量剩余
+ self.AI_TTS_str = "电量剩余百分之{}".format(battery)
+ return 0
+ if text.find("电压") != -1 :
+ Vbatt = Power.getVbatt()
+ #EventMesh.publish("audio_montage_play",["dianliangshengyu{}.mp3".format(battery)])
+ #self.aud.play(1,0,'U:/static/dianliangshengyu{}.mp3'.format(battery))#电量剩余
+ self.AI_TTS_str = "当前电池电压{}".format(Vbatt)
+ return 0
+
+ if text.find("卡号") != -1 :
+ iccid = sim.getIccid()
+ if iccid != -1 and len(iccid) > 5:
+ print("iccid{}".format(iccid))
+ self.AI_TTS_str = "当前卡号为:{}".format(iccid)
+ else:
+ self.AI_TTS_str = "卡号查询失败"
+ return 0
+ if text.find("设备号") != -1 :
+ imei = modem.getDevImei()
+ if imei != -1 and len(imei) > 5:
+ print("IMEI:{}".format(imei))
+ self.AI_TTS_str = "当前设备号为:{}".format(imei)
+ else:
+ self.AI_TTS_str = "设备号查询失败"
+ return 0
+ if text.find("版本") != -1 :
+ sourceVersion = versions.Build_Time
+ self.AI_TTS_str ="Mr-Seven-"+sourceVersion
+ return 0
+ if text.find("服务器地址") != -1 :
+ self.AI_TTS_str ="服务器地址"+self.server_ip
+ return 0
+ if text.find("升级") != -1 and (text.find("OTA") != -1 or text.find("ota") != -1):
+ if self.ai_OTA.min_sys_ota()==1:
+ self.AI_TTS_str = "有新版本,准备开始升级,升级过程会多次重启设备,请保证流量充足及电量充足"
+ else:
+ self.AI_TTS_str = "当前已是最新版本"
+ return 0
+
+ if len(text)<20 and (text.find("再见") != -1 or text.find("拜拜") != -1 or text.find("关闭对话") != -1):
+ #EventMesh.publish("publish_AI_btnInfo",{"func":self.Close})
+ self.AI_TTS_str = "好嘞,再见,我们下次再聊"
+ self.Close_flag = 1
+ return 0
+ if len(text)<12 and (text.find("关机") != -1 ):
+ EventMesh.publish("publish_AI_btnInfo",{"func":self.Close})
+ EventMesh.publish("Power_off")
+ return 1
+ except Exception as e:
+ usys.print_exception(e)
+ return -1
+ def check_text_llm(self,cmd):
+
+ try:
+ text = cmd["command"]["chinese_description"]
+ if text.find("切换音色") != -1:
+ text = cmd["command"]["params_json"]
+ try:
+ for key in self.VC_TTS_voice_type:
+ if text.find(key) != -1 :
+ self.VC_TTS_voice_key = key
+ EventMesh.publish("set_storage_ai_config",["VC_TTS_voice_key",self.VC_TTS_voice_key])
+ self.AI_TTS_str = "了解,声音已切换"
+ return 0
+ except Exception as e:
+ usys.print_exception(e)
+ if text.find("男") != -1 :
+ if "男" in self.VC_TTS_voice_type:
+ self.VC_TTS_voice_key = "男"
+ EventMesh.publish("set_storage_ai_config",["VC_TTS_voice_key",self.VC_TTS_voice_key])
+
+ self.AI_TTS_str = "了解,声音已切换"
+ return 0
+ if text.find("女") != -1 :
+ if "女" in self.VC_TTS_voice_type:
+ self.VC_TTS_voice_key = "女"
+ EventMesh.publish("set_storage_ai_config",["VC_TTS_voice_key",self.VC_TTS_voice_key])
+
+ self.AI_TTS_str = "了解,声音已切换"
+ return 0
+ if text.find("同声") != -1 or text.find("童") != -1 :
+ if "童" in self.VC_TTS_voice_type:
+ self.VC_TTS_voice_key = "童"
+ EventMesh.publish("set_storage_ai_config",["VC_TTS_voice_key",self.VC_TTS_voice_key])
+
+ self.AI_TTS_str = "了解,声音已切换"
+ return 0
+ 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_ai_config",["VC_TTS_voice_key",self.VC_TTS_voice_key])
+
+ self.AI_TTS_str = "了解,声音已切换"
+ return 0
+ if text.find("四川") != -1 :
+ if "四川" in self.VC_TTS_voice_type:
+ self.VC_TTS_voice_key = "四川"
+ EventMesh.publish("set_storage_ai_config",["VC_TTS_voice_key",self.VC_TTS_voice_key])
+
+ self.AI_TTS_str = "了解,声音已切换"
+ return 0
+ if text.find("个性") != -1 :
+ if "个性" in self.VC_TTS_voice_type:
+ self.VC_TTS_voice_key = "个性"
+ EventMesh.publish("set_storage_ai_config",["VC_TTS_voice_key",self.VC_TTS_voice_key])
+
+ self.AI_TTS_str = "了解,声音已切换"
+ return 0
+ if text.find("英语") != -1 :
+ if "英语" in self.VC_TTS_voice_type:
+ self.VC_TTS_voice_key = "英语"
+ EventMesh.publish("set_storage_ai_config",["VC_TTS_voice_key",self.VC_TTS_voice_key])
+
+ self.AI_TTS_str = "了解,声音已切换"
+ return 0
+ self.AI_TTS_str = "很抱歉,没找到对应声音"
+ return 0
+ if text.find("切换对话模式") != -1:
+ if self.VC_mode == 0:
+ self.VC_mode = 1
+ self.AI_TTS_str = "了解,已切换到单对话模式"
+ else:
+ self.VC_mode = 0
+ self.AI_TTS_str = "了解,已切换到长对话模式"
+ EventMesh.publish("set_storage_ai_config",["VC_mode",self.VC_mode])
+
+
+ return 0
+ if text.find("音量调整") != -1:
+ text = cmd["command"]["params_json"]
+ text = ujson.loads(text)
+ volume = text["n"]
+ if volume >100 or volume<0:
+ self.AI_TTS_str = "音量调整超出范围了,只能0-100哦"
+ else:
+ self.VC_TTS_volume = volume
+ self.aud.setVolume(self.VC_TTS_volume //10)
+ EventMesh.publish("set_storage_ai_config",["VC_TTS_volume",self.VC_TTS_volume])
+ self.AI_TTS_str = "了解,音量已经调整,当前音量是{}".format(self.VC_TTS_volume)
+ return 0
+ if text.find("音量增大") != -1:
+ self.VC_TTS_volume += 10
+ if self.VC_TTS_volume > 100:
+
+ self.AI_TTS_str = "音量已经是最大啦"
+ self.VC_TTS_volume = 100
+ else:
+ self.aud.setVolume(self.VC_TTS_volume //10)
+ EventMesh.publish("set_storage_ai_config",["VC_TTS_volume",self.VC_TTS_volume])
+
+ self.AI_TTS_str = "了解,音量已经调大了,当前音量是{}".format(self.VC_TTS_volume)
+
+ return 0
+ if text.find("音量减小") != -1:
+ self.VC_TTS_volume -= 10
+ if self.VC_TTS_volume < 0:
+ self.VC_TTS_volume = 0
+ #EventMesh.publish("audio_montage_play",["yinliangyizuixiao.mp3"])
+ #self.aud.play(1,0,'U:/static/yinliangyizuixiao.mp3')#音量已最小
+ self.AI_TTS_str = "音量已经是最小啦"
+ else:
+ self.aud.setVolume(self.VC_TTS_volume //10)
+ EventMesh.publish("set_storage_ai_config",["VC_TTS_volume",self.VC_TTS_volume])
+
+ self.AI_TTS_str = "好嘞,音量已经调小了,当前音量是{}".format(self.VC_TTS_volume)
+ return 0
+
+ if text.find("语速增大") != -1:
+ self.speech_rate += 10
+ if self.speech_rate > 50:
+
+ self.AI_TTS_str = "语速已经是最快啦"
+ self.speech_rate = 50
+ else:
+
+ EventMesh.publish("set_storage_ai_config",["speech_rate",self.speech_rate])
+
+ self.AI_TTS_str = "明白,语速已经调快了,当前语速是{}".format(self.speech_rate)
+
+ return 0
+ if text.find("语速减小") != -1:
+ self.speech_rate -= 10
+ if self.speech_rate < -50:
+ self.speech_rate = -50
+ #EventMesh.publish("audio_montage_play",["yinliangyizuixiao.mp3"])
+ #self.aud.play(1,0,'U:/static/yinliangyizuixiao.mp3')#音量已最小
+ self.AI_TTS_str = "语速已经是最慢啦"
+ else:
+ EventMesh.publish("set_storage_ai_config",["speech_rate",self.speech_rate])
+
+ self.AI_TTS_str = "明白,语速已经调慢了,当前语速是{}".format(self.speech_rate)
+ return 0
+
+ if text.find("进入工厂模式") != -1 :
+ self.factory_mode()
+ return 1
+ if text.find("查询") != -1:
+ if text.find("信号") != -1 :
+ signal = net.csqQueryPoll()
+
+ self.AI_TTS_str = "当前信号{}".format(signal)
+ return 0
+ if text.find("电量") != -1 :
+ battery = EventMesh.publish("get_battery")
+ print("电量查询:{}".format(battery))
+ #EventMesh.publish("audio_montage_play",["dianliangshengyu{}.mp3".format(battery)])
+ #self.aud.play(1,0,'U:/static/dianliangshengyu{}.mp3'.format(battery))#电量剩余
+ self.AI_TTS_str = "电量剩余百分之{}".format(battery)
+ return 0
+ if text.find("电压") != -1 :
+ Vbatt = Power.getVbatt()
+ #EventMesh.publish("audio_montage_play",["dianliangshengyu{}.mp3".format(battery)])
+ #self.aud.play(1,0,'U:/static/dianliangshengyu{}.mp3'.format(battery))#电量剩余
+ self.AI_TTS_str = "当前电池电压{}".format(Vbatt)
+ return 0
+
+ if text.find("卡号") != -1 :
+ iccid = sim.getIccid()
+ if iccid != -1 and len(iccid) > 5:
+ print("iccid{}".format(iccid))
+ self.AI_TTS_str = "当前卡号为:{}".format(iccid)
+ else:
+ self.AI_TTS_str = "卡号查询失败"
+ return 0
+ if text.find("设备号") != -1 :
+ imei = modem.getDevImei()
+ if imei != -1 and len(imei) > 5:
+ print("IMEI:{}".format(imei))
+ self.AI_TTS_str = "当前设备号为:{}".format(imei)
+ else:
+ self.AI_TTS_str = "设备号查询失败"
+ return 0
+ if text.find("版本") != -1 :
+ sourceVersion = versions.Build_Time
+ self.AI_TTS_str ="Mr-Seven-"+sourceVersion
+ return 0
+ if text.find("服务器地址") != -1 :
+ self.AI_TTS_str ="服务器地址"+self.server_ip
+ return 0
+ if text.find("升级") != -1 and (text.find("OTA") != -1 or text.find("ota") != -1):
+ if self.ai_OTA.min_sys_ota()==1:
+ self.AI_TTS_str = "有新版本,准备开始升级,升级过程会多次重启设备,请保证流量充足及电量充足"
+ else:
+ self.AI_TTS_str = "当前已是最新版本"
+ return 0
+
+ if len(text)<20 and (text.find("再见") != -1 or text.find("拜拜") != -1 or text.find("关闭对话") != -1):
+ #EventMesh.publish("publish_AI_btnInfo",{"func":self.Close})
+ self.AI_TTS_str = "好嘞,再见,我们下次再聊"
+ self.Close_flag = 1
+ return 0
+ if len(text)<12 and (text.find("关机") != -1 ):
+ EventMesh.publish("publish_AI_btnInfo",{"func":self.Close})
+ EventMesh.publish("Power_off")
+ return 1
+ #AI智慧手表功能
+ if text.find("测量") != -1 :
+ self.usb_state = EventMesh.publish("get_usb_state")
+ print("usb_state=",self.usb_state)
+ if self.usb_state == 0:
+ if text.find("血氧") != -1 :
+ print("血氧")
+ self.AI_TTS_str = "开始血氧测量,请稍等"
+ EventMesh.publish("set_manual_measure_mode",2)#测量血氧
+ self.Close_flag = 1
+ return 0
+ if text.find("心率") != -1 :
+ print("心率")
+ self.AI_TTS_str = "开始心率测量,请稍等"
+ EventMesh.publish("set_manual_measure_mode",1)#测量心率
+ self.Close_flag = 1
+ return 0
+ if text.find("体温") != -1 :
+ print("体温")
+ self.AI_TTS_str = "开始体温测量,请稍等"
+ EventMesh.publish("set_manual_measure_mode",3)#测量体温
+ self.Close_flag = 1
+ return 0
+ else :
+ if self.usb_state == 1:
+ self.AI_TTS_str = "测量失败,请不要充电时测量噢"
+ return 0
+
+ #给某人打电话
+ if text.find("拨打") != -1 :
+ # 做中间字符串截取
+ text = cmd["command"]["params_json"]
+ text = ujson.loads(text)
+ print(text)
+ result = text["p"]
+ EventMesh.publish("call_phonebook_name",result)
+ return 0
+ #设置闹钟 {"command":{"chinese_description":"","english_description":"Set Alarm","fail_prompt":"","params_json":"{\"hour_value\": 16, \"min_value\": 36, \"day_value16, \"min_value\": 36, \"day_value\": [1], \"loop_value\": 0, \"event_notice\": \"\"}","succeed_prompt":""}}
+ if text.find("普通闹钟") != -1 :
+ # 做中间字符串截取
+ # 返回帧名字叫cmd
+ normal_alarm_save = []#普通闹钟
+ print("闹钟")
+ text = cmd["command"]["params_json"]
+ text = ujson.loads(text)
+ print(text)
+ normal_alarm_save.append({"hour":text["hour_value"],"min":text["min_value"],"day":text["day_value"],"enable":1})
+ EventMesh.publish("set_storage_config",["normal_alarm",normal_alarm_save])
+ self.AI_TTS_str = "闹钟设置成功"
+ print(self.AI_TTS_str)
+
+ return 0
+ if text.find("起床提醒") != -1:
+ wakeup_data_save = []#起床提醒
+ text = cmd["command"]["params_json"]
+ text = ujson.loads(text)
+ wakeup_data_save.append({"hour":text["hour_value"],"min":text["min_value"],"day":text["day_value"],"enable":1})
+ EventMesh.publish("clear_wakeup_alarm")
+ EventMesh.publish("set_storage_config",["wakeup_alarm",wakeup_data_save])
+ EventMesh.publish(constants.PROTOCOL.REMIND_CH_WAKEUP_SEND)
+ self.AI_TTS_str = "起床提醒设置成功"
+ print(self.AI_TTS_str)
+ return 0
+ # if event_notice == "休息提醒":
+ # reset_data_save.append({"hour":text["hour_value"],"min":text["min_value"],"day":text["day_value"],"enable":1})
+ # EventMesh.publish("set_storage_config",["reset_alarm",reset_data_save])
+ # EventMesh.publish(constants.PROTOCOL.REMIND_CH_REST_SEND)
+ # EventMesh.publish("clear_reset_alarm")
+ # self.AI_TTS_str = "休息提醒设置成功"
+
+ if text.find("回家提醒") != -1:
+ reset_data_save = []#休息提醒
+ text = cmd["command"]["params_json"]
+ text = ujson.loads(text)
+ home_data = str(text["hour_value"]) + ':' + str(text["min_value"])
+ EventMesh.publish("clear_home_alarm")
+ EventMesh.publish("set_storage_config",["home_alarm",home_data])
+ EventMesh.publish(constants.PROTOCOL.REMIND_CH_HOME_SEND)
+ self.AI_TTS_str = "回家提醒设置成功"
+ print(self.AI_TTS_str)
+ return 0
+ if text.find("睡觉提醒") != -1:
+ sleep_data_save = []#睡觉提醒
+ text = cmd["command"]["params_json"]
+ text = ujson.loads(text)
+ sleep_data_save.append({"hour":text["hour_value"],"min":text["min_value"],"day":text["day_value"],"enable":1})
+ EventMesh.publish("clear_sleep_alarm")
+ EventMesh.publish("set_storage_config",["sleep_alarm",sleep_data_save])
+ EventMesh.publish(constants.PROTOCOL.REMIND_CH_SLEEP_SEND)
+ self.AI_TTS_str = "睡觉提醒设置成功"
+ print(self.AI_TTS_str)
+ return 0
+ # if text.find("休息提醒") != -1:
+ # text = cmd["command"]["params_json"]
+ # text = ujson.loads(text)
+ # reset_data_save.append({"hour":text["hour_value"],"min":text["min_value"],"day":text["day_value"],"enable":1})
+ # EventMesh.publish("clear_reset_alarm")
+ # EventMesh.publish("set_storage_config",["reset_alarm",reset_data_save])
+ # EventMesh.publish(constants.PROTOCOL.REMIND_CH_REST_SEND)
+ # self.AI_TTS_str = "休息提醒设置成功"
+ # print(self.AI_TTS_str)
+ # return 0
+ if text.find("吃药提醒") != -1:
+ text = cmd["command"]["params_json"]
+ text = ujson.loads(text)
+ medicin_data = []#吃药提醒
+ medicin_data.append({"hour":text["hour_value"],"min":text["min_value"],"day":text["day_value"],"enable":1})
+ EventMesh.publish("clear_medicine_alarm")
+ EventMesh.publish("set_storage_config",["medicine",medicin_data])
+ EventMesh.publish(constants.PROTOCOL.REMIND_CH_MEDICINE2_SEND)
+ self.AI_TTS_str = "吃药提醒设置成功"
+ print(self.AI_TTS_str)
+ return 0
+ if text.find("会议提醒") != -1 :
+ text = cmd["command"]["params_json"]
+ text = ujson.loads(text)
+ meet_data = []#会议提醒
+ meet_data = str(text["hour_value"]) + ':' + str(text["min_value"])
+ EventMesh.publish("clear_meet_alarm")
+ EventMesh.publish("set_storage_config",["meet_alarm",meet_data])
+ EventMesh.publish(constants.PROTOCOL.REMIND_CH_MEET_SEND)
+ self.AI_TTS_str = "会议提醒设置成功"
+ print(self.AI_TTS_str)
+ return 0
+ if text.find("单次喝水提醒") != -1 :
+ water_data = []#单次喝水提醒
+ text = cmd["command"]["params_json"]
+ text = ujson.loads(text)
+ water_data = str(text["hour_value"]) + ':' + str(text["min_value"])
+ EventMesh.publish("clear_water_alarm")
+ EventMesh.publish("set_storage_config",["water_alarm",water_data])
+ EventMesh.publish(constants.PROTOCOL.REMIND_CH_WATER_SEND)
+ self.AI_TTS_str = "单次喝水提醒设置成功"
+ print(self.AI_TTS_str)
+ return 0
+ if text.find("循环喝水提醒") != -1 :
+ text = cmd["command"]["params_json"]
+ text = ujson.loads(text)
+ hour = text["hour_value"]
+ EventMesh.publish("set_storage_config",["drink_on",1])
+ EventMesh.publish("set_storage_config",["drink_time",hour])
+ EventMesh.publish(constants.PROTOCOL.REMIND_CH_DRINK_SEND)
+ self.AI_TTS_str = "循环喝水提醒设置成功"
+ print(self.AI_TTS_str)
+ return 0
+ if text.find("关闭所有闹钟") != -1 :
+ EventMesh.publish("set_storage_config",["drink_time",[]])
+ EventMesh.publish("set_storage_config",["water_alarm",[]])
+ EventMesh.publish("set_storage_config",["meet_alarm",[]])
+ EventMesh.publish("set_storage_config",["medicine",[]])
+ EventMesh.publish("set_storage_config",["home_alarm",[]])
+ EventMesh.publish("set_storage_config",["sleep_alarm",[]])
+ EventMesh.publish("set_storage_config",["wakeup_alarm",[]])
+ EventMesh.publish("set_storage_config",["normal_alarm",[]])
+ EventMesh.publish("clear_water_alarm")
+ EventMesh.publish("clear_meet_alarm")
+ EventMesh.publish("clear_medicine_alarm")
+ EventMesh.publish("clear_sleep_alarm")
+ EventMesh.publish("clear_home_alarm")
+ EventMesh.publish("clear_wakeup_alarm")
+ self.AI_TTS_str = "已关闭所有闹钟"
+ return 0
+ except Exception as e:
+ usys.print_exception(e)
+ self.AI_TTS_str = cmd["command"]["fail_prompt"]
+ return -1
+ def check_text(self,text):
+ if len(text)>60:
+ return -1
+ try:
+ if isinstance(text, str):
+ if text.find("声音") != -1 and text.find("改") != -1:
+ try:
+ for key in self.VC_TTS_voice_type:
+ if text.find(key) != -1 :
+ self.VC_TTS_voice_key = key
+ EventMesh.publish("set_storage_ai_config",["VC_TTS_voice_key",self.VC_TTS_voice_key])
+ self.AI_TTS_str = "更改成功"
+ return 0
+ except Exception as e:
+ usys.print_exception(e)
+ if text.find("男") != -1 :
+ if "男" in self.VC_TTS_voice_type:
+ self.VC_TTS_voice_key = "男"
+ EventMesh.publish("set_storage_ai_config",["VC_TTS_voice_key",self.VC_TTS_voice_key])
+ # EventMesh.publish("audio_montage_play",["peizhichenggong.mp3"])
+ #self.aud.play(1,0,'U:/static/peizhichenggong.mp3')#切换成功
+ self.AI_TTS_str = "更改成功"
+ return 0
+ if text.find("女") != -1 :
+ if "女" in self.VC_TTS_voice_type:
+ self.VC_TTS_voice_key = "女"
+ EventMesh.publish("set_storage_ai_config",["VC_TTS_voice_key",self.VC_TTS_voice_key])
+ # EventMesh.publish("audio_montage_play",["peizhichenggong.mp3"])
+ #self.aud.play(1,0,'U:/static/peizhichenggong.mp3')#切换成功
+ self.AI_TTS_str = "更改成功"
+ return 0
+ if text.find("同声") != -1 or text.find("童") != -1 :
+ if "童" in self.VC_TTS_voice_type:
+ self.VC_TTS_voice_key = "童"
+ EventMesh.publish("set_storage_ai_config",["VC_TTS_voice_key",self.VC_TTS_voice_key])
+ # EventMesh.publish("audio_montage_play",["peizhichenggong.mp3"])
+ #self.aud.play(1,0,'U:/static/peizhichenggong.mp3')#切换成功
+ self.AI_TTS_str = "更改成功"
+ return 0
+ 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_ai_config",["VC_TTS_voice_key",self.VC_TTS_voice_key])
+ # EventMesh.publish("audio_montage_play",["peizhichenggong.mp3"])
+ #self.aud.play(1,0,'U:/static/peizhichenggong.mp3')#切换成功
+ self.AI_TTS_str = "更改成功"
+ return 0
+ if text.find("四川") != -1 :
+ if "四川" in self.VC_TTS_voice_type:
+ self.VC_TTS_voice_key = "四川"
+ EventMesh.publish("set_storage_ai_config",["VC_TTS_voice_key",self.VC_TTS_voice_key])
+ # EventMesh.publish("audio_montage_play",["peizhichenggong.mp3"])
+ #self.aud.play(1,0,'U:/static/peizhichenggong.mp3')#切换成功
+ self.AI_TTS_str = "更改成功"
+ return 0
+ if text.find("个性") != -1 :
+ if "个性" in self.VC_TTS_voice_type:
+ self.VC_TTS_voice_key = "个性"
+ EventMesh.publish("set_storage_ai_config",["VC_TTS_voice_key",self.VC_TTS_voice_key])
+ # EventMesh.publish("audio_montage_play",["peizhichenggong.mp3"])
+ #self.aud.play(1,0,'U:/static/peizhichenggong.mp3')#切换成功
+ self.AI_TTS_str = "更改成功"
+ return 0
+ if text.find("英语") != -1 :
+ if "英语" in self.VC_TTS_voice_type:
+ self.VC_TTS_voice_key = "英语"
+ EventMesh.publish("set_storage_ai_config",["VC_TTS_voice_key",self.VC_TTS_voice_key])
+ # EventMesh.publish("audio_montage_play",["peizhichenggong.mp3"])
+ #self.aud.play(1,0,'U:/static/peizhichenggong.mp3')#切换成功
+ self.AI_TTS_str = "更改成功"
+ return 0
+ self.AI_TTS_str = "更改失败,没找到对应声音"
+ return 0
+ if text.find("切换对话模式") != -1:
+ if self.VC_mode == 0:
+ self.VC_mode = 1
+ self.AI_TTS_str = "已切换到单对话模式"
+ else:
+ self.VC_mode = 0
+ self.AI_TTS_str = "已切换到长对话模式"
+ EventMesh.publish("set_storage_ai_config",["VC_mode",self.VC_mode])
+ # EventMesh.publish("audio_montage_play",["peizhichenggong.mp3"])
+ #self.aud.play(1,0,'U:/static/peizhichenggong.mp3')#切换成功
+
+ return 0
+ if text.find("音量") != -1:
+ if text.find("加") != -1 :
+ self.VC_TTS_volume += 10
+ if self.VC_TTS_volume > 100:
+ #EventMesh.publish("audio_montage_play",["yinliangyizuida.mp3"])
+ #self.aud.play(1,0,'U:/static/yinliangyizuida.mp3')#音量已最大
+ self.AI_TTS_str = "音量已最大"
+ self.VC_TTS_volume = 100
+ else:
+ self.aud.setVolume(self.VC_TTS_volume //10)
+ EventMesh.publish("set_storage_ai_config",["VC_TTS_volume",self.VC_TTS_volume])
+ #EventMesh.publish("audio_montage_play",["peizhichenggong.mp3"])
+ #self.aud.play(1,0,'U:/static/peizhichenggong.mp3')#配置成功
+ self.AI_TTS_str = "配置成功,当前音量 {}".format(self.VC_TTS_volume)
+
+ return 0
+ if text.find("减") != -1:
+ self.VC_TTS_volume -= 10
+ if self.VC_TTS_volume < 0:
+ self.VC_TTS_volume = 0
+ #EventMesh.publish("audio_montage_play",["yinliangyizuixiao.mp3"])
+ #self.aud.play(1,0,'U:/static/yinliangyizuixiao.mp3')#音量已最小
+ self.AI_TTS_str = "音量已最小"
+ else:
+ self.aud.setVolume(self.VC_TTS_volume //10)
+ EventMesh.publish("set_storage_ai_config",["VC_TTS_volume",self.VC_TTS_volume])
+ #EventMesh.publish("audio_montage_play",["peizhichenggong.mp3"])
+ #self.aud.play(1,0,'U:/static/peizhichenggong.mp3')#配置成功
+ self.AI_TTS_str = "配置成功,当前音量 {}".format(self.VC_TTS_volume)
+ return 0
+
+ if text.find("进入工厂模式") != -1 :
+ self.factory_mode()
+ return 1
+ if text.find("查询") != -1:
+
+ if text.find("信号") != -1 :
+ signal = net.csqQueryPoll()
+
+ self.AI_TTS_str = "当前信号{}".format(signal)
+ return 0
+ if text.find("电量") != -1 :
+ battery = EventMesh.publish("get_battery")
+ print("电量查询:{}".format(battery))
+ #EventMesh.publish("audio_montage_play",["dianliangshengyu{}.mp3".format(battery)])
+ #self.aud.play(1,0,'U:/static/dianliangshengyu{}.mp3'.format(battery))#电量剩余
+ self.AI_TTS_str = "电量剩余百分之{}".format(battery)
+ return 0
+ if text.find("电压") != -1 :
+ Vbatt = Power.getVbatt()
+ #EventMesh.publish("audio_montage_play",["dianliangshengyu{}.mp3".format(battery)])
+ #self.aud.play(1,0,'U:/static/dianliangshengyu{}.mp3'.format(battery))#电量剩余
+ self.AI_TTS_str = "当前电池电压{}".format(Vbatt)
+ return 0
+
+ if text.find("卡号") != -1 :
+ iccid = sim.getIccid()
+ if iccid != -1 and len(iccid) > 5:
+ print("iccid{}".format(iccid))
+ self.AI_TTS_str = "当前卡号为:{}".format(iccid)
+ else:
+ self.AI_TTS_str = "卡号查询失败"
+ return 0
+ if text.find("设备号") != -1 :
+ imei = modem.getDevImei()
+ if imei != -1 and len(imei) > 5:
+ print("IMEI:{}".format(imei))
+ self.AI_TTS_str = "当前设备号为:{}".format(imei)
+ else:
+ self.AI_TTS_str = "设备号查询失败"
+ return 0
+ if text.find("版本") != -1 :
+ sourceVersion = versions.Build_Time
+ self.AI_TTS_str ="Mr-Seven-"+sourceVersion
+ return 0
+ if text.find("服务器地址") != -1 :
+ self.AI_TTS_str ="服务器地址"+self.server_ip
+ return 0
+ if text.find("步数") != -1:
+ EventMesh.publish("play_cur_step_event")#播放当前步数
+ return 0
+ if text.find("升级") != -1 and (text.find("OTA") != -1 or text.find("ota") != -1):
+ if self.ai_OTA.min_sys_ota()==1:
+ self.AI_TTS_str = "有新版本,准备开始升级,升级过程会多次重启设备,请保证流量充足及电量充足"
+ else:
+ self.AI_TTS_str = "当前已是最新版本"
+ return 0
+ if len(text)<16 and (text.find("再见") != -1 or text.find("拜拜") != -1 or text.find("关闭对话") != -1):
+ #EventMesh.publish("publish_AI_btnInfo",{"func":self.Close})
+ if dev_type != "7PIN":#柒牌
+ self.AI_TTS_str = "好嘞,再见,我们下次再聊"
+ self.Close_flag = 1
+ return 0
+ else:
+ EventMesh.publish("publish_AI_btnInfo",{"func":self.Close})
+ return 1
+ if len(text)<12 and (text.find("关机") != -1 ):
+ if dev_type == "7PIN":#柒牌
+ EventMesh.publish("publish_AI_btnInfo",{"func":self.Close})
+ return 1
+ EventMesh.publish("publish_AI_btnInfo",{"func":self.Close})
+ EventMesh.publish("Power_off")
+ return 1
+ #AI智慧手表功能
+ if text.find("测量") != -1 :
+
+ if text.find("血氧") != -1 :
+ print("血氧")
+ EventMesh.publish("set_manual_measure_mode",2)#测量血氧
+ self.AI_TTS_str = "开始血氧测量,请稍等"
+ self.Close_flag = 1
+ return 0
+ if text.find("心率") != -1 :
+ print("心率")
+ EventMesh.publish("set_manual_measure_mode",1)#测量心率
+ self.AI_TTS_str = "开始心率测量,请稍等"
+ self.Close_flag = 1
+ return 0
+ if text.find("体温") != -1 :
+ print("体温")
+ EventMesh.publish("set_manual_measure_mode",3)#测量体温
+ self.AI_TTS_str = "开始体温测量,请稍等"
+ self.Close_flag = 1
+ return 0
+ #给某人打电话
+ if text.find("拨打") != -1 :
+ # 做中间字符串截取
+ print("拨打")
+ start_index = text.find("拨打")
+ start_index += len("拨打")
+ end_index = text.find("的电话",start_index)
+ if end_index != -1:
+ result = text[start_index:end_index]
+ print("拨打的名字为:{}".format(result))
+ EventMesh.publish("call_phonebook_name",result)
+
+ # #设置闹钟
+ # if text.find("设置") != -1 :
+ # # 做中间字符串截取
+ # print("闹钟")
+ # normal_alarm_save = ''
+ # alarm_day = []
+
+ # if text.find("小时后的闹钟") != -1 :
+ # start_index = text.find("设置")
+ # start_index += len("设置")
+ # end_index = text.find("小时后",start_index)
+ # if end_index != -1:
+ # #计算闹钟设置后的时间
+ # time = text[start_index:end_index]
+ # data = RTC().datetime()
+ # hour = data[4]
+ # hour += self.chinese_num_to_arabic(time)
+
+ # alarm_time = alarm_data.split('-')[0]#-作为分隔符
+ # alarm_switch = int(1)#开关
+ # alarm_repeat = int(0)#是单次还是每天 还是自定义
+
+ # alarm_hour = int(hour)#时间
+ # alarm_min = int(alarm_time.split(":")[1])#冒号分隔时间 时 分
+
+
+ # if alarm_repeat == 2:#每一天
+ # alarm_day = [0,1,2,3,4,5,6]
+ # elif alarm_repeat == 3:#自定义
+ # alarm_day_tmp = alarm_data.split('-')[3]#-作为分隔符
+ # if len(str(alarm_day_tmp)) != 0:
+ # for i in range(0,7):
+ # if alarm_day_tmp[i] != '0':
+ # alarm_day.append(i)
+ # else:#单次 1
+ # alarm_day=[]
+ # if alarm_switch != 0:
+ # normal_alarm_save.append({"hour":alarm_hour,"min":alarm_min,"day":alarm_day,"enable":alarm_switch})
+
+ # else :
+ # if text.find("分钟后的闹钟") != -1 :
+ # start_index = text.find("设置")
+ # start_index += len("设置")
+ # end_index = text.find("分钟后",start_index)
+ # time = text[start_index:end_index]
+ # data = RTC().datetime()
+ # min = data[5]
+ # new_min = self.chinese_num_to_arabic(time)
+ # hour += new_min / 60
+ # min += new_min % 60
+
+ # if normal_alarm_save != '':
+ # EventMesh.publish("set_storage_config",["normal_alarm",normal_alarm_save])
+
+ except Exception as e:
+ usys.print_exception(e)
+ return -1
+
+ #获取trace_id
+ def get_trace_id(self):
+ t = utime.mktime(utime.localtime())
+ t = t*1000+urandom.randint(0, 1000)
+ md5_data = "{}".format(t)#md5签名
+ sign_data = ""
+ hash_obj = uhashlib.md5(md5_data)
+ res = hash_obj.digest()
+
+ # 转成十六进制表示
+ sign_data = ubinascii.hexlify(res)
+ sign_data = sign_data.decode('ascii')
+ return sign_data
+
+ def get_session_id(self,data = "session_id"):
+ t = utime.mktime(utime.localtime())
+ t = t*1000+urandom.randint(0, 1000)
+ md5_data = "{}{}".format(data,t)#md5签名
+ sign_data = ""
+ hash_obj = uhashlib.md5(md5_data)
+ res = hash_obj.digest()
+
+ # 转成十六进制表示
+ sign_data = ubinascii.hexlify(res)
+ sign_data = sign_data.decode('ascii')
+ return sign_data
+
+ def get_new_message_id(self):
+ message_id = self.get_trace_id()+"aaa"+self.get_trace_id()
+ self.VC_message_id=message_id[:32]
+ return self.VC_message_id
+ def get_new_task_id(self):
+ task_id = self.get_trace_id()+"aaa"+self.get_trace_id()
+ self.VC_task_id=task_id[:32]
+ return self.VC_task_id
+ #开始播放声音
+ def VC_Play_Start(self):
+ self.tts_in_data_len = 0
+ self.tts_out_data_len = 0
+ if self.VC_Play_flag == 0:
+ try:
+ if self.VC_play_TYPE == VC_play_TYPE_PCM:
+ if self.play_pcm == None:
+ self.play_pcm = audio.Audio.PCM(0,1,self.VC_play_samplerate,1,1,2)
+ #self.play_pcm.setVolume(11)
+ ret = self.play_pcm.stream_write_start()
+ print("self.record_pcm.stream_write_start:ret:{}".format(ret))
+ elif self.VC_play_TYPE == VC_play_TYPE_MP3:
+ pass
+ self.VC_Play_flag = 1
+ except Exception as e:
+ self.VC_Play_End()
+ usys.print_exception(e)
+ #暂停/继续声音播放 Pause_flag = 1暂停
+ def VC_Play_Pause(self,Pause_flag):
+ try:
+ if self.VC_play_TYPE == VC_play_TYPE_PCM:
+ if self.play_pcm != None:
+ self.play_pcm.stream_pause(Pause_flag)
+ except Exception as e:
+ self.VC_Play_End()
+ usys.print_exception(e)
+ #停止播放声音
+ def VC_Play_End(self):
+ self.VC_Play_flag = 0
+ if self.VC_play_TYPE == VC_play_TYPE_PCM:
+ if self.VC_play_samplerate == 8000:
+ self.aud.stopPlayStream()
+ self.aud.stopAll()
+ elif self.VC_play_samplerate == 16000:
+ if self.play_pcm != None:
+ print("Close:play_pcm.close()!!!!!!!!!!!!!!!!!!")
+ try:
+ self.play_pcm.stream_stop()
+ self.play_pcm.close()
+ except Exception as e:
+ usys.print_exception(e)
+ self.play_pcm=None
+ self.aud.stopPlayStream()
+ self.aud.stopAll()
+ elif self.VC_play_TYPE == VC_play_TYPE_MP3:
+ self.aud.stopPlayStream()
+ self.aud.stopAll()
+ if self.AI_audio_queue.empty()!=True:
+ self.AI_audio_queue.clear()
+
+
+ def _1S_timer_cb(self,*argc):
+ EventMesh.publish("publish_AI_btnInfo",{"func":self._1S_timer_cb_})
+
+ def _1S_timer_cb_(self):
+
+ EventMesh.publish("system_sleep_rest")#防止黑屏
+ self.close_timerout += 1
+ if self.VC_state < VC_State_Thinking:
+ close_led_green()
+ close_led_red()
+ EventMesh.publish("close_all_led")
+ open_led_white()
+ else :
+ if self.VC_state == VC_State_Thinking:
+ white_green_open()
+ else:
+ if self.VC_state >= VC_State_Responding:
+ white_green_close()
+ open_led_green()
+ else:
+ if self.VC_state == VC_State_End:
+ close_all_ledm()
+ if self.close_timerout > 60:#20秒没数据就close
+
+ if self.VC_state >= VC_State_SpeechIng:
+ print("接口无响应,超时退出")
+ EventMesh.publish("publish_AI_btnInfo",{"func":self.websocket_error,"data":"接口超时了。请重试"})
+ self.ud_error(["VC",self.VC_taskid])
+ else:
+ EventMesh.publish("publish_AI_btnInfo",{"func":self.Close})
+ # print("get_audio_state !!!!!{} {} {}\r\n".format(self.play_end,EventMesh.publish("get_audio_state"),self.play_flag))
+ if self.LocalRespondingEnded_timerout>0 :#
+ self.LocalRespondingEnded_timerout -= 1
+ print("LocalRespondingEnded_timerout:{}".format(self.LocalRespondingEnded_timerout))
+ if self.LocalRespondingEnded_timerout <= 0 or (self.play_pcm != None and self.play_pcm.stream_is_empty() == 1) :#超时或者音频播放完,
+ self.LocalRespondingEnded_timerout = 0
+ if self.VC_mode == 1 :#长按单次问答模式
+ EventMesh.publish("publish_AI_btnInfo",{"func":self.Close})
+ else:
+ EventMesh.publish("open_led_blue")
+ if self.Close_flag == 1:
+ self.Close_flag = 0
+ EventMesh.publish("publish_AI_btnInfo",{"func":self.Close})
+ else:
+ #utime.sleep_ms(1000)
+ EventMesh.publish("publish_AI_btnInfo",{"func":self.VC_Play_End})
+ #EventMesh.publish("publish_AI_btnInfo",{"func":self.chenggong_tone})
+ EventMesh.publish("publish_AI_btnInfo",{"func":self.VC_Speech_Start_now})#开始录音
+ self.VC_state = VC_State_None
+ #通知服务器播放结束
+ #self.AI_client_VC_LocalRespondingEnded()
+
+ self.VC_pingping_timerout+=1
+ 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>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超时后重新开始
+ print("VC_Thinking_timerout:{}!!!!!!!!!!!!!!!!!!!!!".format(self.VC_Thinking_timerout))
+ self.VC_Thinking_timerout -=1
+ if self.VC_Thinking_timerout == 0:
+ self.VC_Thinking_timerout = 100
+ print("Thinking重试,重试!!!!!!!!!!!!!!!!!!!!!")
+ self.VC_state = VC_State_None
+ EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_VC_start})
+ pass
+
+ #VC开始
+ def AI_VC_start(self):
+ print("AI_VC_start1")
+ self.VC_satrt_flag = 1
+ if self.VC_Thinking_timerout < 100:
+ self.VC_Thinking_timerout = 0
+ EventMesh.publish("open_led_all")
+ open_all_ledm()
+ self.VC_Play_End()#关闭音频播放
+ print("AI_VC_start2")
+ #self.aud.aud_tone_play(16,200)#播放按键音
+ self.LocalRespondingEnded_timerout = 0
+ self.close_timerout = 0
+
+
+ #
+ if self.AI_client_VC_isconnect == 0:#没连接的时候请求开始
+ self.websocket_connect_VC()#连接服务器
+
+ #utime.sleep_ms(50)
+ else:
+ print("self.VC_state :{}".format(self.VC_state ))
+
+ if self.AI_client_VC_isconnect == 0:
+ return
+ self.AI_client_VC_start_requset()
+ print("AI_VC_start3")
+
+ self.VC_state = VC_State_None
+ if self.AI_TTS_str == "":#没有tts要播放的时候才开始录音
+ #开始asr录音
+ self.VC_Speech_Start()#开启线程获取录音数据
+
+
+ # pass
+ print("AI_VC_start4")
+ #self.VC_Play_Start()
+ #EventMesh.publish("publish_AI_btnInfo",{"func":self.VC_Play_Start})
+ #开始线程
+
+ # if self.AI_VC_send_data_queue_thread_id == 0:
+ # _thread.stack_size(self.Audio_buf_size+8*1024)
+ # self.AI_VC_send_data_queue_thread_id = _thread.start_new_thread(self.AI_VC_send_data_queue_thread, ())
+ # _thread.stack_size(8*1024)
+ # print("AI_VC_start :AI_VC_send_data_queue_thread_id :{} ".format(self.AI_VC_send_data_queue_thread_id))
+
+ if self.AI_audio_queue_thread_id ==0:
+ _thread.stack_size(24*1024)
+ self.AI_audio_queue_thread_id = _thread.start_new_thread(self.AI_audio_queue_thread, ())
+ _thread.stack_size(8*1024)
+ print("AI_VC_start :AI_audio_queue_thread_id :{} ".format(self.AI_audio_queue_thread_id))
+ 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
+ print("AI_VC_start5")
+ #开始会话
+ def AI_client_VC_start_requset(self):
+ voice="zh_male_wennuanahu_moon_bigtts"
+ try:
+ voice = self.VC_TTS_voice_type[self.VC_TTS_voice_key]["voice"]
+ except Exception as e:
+ usys.print_exception(e)
+ #voice="huoshan::zh_female_dongmanxiaoyang_moon_bigtts"
+
+ json_data = \
+ {
+ "header": {
+ "event": "Start",
+ "trace_id": self.get_trace_id(),
+ },
+ "payload": {
+ "device_id": modem.getDevImei(),
+ "user_agent": "AudioClient/1.0",
+ "dialog_attributes": {
+ #"provider": "doubao",
+ "provider": "coze",
+
+ "cfg": {
+ "disable_empty_prompt" : True,#拦截空字符请求大模型
+ "custom_variables": {
+ "name": self.bot_name,
+ },
+ # "greeting":{
+ # "enabled":True,
+ # "content":"我来啦!"
+ # },
+ "bot_option": {
+ "use_workflow": True,
+ # "bot_id":"7462617881076351002",#语言助手
+ # "workflow_id":"7462621757327196187",
+ "bot_id":"7490815280709812224",
+ "space_id":"7490774264607113256",
+ "workflow_id":"7490818049827733514",
+
+ }
+ }
+ },
+ "outbound_attributes": {
+ "provider": "volcengine",
+ "cfg": {
+ "format": "pcm",
+ "sample_rate": self.VC_play_samplerate,
+ "bit_rate": 16,
+ "channel": 1,
+ "volume": self.VC_TTS_volume,
+ #"voice": "7426720361732980745",
+ "voice": voice,#音色
+ "speech_rate": self.speech_rate,#语速
+ "chunk_interval_ms": 100, # 配置每段音频入队间隔时间 100ms
+ }
+ },
+ "inbound_attributes": {
+ #"provider": "xun-fei",#
+ "provider": "volcengine",
+ "disable_vad":True,
+ "vad_silence":300,
+ "interrupt_options":{
+ "concatenate_results":True,
+ "thinking_time_only": True,
+ },
+ "cfg": {
+ "format": "pcm",
+ "sample_rate": self.VC_record_samplerate,
+ "bit_rate": 16,
+ "channel": 1,
+ "enable_punctuation": True,
+ "enable_itn":True
+ }
+ },
+ "commands":self.commands,
+ }
+ }
+ # "bot_id":"7481164663863459850",#鸭子
+ # "workflow_id":"7480485093845991443",
+ # "bot_id":"7462617881076351002",#语言助手
+ # "workflow_id":"7462621757327196187",
+ # "bot_id":"7469964258592931852",#深圳百事通
+ # "workflow_id":"7469968083063603241",
+ # "bot_id":"7411071327182438412",#柒牌
+ # "workflow_id":"7469049680291610636",
+ # if dev_type == "7PIN_BK":#小瑞
+ # json_data["payload"]["dialog_attributes"]["cfg"]["bot_option"]["bot_id"]="7481164663863459850"#鸭子
+ # json_data["payload"]["dialog_attributes"]["cfg"]["bot_option"]["workflow_id"]="7480485093845991443"
+ # elif dev_type == "7PIN":#柒牌
+ # json_data["payload"]["dialog_attributes"]["cfg"]["bot_option"]["bot_id"]="7411071327182438412"#
+ # json_data["payload"]["dialog_attributes"]["cfg"]["bot_option"]["workflow_id"]="7469049680291610636"
+ # json_data["payload"]["inbound_attributes"]["vad_silence"] = 1500
+ # #
+ # elif dev_type == 'momo':#食梦貘
+ # pass
+ # elif dev_type == 'sjgq':#四季甘泉
+ # json_data["payload"]["dialog_attributes"]["cfg"]["bot_option"]["bot_id"]="7472201279826690111"
+ # json_data["payload"]["dialog_attributes"]["cfg"]["bot_option"]["workflow_id"]="472203898494500914"
+ # pass
+ # elif dev_type == 'szbst':#深圳百事通
+ # json_data["payload"]["dialog_attributes"]["cfg"]["bot_option"]["bot_id"]="7469964258592931852"
+ # json_data["payload"]["dialog_attributes"]["cfg"]["bot_option"]["workflow_id"]="7469968083063603241"
+ if self.commands_mode !=0:
+ json_data["payload"]["commands"] = []
+ if self.VC_mode == 0:#长对话模式打开vad
+ json_data["payload"]["inbound_attributes"]["disable_vad"] = False
+ json_data["payload"]["inbound_attributes"]["cfg"]["keywords"] = ['昆昆']
+ self.VC_state = VC_State_None
+ self.AI_client_VC_send(ujson.dumps(json_data))
+
+ #开始上传语音
+ def AI_client_VC_send_speech(self):
+ json_data = \
+ {
+ "header": {
+ "event": "audio.create",
+
+ },
+ }
+
+ if self.VC_mode == 1:#单对话模式
+ self.AI_client_VC_send(ujson.dumps(json_data))
+
+
+
+
+
+
+ self.VC_state = VC_State_SpeechStart
+ #结束上传语音
+ def AI_client_VC_end_speech(self):
+ json_data = \
+ {
+ "header": {
+ "event": "audio.completed",
+
+ },
+ }
+ self.AI_client_VC_send(ujson.dumps(json_data))
+ EventMesh.publish("publish_AI_btnInfo",{"func":self.VC_Speech_End})
+
+
+ #客户端打断对话
+ def AI_client_VC_RequestToSpeak(self):
+ json_data = \
+ {
+ "event": "cancel",
+ "payload": {}
+ }
+ print("AI_client_VC_RequestToSpeak!!!!!!!!!!!!!!!!!!!!!!!!!!!!!")
+ # 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)})
+ # utime.sleep_ms(1)
+ self.websocket_deconnect_VC()
+ self.AI_audio_queue_thread_close()
+ self.VC_state = VC_State_None
+ #self.Close()
+ self.AI_VC_start()
+ #TTS播放
+ def AI_client_VC_synthesis(self):
+ json_data = \
+ {
+ "event": "synthesis",
+ "payload": {
+ "text": self.AI_TTS_str
+ }
+ }
+ self.AI_TTS_str = ""
+ print("AI_client_VC_synthesis!!!!!!!!!!!!!!!!!!!!!!!!!!!!!")
+ # if self.VC_state == VC_State_RequestToRespond:
+ # print("AI_client_VC_RequestToRespond 重复 tts_str:{}\nasr_str:{}".format(self.AI_TTS_str,self.AI_ASR_str))
+ self.AI_client_VC_send(ujson.dumps(json_data))
+
+ #TTS播放(可加入参数事件调用版)
+ def AI_client_VC_synevent(self,event, msg):
+ self.AI_TTS_str = msg
+ self.Close_flag = 1
+ EventMesh.publish("publish_AI_btnInfo",{"func":self.VC_Speech_End})
+ EventMesh.publish("publish_AI_btnInfo",{"func":self.websocket_deconnect_VC})
+ EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_VC_start})
+ #self.VC_record_thread_close()#关闭录音线程
+ def chenggong_tone(self):
+ EventMesh.publish("audio_montage_play",["chenggong.mp3"])
+ def send_tone(self):
+ EventMesh.publish("audio_montage_play",["send_tone.mp3"])
+ #给服务器回应ack
+
+
+ ############################################
+ #关闭音频播放线程
+ def AI_audio_queue_thread_close(self):
+ print("AI_audio_queue_thread_close1!!!!!!!!!!!!!!!!!!!!!!")
+ if self.AI_audio_queue_thread_id != 0:
+ count =500
+ while True:
+ count -= 1
+ if self.AI_audio_queue_thread_lock == 0 or count <=0:
+ break
+ else:
+ self.AI_audio_queue_thread_lock = 2
+ print("AI_audio_queue_thread going:{}...".format(count))
+ utime.sleep_ms(1)
+ self.AI_audio_queue_thread_lock = 0
+ print("AI_audio_queue_thread_close2!!!!!!!!!!!!!!!!!")
+ try:
+ _thread.stop_thread(self.AI_audio_queue_thread_id)
+ except Exception as e:
+ usys.print_exception(e)
+ self.AI_audio_queue_thread_id = 0
+ # 音频队列
+ def AI_audio_queue_thread(self):
+ print("AI_audio_queue_thread start")
+ count = 0
+ if self.AI_audio_queue.empty()!=True:
+ self.AI_audio_queue.clear()
+ print("音频数据还有剩余!!!!!!!!!!!!")
+ while True:
+ try:
+ if self.AI_audio_queue_thread_lock == 2:
+ print("AI_audio_queue_thread 该退出了")
+ break
+ #
+ count+=1
+ if count%500 == 1:
+ print("AI_audio_queue_thread on")
+ utime.sleep_ms(1)
+ #print("AI_audio_queue_thread")
+ if self.AI_audio_queue.empty() :
+ self.AI_audio_queue_thread_lock = 0
+
+
+ else:
+ self.AI_audio_queue_thread_lock = 1
+ data = self.AI_audio_queue.get()
+ self.close_timerout = 0
+ if self.play_flag == 0:
+ self.play_flag =1
+ #self.AI_client_tts_data_len=len(data)
+ #print("audio_queue:len:{}".format(len(data[0])))
+
+ if len(data[0]) > 10:
+ for i in range(5):
+ if self.VC_Play_flag == 0:
+ self.VC_Play_Start()
+ utime.sleep_ms(2)
+ else:
+ break
+ try:
+ if self.VC_play_TYPE == VC_play_TYPE_PCM:
+ # if self.VC_play_samplerate == 8000:
+ # tmp= self.aud.playStream(1,data[0] )
+ # else:
+ write_buf = bytearray(data[0])
+ #print("play_pcm.stream_write1 len:{}".format(len(write_buf)))
+ if self.play_pcm != None:
+ #print("play_pcm.stream_write !!!")
+ ret = self.play_pcm.stream_write(write_buf,len(write_buf))
+ #ret= self.aud.playStream(1, data[0])#播放音频流
+ self.tts_out_data_len += ret
+ #print("play_pcm.stream_write2:{}".format(self.tts_out_data_len))
+ elif self.VC_play_TYPE == VC_play_TYPE_MP3:
+ tmp= self.aud.playStream(3, data[0])#播放音频流
+
+ if tmp != 0:
+ print("2playStream:error tmp:{} data len:{}!!!!!!!!!!!!".format(tmp,len(data[0])))
+ # # #播放失败的时候填充WAV头
+ # data_len = len(data[0])
+ # data_len_b = data_len.to_bytes(4,'little')#数据长度转16进制数组
+ # h_data = [ 0x52 ,0x49 ,0x46 ,0x46 #,0x24 ,0x00 ,0x00 ,0x00 #文件标识、文件大小
+ # ,0x57 ,0x41 ,0x56 ,0x45 ,0x66 ,0x6D ,0x74 ,0x20 #文件格式、格式块标识符
+ # ,0x10 ,0x00 ,0x00 ,0x00 ,0x01 ,0x00 ,0x01 ,0x00 ,0x80 ,0x3E ,0x00 ,0x00 #格式块大小4、音频格式2、声道数2、采样率4
+ # ,0x80 ,0x3E ,0x00 ,0x00 ,0x02 ,0x00 ,0x10 ,0x00 ,0x64 ,0x61 ,0x74 ,0x61]#每秒字节数4、数据块对齐2、位深度2、data4
+ # h_data_b = bytes(h_data)
+ # file_len = data_len+len(h_data_b)+4+4
+ # file_len_b = file_len.to_bytes(4,'little')#文件长度转16进制数组
+ # h_data_b = h_data_b[:4]+file_len_b+h_data_b[4:]+data_len_b
+ # #self.aud.playStream(2, h_data_b)#播放音频流
+ # tmp= self.aud.playStream(2, h_data_b+data[0])#播放音频流
+ # print("3playStream:tmp:{} !!!!!!!!!!!!".format(tmp))
+
+
+ mem = gc.mem_free()
+ #print('1剩余内存RAM:{} KB'.format(mem / 1024))
+ except Exception as e:
+ print("AI_audio_queue_thread:ERROR:")
+ usys.print_exception(e)
+
+ # if self.VC_state == VC_State_TTSEnd and self.AI_audio_queue.empty() :#self.AI_audio_queue为空且tts下发结束
+ # #通知服务器播放结束
+ # self.AI_client_VC_LocalRespondingEnded()
+ except Exception as e:
+ print("AI_audio_queue_thread:ERROR:")
+ usys.print_exception(e)
+ self.AI_audio_queue_thread_lock = 0
+ #print("AI_audio_queue_thread:exit")
+ def factory_mode(self):
+ print("factory_mode")
+ EventMesh.publish("publish_AI_btnInfo",{"func":self.Close})
+ EventMesh.publish("publish_AI_btnInfo",{"func":self.factory_start})
+ def factory_start(self):
+ self.factory_timer.start(3000, 1, self.factory_timer_cb)
+ def factory_timer_cb(self, *args, **kwargs):
+ print("factory_timer_cb play......")
+ #self.aud.play(1,0,'U:/static/peizhichenggong.mp3')#切换成功
+ EventMesh.publish("audio_montage_play",["xinhaoruo1.mp3"])
+
+ def Close(self):
+ self.VC_Thinking_timerout = 0
+ self.VC_satrt_flag = 0
+ self.AI_TTS_str = ""
+ self.AI_ASR_str = ""
+ self.AI_ASR_str_tmp = ""
+ self.AI_ASR_flag = 0
+ self.AI_ASR_check_timeout = 0
+ self.AI_ASR_error_timeout = 0
+ print("ai_VC Close1!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!")
+ self.tts_in_data_len = 0
+ self.tts_out_data_len = 0
+ #必须先销毁线程,不然线程会容易报错
+ close_all_ledm()
+ try:
+ self.AI_audio_queue_thread_close()#销毁音频线程
+ except Exception as e:
+ usys.print_exception(e)
+ try:
+ self.AI_VC_send_data_queue_thread_close()#销毁数据发送线程
+ except Exception as e:
+ usys.print_exception(e)
+
+ self.VC_Speech_End()
+
+ print("ai_VC Close1.1!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!")
+ self.VC_init()
+ print("ai_VC Close1.2!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!")
+
+ try:
+ self.websocket_deconnect_VC()
+ except Exception as e:
+ usys.print_exception(e)
+
+
+
+
+
+ print("ai_VC Close1.3!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!")
+
+ print("ai_VC Close2!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!")
+
+
+ self.AI_ASR_timer.stop()
+ self._1S_timer.stop()
+ self.factory_timer.stop()
+
+ if self.record_data_save_flag == 1:
+ if self.record_fd :
+ self.record_fd.close()
+ self.record_fd = None
+ if self.play_data_save_flag == 1:
+ if self.play_fd !=None:
+ self.play_fd.close()
+ self.play_fd = None
+ print("ai_VC Close3!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\r\n")
+
+ if self.AI_VC_send_data_queue.empty()!=True:
+ self.AI_VC_send_data_queue.clear()
+
+ self.AI_ASR_send_buf_len = 0
+ #self.AI_WS_connect_Queue.put(self.AI_client_VC)
+
+ # try:
+ # while True:
+ # if self.AI_WS_connect_Queue.empty()!=True:
+ # AI_WS_connect = self.AI_WS_connect_Queue.get()
+ # if AI_WS_connect :
+ # try:
+ # AI_WS_connect._close()
+ # AI_WS_connect = None
+ # except Exception as e:
+ # usys.print_exception(e)
+ # else:
+ # print("websocket链接已为空")
+ # else:
+ # break
+ # except Exception as e:
+ # usys.print_exception(e)
+
+ def VC_init2(self):
+ self.VC_init()
+
+ print("ai_VC VC_init2!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!")
+ try:
+ self.websocket_deconnect_VC()
+ except Exception as e:
+ usys.print_exception(e)
+ print("ai_VC Close3!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\r\n")
+ self._1S_timer.stop()
+ if self.AI_VC_send_data_queue.empty()!=True:
+ self.AI_VC_send_data_queue.clear()
+
+ self.AI_ASR_send_buf_len = 0
+ if self.AI_audio_queue.empty()!=True:
+ self.AI_audio_queue.clear()
+ def VC_init(self):
+
+ print("VC_init:AI_VC_send_data_queue:size:{}".format(self.AI_VC_send_data_queue.size()))
+
+
+ print("VC_init2")
+ #self.VC_Speech_End()
+ print("VC_init3")
+ self.VC_Play_End()
+ print("VC_init4")
+
+ if self.AI_audio_queue.empty()!=True:
+ self.AI_audio_queue.clear()
+ # num = EventMesh.publish("get_volum_size")
+ # if num == None:
+ # num = 8
+ # self.aud.setVolume(num)#恢复原始音量
+
\ No newline at end of file
import ujson
import voiceCall
from misc import Power
-from led import red_green_light,green_light_fast,led_mode,open_led_red,close_led_red,open_led_green,open_led_white,close_led_green,close_led_white
+from led import open_all_ledm,green_light_fast,red_light_fast,led_mode,open_led_red,close_led_red,open_led_green,open_led_white,close_led_green,close_led_white,close_all_ledm,white_light_fast
from machine import RTC
from queue import Queue
import _thread
import usys
import sms
from Gsensor import SC7A20
+from misc import Power
+DEBUG = 0 #0关闭调试 1开启
+import ai_VC
if EventMesh.model == "D10" :
audio_buf = ['audio_find_haixiu', 'R_ALARM_NEW', 'R_BLOOD_SUGAR', 'R_CALL_mp3', 'R_CHARGE_FULL', 'R_CHARGE_IN', 'R_CHARGE_OUT', 'R_CUR_BATTERY_LEVEL', 'R_DRINK_ALARM', 'R_FALL_ALARM', 'R_HOME_ALARM', 'R_HSENSOR_RESULT_FAILE', 'R_HSENSOR_RESULT_HR_TITLE', 'R_HSENSOR_RESULT_OK', 'R_HSENSOR_SPO2_TITLE', 'R_HSENSOR_TEMP_TITLE', 'R_MEDICINE_ALARM', 'R_NO_SET_SOS_DIAL', 'R_NO_SET_VIDOE', 'R_NO_SIM', 'R_POWER_OFF_1', 'R_READ_STEP_0', 'R_READ_STEP_1', 'R_READ_STEP_2', 'R_READ_STEP_3', 'R_READ_STEP_4', '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_MIN', 'R_READ_TIME_ZHENG', 'R_RESET_ALARM', 'R_RESET_END_ALARM', 'R_SIM_CONNECT', 'R_SIM_FAILE', 'R_SLEEP_ALARM', 'R_SOS_ALERT', 'R_TSENSOR_RESULT_VALUE_DOT', 'R_UNREAD_WECHAT', 'R_VIDEO_ANSWER', 'R_VIDEO_ANSWERING', 'R_VIDEO_CALL_CONNECT', 'R_VIDEO_CALL_ENDING', 'R_VIDEO_CALL_IN', 'R_VIDEO_VOICE_IN', 'R_VIDEO_WAITING', 'R_WAKEUP_ALARM', 'R_WECHAT_RECV']
self.hr_auto = 0
self.temp_auto = 0
-
+ #sos打断的标志判断
+ #打电话标志
+ self.call_flag = 0
+ #音频接口初始化
+ self.a = audio.Audio(0)
+ self.a.set_pa(Pin.GPIO29)
+ self.a.setVolume(1)
check_txt = ql_fs.path_exists("/usr/static/storage_file/wechat_record.json")
if check_txt == True :
with open("/usr/static/storage_file/wechat_record.json","r") as fd:#音频文件编号
EventMesh.subscribe("set_start_temp_measure_time", self.set_start_temp_measure_time)#设置体温开始测量的时间戳时间
EventMesh.subscribe("get_start_temp_measure_time", self.get_start_temp_measure_time)#获取体温开始测量的时间戳时间
EventMesh.subscribe("play_hr_value", self.play_hr_value)#播放心率数值
- EventMesh.subscribe("play_spo2_value", self.play_spo2_value)#播放心率数值
+ EventMesh.subscribe("play_spo2_value", self.play_spo2_value)#播放血氧数值
EventMesh.subscribe("play_temp_value", self.play_temp_value)#播放体温数值
EventMesh.subscribe("play_sugar_value", self.play_sugar_value)#播放血糖数值
EventMesh.subscribe("home_alarm_event", self.home_alarm_event)#该回家了
+ EventMesh.subscribe("meet_alarm_event", self.meet_alarm_event)#该开会了
+
+ EventMesh.subscribe("water_alarm_event", self.water_alarm_event)#该单次喝水了
+
EventMesh.subscribe("sleep_alarm_event", self.sleep_alarm_event)#该睡觉了
EventMesh.subscribe("reset_alarm_event", self.reset_alarm_event)#该休息了
def publish_home_ring_event_cb(self, *args, **kwargs):#回家响铃
EventMesh.publish("publish_message_event_interInfo",{"func":self.home_alarm_event_cb,"data":0})
+ def publish_meet_ring_event_cb(self, *args, **kwargs):#开会响铃
+ EventMesh.publish("publish_message_event_interInfo",{"func":self.meet_alarm_event_cb,"data":0})
+
+ def publish_meet_ring_event_cb(self, *args, **kwargs):#单次喝水响铃
+ EventMesh.publish("publish_message_event_interInfo",{"func":self.water_alarm_event_cb,"data":0})
+
def publish_wakeup_ring_event_cb(self, *args, **kwargs):#起床响铃
EventMesh.publish("publish_message_event_interInfo",{"func":self.wakeup_alarm_event_cb,"data":0})
def publish_medicine_ring_event_cb(self, *args, **kwargs):#吃药响铃
EventMesh.publish("publish_message_event_interInfo",{"func":self.medicine_alarm_event_cb,"data":0})
- def publish_drink_ring_event_cb(self, *args, **kwargs):#喝水响铃
+ def publish_drink_ring_event_cb(self, *args, **kwargs):#å\91¨æ\9c\9få\96\9dæ°´å\93\8dé\93\83
EventMesh.publish("publish_message_event_interInfo",{"func":self.drink_alarm_event_cb,"data":0})
def publish_fall_done_ring_event_cb(self, *args, **kwargs):#跌倒提醒
wechat_state = EventMesh.publish("get_wechat_state")
if self.call_state == 0 and wechat_state == 0 and self.fall_flag == 0:
self.alarm_count = 0
- self.alarm_timer1.start(2000, 1, self.publish_reset_alarm_ring_event_cb)
- str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_RESET_ALARM"))
- EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件
+ self.alarm_timer1.start(4000, 1, self.publish_reset_alarm_ring_event_cb)
def reset_alarm_event_cb(self,args):#该休息了
wechat_state = EventMesh.publish("get_wechat_state")
if self.call_state == 0 and wechat_state == 0 and self.fall_flag == 0:
self.alarm_count = 0
self.alarm_timer1.stop()
return
- str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_RESET_ALARM"))
- EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件
+ EventMesh.publish("AI_client_VC_synevent","休息")#用TTS读
else:
self.alarm_count = 0
self.alarm_timer1.stop()
wechat_state = EventMesh.publish("get_wechat_state")
if self.call_state == 0 and wechat_state == 0 and self.fall_flag == 0:
self.alarm_count = 0
- self.alarm_timer1.start(2000, 1, self.reset_end_alarm_event_cb)
- str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_RESET_END_ALARM"))
- EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件
+ self.alarm_timer1.start(4000, 1, self.reset_end_alarm_event_cb)
def reset_end_alarm_event_cb(self,args):#休息结束了
wechat_state = EventMesh.publish("get_wechat_state")
self.alarm_count = 0
self.alarm_timer1.stop()
return
- str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_RESET_END_ALARM"))
- EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件
+ EventMesh.publish("AI_client_VC_synevent","结束")#用TTS读
else:
self.alarm_count = 0
self.alarm_timer1.stop()
wechat_state = EventMesh.publish("get_wechat_state")
if self.call_state == 0 and wechat_state == 0 and self.fall_flag == 0:
self.alarm_count = 0
- self.alarm_timer1.start(2000, 1, self.publish_sleep_alarm_ring_event_cb)
- str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_SLEEP_ALARM"))
- EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件
+ self.alarm_timer1.start(4000, 1, self.publish_sleep_alarm_ring_event_cb)
+
def sleep_alarm_event_cb(self,args):#该睡觉了
wechat_state = EventMesh.publish("get_wechat_state")
if self.call_state == 0 and wechat_state == 0 and self.fall_flag == 0:
self.alarm_count = 0
self.alarm_timer1.stop()
return
- str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_SLEEP_ALARM"))
- EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件
+ EventMesh.publish("AI_client_VC_synevent","睡觉")#用TTS读
else:
self.alarm_count = 0
self.alarm_timer1.stop()
wechat_state = EventMesh.publish("get_wechat_state")
if self.call_state == 0 and wechat_state == 0 and self.fall_flag == 0:
self.alarm_count = 0
- self.alarm_timer1.start(2000, 1, self.publish_home_ring_event_cb)
- str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_HOME_ALARM"))
- EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件
+ self.alarm_timer1.start(4000, 1, self.publish_home_ring_event_cb)
def home_alarm_event_cb(self,args):#该回家了
wechat_state = EventMesh.publish("get_wechat_state")
self.alarm_count = 0
self.alarm_timer1.stop()
return
- str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_HOME_ALARM"))
- EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件
+ EventMesh.publish("AI_client_VC_synevent","该回家了")#用TTS读
else:
self.alarm_count = 0
self.alarm_timer1.stop()
+
+ def meet_alarm_event(self,args,msg):#该开会了
+ wechat_state = EventMesh.publish("get_wechat_state")
+ if self.call_state == 0 and wechat_state == 0 and self.fall_flag == 0:
+ self.alarm_count = 0
+ self.alarm_timer1.start(4000, 1, self.publish_meet_ring_event_cb)
+ # EventMesh.publish("AI_client_VC_synevent","回家")#用TTS读
+ def meet_alarm_event_cb(self,args):#该开会了
+ wechat_state = EventMesh.publish("get_wechat_state")
+ if self.call_state == 0 and wechat_state == 0 and self.fall_flag == 0:
+ self.alarm_count += 1
+ if self.alarm_count >= 3:
+ self.alarm_count = 0
+ self.alarm_timer1.stop()
+ return
+ data = RTC().datetime()
+ hour = data[4]
+ min = data[5]
+ print("读日期")
+ str_data = "当前时间是" + str(hour) + "点" + str(min) + "分,您的会议要开始了"
+ EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
+ else:
+ self.alarm_count = 0
+ self.alarm_timer1.stop()
+ def water_alarm_event(self,args,msg):#该单次喝水了
+ wechat_state = EventMesh.publish("get_wechat_state")
+ if self.call_state == 0 and wechat_state == 0 and self.fall_flag == 0:
+ self.alarm_count = 0
+ self.alarm_timer1.start(4000, 1, self.publish_meet_ring_event_cb)
+ # EventMesh.publish("AI_client_VC_synevent","回家")#用TTS读
+
+ def water_alarm_event_cb(self,args):#该单次喝水了
+ wechat_state = EventMesh.publish("get_wechat_state")
+ if self.call_state == 0 and wechat_state == 0 and self.fall_flag == 0:
+ self.alarm_count += 1
+ if self.alarm_count >= 3:
+ self.alarm_count = 0
+ self.alarm_timer1.stop()
+ return
+ data = RTC().datetime()
+ hour = data[4]
+ min = data[5]
+ print("读喝水")
+ str_data = "该喝水啦"
+ EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
+ else:
+ self.alarm_count = 0
+ self.alarm_timer1.stop()
+
def wakeup_alarm_event(self,args,msg):#该起床了
wechat_state = EventMesh.publish("get_wechat_state")
if self.call_state == 0 and wechat_state == 0 and self.fall_flag == 0:
self.alarm_count = 0
- self.alarm_timer1.start(2000, 1, self.publish_wakeup_ring_event_cb)
- str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_WAKEUP_ALARM"))
- EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件
+ self.alarm_timer1.start(4000, 1, self.publish_wakeup_ring_event_cb)
def wakeup_alarm_event_cb(self,args):#该起床了
wechat_state = EventMesh.publish("get_wechat_state")
self.alarm_count = 0
self.alarm_timer1.stop()
return
- str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_WAKEUP_ALARM"))
- EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件
+ EventMesh.publish("AI_client_VC_synevent","该起床了")#用TTS读
else:
self.alarm_count = 0
self.alarm_timer1.stop()
-
def medicine_alarm_event(self,args,msg):#该吃药了
wechat_state = EventMesh.publish("get_wechat_state")
if self.call_state == 0 and wechat_state == 0 and self.fall_flag == 0:
self.alarm_count = 0
- self.alarm_timer1.start(2000, 1, self.publish_medicine_ring_event_cb)
- str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_MEDICINE_ALARM"))
- EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件
+ self.alarm_timer1.start(4000, 1, self.publish_medicine_ring_event_cb)
def medicine_alarm_event_cb(self,args):#该吃药了
wechat_state = EventMesh.publish("get_wechat_state")
self.alarm_count = 0
self.alarm_timer1.stop()
return
+ EventMesh.publish("AI_client_VC_synevent","吃药")#用TTS读
str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_MEDICINE_ALARM"))
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件
else:
wechat_state = EventMesh.publish("get_wechat_state")
if self.call_state == 0 and wechat_state == 0 and self.fall_flag == 0:
self.alarm_count = 0
- self.alarm_timer1.start(2000, 1, self.publish_drink_ring_event_cb)
+ self.alarm_timer1.start(4000, 1, self.publish_drink_ring_event_cb)
str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_DRINK_ALARM"))
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件
self.alarm_count = 0
self.alarm_timer1.stop()
return
- str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_DRINK_ALARM"))
- EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件
+ EventMesh.publish("AI_client_VC_synevent","该喝水啦")#用TTS读
else:
self.alarm_count = 0
self.alarm_timer1.stop()
self.fall_timer1.stop()
self.fall_flag = 1
self.fall_timer1.start(4000, 1, self.publish_fall_done_ring_event_cb)
- EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件
def falldown_alarm_cb(self,*args):
wechat_state = EventMesh.publish("get_wechat_state")
self.fall_timer1.stop()
EventMesh.publish_async("dial_sos_phone")#拨打sos号码
return
- str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_FALL_ALARM"))
- EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件
else:
self.time_count = 0
self.fall_timer1.stop()
# EventMesh.publish("stop_led_timer")#设置参数
self.aud.stopPlayStream() #播放声音
self.alarm_timer1.stop()
+
def FIND_timer_cb(self, data):
flag = EventMesh.publish("get_call_state")#在通话或者电话拨进 或者拨出不允许寻找设备
if self.find_state == 1:
# EventMesh.debug_log("self.FIND_timer_count:{}".format(self.FIND_timer_count))
str_data = 'mp3files={}.mp3'.format(audio_buf.index("audio_find_haixiu"))
+ self.a.aud_tone_play(16, 0)#响铃一分钟
+ #EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
self.FIND_timer_count += 1
- if self.FIND_timer_count > 10: #120秒30s
- EventMesh.publish("STOP_FIND_WATCH")
+ print(self.FIND_timer_count)
+ if self.FIND_timer_count > 1: #120秒30s
+ self.a.aud_tone_play_stop()
+ EventMesh.publish("STOP_FIND_WATCH")
else:
self.FIND_timer_count = 0
self.alarm_timer1.stop()
EventMesh.publish("close_timer_all")#
self.alarm_state = 1
self.alarm_timer_count = 0
- self.alarm_timer1.start(3000,1,self.publish_alarm_ring_event_cb)
+ self.alarm_timer1.start(8000,1,self.publish_alarm_ring_event_cb)
# EventMesh.publish("set_led_time_arg",[1,1,330,led_mode.LONG_LIGHT_GREEN,2,1,led_mode.OTHER_MEASURE_MODE])#測量成功
# EventMesh.publish("set_led_time_arg",[1000,33000,1,led_mode.FLASH_LIGHT_GREEN,led_mode.DEFAULT_LONG_LIGHT_MODE,led_mode.OTHER_MEASURE_MODE])#设置参数
str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_ALARM_NEW"))
+ #EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
def stop_alarm_ring(self, event, msg): #停止闹钟响铃
if flag == 0 and wechat_state == 0 and self.fall_flag == 0:
if self.alarm_state == 1:
# EventMesh.debug_log("self.alarm_timer_count:{}".format(self.alarm_timer_count))
- str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_ALARM_NEW"))
- EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ self.aud.stop()
+ self.aud.play(1,1,'U:/static/R_ALARM_NEW.mp3')#闹钟音频
self.alarm_timer_count += 1
if self.alarm_timer_count > 15: #120秒30s
EventMesh.publish("STOP_ALARM_RING")
return self.fall_flag
def sos_short_press(self,args,msg):
+ #播报当前时间
+ flag = EventMesh.publish("get_call_state")
+ if flag != 2 and flag != 3 and self.alarm_state == 0 and self.call_flag == 0 and self.find_state== 0:
+ EventMesh.publish("play_cur_time_event")#播报当前时间
EventMesh.publish("interup_call_event")#如果在电话中强制挂断电话
EventMesh.publish("close_audio_play")#强制关闭音频文件播放
EventMesh.publish("STOP_FIND_WATCH")#停止查找设备
- EventMesh.publish("STOP_ALARM_RING")#停止闹钟响铃
- EventMesh.publish("play_cur_time_event")#播报当前时间
- #播报当前时间
+ EventMesh.publish("STOP_ALARM_RING")#停止闹钟响铃
def recv_wechat_audio(self,event,str_data):#接收微聊语音播放
wechat_state = EventMesh.publish("get_wechat_state")
if power_off != None:
if power_off == 1:
return
- self.aud.montage_play('U:/static/audio.bin',1,data[1],data[0])
+ #self.aud.montage_play('U:/static/audio.bin',1,data[1],data[0])
# EventMesh.debug_log("play_audio_file end",data[0],data[1])#路径 str_data[1] 是否需要被打断
EventMesh.publish("close_wechat_btn_timer")#
EventMesh.publish("set_led_time_arg",[1,2,10*10,led_mode.FLASH_LIGHT_RED,10,5,led_mode.OTHER_MEASURE_MODE])#測量成功
self.timer.start(6000, 1, self.publish_call_event_cb)
- str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_CALL_mp3"))
+ print("dialin_call_event")
+ str_data = '来电话啦!叮铃铃'
+ self.call_flag = 1#来电话的标志位置为1
+ EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
EventMesh.publish("play_audio_file",[str_data,0])#获取播放音频文件
# EventMesh.publish("play_audio_file",str_data)#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
self.phone_num = ''
EventMesh.publish("close_timer_all")#
if msg == None:
- str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_NO_SET_SOS_DIAL"))
+ str_data = '您没设置电话呀'
+ EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件
# EventMesh.publish("play_audio_file",str_data)#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
else:
self.phone_num = str(msg)
- str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_SOS_ALERT"))
+ str_data = '电话呼叫中'
+ EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
EventMesh.publish("play_audio_file",[str_data,0])#获取播放音频文件
self.timer1.start(2000, 0, self.time_out_phone)
EventMesh.publish("close_timer_all")#
if msg == None:
- str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_NO_SET_SOS_DIAL"))
+ str_data = '没有设置SOS电话呀'
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件
# EventMesh.publish("play_audio_file",str_data)#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
else:
EventMesh.publish(constants.EVENT.START_LOCATION,[constants.PROTOCOL.AL_SEND,sos_state]) #开始AL定位
EventMesh.publish("close_timer_all")#
self.sos_phone_num = msg
- str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_SOS_ALERT"))
+ str_data = 'S O S呼叫中'
+ EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
EventMesh.publish("play_audio_file",[str_data,0])#获取播放音频文件
self.sos_timer1.start(2000, 0, self.sos_call_out_phone)
self.sos_timer2.start(30000, 0, self.sos_time_out_phone)
def interup_call_event(self, event, msg):#侧边金属按钮挂断来电
flag = EventMesh.publish("get_call_state")
- if flag == 2 or flag == 3:#电话通话中 或者呼叫中挂断中断
+ if flag == 1 or flag == 2 or flag == 3:#电话通话中 或者呼叫中挂断中断
self.call_state = 0
voiceCall.callEnd()
if self.fall_flag == 0:
EventMesh.publish("close_timer_all")#
step = EventMesh.publish("get_old_step_value")
+ str_data = "您当前已走步数为" + str(step) + "步"
+ EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
EventMesh.debug_log("step",step)
self.setp_old = step
if step <= 10:#
if step == 10:#十步
str_data = 'mp3files={}.mp3+{}.mp3'.format(audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_STEP_4"))
+ #EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
else:# 9步
str_data = 'mp3files={}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(step)),audio_buf.index("R_READ_STEP_4"))
+ #EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
elif step <= 100:#十 90
if step == 100:
str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_1"),audio_buf.index("R_READ_STEP_2"),\
audio_buf.index("R_READ_STEP_4"))
+ #EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
else:
step_tmp = str(step)
if ge_value == 0:#9十步 70十步
str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(shi_value)),audio_buf.index("R_READ_STEP_3"),\
audio_buf.index("R_READ_STEP_4"))
+ #EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
else:#9十2步
str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(shi_value)),audio_buf.index("R_READ_STEP_3"),\
audio_buf.index("R_READ_TIME_{}".format(ge_value)),audio_buf.index("R_READ_STEP_4"))
+ #EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
else:#十9步
str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(ge_value)),\
audio_buf.index("R_READ_STEP_4"))
+ #EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
elif step <= 1000:
if step == 1000:#1千步
str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_1"),\
audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_STEP_4"))
+ #EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
else:
step_tmp = str(step)#500
if ge_value == 0:
str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(bai_value)),\
audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_{}".format(shi_value)),audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_STEP_4"))
+ #EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
else:
str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(bai_value)),\
audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_{}".format(shi_value)),audio_buf.index("R_READ_STEP_3"),\
audio_buf.index("R_READ_TIME_{}".format(ge_value)),audio_buf.index("R_READ_STEP_4"))
+ #EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
else:
if shi_value == 0 and ge_value == 0:#500 600
str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(bai_value)),\
audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_STEP_4"))
+ #EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
pass
else:
str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(bai_value)),\
audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(ge_value)),\
audio_buf.index("R_READ_STEP_4"))
+ #EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
pass
elif step <= 10000:#千
if step == 10000:
str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_1"),\
audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_STEP_4"))
+ #EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
pass
else:
str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(qian)),\
audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(ge_value)),\
audio_buf.index("R_READ_STEP_4"))
+ #EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
else:
if ge_value == 0:#1020 1040
str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(qian)),\
audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(shi_value)),\
audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_STEP_4"))
+ #EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
else:#1021
str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(qian)),\
audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(shi_value)),\
audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(ge_value)),audio_buf.index("R_READ_STEP_4"))
+ #EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
else:
if shi_value <= 0:#1109
str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(qian)),\
audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_TIME_{}".format(bai_value)),
audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_STEP_4"))
+ #EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
else:
str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(qian)),\
audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_TIME_{}".format(bai_value)),
audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(ge_value)),\
audio_buf.index("R_READ_STEP_4"))
+ #EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
else:
if ge_value == 0:#1110
audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_TIME_{}".format(bai_value)),
audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_{}".format(shi_value)),\
audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_STEP_4"))
+ #EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
else:#1117
str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(qian)),\
audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_TIME_{}".format(bai_value)),
audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_{}".format(shi_value)),\
audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(ge_value)),audio_buf.index("R_READ_STEP_4"))
+ #EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
pass
if step == 100000:#10万步
str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_STEP_3"),\
audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_STEP_4"))
+ #EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
else:
step_tmp = str(step)
audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_TIME_{}".format(qian)),\
audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_TIME_{}".format(bai_value)),\
audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_STEP_4"))
+ #EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
else:#11108
str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(wang)),\
audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_TIME_{}".format(bai_value)),\
audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(ge_value)),\
audio_buf.index("R_READ_STEP_4"))
+ #EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
pass
else:
audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_TIME_{}".format(bai_value)),\
audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_{}".format(shi_value)),\
audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_STEP_4"))
+ #EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
else:#11116
str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(wang)),\
audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_TIME_{}".format(bai_value)),\
audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_{}".format(shi_value)),\
audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(ge_value)),audio_buf.index("R_READ_STEP_4"))
+ #EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
pass
elif wang > 0 and qian > 0:#11000 11010 11012 11008
audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_TIME_{}".format(qian)),\
audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(shi_value)),\
audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_STEP_4"))
+ #EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
else:#11016
str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(wang)),\
audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_TIME_{}".format(qian)),\
audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(shi_value)),\
audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(ge_value)),audio_buf.index("R_READ_STEP_4"))
+ #EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
else:
if ge_value == 0:#11000
str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(wang)),\
audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_TIME_{}".format(qian)),\
audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_STEP_4"))
+ #EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
else:#11004
str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(wang)),\
audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_TIME_{}".format(qian)),\
audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(ge_value)),\
audio_buf.index("R_READ_STEP_4"))
+ #EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
elif wang > 0:#1
audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(bai_value)),\
audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_{}".format(shi_value)),audio_buf.index("R_READ_STEP_3"),\
audio_buf.index("R_READ_STEP_4"))
+ #EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
else:
str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(wang)),\
audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(bai_value)),\
audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_{}".format(shi_value)),audio_buf.index("R_READ_STEP_3"),\
audio_buf.index("R_READ_TIME_{}".format(ge_value)),audio_buf.index("R_READ_STEP_4"))
+ #EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
else:#10108
if ge_value == 0:#10100
str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(wang)),\
audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(bai_value)),\
audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_STEP_4"))
+ #EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
else:#10108
str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(wang)),\
audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(bai_value)),\
audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(ge_value)),\
audio_buf.index("R_READ_STEP_4"))
+ #EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
else:
if shi_value > 0:
str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(wang)),\
audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(shi_value)),\
audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_STEP_4"))
+ #EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
EventMesh.publish("play_audio_file",str_data)#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
else:#10098
str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(wang)),\
audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(shi_value)),\
audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(ge_value)),audio_buf.index("R_READ_STEP_4"))
+ #EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
else:
str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(wang)),\
audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(ge_value)),\
audio_buf.index("R_READ_STEP_4"))
+ #EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
def set_usb(self, event, msg): #msg 1 正在充电 2充电已移出 3 充电已满 0
get_bp_state = EventMesh.publish("get_bp_state")
get_bg_state = EventMesh.publish("get_bg_state")
get_temp_state = EventMesh.publish("get_temp_state")
- if msg == 1:
- if get_hr_state != None and get_spo2_state != None and get_bp_state != None and get_bg_state != None and get_temp_state != None:
- if get_hr_state != 0:
-
- EventMesh.publish("set_hr_state",0)#2代表后台进入测试,定时测心率 1ui界面测试洗心率
- if get_hr_state == 1:
- EventMesh.publish("stop_led_timer")#设置参数
- EventMesh.publish("set_start_measure_time",0)#设置开始测量的时间戳时间
-
- EventMesh.debug_log("stop debug8")
- EventMesh.publish(constants.EVENT.STOP_HEART)
- if get_spo2_state != 0:
- EventMesh.publish("set_spo2_state",0)#2代表后台进入测试
- if get_spo2_state == 1:
- EventMesh.publish("stop_led_timer")#设置参数
- EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN)
- EventMesh.debug_log("stop debug13")
- if get_bp_state != 0:
- EventMesh.publish("set_bp_state",0)#2代表后台进入测试
- if get_bp_state == 1:
- EventMesh.publish("stop_led_timer")#设置参数
- EventMesh.publish(constants.EVENT.STOP_HEART)
- EventMesh.debug_log("stop bp debug1")
- if get_bg_state != 0:
- EventMesh.publish("set_bg_state",0)#2代表后台进入测试
- if get_bg_state == 1:#手动开灯关闭灯
- EventMesh.publish("stop_led_timer")#设置参数
- EventMesh.publish(constants.EVENT.STOP_HEART)
- EventMesh.debug_log("stop BG debug14")
- if get_temp_state != 0:
-
- EventMesh.publish("set_temp_state",0)#2代表后台进入测试
- if get_temp_state == 1:
- EventMesh.publish("stop_led_timer")#设置参数
- EventMesh.publish("set_start_temp_measure_time",0)#
- EventMesh.publish(constants.EVENT.STOP_TEMP)
- EventMesh.debug_log("stop temp debug14")
- if msg == 1:
- self.usbState = msg
- str_buf = [1,1,10,led_mode.LONG_LIGHT_RED,4,2,led_mode.CHARGE_IN_MODE]
- EventMesh.publish("set_led_time_arg",str_buf)#
- if flag == 0 and self.fall_flag == 0:#电话通话中 或者呼叫中挂断中断
- EventMesh.publish("close_timer_all")#
- self.aud.stop()
- self.aud.play(1,1,'U:/static/R_CHARGE_IN.mp3')
- # str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_CHARGE_IN"))
- # EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
- EventMesh.debug_log("charge R_CHARGE_IN")
-
-
- elif msg == 2:
- self.usbState = msg
- EventMesh.publish("stop_led_timer")#设置参数
- EventMesh.publish("set_led_time_arg",[1,1,0,led_mode.FLASH_LIGHT_GREEN,4,4,led_mode.CHARGE_OUT_MODE])#測量成功
- EventMesh.debug_log("charge R_CHARGE_OUT")
- if flag == 0 and self.fall_flag == 0:#电话通话中 或者呼叫中挂断中断
- EventMesh.publish("close_timer_all")#
- self.aud.stop()
- self.aud.play(1,1,'U:/static/R_CHARGE_OUT.mp3')
- # str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_CHARGE_OUT"))
- # EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
-
+ if DEBUG == 0:
+ if msg == 1:
+ if get_hr_state != None and get_spo2_state != None and get_bp_state != None and get_bg_state != None and get_temp_state != None:
+ if get_hr_state != 0:
+
+ EventMesh.publish("set_hr_state",0)#2代表后台进入测试,定时测心率 1ui界面测试洗心率
+ if get_hr_state == 1:
+ EventMesh.publish("stop_led_timer")#设置参数
+ EventMesh.publish("set_start_measure_time",0)#设置开始测量的时间戳时间
+
+ EventMesh.debug_log("stop debug8")
+ EventMesh.publish(constants.EVENT.STOP_HEART)
+ if get_spo2_state != 0:
+ EventMesh.publish("set_spo2_state",0)#2代表后台进入测试
+ if get_spo2_state == 1:
+ EventMesh.publish("stop_led_timer")#设置参数
+ EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN)
+ EventMesh.debug_log("stop debug13")
+ if get_bp_state != 0:
+ EventMesh.publish("set_bp_state",0)#2代表后台进入测试
+ if get_bp_state == 1:
+ EventMesh.publish("stop_led_timer")#设置参数
+ EventMesh.publish(constants.EVENT.STOP_HEART)
+ EventMesh.debug_log("stop bp debug1")
+ if get_bg_state != 0:
+ EventMesh.publish("set_bg_state",0)#2代表后台进入测试
+ if get_bg_state == 1:#手动开灯关闭灯
+ EventMesh.publish("stop_led_timer")#设置参数
+ EventMesh.publish(constants.EVENT.STOP_HEART)
+ EventMesh.debug_log("stop BG debug14")
+ if get_temp_state != 0:
+
+ EventMesh.publish("set_temp_state",0)#2代表后台进入测试
+ if get_temp_state == 1:
+ EventMesh.publish("stop_led_timer")#设置参数
+ EventMesh.publish("set_start_temp_measure_time",0)#
+ EventMesh.publish(constants.EVENT.STOP_TEMP)
+ EventMesh.debug_log("stop temp debug14")
+ if msg == 1:
+ self.usbState = msg
+ str_buf = [1,1,10,led_mode.LONG_LIGHT_RED,4,2,led_mode.CHARGE_IN_MODE]
+ EventMesh.publish("set_led_time_arg",str_buf)#
+ if flag == 0 and self.fall_flag == 0:#电话通话中 或者呼叫中挂断中断
+ EventMesh.publish("close_timer_all")#
+ self.aud.stop()
+ self.aud.play(1,1,'U:/static/R_CHARGE_IN.mp3')
+ # str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_CHARGE_IN"))
+ # EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ EventMesh.debug_log("charge R_CHARGE_IN")
+
+
+ elif msg == 2:
+ self.usbState = msg
+ EventMesh.publish("stop_led_timer")#设置参数
+ # EventMesh.publish("set_led_time_arg",[1,1,0,led_mode.FLASH_LIGHT_GREEN,4,4,led_mode.CHARGE_OUT_MODE])#測量成功
+ EventMesh.debug_log("charge R_CHARGE_OUT")
+ if flag == 0 and self.fall_flag == 0:#电话通话中 或者呼叫中挂断中断
+ EventMesh.publish("close_timer_all")#
+ self.aud.stop()
+ self.aud.play(1,1,'U:/static/R_CHARGE_OUT.mp3')
+ # str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_CHARGE_OUT"))
+ # EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+
- elif msg == 3:
- self.usbState = msg
- EventMesh.debug_log("charge full")
- str_buf = [1,1,10,led_mode.LONG_LIGHT_GREEN,4,2,led_mode.CHARGE_FULL_MODE]
- EventMesh.publish("set_led_time_arg",str_buf)#
- # if flag == 0 and self.fall_flag == 0:#电话通话中 或者呼叫中挂断中断
- # EventMesh.publish("close_timer_all")#
- # str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_CHARGE_FULL"))
- # EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
-
+ elif msg == 3:
+ self.usbState = msg
+ EventMesh.debug_log("charge full")
+ str_buf = [1,1,10,led_mode.LONG_LIGHT_GREEN,4,2,led_mode.CHARGE_FULL_MODE]
+ EventMesh.publish("set_led_time_arg",str_buf)#
+ # if flag == 0 and self.fall_flag == 0:#电话通话中 或者呼叫中挂断中断
+ # EventMesh.publish("close_timer_all")#
+ # str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_CHARGE_FULL"))
+ # EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+
def get_usb(self, event, msg):
EventMesh.publish("close_hr_sop2")#
# EventMesh.debug_log("power_off_audio_cb")
self.aud.stop()
+
self.aud.play(1,0,'U:/static/R_POWER_OFF_1.mp3')
# str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_POWER_OFF_1"))
# EventMesh.publish("play_audio_file",[str_data,0])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
EventMesh.publish("set_led_time_arg",[1,2,6*8,led_mode.FLASH_LIGHT_RED,6,3,led_mode.POWER_OFF_MODE])#
self.power_off = 1
self.pwk_timer2.start(6000,0,self.publish_power_down_event_cb)
+ Power.powerDown()
elif msg == 3:
flag = EventMesh.publish("get_call_state")
if flag != 0:#电话呼叫中
voiceCall.callEnd()
EventMesh.publish("close_hr_sop2")#
self.aud.stop()
+ self.a.aud_tone_play_stop()
+ EventMesh.publish("AI_key_release")
self.aud.play(1,0,'U:/static/R_POWER_OFF_1.mp3')
# str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_POWER_OFF_1"))
# EventMesh.publish("play_audio_file",[str_data,0])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
self.aud.play(1,1,'U:/static/R_POWER_OFF_1.mp3')
# str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_POWER_OFF_1"))
# EventMesh.publish("play_audio_file",[str_data,0])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
- EventMesh.publish("set_led_time_arg",[1,2,6*8,led_mode.FLASH_LIGHT_GREEN,6,3,led_mode.OTHER_MEASURE_MODE])#測量成功
+ EventMesh.publish("set_led_time_arg",[1,2,6*8,led_mode.FLASH_LIGHT_GREEN,6,3,led_mode.OTHER_MEASURE_MODE])
# EventMesh.publish("set_led_time_arg",[1000,200,10,led_mode.FLASH_LIGHT_GREEN,led_mode.DEFAULT_LONG_LIGHT_MODE,led_mode.OTHER_MEASURE_MODE])#设置参数
self.power_on_flag = 0
self.pwk_timer2.start(5000,0,self.power_on_cb)
get_bp_state = EventMesh.publish("get_bp_state")
if get_hr_state != None and get_spo2_state != None and get_temp_state != None and get_bg_state != None and get_bp_state != None:
if get_hr_state != 0:
+ print("结束心率测量")
EventMesh.publish("set_hr_state",0)#2代表后台进入测试,定时测心率 1ui界面测试洗心率
EventMesh.debug_log("sstop hr")
EventMesh.publish(constants.EVENT.STOP_HEART)
+ EventMesh.publish("AI_client_VC_synevent","结束心率测量")#用TTS读
+ close_all_ledm()
if get_spo2_state != 0 :
+ print("结束血氧测量")
EventMesh.debug_log("stop spo2")
EventMesh.publish("set_spo2_state",0)#2代表后台进入测试
EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN)
+ EventMesh.publish("AI_client_VC_synevent","结束血氧测量")#用TTS读
+ close_all_ledm()
if get_temp_state != 0:
+ print("结束温度测量")
EventMesh.debug_log("stop temp")
EventMesh.publish("set_temp_state",0)
EventMesh.publish(constants.EVENT.STOP_TEMP)#手动体温测试
+ EventMesh.publish("AI_client_VC_synevent","结束温度测量")#用TTS读
+ close_all_ledm()
if get_bg_state != 0:
EventMesh.publish("set_bg_state",0)#2代表后台进入测试,定时测心率 1ui界面测试洗心率
EventMesh.debug_log("sstop bg")
get_temp_state = EventMesh.publish("get_temp_state")
if msg == 1:
if get_hr_state != 1:#不是手动测试直接打断
+ # EventMesh.publish("set_led_time_arg",[1,2,900,led_mode.FLASH_LIGHT_GREEN,60,30,led_mode.HR_MEASURE_MODE])
EventMesh.debug_log("set_manual_measure_mode",msg)
EventMesh.publish("set_spo2_state",0)
EventMesh.publish("set_bg_state",0)
EventMesh.publish("set_bp_state",0)
-
EventMesh.publish("set_hr_state",1)
EventMesh.publish("clear_manual_hr_flag")
EventMesh.publish("set_start_measure_time",1)#设置开始测量的时间戳时间
EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN) #停止测试血氧
EventMesh.publish("set_hr_blood_led",1)
EventMesh.publish(constants.EVENT.START_HEART) #手动心率测试
+ # EventMesh.publish("publish_message_event_light",green_light_fast(20,200))
+
+
elif msg == 2:
if get_hr_state == 0:
if get_spo2_state != 1:
+ # EventMesh.publish("set_led_time_arg",[1,2,900,led_mode.FLASH_LIGHT_WHITE,60,30,led_mode.OXYGEN_MEASURE_MODE])
EventMesh.debug_log("set_manual_measure_mode",msg)
EventMesh.publish("set_spo2_state",1)
EventMesh.publish("set_start_measure_time",1)#设置开始测量的时间戳时间
EventMesh.publish("set_hr_blood_led",1)
EventMesh.publish(constants.EVENT.START_BLOOD_OXYGEN) #手动血氧测试
+ # # #设置灯光 白灯闪烁
+ # EventMesh.publish("publish_message_event_light",white_light_fast(20,200))
+
elif msg == 3:
if get_temp_state != 1:
+ # EventMesh.publish("set_led_time_arg",[1,2,900,led_mode.FLASH_LIGHT_RED,60,30,led_mode.TEMP_MEASURE_MODE])
EventMesh.debug_log("set_manual_measure_mode",msg)
EventMesh.publish("clear_manual_temp_flag")
EventMesh.publish("set_temp_state",1)
EventMesh.publish("set_start_temp_measure_time",1)#设置开始测量的时间戳时间
EventMesh.publish("set_hr_blood_led",1)
EventMesh.publish(constants.EVENT.START_TEMP)#手动体温测试
+ # # #设置灯光 红绿灯交替闪烁
+ # EventMesh.publish("publish_message_event_light",red_light_fast(20,200))
pass
- def play_temp_value(self, event, msg): #播放体温数值
+ def play_temp_value(self, event, msg): #获取体温数值
flag = EventMesh.publish("get_call_state")
if msg != None:
if flag == 0 and self.fall_flag == 0:
EventMesh.publish("set_hr_blood_led",3)#测量异常
def play_temp_fun(self,argc): #播放体温数值
- data = self.temp_value
+ data = "{:.1f}".format(self.temp_value)
+ close_all_ledm()
+ str_data = "当前体温是" + str(data) + "度"
+ print(str_data)
+ EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
if data > 42:
data = 42
data_tmp = str(data)
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
- def play_hr_value(self, event, msg): #播放心率数值
+ def play_hr_value(self, event, msg): #获取心率数值
flag = EventMesh.publish("get_call_state")
if msg != None:
if flag == 0 and self.fall_flag == 0:
# EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
self.hr_value = msg
EventMesh.publish("set_hr_blood_led",2)#测量成功
- # self.timer.start(2*1000,1,self.play_hr_fun)
+ #self.timer.start(2*1000,1,self.play_hr_fun)
self.play_hr_fun(0)
else:
str_data ='mp3files={}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_FAILE"))
def play_hr_fun(self,argc):#播放心率测试值
- flag = EventMesh.publish("get_call_state")
-
+ flag = EventMesh.publish("get_call_state")
if flag == 0 and self.fall_flag == 0:#电话通话中 或者呼叫中挂断中断
EventMesh.publish("close_timer_all")#
+ close_all_ledm()
data = self.hr_value
- if data > 220:
- data = 220
- if data < 100:
- if data%10 == 0:
- str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_HR_TITLE"),audio_buf.index("R_READ_TIME_{}".format(data//10)),\
- audio_buf.index("R_READ_STEP_3"))
- EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
- else:
- str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_HR_TITLE"),audio_buf.index("R_READ_TIME_{}".format(data//10)),\
- audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(data%10)))
- EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
- else:
- shi = (data%100)//10 #210
- ge = (data%100)%10
- #210 234
- if shi > 0:
- if ge == 0:#210 230 120
- str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_HR_TITLE"),audio_buf.index("R_READ_TIME_{}".format(data//100)),\
- audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_{}".format(shi)),audio_buf.index("R_READ_STEP_3"))
- EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
- else:
- str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_HR_TITLE"),audio_buf.index("R_READ_TIME_{}".format(data//100)),\
- audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_{}".format(shi)),audio_buf.index("R_READ_STEP_3"),\
- audio_buf.index("R_READ_TIME_{}".format(ge)))
- EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
- else:
- if ge == 0:#200 100 209 108
- str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_HR_TITLE"),audio_buf.index("R_READ_TIME_{}".format(data//100)),\
- audio_buf.index("R_READ_STEP_2"))
- EventMesh.publish("play_audio_file",str_data)#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
- else:
- str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_HR_TITLE"),audio_buf.index("R_READ_TIME_{}".format(data//100)),\
- audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(ge)))
- EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ str_data = "您的心率测试值为" + str(data)
+ EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
+
+ # if data > 220:
+ # data = 220
+ # if data < 100:
+ # if data%10 == 0:
+ # str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_HR_TITLE"),audio_buf.index("R_READ_TIME_{}".format(data//10)),\
+ # audio_buf.index("R_READ_STEP_3"))
+ # EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ # else:
+ # str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_HR_TITLE"),audio_buf.index("R_READ_TIME_{}".format(data//10)),\
+ # audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(data%10)))
+ # EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ # else:
+ # shi = (data%100)//10 #210
+ # ge = (data%100)%10
+ # #210 234
+ # if shi > 0:
+ # if ge == 0:#210 230 120
+ # str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_HR_TITLE"),audio_buf.index("R_READ_TIME_{}".format(data//100)),\
+ # audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_{}".format(shi)),audio_buf.index("R_READ_STEP_3"))
+ # EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ # else:
+ # str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_HR_TITLE"),audio_buf.index("R_READ_TIME_{}".format(data//100)),\
+ # audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_{}".format(shi)),audio_buf.index("R_READ_STEP_3"),\
+ # audio_buf.index("R_READ_TIME_{}".format(ge)))
+ # EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ # else:
+ # if ge == 0:#200 100 209 108
+ # str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_HR_TITLE"),audio_buf.index("R_READ_TIME_{}".format(data//100)),\
+ # audio_buf.index("R_READ_STEP_2"))
+ # EventMesh.publish("play_audio_file",str_data)#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ # else:
+ # str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_HR_TITLE"),audio_buf.index("R_READ_TIME_{}".format(data//100)),\
+ # audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(ge)))
+ # EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
def play_sugar_value(self, event, msg): #播放血糖数值
else:
data_shi = int(data)
data_ge = 0
-
- if data_shi != 0 and data_ge != 0:
- str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_BLOOD_SUGAR"),audio_buf.index("R_READ_TIME_{}".format(data_shi)),\
- audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_{}".format(data_ge)))
- EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ str_data = "您的血糖测试值为" + data
+ EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
else:
EventMesh.publish("set_hr_blood_led",3)#测量异常
- def play_spo2_value(self, event, msg): #播放血样数值
+ def play_spo2_value(self, event, msg): #获取血氧数值
flag = EventMesh.publish("get_call_state")
if msg != None:
if flag == 0 and self.fall_flag == 0:
# EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
EventMesh.publish("set_hr_blood_led",2)#测量成功
self.spo2_value = msg
+ str_data = "血氧数值为" + str(self.spo2_value)
+ EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
# self.timer.start(2*1000,1,self.play_spo2_fun)
self.play_spo2_fun(0)
else:
def play_spo2_fun(self,argc):#播放血氧测试值
flag = EventMesh.publish("get_call_state")
-
if flag == 0 and self.fall_flag == 0:#电话通话中 或者呼叫中挂断中断
EventMesh.publish("close_timer_all")#
+ close_all_ledm()
data = self.spo2_value
- if data > 100:
- data = 100
- if data == 100:
- str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_SPO2_TITLE"),audio_buf.index("R_READ_TIME_{}".format(data//10)),\
- audio_buf.index("R_READ_STEP_2"))
- EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
- else:
- if data % 10 == 0:
- str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_SPO2_TITLE"),audio_buf.index("R_READ_TIME_{}".format(data//10)),\
- audio_buf.index("R_READ_STEP_3"))
- EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
- pass
- else:
- str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_SPO2_TITLE"),audio_buf.index("R_READ_TIME_{}".format(data//10)),\
- audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(data%10)))
- EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
+ str_data = "您的血氧测试值为" + str(data)
+ EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
def set_sim_mode(self, event, msg): #mode 1 蓝灯闪烁 可识别卡 但未联网 2 可绑定appsim正常 3 手表不识别卡或者未插卡
EventMesh.publish("set_led_time_arg",[1,2,10,led_mode.FLASH_LIGHT_WHITE,10,5,led_mode.OTHER_MEASURE_MODE])#測量成功
# EventMesh.publish("set_led_time_arg",[1000,400,1,led_mode.FLASH_LIGHT_WHITE,led_mode.DEFAULT_LONG_LIGHT_MODE,led_mode.OTHER_MEASURE_MODE])#设置参数
str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_SIM_FAILE"))
+ #EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
pass
elif mode == 2:#蓝灯色灯
EventMesh.publish("set_led_time_arg",[1,2,10,led_mode.FLASH_LIGHT_GREEN,10,5,led_mode.OTHER_MEASURE_MODE])#測量成功
# EventMesh.publish("set_led_time_arg",[1000,400,1,led_mode.FLASH_LIGHT_GREEN,led_mode.DEFAULT_LONG_LIGHT_MODE,led_mode.OTHER_MEASURE_MODE])#设置参数
str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_SIM_CONNECT"))
+ #EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
pass
elif mode == 3:#红灯闪烁
EventMesh.publish("set_led_time_arg",[1,2,10,led_mode.FLASH_LIGHT_RED,10,5,led_mode.OTHER_MEASURE_MODE])#測量成功
str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_NO_SIM"))
+ #EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
pass
else:#未设置sos紧急求助号码
EventMesh.publish("close_timer_all")#
str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_NO_SET_SOS_DIAL"))
+ EventMesh.publish("AI_client_VC_synevent","您还未设置sos紧急求助号码呀!")#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
pass
else:
EventMesh.publish("close_timer_all")#
EventMesh.publish("set_led_time_arg",[1,2,10,led_mode.FLASH_LIGHT_WHITE,10,5,led_mode.OTHER_MEASURE_MODE])#測量成功
str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_SIM_FAILE"))
+ EventMesh.publish("AI_client_VC_synevent","您未联网呀!")#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
else:#未插卡
EventMesh.publish("close_timer_all")#
EventMesh.publish("set_led_time_arg",[1,2,10,led_mode.FLASH_LIGHT_RED,10,5,led_mode.OTHER_MEASURE_MODE])#測量成功
str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_NO_SIM"))
+ EventMesh.publish("AI_client_VC_synevent","您未插卡呀!")#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
def play_cur_time_event(self, event, msg): #播放当前时间
data = RTC().datetime()
hour = data[4]
min = data[5]
+ print("读日期")
+ str_data = "当前时间是" + str(hour) + "点" + str(min) + "分"
+ EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
# EventMesh.debug_log("hour",hour,min)
self.old_hour = hour
self.old_min = min
if self.old_min == 0:#0点整
str_data = 'mp3files={}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_0")\
,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"))
+ str_data = "现在的时间是:"
+ #EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
else:#0点09分
str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_0")\
,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(self.old_min))\
,audio_buf.index("R_READ_TIME_MIN"))
+ #EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
pass
str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_0")\
,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_{}".format(self.old_min // 10))\
,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_MIN"))
+ #EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
pass
else:#0点2十8分
str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_0")\
,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_{}".format(self.old_min // 10))\
,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(self.old_min % 10)),audio_buf.index("R_READ_TIME_MIN"))
+ #EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
pass
if self.old_min <= 0:
str_data = 'mp3files={}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(self.old_hour))\
,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"))
+ #EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
pass
else:
str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(self.old_hour))\
,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_{}".format(self.old_min //10))\
,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_MIN"))
+ #EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
else:#9点2十4分
str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(self.old_hour))\
,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_{}".format(self.old_min //10))\
,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(self.old_min % 10)),audio_buf.index("R_READ_TIME_MIN"))
+ #EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
if self.old_hour == 10:#十点整
str_data = 'mp3files={}.mp3+{}.mp3'.format(audio_buf.index("R_READ_STEP_3")\
,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"))
+ #EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
elif self.old_hour == 20:
str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(hour_shi))\
,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"))
+ #EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
else:
if hour_shi <= 1:#十3点整
str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_STEP_3")\
,audio_buf.index("R_READ_TIME_{}".format(hour_ge)),audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"))
+ #EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
else:
str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(hour_shi))\
,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(hour_ge)),audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"))
+ #EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
else:
str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_STEP_3")\
,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_0")\
,audio_buf.index("R_READ_TIME_{}".format(self.old_min)),audio_buf.index("R_READ_TIME_MIN"))
+ #EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
else:
if self.old_min % 10 == 0:#十点2十分
str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_STEP_3")\
,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_{}".format(self.old_min//10))\
,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_MIN"))
+ #EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
else:#十点2十1分
str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_STEP_3")\
,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_{}".format(self.old_min//10))\
,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(self.old_min%10))\
,audio_buf.index("R_READ_TIME_MIN"))
+ #EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
else:
if self.old_min == 0:
str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_STEP_3")\
,audio_buf.index("R_READ_TIME_{}".format(self.old_hour % 10)),audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"))
+ #EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
pass
else:
,audio_buf.index("R_READ_TIME_{}".format(self.old_hour % 10)),audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT")\
,audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(self.old_min % 10))\
,audio_buf.index("R_READ_TIME_MIN"))
+ #EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
else:#19:18 19:40 19:56
str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_STEP_3")\
,audio_buf.index("R_READ_TIME_{}".format(self.old_hour % 10)),audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT")\
,audio_buf.index("R_READ_TIME_{}".format(self.old_min // 10)),audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_MIN"))
+ #EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
else:#十9点2十1分
str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_STEP_3")\
,audio_buf.index("R_READ_TIME_{}".format(self.old_hour % 10)),audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT")\
,audio_buf.index("R_READ_TIME_{}".format(self.old_min // 10)),audio_buf.index("R_READ_STEP_3")\
,audio_buf.index("R_READ_TIME_{}".format(self.old_min % 10)),audio_buf.index("R_READ_TIME_MIN"))
+ #EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
else:
if self.old_min == 0:
str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(hour_shi))\
,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"))
+ #EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
pass
else:
str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(hour_shi))\
,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_0")\
,audio_buf.index("R_READ_TIME_{}".format(min_ge)),audio_buf.index("R_READ_TIME_MIN"))
+ #EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
else:
str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(hour_shi))\
,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_{}".format(min_shi))\
,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_MIN"))
+ #EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
else:#2十点2十1分
str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(hour_shi))\
,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_{}".format(min_shi))\
,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(min_ge)),audio_buf.index("R_READ_TIME_MIN"))
+ #EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
else:#21:08 21:18
str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(hour_shi))\
,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(hour_ge))\
,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"))
+ #EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
pass
else:
,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(hour_ge))\
,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_0")\
,audio_buf.index("R_READ_TIME_{}".format(min_ge)),audio_buf.index("R_READ_TIME_MIN"))
+ #EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
else:
if min_ge == 0:#2十3点3十分
,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(hour_ge))\
,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_{}".format(min_shi))\
,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_MIN"))
+ #EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
else:#2十3点3十1分
str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(hour_shi))\
,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(hour_ge))\
,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_{}".format(min_shi))\
,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(min_ge)),audio_buf.index("R_READ_TIME_MIN"))
+ #EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
else:#未设置号码
# EventMesh.debug_log("play_center_phone")
str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_NO_SET_SOS_DIAL"))
+ EventMesh.publish("AI_client_VC_synevent","您还没设置号码")#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
pass
def center_phone_cb(self,*argc): #msg
if flag == 0 and self.fall_flag == 0:#电话通话中 或者呼叫中挂断中断
EventMesh.publish("close_timer_all")#
imei = EventMesh.publish(constants.EVENT.GET_IMEI)
+ str_data = "当前设备号为" + imei
+ EventMesh.publish("AI_client_VC_synevent",str_data)#用TTS读
EventMesh.debug_log(imei)
str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(imei[0]))\
,audio_buf.index("R_READ_TIME_{}".format(imei[1])),audio_buf.index("R_READ_TIME_{}".format(imei[2])),audio_buf.index("R_READ_TIME_{}".format(imei[3])),\
audio_buf.index("R_READ_TIME_{}".format(imei[4])),audio_buf.index("R_READ_TIME_{}".format(imei[5])),audio_buf.index("R_READ_TIME_{}".format(imei[6])),audio_buf.index("R_READ_TIME_{}".format(imei[7])),\
audio_buf.index("R_READ_TIME_{}".format(imei[8])),audio_buf.index("R_READ_TIME_{}".format(imei[9])),audio_buf.index("R_READ_TIME_{}".format(imei[10])),audio_buf.index("R_READ_TIME_{}".format(imei[11])),\
audio_buf.index("R_READ_TIME_{}".format(imei[12])),audio_buf.index("R_READ_TIME_{}".format(imei[13])),audio_buf.index("R_READ_TIME_{}".format(imei[14])))
+
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
#播放音频文件
EventMesh.publish("close_timer_all")
str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_UNREAD_WECHAT"))
+ #EventMesh.publish("AI_client_VC_synevent",str_data)
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
else:
self.updateTime = 0
self.wechatKey_timer = osTimer()
self.wechatKey_count = 0
self.wechatKey_press = 0
+ self.wechatKey_long_press = 0
self.sosKey_timer = osTimer()
self.sosKey_count = 0
self.factoryTest_led_count = 0
self.factoryTest_flag = 0
self.btnInfo_queue = Queue()
+
_thread.stack_size(10*1024+192)
_thread.start_new_thread(self.btnInfo_queue_thread, ())
_thread.stack_size(8*1024)
-
- EventMesh.subscribe("publish_message_event_btnInfo",self.publish_message_event_btnInfo)
+ EventMesh.subscribe("publish_message_event_btnInfo",self.publish_message_event_btnInfo)
+ EventMesh.subscribe("publish_message_event_light",self.publish_message_event_light)
EventMesh.subscribe("close_wechat_btn_timer", self.close_wechat_btn_timer)#来电强制关闭微聊语音
-
+ EventMesh.subscribe("get_AIKey_long", self.get_AIKey_long)#判断长按
def btnInfo_queue_thread(self):
while True:
data = self.btnInfo_queue.get()
def publish_message_event_btnInfo(self,event,msg):
self.btnInfo_queue.put(msg)
EventMesh.publish(constants.EVENT.SYSTEM_UP)#唤醒休眠
-
+
+ def publish_message_event_light(self,event,msg):
+ EventMesh.publish(constants.EVENT.SYSTEM_UP)#唤醒休眠
+
def publish_wechat_btn_event_cb(self, *args, **kwargs):
EventMesh.publish("publish_message_event_btnInfo",{"func":self.wechatKey_press_cb,"data":0})
self.pk.powerKeyEventRegister(self.powerKey_callback)
- self.extint = ExtInt(ExtInt.GPIO26, ExtInt.IRQ_RISING_FALLING, ExtInt.PULL_DISABLE, self.pwk_extint_cb)
+ self.extint = ExtInt(ExtInt.GPIO26, ExtInt.IRQ_RISING_FALLING, ExtInt.PULL_PU, self.pwk_extint_cb)
self.extint.enable()
self.sosKey = ExtInt(ExtInt.GPIO22, ExtInt.IRQ_RISING_FALLING, ExtInt.PULL_PU, self.sosKey_extint_cb)
EventMesh.publish("close_wechat_btn_timer")
if self.pwkey_press == 0 :
self.aud.stop() #播放声音
+ # self.a.aud_tone_play_stop()
# self.wechatKey_timeout_cb(0)
# self.sosKey_timeout_cb(0)
self.wechatKey_timer.stop()
self.pwkey_count = 0
self.led_state = 0
self.pwkey_timer.start(100, 1, self.publish_pwkKey_btn_event_cb)
+
# EventMesh.debug_log("key22_extint_cb:self.key22_timer.start!!!!\n")
def pwKey_press_cb(self, data):
self.pwkey_press = 0
self.led_state = 0
self.pwKey_press_count=0
+ # EventMesh.publish("pwk_key_release")
return
self.GPIO26_status = self.extint.read_level()
if self.pwkey_press == 1 :
self.pwkey_count += 1
+ print("self.pwkey_count = ",self.pwkey_count)
if self.pwkey_count > 5:
if self.led_state == 0:
self.led_state = 1
- EventMesh.publish("set_led_time_arg",[1,1,330,led_mode.LONG_LIGHT_GREEN,2,1,led_mode.OTHER_MEASURE_MODE])#測量成功
+ # EventMesh.publish("set_led_time_arg",[1,1,330,led_mode.LONG_LIGHT_GREEN,2,1,led_mode.OTHER_MEASURE_MODE])#測量成功
if self.pwkey_count >= 10*10:
EventMesh.publish("stop_led_timer")#设置参数
self.pwkey_timer.stop()
return
if self.pwkey_count >= 3*10 :
- if EventMesh.publish("get_sim_Status") != 1:
+ if EventMesh.publish("get_sim_Status") != -1:
EventMesh.debug_log("长3秒关机")
EventMesh.publish("stop_led_timer")#设置参数
- self.pwkey_timer.stop()
self.pwkey_count = 0
self.pwkey_press = 0
self.pwKey_press_count = 0
self.led_state = 0
EventMesh.publish("open_power_on", 2)#
+
return
self.pwkey_press = 0
self.led_state = 0
self.pwKey_press_count+=1
- self.pwkey_timer.start(500, 0, self.publish_pwKey_timeout_cb_do)#松手超时1s判断
+ self.pwkey_timer.start(500, 0, self.publish_pwKey_timeout_cb_do)#松手超时1s判断
def hsensorTest_timer_cb(self,e):
EventMesh.publish("system_sleep_rest")#防止黑屏
EventMesh.debug_log("c_data:{} {} {} {}".format(c_data[11],c_data[12],c_data[13],c_data[14]))
if c_data[11] != 0 and c_data[13] != 0: #校准成功
str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_OK"))
+ EventMesh.publish("AI_client_VC_synevent","校准成功")#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
self.Hsensor.close()
self.Hsensor.init()
self.Hsensor.init();
self.hsensorTest_timer.stop()
str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_FAILE"))
+ EventMesh.publish("AI_client_VC_synevent","超时了,请重试噢")#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
def publish_pwKey_timeout_cb_do(self, *args, **kwargs):
try :
if boot_count < 50 :#开机50秒内按键次数大于10就校准
#EventMesh.debug_log("boot_count:{}".format(boot_count))
- if self.pwKey_press_count >= 6:
+ if self.pwKey_press_count >= 10:
self.Hsensor = EventMesh.publish("get_Hsensor")
self.hsensorTest_timer.start(1000,1,self.hsensorTest_timer_cb)
EventMesh.debug_log("打开校准模式")
self.hsensorTest_timer_count = 50
self.hsensorTest_timer.start(1000,1,self.hsensorTest_timer_cb)
str_data = 'mp3files={}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_HR_TITLE"),audio_buf.index("R_HSENSOR_SPO2_TITLE"),)
+ EventMesh.publish("AI_client_VC_synevent","打开校准模式")#用TTS读
EventMesh.publish("play_audio_file",[str_data,1])
self.pwKey_press_count = 0
return
# EventMesh.publish("dialing_out_event")#电话呼叫中voiceCall.callEnd()
# EventMesh.debug_log("pwKey_timeout_cb:self.pwKey_press_count >= 1")
+
flag = EventMesh.publish("get_call_state")
if flag != 2:
EventMesh.publish("stop_led_timer")#设置参数
EventMesh.publish("set_sos_num",0)
EventMesh.publish("set_hangup_mode",0)
EventMesh.publish("close_hr_sop2")#
+ EventMesh.publish("pwk_key_release")
flag = EventMesh.publish("get_call_state")
- if flag != 1:
- EventMesh.publish("set_sim_mode")#
+ # if flag != 1:
+ # EventMesh.publish("set_sim_mode")#
self.pwKey_press_count = 0
elif self.sosKey_press_count == 5:#功能暂时屏蔽
self.sosKey_press_count = 0
call_state = EventMesh.publish("get_call_state")
- battery = EventMesh.publish("screen_get_battery")
+ battery = EventMesh.publish("get_usb_state")
+ print("usb_state=",battery)
if call_state == None:
call_state = 0
if call_state == 0:
- if battery != None:
- if battery[0] != "1":#在充电得时候
- EventMesh.publish("stop_led_timer")#设置参数
- EventMesh.publish("set_manual_measure_mode",3)#测量体温
+ if battery != 1:#在充电得时候
+ EventMesh.publish("stop_led_timer")#设置参数、
+ print("测量体温")
+ EventMesh.publish("AI_client_VC_synevent","开始体温测量,请稍等")#用TTS读
+ EventMesh.publish("set_manual_measure_mode",3)#测量体温
+ else:
+ EventMesh.publish("AI_client_VC_synevent","体温测量失败,请不要充电时测量噢")#用TTS读
pass
elif self.sosKey_press_count == 4:#拨打app快捷号码
self.sosKey_press_count = 0
self.sosKey_press_count = 0
call_state = EventMesh.publish("get_call_state")
- battery = EventMesh.publish("screen_get_battery")
+ battery = EventMesh.publish("get_usb_state")
if call_state == None:
call_state = 0
if call_state == 0:
- if battery != None:
- if battery[0] != "1":#在充电得时候
- EventMesh.publish("stop_led_timer")#设置参数
- EventMesh.publish("set_manual_measure_mode",1)#
+ if battery != 1:#在充电得时候
+ EventMesh.publish("stop_led_timer")#设置参数
+ EventMesh.publish("AI_client_VC_synevent","开始心率测量,请稍等")#用TTS读
+ EventMesh.publish("set_manual_measure_mode",1)#
+ else:
+ EventMesh.publish("AI_client_VC_synevent","心率测量失败,请不要充电时测量噢")#用TTS读
pass
elif self.sosKey_press_count == 2:#播报当前步数
self.sosKey_press_count = 0
self.wechatKey_press = 1
self.led_state = 0
self.wechatKey_count = 0
- self.wechat_state = 0
+ self.wechat_state = 0
+ EventMesh.publish("AI_key_press")
+ str_buf = [1,2,10*70*2,led_mode.LONG_LIGHT_ALL,10,5,led_mode.HEALTH_LED_MODE]#測量成功
+ EventMesh.publish("open_timer",str_buf)
self.wechatKey_timer.start(100, 1, self.publish_wechat_btn_event_cb)
else:
# EventMesh.debug_log('### wechatKey_extint_cb end')
if wechat_time <= 0:
wechat_time = 0
EventMesh.publish("send_wechat_record",wechat_time)#发送录音文件内容
-
+
def wechatKey_press_cb(self,data):
open_power = EventMesh.publish("get_power_on_state")#获取开机标识
open_power_off = EventMesh.publish("get_power_off_state")#获取开机标识
if self.WeChatKey_status == 0:
if EventMesh.publish(constants.EVENT.GET_CONNECT) == 1:#未联网不需要录音
if self.wechat_state == 0:#按下超过s开始录音
- EventMesh.publish("start_wechat_record")#开始录音
- self.wechat_state = 1
+ EventMesh.publish("AI_key_long_press")
+ # self.wechatKey_long_press = 1#标志位变为长按1
else:
self.wechat_state = 0
self.wechatKey_timer.stop()
self.wechatKey_count = 0
self.wechatKey_press = 0
self.wechatKey_press_count=0
+ self.wechatKey_long_press = 0#标志位变为0
EventMesh.publish("set_sim_mode")#播報imei号
return
- if self.WeChatKey_status == 0:#未松手超过15s啧停止录音
- if self.wechat_state == 1:
- if tmp != None:
- if tmp[0] != 0:
- time_sec = tmp[1]
- if time_tmp - time_sec >= 15:
- wechat_time = time_tmp - time_sec
- if wechat_time >= 15:
- wechat_time = 15
- EventMesh.publish("send_wechat_record",wechat_time)#发送录音文件内容
+ # if self.WeChatKey_status == 0:#未松手超过15s啧停止录音
+ # if self.wechat_state == 1:
+ # if tmp != None:
+ # if tmp[0] != 0:
+ # time_sec = tmp[1]
+ # if time_tmp - time_sec >= 15:
+ # wechat_time = time_tmp - time_sec
+ # if wechat_time >= 15:
+ # wechat_time = 15
+ # EventMesh.publish("send_wechat_record",wechat_time)#发送录音文件内容
- self.wechatKey_timer.stop()
- self.wechatKey_count = 0
- self.wechatKey_press = 0
- self.wechat_state = 0
- self.wechatKey_press_count=0
- return
- else:
- if self.WeChatKey_status == 1:
- if self.wechat_state == 1:#如果按下时长超过1s且小于长按的时间也认为是录微聊
- if tmp != None:
- if tmp[0] != 0:
- time_sec = tmp[1]
- wechat_time = time_tmp - time_sec
- # EventMesh.debug_log("WECHAT TIEM",time_tmp,time_sec,wechat_time)
- if wechat_time >= 15:
- wechat_time = 15
+ # self.wechatKey_timer.stop()
+ # self.wechatKey_count = 0
+ # self.wechatKey_press = 0
+ # self.wechat_state = 0
+ # self.wechatKey_press_count=0
+ # return
+ # else:
+ # if self.WeChatKey_status == 1:
+ # if self.wechat_state == 1:#如果按下时长超过1s且小于长按的时间也认为是录微聊
+ # if tmp != None:
+ # if tmp[0] != 0:
+ # time_sec = tmp[1]
+ # wechat_time = time_tmp - time_sec
+ # # EventMesh.debug_log("WECHAT TIEM",time_tmp,time_sec,wechat_time)
+ # if wechat_time >= 15:
+ # wechat_time = 15
- EventMesh.publish("send_wechat_record",wechat_time)#发送录音文件内容
- self.wechatKey_timer.stop()
-
- self.wechatKey_count = 0
- self.wechatKey_press = 0
- self.wechat_state = 0
- self.wechatKey_press_count=0
- return
+ # EventMesh.publish("send_wechat_record",wechat_time)#发送录音文件内容
+ # self.wechatKey_timer.stop()
+
+ # self.wechatKey_count = 0
+ # self.wechatKey_press = 0
+ # self.wechat_state = 0
+ # self.wechatKey_press_count=0
+ # return
else:
self.wechatKey_timer.stop()
self.wechatKey_count = 0
self.wechat_state = 0
self.wechatKey_press = 0
self.wechatKey_press_count=0
+ self.wechatKey_long_press = 0#标志位变为0
return
if self.WeChatKey_status == 1:#松开
if self.wechatKey_count >= 1: #防抖100ms
# EventMesh.debug_log("WeChat time!!!!!!!!!!!!!!")
+ EventMesh.publish("AI_key_release")
self.wechatKey_timer.stop()
self.wechatKey_count = 0
self.wechatKey_press = 0
EventMesh.publish("call_phonebook_num",2)
pass
elif self.wechatKey_press_count == 2:#拨打通讯录号码一
+
EventMesh.publish("stop_led_timer")#设置参数
self.wechatKey_press_count = 0
EventMesh.publish("call_phonebook_num",1)
# EventMesh.publish("interup_call_event")#
pass
- elif self.wechatKey_press_count == 1:#播放最后收到的语音
+ elif self.wechatKey_press_count == 1:#开始说话
self.wechatKey_press_count = 0
+ print("说话")
EventMesh.publish("stop_led_timer")#设置参数
call_state = EventMesh.publish("get_call_state")
+ self.wechatKey_long_press = 0#标志位变为0
if call_state == 0:
fall_down = EventMesh.publish("get_fall_down_state")#跌倒报警标识
if fall_down != None:
if fall_down != 0:
- EventMesh.publish_async("dial_sos_phone")#拨打sos号码
+ EventMesh.publish_async("dia"
+ "l_sos_phone")#拨打sos号码
return
else:
if call_state == 2:#电话拨进需要接听
EventMesh.publish("answer_call_event")#接听电话
+ EventMesh.publish("pwk_key_release")#接听电话同时不ai
return
EventMesh.publish("play_wechat_last_amr")
# pass
self.wechatKey_press_count = 0
-
-
+ def get_AIKey_long(self):
+ return self.wechatKey_long_press#标志位变为0
+ #AI按键
+ def AT_press(self):
+ EventMesh.publish("AI_key_press")
def pwk_press_cb(self, *args):
'''KEY2:联动屏幕右下角或返回键长按关机'''
if self.pwk_press == 1 :