You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
160 lines
6.7 KiB
Python
160 lines
6.7 KiB
Python
import os
|
|
import datetime
|
|
import time
|
|
from common.runtime import load_root_env, validate_env, as_bool, as_str
|
|
from smb.SMBConnection import SMBConnection
|
|
from utils.datas_processing import pack_elems, agregator, send_data, send_telemetry, save_data, remote_save_data
|
|
from core.sig_n_medi_collect import Signal, SignalsArray, get_signal_length
|
|
from core.multichannelswitcher import MultiChannel, get_centre_freq
|
|
|
|
load_root_env(__file__)
|
|
freq_suffix = os.path.splitext(os.path.basename(__file__))[0].split("_")[-1]
|
|
validate_env(__file__, {
|
|
"send_to_module_flag": as_bool,
|
|
"save_data_flag": as_bool,
|
|
"elems_to_save": as_str,
|
|
"file_types_to_save": as_str,
|
|
"lochost": as_str,
|
|
"locport": as_str,
|
|
"freq_endpoint": as_str,
|
|
"path_to_save_medians": as_str,
|
|
"path_to_save_alarms": as_str,
|
|
"module_name": as_str,
|
|
f"f_step_{freq_suffix}": as_str,
|
|
f"f_bases_{freq_suffix}": as_str,
|
|
f"f_roofs_{freq_suffix}": as_str,
|
|
})
|
|
|
|
debug_flag = as_bool(os.getenv('debug_flag', '0'))
|
|
send_to_module_flag = as_bool(os.getenv('send_to_module_flag', '0'))
|
|
save_data_flag = as_bool(os.getenv('save_data_flag', '0'))
|
|
module_name = os.getenv('module_name')
|
|
elems_to_save = os.getenv('elems_to_save')
|
|
file_types_to_save = os.getenv('file_types_to_save')
|
|
localhost = os.getenv('lochost')
|
|
localport = os.getenv('locport')
|
|
f_step = [*map(float, os.getenv('f_step_868').split())]
|
|
f_bases = [*map(float, os.getenv('f_bases_868').split())]
|
|
f_roofs = [*map(float, os.getenv('f_roofs_868').split())]
|
|
path_to_save_medians = os.getenv('path_to_save_medians')
|
|
path_to_save_alarms = os.getenv('path_to_save_alarms')
|
|
smb_host = os.getenv('smb_host')
|
|
smb_port = os.getenv('smb_port')
|
|
smb_user = os.getenv('smb_user')
|
|
smb_pass = os.getenv('smb_pass')
|
|
shared_folder = os.getenv('shared_folder')
|
|
the_pc_name = os.getenv('the_pc_name')
|
|
remote_pc_name = os.getenv('remote_pc_name')
|
|
smb_domain = os.getenv('smb_domain')
|
|
freq_endpoint = os.getenv('freq_endpoint')
|
|
telemetry_enabled = as_bool(os.getenv('telemetry_enabled', '1'))
|
|
telemetry_host = os.getenv('telemetry_host', '127.0.0.1')
|
|
telemetry_port = os.getenv('telemetry_port', '5020')
|
|
telemetry_endpoint = os.getenv('telemetry_endpoint', 'telemetry')
|
|
telemetry_timeout_sec = float(os.getenv('telemetry_timeout_sec', '0.30'))
|
|
|
|
elems_to_save = elems_to_save.split(',')
|
|
file_types_to_save = file_types_to_save.split(',')
|
|
|
|
tmp_signal = Signal()
|
|
tmp_sigs_array = SignalsArray()
|
|
multi_channel = MultiChannel(f_step, f_bases, f_roofs)
|
|
f = multi_channel.init_f()
|
|
multi_channel.fill_DB()
|
|
|
|
if debug_flag:
|
|
conn = SMBConnection(smb_user, smb_pass, the_pc_name, remote_pc_name, use_ntlm_v2=True)
|
|
conn.connect(smb_host, 139)
|
|
filelist = conn.listPath(shared_folder, '/')
|
|
print(filelist)
|
|
|
|
|
|
def work(lvl):
|
|
|
|
f = multi_channel.get_cur_channel()
|
|
freq = get_centre_freq(f)
|
|
signal_length = get_signal_length(freq)
|
|
median = tmp_signal.fill_signal(lvl, signal_length)
|
|
packet_ts = tmp_signal.get_last_packet_ts()
|
|
|
|
if median:
|
|
try:
|
|
num_chs, circle_buffer = multi_channel.check_f(f)
|
|
cur_channel, sigs_array, sigs_ts_array = tmp_sigs_array.fill_sig_arr(median, packet_ts=packet_ts, num_chs=num_chs)
|
|
|
|
if sigs_array:
|
|
print('Значения на {0}: {1}'.format(freq, sigs_array))
|
|
print('Пороги: ', circle_buffer.get_medians())
|
|
alarm = circle_buffer.check_alarm(sigs_array)
|
|
|
|
if alarm:
|
|
print('----ALARM---- ', freq)
|
|
multi_channel.db_alarms_zeros(circle_buffer)
|
|
else:
|
|
circle_buffer.update(sigs_array, packet_timestamps=sigs_ts_array)
|
|
|
|
|
|
if telemetry_enabled:
|
|
try:
|
|
max_idx = max(range(len(sigs_array)), key=lambda idx: sigs_array[idx])
|
|
dbfs_current = float(sigs_array[max_idx])
|
|
|
|
dbfs_threshold = circle_buffer.get_threshold(max_idx)
|
|
channel_thresholds = circle_buffer.get_thresholds()
|
|
alarm_channels = circle_buffer.get_last_alarm_channels() if alarm else []
|
|
|
|
send_telemetry(
|
|
data={
|
|
"freq": str(freq),
|
|
"ts": time.time(),
|
|
"dbfs_current": dbfs_current,
|
|
"dbfs_threshold": dbfs_threshold,
|
|
"alarm": bool(alarm),
|
|
"channel_idx": int(max_idx),
|
|
"channels_total": int(len(sigs_array)),
|
|
"channel_values": [float(v) for v in sigs_array],
|
|
"channel_thresholds": channel_thresholds,
|
|
"alarm_channels": alarm_channels,
|
|
},
|
|
host=telemetry_host,
|
|
port=telemetry_port,
|
|
endpoint=telemetry_endpoint,
|
|
timeout_sec=telemetry_timeout_sec,
|
|
)
|
|
except Exception as exc:
|
|
if debug_flag:
|
|
print(f"telemetry send failed: {exc}")
|
|
|
|
if send_to_module_flag:
|
|
send_data(agregator(freq, alarm), localhost, localport, freq_endpoint)
|
|
|
|
if save_data_flag:
|
|
if not circle_buffer.check_init() and circle_buffer.current_column - 1 == 0:
|
|
save_data(path_to_save_medians, freq, 'DateTime', 'ALARM', 'max signal', list(range(num_chs)),
|
|
list(range(num_chs)))
|
|
if circle_buffer.check_init():
|
|
save_data(path_to_save_medians, freq, datetime.datetime.now(), alarm, max(sigs_array), sigs_array,
|
|
circle_buffer.get_medians())
|
|
|
|
if debug_flag:
|
|
single_alarm = circle_buffer.check_single_alarm(median, cur_channel)
|
|
print(cur_channel, single_alarm)
|
|
if single_alarm:
|
|
data = pack_elems(elems_to_save, file_types_to_save, tmp_signal.get_signal())
|
|
print('SAVE CURRENT SIGNAL SROCHNO TI MENYA SLISHISH?!?!?!?')
|
|
try:
|
|
remote_save_data(conn, data, module_name, freq, shared_folder, path_to_save_alarms)
|
|
except Exception as e:
|
|
print(f"Ошибка: {e}")
|
|
else:
|
|
print('VSE OKI DOKI SIGNAL SOKHRANYAT NE NUZHNO!!!')
|
|
|
|
f = multi_channel.change_channel()
|
|
except Exception as e:
|
|
print(str(e))
|
|
print(".", end='')
|
|
|
|
tmp_signal.clear()
|
|
|
|
return f
|