Compare commits
No commits in common. '45283cf7c956d167956b32342734a7b67c6c9af7' and '815daf4be3c82c06eef7a1ecf447bfcd0c6be753' have entirely different histories.
45283cf7c9
...
815daf4be3
@ -1,3 +0,0 @@
|
|||||||
SHARED_VECTOR_LEN = 4096
|
|
||||||
SHARED_868_ADDR = 'tcp://127.0.0.1:35068'
|
|
||||||
SHARED_915_ADDR = 'tcp://127.0.0.1:35069'
|
|
||||||
@ -1,19 +0,0 @@
|
|||||||
[Unit]
|
|
||||||
Description=DroneDetector SDR Scanner 1500 MHz
|
|
||||||
After=network-online.target
|
|
||||||
Wants=network-online.target
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
Type=simple
|
|
||||||
User=__RUN_USER__
|
|
||||||
Group=__RUN_GROUP__
|
|
||||||
WorkingDirectory=__PROJECT_ROOT__
|
|
||||||
EnvironmentFile=__PROJECT_ROOT__/.env
|
|
||||||
Environment=PYTHONPATH=__PROJECT_ROOT__
|
|
||||||
ExecStartPre=/usr/local/bin/dronedetector-precheck-sdr.sh
|
|
||||||
ExecStart=__PROJECT_ROOT__/.venv-sdr/bin/python src/main_1500.py
|
|
||||||
Restart=always
|
|
||||||
RestartSec=3
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
||||||
@ -1,19 +0,0 @@
|
|||||||
[Unit]
|
|
||||||
Description=DroneDetector SDR Router 868/915 Shared HackRF
|
|
||||||
After=network-online.target
|
|
||||||
Wants=network-online.target
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
Type=simple
|
|
||||||
User=__RUN_USER__
|
|
||||||
Group=__RUN_GROUP__
|
|
||||||
WorkingDirectory=__PROJECT_ROOT__
|
|
||||||
EnvironmentFile=__PROJECT_ROOT__/.env
|
|
||||||
Environment=PYTHONPATH=__PROJECT_ROOT__
|
|
||||||
ExecStartPre=/usr/local/bin/dronedetector-precheck-sdr.sh
|
|
||||||
ExecStart=__PROJECT_ROOT__/.venv-sdr/bin/python src/main_868_915_router.py
|
|
||||||
Restart=always
|
|
||||||
RestartSec=3
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
||||||
@ -1,119 +1,115 @@
|
|||||||
from common.runtime import load_root_env, validate_env, as_float, as_int, as_str
|
|
||||||
import json
|
from common.runtime import load_root_env, validate_env, as_float, as_int, as_str
|
||||||
import os
|
import numpy as np
|
||||||
|
import requests
|
||||||
import numpy as np
|
import os
|
||||||
import requests
|
import sys
|
||||||
|
import json
|
||||||
|
import time
|
||||||
|
|
||||||
|
|
||||||
load_root_env(__file__)
|
load_root_env(__file__)
|
||||||
validate_env('orange_scripts/compose_send_data_915.py', {
|
validate_env("orange_scripts/compose_send_data_915.py", {
|
||||||
'POROG_915': as_float,
|
"POROG_915": as_float,
|
||||||
'SERVER_IP_1': as_str,
|
"SERVER_IP_1": as_str,
|
||||||
'SERVER_PORT_1': as_int,
|
"SERVER_PORT_1": as_int,
|
||||||
})
|
})
|
||||||
|
porog = float(os.getenv('POROG_915'))
|
||||||
porog = float(os.getenv('POROG_915'))
|
server_ip_1 = os.getenv('SERVER_IP_1')
|
||||||
server_ip_1 = os.getenv('SERVER_IP_1')
|
server_port_1 = os.getenv('SERVER_PORT_1')
|
||||||
server_port_1 = os.getenv('SERVER_PORT_1')
|
server_ip_2 = os.getenv('SERVER_IP_2')
|
||||||
server_ip_2 = os.getenv('SERVER_IP_2')
|
server_port_2 = os.getenv('SERVER_PORT_2')
|
||||||
server_port_2 = os.getenv('SERVER_PORT_2')
|
PARAMS = {'split_size': 400_000, 'point_amount': 100_000}
|
||||||
PARAMS = {'split_size': 400_000, 'point_amount': 100_000}
|
PARAMS['show_amount'] = 0.8 * PARAMS['point_amount']
|
||||||
PARAMS['show_amount'] = int(0.8 * PARAMS['point_amount'])
|
token = 0
|
||||||
token = 0
|
channel = 1
|
||||||
channel = 1
|
flag = 0
|
||||||
flag = 0
|
|
||||||
|
##############################
|
||||||
f_base = 0.91e9
|
# HYPERPARAMETERS
|
||||||
f_step = 20e6
|
##############################
|
||||||
f_roof = 0.98e9
|
f_base = 0.91e9
|
||||||
|
f_step = 20e6
|
||||||
f = f_base
|
f_roof = 0.98e9
|
||||||
EOCF = 0
|
##############################
|
||||||
signal_arr = np.array([], dtype=np.complex64)
|
# Variables
|
||||||
|
##############################
|
||||||
|
f = f_base
|
||||||
class NumpyArrayEncoder(json.JSONEncoder):
|
EOCF = 0
|
||||||
def default(self, obj):
|
signal_arr = []
|
||||||
if isinstance(obj, np.integer):
|
|
||||||
return int(obj)
|
|
||||||
if isinstance(obj, np.ndarray):
|
class NumpyArrayEncoder(json.JSONEncoder):
|
||||||
return obj.tolist()
|
def default(self, obj):
|
||||||
return super().default(obj)
|
if isinstance(obj, np.integer):
|
||||||
|
return int(obj)
|
||||||
|
elif isinstance(obj, np.ndarray):
|
||||||
def send_data(sig):
|
return obj.tolist()
|
||||||
try:
|
else:
|
||||||
global token
|
return super(NumpyArrayEncoder, self).default(obj)
|
||||||
print('#' * 10)
|
|
||||||
print('\nОтправка пакета ' + str(token + 1))
|
|
||||||
data_to_send = {
|
def send_data(sig):
|
||||||
'freq': 915,
|
try:
|
||||||
'channel': int(channel),
|
global token
|
||||||
'token': int(token + 1),
|
print('#' * 10)
|
||||||
'data_real': np.asarray(np.array(sig, dtype=np.complex64).real, dtype=np.float32),
|
print('\nОтправка пакета ' + str(token+1))
|
||||||
'data_imag': np.asarray(np.array(sig, dtype=np.complex64).imag, dtype=np.float32),
|
data_to_send = {
|
||||||
}
|
"freq": 915,
|
||||||
mod_data_to_send = json.dumps(data_to_send, cls=NumpyArrayEncoder)
|
"channel": int(channel),
|
||||||
response = requests.post(
|
"token": int(token+1),
|
||||||
'http://{0}:{1}/receive_data'.format(server_ip_1, server_port_1),
|
"data_real": np.asarray(np.array(sig, dtype=np.complex64).real, dtype=np.float32),
|
||||||
json=mod_data_to_send,
|
"data_imag": np.asarray(np.array(sig, dtype=np.complex64).imag, dtype=np.float32)
|
||||||
)
|
}
|
||||||
if response.status_code == 200:
|
mod_data_to_send = json.dumps(data_to_send, cls=NumpyArrayEncoder)
|
||||||
token += 1
|
response = requests.post("http://{0}:{1}/receive_data".format(server_ip_1, server_port_1), json=mod_data_to_send)
|
||||||
print(response.text)
|
if response.status_code == 200:
|
||||||
print('#' * 10)
|
token += 1
|
||||||
else:
|
print(response.text)
|
||||||
print('Ошибка при отправке данных: ', response.status_code)
|
print('#' * 10)
|
||||||
print('#' * 10)
|
else:
|
||||||
except Exception as exc:
|
print("Ошибка при отправке данных: ", response.status_code)
|
||||||
print(str(exc))
|
print('#' * 10)
|
||||||
|
except Exception as exc:
|
||||||
|
print(str(exc))
|
||||||
def median(sig):
|
|
||||||
global flag
|
|
||||||
samples = np.asarray(np.abs(np.array(sig, dtype=np.complex64)), dtype=np.float32)
|
def median(sig):
|
||||||
med = abs(float(np.median(sorted(samples)[int(PARAMS['show_amount']):])))
|
global flag
|
||||||
flag = 0 if porog > med else 1
|
median = abs(float(np.median(sorted(np.asarray(np.abs(np.array(sig, dtype=np.complex64)), dtype=np.float32))[int(PARAMS['show_amount']):])))
|
||||||
print(channel, med, flag)
|
flag = 0 if porog > median else 1
|
||||||
|
print(channel, median, flag)
|
||||||
|
|
||||||
def advance_freq():
|
|
||||||
global channel
|
def work(lvl):
|
||||||
global f
|
global flag
|
||||||
|
global channel
|
||||||
next_freq = f + f_step
|
global f_base
|
||||||
if next_freq >= f_roof:
|
global f_step
|
||||||
f = f_base
|
global f_roof
|
||||||
channel = 1
|
global f
|
||||||
return f, True
|
global EOCF
|
||||||
|
global signal_arr
|
||||||
f = next_freq
|
|
||||||
channel += 1
|
y = np.array(lvl).ravel()
|
||||||
return f, False
|
signal_arr = np.concatenate((signal_arr, y), axis=None)
|
||||||
|
|
||||||
|
if f >= f_roof:
|
||||||
def work(lvl):
|
f = f_base
|
||||||
global flag
|
signal_arr = []
|
||||||
global f
|
channel = 1
|
||||||
global EOCF
|
return f, EOCF
|
||||||
global signal_arr
|
else:
|
||||||
|
if flag == 0 and len(signal_arr) >= PARAMS['point_amount']:
|
||||||
y = np.asarray(lvl, dtype=np.complex64).ravel()
|
median(signal_arr[:PARAMS['point_amount']])
|
||||||
signal_arr = np.concatenate((signal_arr, y), axis=None)
|
signal_arr = []
|
||||||
|
if flag == 0:
|
||||||
if flag == 0 and len(signal_arr) >= PARAMS['point_amount']:
|
f += f_step
|
||||||
median(signal_arr[:PARAMS['point_amount']])
|
channel += 1
|
||||||
signal_arr = np.array([], dtype=np.complex64)
|
if len(signal_arr) >= PARAMS['split_size']:
|
||||||
if flag == 0:
|
send_data(signal_arr[:PARAMS['split_size']])
|
||||||
f, _ = advance_freq()
|
flag = 0
|
||||||
return f, EOCF
|
signal_arr = []
|
||||||
|
channel += 1
|
||||||
if len(signal_arr) >= PARAMS['split_size']:
|
f += f_step
|
||||||
send_data(signal_arr[:PARAMS['split_size']])
|
return f, EOCF
|
||||||
flag = 0
|
|
||||||
signal_arr = np.array([], dtype=np.complex64)
|
|
||||||
f, _ = advance_freq()
|
|
||||||
return f, EOCF
|
|
||||||
|
|
||||||
return f, EOCF
|
|
||||||
|
|||||||
@ -1,150 +0,0 @@
|
|||||||
import os
|
|
||||||
import datetime
|
|
||||||
import time
|
|
||||||
from common.runtime import load_root_env, as_bool
|
|
||||||
from smb.SMBConnection import SMBConnection
|
|
||||||
from utils.datas_processing import pack_elems, agregator, send_data, send_telemetry, save_data, remote_save_data
|
|
||||||
from utils.jammer_state_flag import is_jammer_active
|
|
||||||
from core.sig_n_medi_collect import Signal, SignalsArray
|
|
||||||
from core.multichannelswitcher import MultiChannel
|
|
||||||
|
|
||||||
load_root_env(__file__)
|
|
||||||
|
|
||||||
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_1500').split())]
|
|
||||||
f_bases = [*map(float, os.getenv('f_bases_1500').split())]
|
|
||||||
f_roofs = [*map(float, os.getenv('f_roofs_1500').split())]
|
|
||||||
signal_length = int(os.getenv('signal_length_1500'))
|
|
||||||
buffer_columns_size = int(os.getenv('buffer_columns_size_1500'))
|
|
||||||
num_of_thinning_iter = int(os.getenv('num_of_thinning_iter_1500'))
|
|
||||||
multiply_factor = float(os.getenv('multiply_factor_1500'))
|
|
||||||
num_for_alarm = int(os.getenv('num_for_alarm_1500'))
|
|
||||||
c_freq = os.getenv('c_freq_1500', '1500')
|
|
||||||
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(
|
|
||||||
buffer_columns_size,
|
|
||||||
num_of_thinning_iter,
|
|
||||||
multiply_factor,
|
|
||||||
num_for_alarm,
|
|
||||||
c_freq,
|
|
||||||
)
|
|
||||||
|
|
||||||
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 = c_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)
|
|
||||||
elif not is_jammer_active():
|
|
||||||
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
|
|
||||||
@ -1,104 +0,0 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
from gnuradio import blocks
|
|
||||||
from gnuradio import gr
|
|
||||||
import signal
|
|
||||||
import sys
|
|
||||||
import threading
|
|
||||||
import time
|
|
||||||
|
|
||||||
import osmosdr
|
|
||||||
import embedded_1500 as my_freq
|
|
||||||
|
|
||||||
from common.runtime import load_root_env, resolve_hackrf_index
|
|
||||||
|
|
||||||
|
|
||||||
load_root_env(__file__)
|
|
||||||
|
|
||||||
|
|
||||||
def get_hack_id():
|
|
||||||
return resolve_hackrf_index('hack_1500', 'src/main_1500.py')
|
|
||||||
|
|
||||||
|
|
||||||
class get_center_freq(gr.top_block):
|
|
||||||
def __init__(self):
|
|
||||||
gr.top_block.__init__(self, 'get_center_freq')
|
|
||||||
|
|
||||||
self.prob_freq = 0
|
|
||||||
self.samp_rate = 20e6
|
|
||||||
self.poll_rate = 10000
|
|
||||||
self.vector_len = 4096
|
|
||||||
self.center_freq = my_freq.work(self.prob_freq)
|
|
||||||
self._prob_freq_thread = None
|
|
||||||
|
|
||||||
self.probSigVec = blocks.probe_signal_vc(self.vector_len)
|
|
||||||
self.rtlsdr_source_0 = osmosdr.source(
|
|
||||||
args='numchan=' + str(1) + ' ' + 'hackrf=' + get_hack_id()
|
|
||||||
)
|
|
||||||
self.rtlsdr_source_0.set_time_unknown_pps(osmosdr.time_spec_t())
|
|
||||||
self.rtlsdr_source_0.set_sample_rate(self.samp_rate)
|
|
||||||
self.rtlsdr_source_0.set_center_freq(self.center_freq, 0)
|
|
||||||
self.rtlsdr_source_0.set_freq_corr(0, 0)
|
|
||||||
self.rtlsdr_source_0.set_gain(24, 0)
|
|
||||||
self.rtlsdr_source_0.set_if_gain(24, 0)
|
|
||||||
self.rtlsdr_source_0.set_bb_gain(100, 0)
|
|
||||||
self.rtlsdr_source_0.set_antenna('', 0)
|
|
||||||
self.rtlsdr_source_0.set_bandwidth(0, 0)
|
|
||||||
self.rtlsdr_source_0.set_min_output_buffer(self.vector_len)
|
|
||||||
|
|
||||||
self.blocks_stream_to_vector_1 = blocks.stream_to_vector(gr.sizeof_gr_complex * 1, self.vector_len)
|
|
||||||
self.connect((self.blocks_stream_to_vector_1, 0), (self.probSigVec, 0))
|
|
||||||
self.connect((self.rtlsdr_source_0, 0), (self.blocks_stream_to_vector_1, 0))
|
|
||||||
|
|
||||||
def _prob_freq_probe():
|
|
||||||
while True:
|
|
||||||
val = self.probSigVec.level()
|
|
||||||
try:
|
|
||||||
self.set_prob_freq(val)
|
|
||||||
except AttributeError:
|
|
||||||
pass
|
|
||||||
time.sleep(1.0 / self.poll_rate)
|
|
||||||
|
|
||||||
self._prob_freq_thread = threading.Thread(target=_prob_freq_probe, daemon=True)
|
|
||||||
self._prob_freq_thread.start()
|
|
||||||
|
|
||||||
def get_prob_freq(self):
|
|
||||||
return self.prob_freq
|
|
||||||
|
|
||||||
def set_prob_freq(self, prob_freq):
|
|
||||||
self.prob_freq = prob_freq
|
|
||||||
self.set_center_freq(my_freq.work(self.prob_freq))
|
|
||||||
|
|
||||||
def get_center_freq(self):
|
|
||||||
return self.center_freq
|
|
||||||
|
|
||||||
def set_center_freq(self, center_freq):
|
|
||||||
self.center_freq = center_freq
|
|
||||||
self.rtlsdr_source_0.set_center_freq(self.center_freq, 0)
|
|
||||||
|
|
||||||
|
|
||||||
def main(top_block_cls=get_center_freq, options=None):
|
|
||||||
tb = top_block_cls()
|
|
||||||
|
|
||||||
def sig_handler(sig=None, frame=None):
|
|
||||||
tb.stop()
|
|
||||||
tb.wait()
|
|
||||||
sys.exit(0)
|
|
||||||
|
|
||||||
signal.signal(signal.SIGINT, sig_handler)
|
|
||||||
signal.signal(signal.SIGTERM, sig_handler)
|
|
||||||
|
|
||||||
tb.start()
|
|
||||||
try:
|
|
||||||
print('СЕРВИСНАЯ ИНФОРМАЦИЯ: ')
|
|
||||||
print('debug_flag: ', my_freq.debug_flag)
|
|
||||||
print('save_data_flag: ', my_freq.save_data_flag)
|
|
||||||
print('send_to_module_flag: ', my_freq.send_to_module_flag)
|
|
||||||
except EOFError:
|
|
||||||
pass
|
|
||||||
tb.wait()
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
main()
|
|
||||||
@ -1,122 +0,0 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
from gnuradio import blocks
|
|
||||||
from gnuradio import gr
|
|
||||||
import signal
|
|
||||||
import sys
|
|
||||||
import threading
|
|
||||||
import time
|
|
||||||
|
|
||||||
import osmosdr
|
|
||||||
|
|
||||||
from common.runtime import load_root_env, resolve_hackrf_index
|
|
||||||
from common.shared_stream_addrs import SHARED_VECTOR_LEN
|
|
||||||
from shared_router_868_915 import SharedRouter868915
|
|
||||||
|
|
||||||
|
|
||||||
load_root_env(__file__)
|
|
||||||
|
|
||||||
|
|
||||||
def get_hack_id():
|
|
||||||
return resolve_hackrf_index('hack_868', 'src/main_868_915_router.py')
|
|
||||||
|
|
||||||
|
|
||||||
class get_center_freq(gr.top_block):
|
|
||||||
def __init__(self):
|
|
||||||
gr.top_block.__init__(self, 'get_center_freq')
|
|
||||||
|
|
||||||
self.prob_freq = 0
|
|
||||||
self.poll_rate = 10000
|
|
||||||
self.vector_len = SHARED_VECTOR_LEN
|
|
||||||
self.router = SharedRouter868915()
|
|
||||||
self.active_lane = self.router.get_active_name()
|
|
||||||
self.center_freq = self.router.get_start_freq()
|
|
||||||
self._stop_polling = threading.Event()
|
|
||||||
self._prob_freq_thread = None
|
|
||||||
|
|
||||||
self.probSigVec = blocks.probe_signal_vc(self.vector_len)
|
|
||||||
self.rtlsdr_source_0 = osmosdr.source(
|
|
||||||
args='numchan=' + str(1) + ' ' + 'hackrf=' + get_hack_id()
|
|
||||||
)
|
|
||||||
self.rtlsdr_source_0.set_time_unknown_pps(osmosdr.time_spec_t())
|
|
||||||
self.rtlsdr_source_0.set_freq_corr(0, 0)
|
|
||||||
self.rtlsdr_source_0.set_antenna('', 0)
|
|
||||||
self.rtlsdr_source_0.set_min_output_buffer(self.vector_len)
|
|
||||||
self.apply_active_frontend()
|
|
||||||
self.rtlsdr_source_0.set_center_freq(self.center_freq, 0)
|
|
||||||
|
|
||||||
self.blocks_stream_to_vector_1 = blocks.stream_to_vector(gr.sizeof_gr_complex * 1, self.vector_len)
|
|
||||||
self.connect((self.rtlsdr_source_0, 0), (self.blocks_stream_to_vector_1, 0))
|
|
||||||
self.connect((self.blocks_stream_to_vector_1, 0), (self.probSigVec, 0))
|
|
||||||
|
|
||||||
def start_polling(self):
|
|
||||||
if self._prob_freq_thread is not None:
|
|
||||||
return
|
|
||||||
|
|
||||||
def _prob_freq_probe():
|
|
||||||
while not self._stop_polling.is_set():
|
|
||||||
self.set_prob_freq(self.probSigVec.level())
|
|
||||||
time.sleep(1.0 / self.poll_rate)
|
|
||||||
|
|
||||||
self._prob_freq_thread = threading.Thread(target=_prob_freq_probe, daemon=True)
|
|
||||||
self._prob_freq_thread.start()
|
|
||||||
|
|
||||||
def apply_active_frontend(self):
|
|
||||||
frontend = self.router.get_active_frontend()
|
|
||||||
self.rtlsdr_source_0.set_sample_rate(frontend['sample_rate'])
|
|
||||||
self.rtlsdr_source_0.set_gain(frontend['gain'], 0)
|
|
||||||
self.rtlsdr_source_0.set_if_gain(frontend['if_gain'], 0)
|
|
||||||
self.rtlsdr_source_0.set_bb_gain(frontend['bb_gain'], 0)
|
|
||||||
self.rtlsdr_source_0.set_bandwidth(frontend['bandwidth'], 0)
|
|
||||||
|
|
||||||
def get_prob_freq(self):
|
|
||||||
return self.prob_freq
|
|
||||||
|
|
||||||
def set_prob_freq(self, prob_freq):
|
|
||||||
self.prob_freq = prob_freq
|
|
||||||
next_center, lane_switched = self.router.route_vector(self.prob_freq)
|
|
||||||
if lane_switched:
|
|
||||||
self.active_lane = self.router.get_active_name()
|
|
||||||
self.apply_active_frontend()
|
|
||||||
if next_center != self.center_freq:
|
|
||||||
self.set_center_freq(next_center)
|
|
||||||
|
|
||||||
def get_center_freq(self):
|
|
||||||
return self.center_freq
|
|
||||||
|
|
||||||
def set_center_freq(self, center_freq):
|
|
||||||
self.center_freq = center_freq
|
|
||||||
self.rtlsdr_source_0.set_center_freq(self.center_freq, 0)
|
|
||||||
|
|
||||||
def close(self):
|
|
||||||
self._stop_polling.set()
|
|
||||||
try:
|
|
||||||
self.router.close()
|
|
||||||
finally:
|
|
||||||
self.stop()
|
|
||||||
self.wait()
|
|
||||||
|
|
||||||
|
|
||||||
def main(top_block_cls=get_center_freq, options=None):
|
|
||||||
tb = top_block_cls()
|
|
||||||
|
|
||||||
def sig_handler(sig=None, frame=None):
|
|
||||||
tb.close()
|
|
||||||
sys.exit(0)
|
|
||||||
|
|
||||||
signal.signal(signal.SIGINT, sig_handler)
|
|
||||||
signal.signal(signal.SIGTERM, sig_handler)
|
|
||||||
|
|
||||||
tb.start()
|
|
||||||
tb.start_polling()
|
|
||||||
try:
|
|
||||||
print('shared_router_active_lane:', tb.router.get_active_name())
|
|
||||||
print('shared_router_start_freq:', tb.get_center_freq())
|
|
||||||
except EOFError:
|
|
||||||
pass
|
|
||||||
tb.wait()
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
main()
|
|
||||||
@ -1,173 +0,0 @@
|
|||||||
import os
|
|
||||||
|
|
||||||
import numpy as np
|
|
||||||
import zmq
|
|
||||||
|
|
||||||
from common.runtime import load_root_env
|
|
||||||
from common.shared_stream_addrs import SHARED_868_ADDR, SHARED_915_ADDR
|
|
||||||
from core.multichannelswitcher import MultiChannel
|
|
||||||
from core.sig_n_medi_collect import Signal
|
|
||||||
|
|
||||||
|
|
||||||
load_root_env(__file__)
|
|
||||||
|
|
||||||
|
|
||||||
class Scheduler868:
|
|
||||||
def __init__(self):
|
|
||||||
self.signal_length = int(os.getenv('signal_length_868'))
|
|
||||||
self.multi_channel = MultiChannel(
|
|
||||||
[*map(float, os.getenv('f_step_868').split())],
|
|
||||||
[*map(float, os.getenv('f_bases_868').split())],
|
|
||||||
[*map(float, os.getenv('f_roofs_868').split())],
|
|
||||||
)
|
|
||||||
self.base_freq = float(self.multi_channel.init_f())
|
|
||||||
self.signal = Signal()
|
|
||||||
|
|
||||||
def get_current_freq(self):
|
|
||||||
return float(self.multi_channel.get_cur_channel())
|
|
||||||
|
|
||||||
def process(self, lvl):
|
|
||||||
current_before = self.get_current_freq()
|
|
||||||
metric = self.signal.fill_signal(lvl, self.signal_length)
|
|
||||||
if metric == 0:
|
|
||||||
return current_before, False
|
|
||||||
|
|
||||||
next_freq = float(self.multi_channel.change_channel())
|
|
||||||
self.signal.clear()
|
|
||||||
lane_complete = next_freq == self.base_freq and current_before != self.base_freq
|
|
||||||
return next_freq, lane_complete
|
|
||||||
|
|
||||||
|
|
||||||
class Scheduler915:
|
|
||||||
def __init__(self):
|
|
||||||
self.porog = float(os.getenv('POROG_915'))
|
|
||||||
self.point_amount = 100_000
|
|
||||||
self.split_size = 400_000
|
|
||||||
self.show_amount = int(0.8 * self.point_amount)
|
|
||||||
self.f_base = 0.91e9
|
|
||||||
self.f_step = 20e6
|
|
||||||
self.f_roof = 0.98e9
|
|
||||||
self.f = self.f_base
|
|
||||||
self.channel = 1
|
|
||||||
self.flag = 0
|
|
||||||
self.signal_arr = np.array([], dtype=np.complex64)
|
|
||||||
|
|
||||||
def get_current_freq(self):
|
|
||||||
return float(self.f)
|
|
||||||
|
|
||||||
def _median(self, sig):
|
|
||||||
samples = np.asarray(np.abs(np.array(sig, dtype=np.complex64)), dtype=np.float32)
|
|
||||||
sorted_samples = sorted(samples)
|
|
||||||
median = abs(float(np.median(sorted_samples[self.show_amount:])))
|
|
||||||
self.flag = 0 if self.porog > median else 1
|
|
||||||
|
|
||||||
def _advance(self):
|
|
||||||
next_freq = self.f + self.f_step
|
|
||||||
if next_freq >= self.f_roof:
|
|
||||||
self.f = self.f_base
|
|
||||||
self.channel = 1
|
|
||||||
return float(self.f), True
|
|
||||||
|
|
||||||
self.f = next_freq
|
|
||||||
self.channel += 1
|
|
||||||
return float(self.f), False
|
|
||||||
|
|
||||||
def process(self, lvl):
|
|
||||||
y = np.asarray(lvl, dtype=np.complex64).ravel()
|
|
||||||
self.signal_arr = np.concatenate((self.signal_arr, y), axis=None)
|
|
||||||
|
|
||||||
if self.flag == 0 and len(self.signal_arr) >= self.point_amount:
|
|
||||||
self._median(self.signal_arr[:self.point_amount])
|
|
||||||
self.signal_arr = np.array([], dtype=np.complex64)
|
|
||||||
if self.flag == 0:
|
|
||||||
return self._advance()
|
|
||||||
|
|
||||||
if len(self.signal_arr) >= self.split_size:
|
|
||||||
self.flag = 0
|
|
||||||
self.signal_arr = np.array([], dtype=np.complex64)
|
|
||||||
return self._advance()
|
|
||||||
|
|
||||||
return float(self.f), False
|
|
||||||
|
|
||||||
|
|
||||||
class SharedRouter868915:
|
|
||||||
def __init__(self):
|
|
||||||
self.frontends = {
|
|
||||||
'868': {
|
|
||||||
'sample_rate': 20e6,
|
|
||||||
'gain': 24,
|
|
||||||
'if_gain': 24,
|
|
||||||
'bb_gain': 100,
|
|
||||||
'bandwidth': 0,
|
|
||||||
},
|
|
||||||
'915': {
|
|
||||||
'sample_rate': 20e6,
|
|
||||||
'gain': 16,
|
|
||||||
'if_gain': 16,
|
|
||||||
'bb_gain': 0,
|
|
||||||
'bandwidth': 0,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
self.schedulers = {
|
|
||||||
'868': Scheduler868(),
|
|
||||||
'915': Scheduler915(),
|
|
||||||
}
|
|
||||||
self.context = zmq.Context.instance()
|
|
||||||
self.sockets = {
|
|
||||||
'868': self._make_socket(SHARED_868_ADDR),
|
|
||||||
'915': self._make_socket(SHARED_915_ADDR),
|
|
||||||
}
|
|
||||||
self.active_name = '868'
|
|
||||||
self.switch_counter = 0
|
|
||||||
|
|
||||||
def _make_socket(self, addr):
|
|
||||||
sock = self.context.socket(zmq.PUSH)
|
|
||||||
sock.setsockopt(zmq.SNDHWM, 64)
|
|
||||||
sock.setsockopt(zmq.LINGER, 0)
|
|
||||||
sock.setsockopt(zmq.IMMEDIATE, 1)
|
|
||||||
sock.bind(addr)
|
|
||||||
return sock
|
|
||||||
|
|
||||||
def close(self):
|
|
||||||
for sock in self.sockets.values():
|
|
||||||
try:
|
|
||||||
sock.close(0)
|
|
||||||
except Exception:
|
|
||||||
pass
|
|
||||||
|
|
||||||
def get_active_name(self):
|
|
||||||
return self.active_name
|
|
||||||
|
|
||||||
def get_active_freq(self):
|
|
||||||
return self.schedulers[self.active_name].get_current_freq()
|
|
||||||
|
|
||||||
def get_active_frontend(self):
|
|
||||||
return dict(self.frontends[self.active_name])
|
|
||||||
|
|
||||||
def get_start_freq(self):
|
|
||||||
return self.get_active_freq()
|
|
||||||
|
|
||||||
def route_vector(self, lvl):
|
|
||||||
vector = np.asarray(lvl, dtype=np.complex64).ravel()
|
|
||||||
active_name = self.active_name
|
|
||||||
|
|
||||||
try:
|
|
||||||
self.sockets[active_name].send(vector.tobytes(), zmq.NOBLOCK)
|
|
||||||
except zmq.Again:
|
|
||||||
pass
|
|
||||||
|
|
||||||
next_freq, lane_complete = self.schedulers[active_name].process(vector)
|
|
||||||
lane_switched = False
|
|
||||||
|
|
||||||
if lane_complete:
|
|
||||||
previous = self.active_name
|
|
||||||
self.active_name = '915' if self.active_name == '868' else '868'
|
|
||||||
next_freq = self.get_active_freq()
|
|
||||||
self.switch_counter += 1
|
|
||||||
lane_switched = True
|
|
||||||
print(
|
|
||||||
f'[shared-router-868-915] switch#{self.switch_counter}: '
|
|
||||||
f'{previous} -> {self.active_name}, tune={next_freq}'
|
|
||||||
)
|
|
||||||
|
|
||||||
return float(next_freq), lane_switched
|
|
||||||
@ -1,116 +1,108 @@
|
|||||||
import os
|
import os
|
||||||
import datetime
|
import datetime
|
||||||
from smb.SMBConnection import SMBConnection
|
from smb.SMBConnection import SMBConnection
|
||||||
from dotenv import load_dotenv
|
from dotenv import load_dotenv
|
||||||
from DroneScanner.utils.datas_processing import pack_elems, agregator, send_data, save_data, remote_save_data
|
from DroneScanner.utils.datas_processing import pack_elems, agregator, send_data, save_data, remote_save_data
|
||||||
from DroneScanner.core.sig_n_medi_collect import Signal, SignalsArray, get_signal_length
|
from DroneScanner.core.sig_n_medi_collect import Signal, SignalsArray, get_signal_length
|
||||||
from DroneScanner.core.multichannelswitcher import MultiChannel, get_centre_freq
|
from DroneScanner.core.multichannelswitcher import MultiChannel, get_centre_freq
|
||||||
|
|
||||||
dotenv_path = os.path.join(os.path.dirname(__file__), '../../.env')
|
dotenv_path = os.path.join(os.path.dirname(__file__), '../../.env')
|
||||||
if os.path.exists(dotenv_path):
|
if os.path.exists(dotenv_path):
|
||||||
load_dotenv(dotenv_path)
|
load_dotenv(dotenv_path)
|
||||||
|
|
||||||
debug_flag = bool(os.getenv('debug_flag'))
|
debug_flag = bool(os.getenv('debug_flag'))
|
||||||
send_to_module_flag = bool(os.getenv('send_to_module_flag'))
|
send_to_module_flag = bool(os.getenv('send_to_module_flag'))
|
||||||
save_data_flag = bool(os.getenv('save_data_flag'))
|
save_data_flag = bool(os.getenv('save_data_flag'))
|
||||||
module_name = os.getenv('module_name')
|
module_name = os.getenv('module_name')
|
||||||
elems_to_save = os.getenv('elems_to_save')
|
elems_to_save = os.getenv('elems_to_save')
|
||||||
file_types_to_save = os.getenv('file_types_to_save')
|
file_types_to_save = os.getenv('file_types_to_save')
|
||||||
localhost = os.getenv('lochost')
|
localhost = os.getenv('lochost')
|
||||||
localport = os.getenv('locport')
|
localport = os.getenv('locport')
|
||||||
f_step = [*map(float, os.getenv('f_step_1200').split())]
|
f_step = [*map(float, os.getenv('f_step_1200').split())]
|
||||||
f_bases = [*map(float, os.getenv('f_bases_1200').split())]
|
f_bases = [*map(float, os.getenv('f_bases_1200').split())]
|
||||||
f_roofs = [*map(float, os.getenv('f_roofs_1200').split())]
|
f_roofs = [*map(float, os.getenv('f_roofs_1200').split())]
|
||||||
|
path_to_save_medians = os.getenv('path_to_save_medians')
|
||||||
c_freq = as_str(os.getenv(f'c_freq_{freq_suffix}', freq_suffix))path_to_save_medians = os.getenv('path_to_save_medians')
|
path_to_save_alarms = os.getenv('path_to_save_alarms')
|
||||||
path_to_save_alarms = os.getenv('path_to_save_alarms')
|
smb_host = os.getenv('smb_host')
|
||||||
smb_host = os.getenv('smb_host')
|
smb_port = os.getenv('smb_port')
|
||||||
smb_port = os.getenv('smb_port')
|
smb_user = os.getenv('smb_user')
|
||||||
smb_user = os.getenv('smb_user')
|
smb_pass = os.getenv('smb_pass')
|
||||||
smb_pass = os.getenv('smb_pass')
|
shared_folder = os.getenv('shared_folder')
|
||||||
shared_folder = os.getenv('shared_folder')
|
the_pc_name = os.getenv('the_pc_name')
|
||||||
the_pc_name = os.getenv('the_pc_name')
|
remote_pc_name = os.getenv('remote_pc_name')
|
||||||
remote_pc_name = os.getenv('remote_pc_name')
|
smb_domain = os.getenv('smb_domain')
|
||||||
smb_domain = os.getenv('smb_domain')
|
|
||||||
|
elems_to_save = elems_to_save.split(',')
|
||||||
elems_to_save = elems_to_save.split(',')
|
file_types_to_save = file_types_to_save.split(',')
|
||||||
file_types_to_save = file_types_to_save.split(',')
|
|
||||||
|
tmp_signal = Signal()
|
||||||
tmp_signal = Signal()
|
tmp_sigs_array = SignalsArray()
|
||||||
tmp_sigs_array = SignalsArray()
|
multi_channel = MultiChannel(f_step, f_bases, f_roofs)
|
||||||
multi_channel = MultiChannel(
|
f = multi_channel.init_f()
|
||||||
f_step,
|
multi_channel.fill_DB()
|
||||||
f_bases,
|
|
||||||
f_roofs,
|
if debug_flag:
|
||||||
config_tags=[freq_suffix] * len(f_step),
|
conn = SMBConnection(smb_user, smb_pass, the_pc_name, remote_pc_name, use_ntlm_v2=True)
|
||||||
report_freqs=[c_freq] * len(f_step),
|
conn.connect(smb_host, 139)
|
||||||
)
|
filelist = conn.listPath(shared_folder, '/')
|
||||||
f = multi_channel.init_f()
|
print(filelist)
|
||||||
multi_channel.fill_DB()
|
|
||||||
|
|
||||||
if debug_flag:
|
def work(lvl):
|
||||||
conn = SMBConnection(smb_user, smb_pass, the_pc_name, remote_pc_name, use_ntlm_v2=True)
|
|
||||||
conn.connect(smb_host, 139)
|
f = multi_channel.get_cur_channel()
|
||||||
filelist = conn.listPath(shared_folder, '/')
|
freq = get_centre_freq(f)
|
||||||
print(filelist)
|
signal_length = get_signal_length(freq)
|
||||||
|
median, signal, abs_signal = tmp_signal.fill_sig(lvl, signal_length)
|
||||||
|
|
||||||
def work(lvl):
|
if median != -1:
|
||||||
|
try:
|
||||||
f = multi_channel.get_cur_channel()
|
num_chs, circle_buffer = multi_channel.check_f(f)
|
||||||
config_tag = multi_channel.get_config_tag(f)
|
|
||||||
freq = multi_channel.get_report_freq(f)
|
#print(f, freq, num_chs, signal_length)
|
||||||
signal_length = get_signal_length(config_tag)
|
#print(median)
|
||||||
median, signal, abs_signal = tmp_signal.fill_sig(lvl, signal_length)
|
|
||||||
|
cur_channel, sigs_array = tmp_sigs_array.fill_sig_arr(median, num_chs)
|
||||||
if median != -1:
|
|
||||||
try:
|
if sigs_array:
|
||||||
num_chs, circle_buffer = multi_channel.check_f(f)
|
print('Значения на {0}: {1}'.format(freq, sigs_array))
|
||||||
|
print('Пороги: ', circle_buffer.get_medians())
|
||||||
#print(f, freq, num_chs, signal_length)
|
alarm = circle_buffer.check_alarm(sigs_array)
|
||||||
#print(median)
|
|
||||||
|
if alarm:
|
||||||
cur_channel, sigs_array = tmp_sigs_array.fill_sig_arr(median, num_chs)
|
print('----ALARM---- ', freq)
|
||||||
|
multi_channel.db_alarms_zeros(circle_buffer)
|
||||||
if sigs_array:
|
else:
|
||||||
print('Значения на {0}: {1}'.format(freq, sigs_array))
|
circle_buffer.update(sigs_array)
|
||||||
print('Пороги: ', circle_buffer.get_medians())
|
|
||||||
alarm = circle_buffer.check_alarm(sigs_array)
|
if send_to_module_flag:
|
||||||
|
send_data(agregator(freq, alarm), localhost, localport)
|
||||||
if alarm:
|
|
||||||
print('----ALARM---- ', freq)
|
if save_data_flag:
|
||||||
multi_channel.db_alarms_zeros(circle_buffer)
|
if not circle_buffer.check_init() and circle_buffer.current_column - 1 == 0:
|
||||||
else:
|
save_data(path_to_save_medians, freq, 'DateTime', 'ALARM', 'max signal', list(range(num_chs)),
|
||||||
circle_buffer.update(sigs_array)
|
list(range(num_chs)))
|
||||||
|
if circle_buffer.check_init():
|
||||||
if send_to_module_flag:
|
save_data(path_to_save_medians, freq, datetime.datetime.now(), alarm, max(sigs_array), sigs_array,
|
||||||
send_data(agregator(freq, alarm), localhost, localport)
|
circle_buffer.get_medians())
|
||||||
|
# print(circle_buffer.get_buffer())
|
||||||
if save_data_flag:
|
# print(circle_buffer.get_medians())
|
||||||
if not circle_buffer.check_init() and circle_buffer.current_column - 1 == 0:
|
# print(circle_buffer.get_alarms())
|
||||||
save_data(path_to_save_medians, freq, 'DateTime', 'ALARM', 'max signal', list(range(num_chs)),
|
if debug_flag:
|
||||||
list(range(num_chs)))
|
single_alarm = circle_buffer.check_single_alarm(median, cur_channel)
|
||||||
if circle_buffer.check_init():
|
print(cur_channel, single_alarm)
|
||||||
save_data(path_to_save_medians, freq, datetime.datetime.now(), alarm, max(sigs_array), sigs_array,
|
if single_alarm:
|
||||||
circle_buffer.get_medians())
|
data = pack_elems(elems_to_save, file_types_to_save, signal, abs_signal)
|
||||||
# print(circle_buffer.get_buffer())
|
#print('SAVE CURRENT SIGNAL SROCHNO TI MENYA SLISHISH?!?!?!?')
|
||||||
# print(circle_buffer.get_medians())
|
try:
|
||||||
# print(circle_buffer.get_alarms())
|
remote_save_data(conn, data, module_name, freq, shared_folder, path_to_save_alarms)
|
||||||
if debug_flag:
|
except Exception as e:
|
||||||
single_alarm = circle_buffer.check_single_alarm(median, cur_channel)
|
print(f"Ошибка: {e}")
|
||||||
print(cur_channel, single_alarm)
|
#else:
|
||||||
if single_alarm:
|
#print('VSE OKI DOKI SIGNAL SOKHRANYAT NE NUZHNO!!!')
|
||||||
data = pack_elems(elems_to_save, file_types_to_save, signal, abs_signal)
|
|
||||||
#print('SAVE CURRENT SIGNAL SROCHNO TI MENYA SLISHISH?!?!?!?')
|
f = multi_channel.change_channel()
|
||||||
try:
|
except Exception as e:
|
||||||
remote_save_data(conn, data, module_name, freq, shared_folder, path_to_save_alarms)
|
print(str(e))
|
||||||
except Exception as e:
|
print(".", end='')
|
||||||
print(f"Ошибка: {e}")
|
return f
|
||||||
#else:
|
|
||||||
#print('VSE OKI DOKI SIGNAL SOKHRANYAT NE NUZHNO!!!')
|
|
||||||
|
|
||||||
f = multi_channel.change_channel()
|
|
||||||
except Exception as e:
|
|
||||||
print(str(e))
|
|
||||||
print(".", end='')
|
|
||||||
return f
|
|
||||||
|
|||||||
Loading…
Reference in New Issue