import threading import time import traceback import requests from LSZXBackend.general import * from LSZXNetWork.network import Network 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" 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_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) # self.send_information_signal.wait() # self.send_information_signal.clear() manager_ip_list = self.connection.get_manager() # print(manager_ip_list) print(len(self.HrBo_info), self.HrBo_info) ip = self.connection.get_self_ip() _ip = ip.split('.')[2] if manager_ip_list and _ip == '138': broadcast_pkg = { "data": self.HrBo_info, 'ip': ip } for manage_ip in manager_ip_list: try: requests.post(url=f"http://{manage_ip}:{MANAGER}/totals_HrBoInfo_server", json=broadcast_pkg, timeout=0.1) except: continue except Exception as e: print(traceback.format_exc()) if __name__ == '__main__': basestation = BaseStation() threading.Thread(target=basestation.get_information).start()