from LSZXBackend.general import * from LSZXNetWork.lszx_network import * from DeviceDefine.consensus import UNKNOWN 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" video_path = os.path.join(GLOBAL_DIR, "LSZXVideo", "Video") # 基站 收集人员hrbo信息 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.server = Server(ip="0.0.0.0", port=server_port, file_port=server_file_port, cache_path=video_path) self.client = Client(ip="0.0.0.0") self.send_information_signal = threading.Event() threading.Thread(target=self.send_information).start() self.HrBo_info = {} self.connection.connect2wifi("LiShuZuoXun-DISPLAY") # 获取hrbo信息 def get_information(self): while True: try: HrBo_info = self.positioning.get_data() # 长时间未更新,判定为离场 temp = self.HrBo_info.copy() # print(self.HrBo_info) 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: # print(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] > 130: 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' if HrBo_info[HR] < 65: HrBo_info[HR] = 85 if HrBo_info[BO] < 80: HrBo_info[BO] = 80 if HrBo_info[BO] > 100: HrBo_info[BO] = 97 if HrBo_info[HR] > 180: HrBo_info[HR] = 177 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} 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(1) except Exception as e: print(traceback.format_exc()) # 发送hrbo信息给管理端 def send_information(self): while True: try: time.sleep(0.5) ip = self.connection.get_self_ip() broadcast_pkg = [{ "data": self.HrBo_info, 'ip': ip, 'data_type': 'hrbo_data' }] print(broadcast_pkg) # 发送成绩信息 address_list = [] pkg_list = [] for manage_ip in self.connection.get_manager(): address_list.append((manage_ip, server_port)) pkg_list.append(broadcast_pkg) self.client.distributed_send(address_list, pkg_list) except Exception as e: print(traceback.format_exc()) if __name__ == '__main__': basestation = BaseStation() threading.Thread(target=basestation.get_information).start()