125 lines
4.5 KiB
Python
125 lines
4.5 KiB
Python
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()
|