1.表盘心率固定值修复
authordxy15521469561 <1731678236@qq.com>
Mon, 24 Jul 2023 07:51:34 +0000 (15:51 +0800)
committerdxy15521469561 <1731678236@qq.com>
Mon, 24 Jul 2023 07:51:34 +0000 (15:51 +0800)
2.电池电流优化
3.体温心率血氧柱状图优化

2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/mgr.py
2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/ui.py
2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/ui_WatchFaceScreen.py

index 8bd7b32..9e655cc 100644 (file)
@@ -651,6 +651,11 @@ class DeviceInfoManager(Abstract):
 
         self.vbat_count = 0
 
+        self.vbat_buf=[]
+
+        self.curr_battery_level = 4200
+        self.bat_count = 0
+
         self.usb = USB()
         self.usb.setCallback(self.usb_event_cb)
         self.log = LogAdapter(self.__class__.__name__)
@@ -683,6 +688,8 @@ class DeviceInfoManager(Abstract):
         EventMesh.subscribe("about_get_iccid", self.get_ic_cid)
         EventMesh.subscribe("about_get_phonenum", self.get_phone_num)
         EventMesh.subscribe("screen_get_battery", self.get_battery)
+        EventMesh.subscribe("set_curr_battery_level", self.set_curr_battery_level)
+        EventMesh.subscribe("get_curr_battery_level", self.get_curr_battery_level)
         EventMesh.subscribe("get_fw_version", self.get_device_fw_version)
         EventMesh.subscribe("get_standby_time", self.get_standby_time)
         EventMesh.subscribe(constants.EVENT.GET_STEP, self.get_step_count)
@@ -794,6 +801,22 @@ class DeviceInfoManager(Abstract):
                     EventMesh.publish(constants.EVENT.START_LOCATION) #开始定位
         EventMesh.publish(constants.EVENT.PUSH_STEP, self.get_step_count())
 
+        temp = Power.getVbatt()
+        self.bat_count+=1
+        self.vbat_buf.append(temp)
+
+        curr_count = len(self.vbat_buf)
+        bat_total_value = 0
+        for i in range(curr_count):
+            bat_total_value += self.vbat_buf[i]
+
+        bat_total_value = bat_total_value//curr_count#一分钟更新一次电量 10个平均值
+
+        EventMesh.publish("set_curr_battery_level",bat_total_value)
+        # print("self.vbat_buf:{} curr_count :{} bat_total_value:{}".format(self.vbat_buf,curr_count,bat_total_value))
+        if self.bat_count >= 10:
+            self.bat_count = 0
+            self.vbat_buf = []
         
         bat_tmp = EventMesh.publish("screen_get_battery")
         self.vbat_count+=10
@@ -888,7 +911,7 @@ class DeviceInfoManager(Abstract):
         get_temp_time  = EventMesh.publish("get_temp_time")
         get_temp_state  = EventMesh.publish("get_temp_state")
         hr_time = EventMesh.publish("get_time_hr_spo2")#获取时间是否大于0
-        if EventMesh.publish(constants.EVENT.GET_CONNECT) == 1 and battery[1] != 1:
+        if EventMesh.publish(constants.EVENT.GET_CONNECT) == 1 and battery[0] != "1":
             # print("get_temp_time:{} self.temp_one_state:{}".format(get_temp_time,self.temp_one_state))
             if get_temp_time != None:#定时测量体温
                 if get_temp_time > 0:
@@ -1262,32 +1285,35 @@ class DeviceInfoManager(Abstract):
                             self.HR_Onestate = 0
                             self.HR_OneTime = 0
         else:
-            if self.get_hr_state != None and self.get_spo2_state != None:
-                if self.get_hr_state ==3 or self.get_spo2_state ==3:#3单次测量
-                    if self.get_hr_state != 0:
+            if battery[0] == "1":
+                get_hr_state = EventMesh.publish("get_hr_state")
+                get_spo2_state = EventMesh.publish("get_spo2_state")
+                if get_hr_state != None and get_spo2_state != None:
+                    if get_hr_state == 2 or get_hr_state == 3:
                         EventMesh.publish("set_hr_state",0)#2代表后台进入测试,定时测心率 1ui界面测试洗心率 
                         print("stop debug8")
                         EventMesh.publish(constants.EVENT.STOP_HEART) 
-                    elif self.get_spo2_state != 0:
+                    elif get_spo2_state == 2 or get_spo2_state == 3:
                         EventMesh.publish("set_spo2_state",0)#2代表后台进入测试
                         EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN)
-            
-            if get_temp_time != None:
-                if get_temp_state != 0:
-                    self.temp_one_state = 0
-                    self.temp_state = 0
-                    temp = EventMesh.publish(constants.EVENT.GET_TEMP)              
-                    tmp_f = str(temp).split('.')[0] 
-                    tmp_f_tmp = int(tmp_f)
-
-                    tmp_d = str(temp).split('.')[1][:1]
-                    tmp_d_tmp = int(tmp_d)
-                    EventMesh.publish("set_temp_state",0)
-                    if temp != None:
-                        if temp != 0:
-                            EventMesh.publish("set_history_temp_value",temp)
-                            EventMesh.publish(constants.PROTOCOL.TEMP_SEND,[tmp_f_tmp,tmp_d_tmp])
-                    EventMesh.publish(constants.EVENT.STOP_TEMP)
+                
+                if get_temp_time != None:
+                    get_temp_state  = EventMesh.publish("get_temp_state")
+                    if get_temp_state == 2 or get_temp_state == 3:
+                        self.temp_one_state = 0
+                        self.temp_state = 0
+                        temp = EventMesh.publish(constants.EVENT.GET_TEMP)              
+                        tmp_f = str(temp).split('.')[0] 
+                        tmp_f_tmp = int(tmp_f)
+
+                        tmp_d = str(temp).split('.')[1][:1]
+                        tmp_d_tmp = int(tmp_d)
+                        EventMesh.publish("set_temp_state",0)
+                        if temp != None:
+                            if temp != 0:
+                                EventMesh.publish("set_history_temp_value",temp)
+                                EventMesh.publish(constants.PROTOCOL.TEMP_SEND,[tmp_f_tmp,tmp_d_tmp])
+                        EventMesh.publish(constants.EVENT.STOP_TEMP)
             self.SENSOR_time = time_tmp
             self.HR_Onestate = 0
             self.HR_OneTime = 0
@@ -1422,24 +1448,33 @@ class DeviceInfoManager(Abstract):
         else:
             charge_state = '0'
 
-        vbat = 0
-        temp = Power.getVbatt()
-        if temp <= 3505:
-            vbat = 0 
-        elif temp <= 3699:
-            vbat = 20 #"E:/vbat_20.jpg"
-        elif temp <= 3772:
-            vbat = 40 #"E:/vbat_40.jpg"
-        elif temp <= 3882:
-            vbat = 60 #"E:/vbat_60.jpg"
-        elif temp <= 4070:
-            vbat = 80 #"E:/vbat_80.jpg"
+        #temp = Power.getVbatt()
+        temp = EventMesh.publish("get_curr_battery_level")
+        if temp != None :
+            if temp <= 3505:
+                vbat = 0 
+            elif temp <= 3699:
+                vbat = 20 #"E:/vbat_20.jpg"
+            elif temp <= 3772:
+                vbat = 40 #"E:/vbat_40.jpg"
+            elif temp <= 3882:
+                vbat = 60 #"E:/vbat_60.jpg"
+            elif temp <= 4070:
+                vbat = 80 #"E:/vbat_80.jpg"
+            else:
+                vbat = 100 #"E:/vbat_100.jpg"
         else:
-            vbat = 100 #"E:/vbat_100.jpg"
+            vbat = 100
 
         result = [charge_state, vbat]
 
         return result
+    #Set the current average battery level
+    def set_curr_battery_level(self, event=None, msg=None):
+        self.curr_battery_level = msg
+    
+    def get_curr_battery_level(self, event=None, msg=None):
+        return self.curr_battery_level
 
     def get_device_fw_version(self, *args):
         '''
@@ -2008,42 +2043,43 @@ class gethistoryDataManager(Abstract):
         return self.read_histroy_spo2_data
 
     def set_history_spo2_value(self, event, msg): 
-        if msg > 0:
-            self.read_histroy_spo2_data = EventMesh.publish("get_history_spo2_value")
-            count = len(self.read_histroy_spo2_data)
-            if count >= 7:
-                for i in range(6):
-                    self.read_histroy_spo2_data["0{}".format(i+1)] = self.read_histroy_spo2_data["0{}".format(i+2)]
-                self.read_histroy_spo2_data["07"] = msg
-            else:
-                self.read_histroy_spo2_data["0{}".format(count+1)] = msg
-            with open("/ext/static/storage_file/history_spo2.json","w",encoding="utf-8") as fd:
-                ujson.dump(self.read_histroy_spo2_data,fd)
+        pass
+
 
 
     def get_history_temp_value(self, event, msg): #近7次体温历史数据统计显示
         return self.read_histroy_temp_data
 
     def set_history_temp_value(self, event, msg): 
-        if msg > 0:
-            self.read_histroy_temp_data = EventMesh.publish("get_history_temp_value")
-            count = len(self.read_histroy_temp_data)
-            if count >= 7:
-                for i in range(6):
-                    self.read_histroy_temp_data["0{}".format(i+1)] = self.read_histroy_temp_data["0{}".format(i+2)]
-                self.read_histroy_temp_data["07"] = msg
-            else:
-                self.read_histroy_temp_data["0{}".format(count+1)] = msg
-            with open("/ext/static/storage_file/history_temp.json","w",encoding="utf-8") as fd:
-                ujson.dump(self.read_histroy_temp_data,fd)
+        count = len(self.read_histroy_temp_data)
+        print(count)
+        if count >= 7:
+            for i in range(6):
+                self.read_histroy_temp_data["0{}".format(i+1)] = self.read_histroy_temp_data["0{}".format(i+2)]
+            self.read_histroy_temp_data["07"] = msg
+        else:
+            self.read_histroy_temp_data["0{}".format(count+1)] =msg
+        with open("/ext/static/storage_file/history_temp.json","w",encoding="utf-8") as fd:
+            ujson.dump(self.read_histroy_temp_data,fd)
+           
 
 
     def get_history_hr_value(self, event, msg): #近7次心率历史数据统计显示
         return self.read_histroy_hr_data
 
     def set_history_hr_value(self, event, msg): 
+        pass
+            
+           
+
+    def save_hr_value(self, event, msg): 
         if msg >= 50:
-            self.read_histroy_hr_data = EventMesh.publish("get_history_hr_value")
+            
+            self.read_data = EventMesh.publish("get_storage_data")
+            self.read_data["old_hr"] = msg
+            self.oldHr = msg
+            EventMesh.publish("set_storage_data", self.read_data)
+           
             count = len(self.read_histroy_hr_data)
             if count >= 7:
                 for i in range(6):
@@ -2051,18 +2087,13 @@ class gethistoryDataManager(Abstract):
                 self.read_histroy_hr_data["07"] = msg
             else:
                 self.read_histroy_hr_data["0{}".format(count+1)] = msg
-            with open("/ext/static/storage_file/history_hr.json","w",encoding="utf-8") as fd:
-                ujson.dump(self.read_histroy_hr_data,fd)
 
-    def save_hr_value(self, event, msg): 
-        if msg >= 50:
-            self.read_data = EventMesh.publish("get_storage_data")
-            self.read_data["old_hr"] = msg
-
-            EventMesh.publish("set_storage_data", self.read_data)
             with open("/ext/static/storage_file/config.json","w",encoding="utf-8") as fd:
                 ujson.dump(self.read_data,fd)
-            self.oldHr = msg
+
+            with open("/ext/static/storage_file/history_hr.json","w",encoding="utf-8") as fd:
+                ujson.dump(self.read_histroy_hr_data,fd)
+            print(self.read_histroy_temp_data)
 
     def get_hr_value(self, event, msg): 
         return self.oldHr
@@ -2071,11 +2102,22 @@ class gethistoryDataManager(Abstract):
         if msg >= 85:
             self.read_data = EventMesh.publish("get_storage_data")
             self.read_data["old_spo2"] = msg
-
+            self.oldspo2 = msg
             EventMesh.publish("set_storage_data", self.read_data)
+           
+            count = len(self.read_histroy_spo2_data)
+            if count >= 7:
+                for i in range(6):
+                    self.read_histroy_spo2_data["0{}".format(i+1)] = self.read_histroy_spo2_data["0{}".format(i+2)]
+                self.read_histroy_spo2_data["07"] = msg
+            else:
+                self.read_histroy_spo2_data["0{}".format(count+1)] = msg
+
             with open("/ext/static/storage_file/config.json","w",encoding="utf-8") as fd:
                 ujson.dump(self.read_data,fd)
-            self.oldspo2 = msg
+
+            with open("/ext/static/storage_file/history_spo2.json","w",encoding="utf-8") as fd:
+                ujson.dump(self.read_histroy_spo2_data,fd)
 
     def get_spo2_value(self, event, msg): 
         return self.oldspo2
index 2b8038c..1778216 100644 (file)
@@ -2040,7 +2040,8 @@ class HeartrateScreen(Screen):
             if count != 0:
                 if count >= 7:
                     for i in  range(count):
-                        value = read_data["0{}".format(i+1)]
+                        key = i+1
+                        value = read_data["0{}".format(key)]
                         if value < 30:
                             value = 30
                         if value >= 210:
@@ -2134,7 +2135,7 @@ class HeartrateScreen(Screen):
         self.point = self.point + 1
         EventMesh.publish("system_sleep_rest")#防止黑屏
         self.heart_value = EventMesh.publish(constants.EVENT.GET_HEART)
-        print("self.heart_value:{}".format(self.heart_value))
+        # print("self.heart_value:{}".format(self.heart_value))
         if self.point >= 2:
             if self.heart_value < 40:
                 self.heart_value = 0
@@ -2160,6 +2161,7 @@ class HeartrateScreen(Screen):
 
 
         if self.point > 120: #测20s
+            self.timer.stop()
             heartrate_done_img.set_src("E:/static/hr_gif_03.png")
             self.heart_value = EventMesh.publish(constants.EVENT.GET_HEART)
             if self.heart_value > 50:
@@ -2174,10 +2176,7 @@ class HeartrateScreen(Screen):
                 # heartrate_done_label.set_text("测量完成")
             else:
                 heartrate_bpm_label.set_text("-- bpm")
-                
             self.show_history_data()
-
-            self.timer.stop()
             self.point = 0
             EventMesh.publish("set_hr_state",0)#0代表关闭测试
             print("stop debug9")
@@ -2859,7 +2858,7 @@ class OnCallScreen(Screen):
 
     def show_num(self):
         global on_call_screen_tab_label
-        #print("phone self.phone_num ",self.phone_num,self.phone_list)
+        print("phone self.phone_num ",self.phone_num,self.phone_list)
         on_call_screen_tab_label.set_size(200, 30)
         on_call_screen_tab_label.set_text(self.phone_num)
     def one(self,e):
@@ -3746,9 +3745,9 @@ class TemperatureScreen(Screen):
                         if line_value >= 100:
                             line_value = 100
                         #print("hr hist",line_value)
-                        hr_line_points = [{"x":0,"y":0},{"x":0,"y":line_value}]
+                        temp_line_points = [{"x":0,"y":0},{"x":0,"y":line_value}]
                         if i == 0:
-                            temp_line1.set_points(hr_line_points,2)
+                            temp_line1.set_points(temp_line_points,2)
                             temp_line1.set_pos(29,150-line_value)
                             temp_line1.set_size(10,line_value)
                             if value >= 37.3:
@@ -3756,7 +3755,7 @@ class TemperatureScreen(Screen):
                             else:
                                 temp_line1.set_style_line_color(lv.color_make(35,141,255),0)
                         if i == 1:
-                            temp_line2.set_points(hr_line_points,2)
+                            temp_line2.set_points(temp_line_points,2)
                             temp_line2.set_pos(57,150-line_value)
                             temp_line2.set_size(10,line_value)
                             if value >= 37.3:
@@ -3765,7 +3764,7 @@ class TemperatureScreen(Screen):
                                 temp_line2.set_style_line_color(lv.color_make(35,141,255),0)
 
                         if i == 2:
-                            temp_line3.set_points(hr_line_points,2)
+                            temp_line3.set_points(temp_line_points,2)
                             temp_line3.set_pos(84,150-line_value)
                             temp_line3.set_size(10,line_value)
                             if value >= 37.3:
@@ -3773,7 +3772,7 @@ class TemperatureScreen(Screen):
                             else:
                                 temp_line3.set_style_line_color(lv.color_make(35,141,255),0)
                         if i == 3:
-                            temp_line4.set_points(hr_line_points,2)
+                            temp_line4.set_points(temp_line_points,2)
                             temp_line4.set_pos(112,150-line_value)
                             temp_line4.set_size(10,line_value)
                             if value >= 37.3:
@@ -3781,7 +3780,7 @@ class TemperatureScreen(Screen):
                             else:
                                 temp_line4.set_style_line_color(lv.color_make(35,141,255),0)
                         if i == 4:
-                            temp_line5.set_points(hr_line_points,2)
+                            temp_line5.set_points(temp_line_points,2)
                             temp_line5.set_pos(140,150-line_value)
                             temp_line5.set_size(10,line_value)
                             if value >= 37.3:
@@ -3790,7 +3789,7 @@ class TemperatureScreen(Screen):
                                 temp_line5.set_style_line_color(lv.color_make(35,141,255),0)
 
                         if i == 5:
-                            temp_line6.set_points(hr_line_points,2)
+                            temp_line6.set_points(temp_line_points,2)
                             temp_line6.set_pos(167,150-line_value)
                             temp_line6.set_size(10,line_value)
                             if value >= 37.3:
@@ -3799,7 +3798,7 @@ class TemperatureScreen(Screen):
                                 temp_line6.set_style_line_color(lv.color_make(35,141,255),0)
 
                         if i == 6:
-                            temp_line7.set_points(hr_line_points,2)
+                            temp_line7.set_points(temp_line_points,2)
                             temp_line7.set_pos(195,150-line_value)
                             temp_line7.set_size(10,line_value)
                             if value >= 37.3:
@@ -3827,9 +3826,9 @@ class TemperatureScreen(Screen):
                     if line_value >= 100:
                         line_value = 100
                    #
-                    hr_line_points = [{"x":0,"y":0},{"x":0,"y":line_value}]
+                    temp_line_points = [{"x":0,"y":0},{"x":0,"y":line_value}]
                     if count == 1:
-                        temp_line1.set_points(hr_line_points,2)
+                        temp_line1.set_points(temp_line_points,2)
                         temp_line1.set_pos(29,150-line_value)
                         temp_line1.set_size(10,line_value)
                         if value >= 37.3:
@@ -3838,7 +3837,7 @@ class TemperatureScreen(Screen):
                             temp_line1.set_style_line_color(lv.color_make(35,141,255),0)
                     
                     if count == 2:
-                        temp_line2.set_points(hr_line_points,2)
+                        temp_line2.set_points(temp_line_points,2)
                         temp_line2.set_pos(57,150-line_value)
                         temp_line2.set_size(10,line_value)
                         if value >= 37.3:
@@ -3847,7 +3846,7 @@ class TemperatureScreen(Screen):
                             temp_line2.set_style_line_color(lv.color_make(35,141,255),0)
 
                     if count == 3:
-                        temp_line3.set_points(hr_line_points,2)
+                        temp_line3.set_points(temp_line_points,2)
                         temp_line3.set_pos(84,150-line_value)
                         temp_line3.set_size(10,line_value)
                         if value >= 37.3:
@@ -3857,7 +3856,7 @@ class TemperatureScreen(Screen):
 
 
                     if count == 4:
-                        temp_line4.set_points(hr_line_points,2)
+                        temp_line4.set_points(temp_line_points,2)
                         temp_line4.set_pos(112,150-line_value)
                         temp_line4.set_size(10,line_value)
                         if value >= 37.3:
@@ -3866,7 +3865,7 @@ class TemperatureScreen(Screen):
                             temp_line4.set_style_line_color(lv.color_make(35,141,255),0)
 
                     if count == 5:
-                        temp_line5.set_points(hr_line_points,2)
+                        temp_line5.set_points(temp_line_points,2)
                         temp_line5.set_pos(140,150-line_value)
                         temp_line5.set_size(10,line_value)
                         if value >= 37.3:
@@ -3875,7 +3874,7 @@ class TemperatureScreen(Screen):
                             temp_line5.set_style_line_color(lv.color_make(35,141,255),0)
 
                     if count == 6:
-                        temp_line6.set_points(hr_line_points,2)
+                        temp_line6.set_points(temp_line_points,2)
                         temp_line6.set_pos(167,150-line_value)
                         temp_line6.set_size(10,line_value)
                         if value >= 37.3:
@@ -3884,7 +3883,7 @@ class TemperatureScreen(Screen):
                             temp_line6.set_style_line_color(lv.color_make(35,141,255),0)
 
                     if count == 7:
-                        temp_line7.set_points(hr_line_points,2)
+                        temp_line7.set_points(temp_line_points,2)
                         temp_line7.set_pos(195,150-line_value)
                         temp_line7.set_size(10,line_value)      
                         if value >= 37.3:
@@ -3899,7 +3898,7 @@ class TemperatureScreen(Screen):
         
         temp = EventMesh.publish(constants.EVENT.GET_TEMP) 
         tmp = str(temp).split('.')[0] + '.' + str(temp).split('.')[1][:1]#获取小数点后一位 舍去小数点最后一位
-        print("self.temp:{}".format(temp))
+        # print("self.temp:{}".format(temp))
         if self.point >= 2:
             if temp != 0:
                 temperature_bpm_label.set_text("{}".format(tmp))
@@ -3933,7 +3932,7 @@ class TemperatureScreen(Screen):
                 temperature_keep_label.set_text("体温正常")
                 temperature_keep_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
         if self.point > 120 : #测2min
-
+            self.timer.stop()
             if temp >= 37.3:
                 temperature_done_img.set_src("E:/static/temp_high.png")
             else:
@@ -3943,7 +3942,7 @@ class TemperatureScreen(Screen):
             
             EventMesh.publish("set_history_temp_value",temp)
             self.show_history_data()
-            self.timer.stop()
+            
             self.point = 0
             EventMesh.publish("set_temp_state",0)
             EventMesh.publish(constants.PROTOCOL.TEMP_SEND,[tmp_f_tmp,tmp_d_tmp])
@@ -4420,6 +4419,7 @@ class Spo2Screen(Screen):
 
 
         if self.point > 120: #测20s
+            self.timer.stop()
             spo2_done_img.set_src("E:/static/spo2_gif04.png")
             self.spo2_value = EventMesh.publish(constants.EVENT.GET_BLOOD_OXYGEN)
             if self.spo2_value >= 85:
@@ -4439,7 +4439,6 @@ class Spo2Screen(Screen):
                 
             self.show_history_data()
 
-            self.timer.stop()
             self.point = 0
             EventMesh.publish("set_spo2_state",0)#0代表关闭测试
             print("stop debug9")
index 2f6b7c1..50af606 100644 (file)
@@ -266,7 +266,7 @@ class WatchFace1():
         pass
 
     def __oldHrValue(self, event, msg):
-        watchface1_HB_span.set_text("120")
+        watchface1_HB_span.set_text(str(msg))
     
     def __oldSpo2Value(self, event, msg):
         watchface1_SPO2_span.set_text(str(msg))