import threading import time import traceback import requests from LSZXBackend.general import * from LSZXNetWork.network import Network from DeviceDefine.consensus import UNKNOWN, SLAVER import UWB import UWB.positioning_standalone import UWB.positioning_standalone_v2 import UWB.positioning_cluster MAX_HR = "max_hr" MIN_BO = "min_bo" HR = "hr" BO = "bo" class BaseStation: def __init__( self, master_mode=True, positioning=True, multi_positioning_mode=True, device_type=UNKNOWN ): # self.positioning = None self.connection = Network(master_mode=master_mode, device_type=device_type) self.multi_positioning_mode = multi_positioning_mode # self.positioning = UWB.positioning_standalone_v2.Positioning() # self.positioning.start() # self.positioning.resume() self.send_information_signal = threading.Event() threading.Thread(target=self.send_fake_information).start() self.HrBo_info = {} self.connection.connect2wifi("LiShuZuoXun-DISPLAY") # 获取hrbo信息 ·· def get_information(self): while True: try: # HrBo_info = self.positioning.get_data() # HrBo_info = {'tag_id': '320110F39011', 'hr': 225, 'bo': 76, 'record_time': time.time()} # 新2 HrBo_info = {'tag_id': '320110f392b7', 'hr': 188, 'bo': 82, 'record_time': time.time()} # 新34 # 长时间未更新,判定为离场 temp = self.HrBo_info.copy() for k, v in temp.items(): this_time = time.time() if this_time - v['record_time'] > 60: del self.HrBo_info[k] if HrBo_info: p_id = HrBo_info["tag_id"] if p_id not in self.HrBo_info: self.HrBo_info[p_id] = {} if HrBo_info[HR] and HrBo_info[BO]: if 180 > HrBo_info[HR] > 140: hr_c = 'Y' elif HrBo_info[HR] > 180: hr_c = 'R' else: hr_c = 'G' if 80 <= HrBo_info[BO] < 88: bo_c = 'Y' elif HrBo_info[BO] < 80: bo_c = 'R' else: bo_c = 'G' self.HrBo_info[p_id]['hr'] = {'hr': HrBo_info[HR], 'color': hr_c} self.HrBo_info[p_id]['bo'] = {'bo': "{:.2%}".format(HrBo_info[BO] / 100), 'color': bo_c} if HrBo_info[HR] >= 180 or HrBo_info[BO] <= 85: self.HrBo_info[p_id]['normal'] = False else: self.HrBo_info[p_id]['normal'] = True else: self.HrBo_info[p_id]['hr'] = '-' self.HrBo_info[p_id]['bo'] = '-' self.HrBo_info[p_id]['normal'] = True self.HrBo_info[p_id]['record_time'] = HrBo_info['record_time'] # self.send_information_signal.set() time.sleep(0.5) except Exception as e: print(traceback.format_exc()) # 发送hrbo信息给管理端 def send_fake_information(self): while True: try: time.sleep(0.5) # self.send_information_signal.wait() # self.send_information_signal.clear() manager_ip_list = self.connection.get_manager() ip = self.connection.get_self_ip() _ip = ip.split('.')[2] print(self.HrBo_info) if manager_ip_list and _ip == '138': broadcast_pkg = { "data": self.HrBo_info, 'ip': ip } for manage_ip in manager_ip_list: try: print(manage_ip) requests.post(url=f"http://{manage_ip}:{MANAGER}/totals_HrBoInfo_server", json=broadcast_pkg, timeout=1) except: print(1111111111111) continue except Exception as e: print(traceback.format_exc()) if __name__ == '__main__': basestation = BaseStation() threading.Thread(target=basestation.get_information).start()