From 1bd2b5207efec2d0b27cf5b57b33ac856a142c3f Mon Sep 17 00:00:00 2001 From: Sergey Revyakin Date: Tue, 7 Apr 2026 16:18:27 +0700 Subject: [PATCH] =?UTF-8?q?=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=B1=D0=B0=D0=B3=20=D1=81=20=D0=BF=D0=BE=D0=B4=D0=B0?= =?UTF-8?q?=D0=B2=D0=B8=D1=82=D0=B5=D0=BB=D0=B5=D0=BC=20=D0=BD=D0=B0=20?= =?UTF-8?q?=D0=B1=D0=B5=D1=81=D0=BA=D0=BE=D0=BD=D0=B5=D1=87=D0=BD=D1=8B?= =?UTF-8?q?=D0=B5=20=D0=BF=D1=80=D0=BE=D1=86=D0=B5=D1=81=D1=81=D1=8B=20sen?= =?UTF-8?q?ding=5Fdata?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- deploy/docker/docker-compose.yml | 4 ++ src/server_to_master.py | 109 ++++++++++++++++++------------- 2 files changed, 67 insertions(+), 46 deletions(-) diff --git a/deploy/docker/docker-compose.yml b/deploy/docker/docker-compose.yml index 197b849..50038db 100644 --- a/deploy/docker/docker-compose.yml +++ b/deploy/docker/docker-compose.yml @@ -18,8 +18,12 @@ services: volumes: - ../../.env:/app/.env:ro - ../../runtime:/app/runtime + - ../../src:/app/src + - ../../common:/app/common networks: - dronedetector-net + extra_hosts: + - "host.docker.internal:host-gateway" dronedetector-nn-server: container_name: dronedetector-nn-server diff --git a/src/server_to_master.py b/src/server_to_master.py index 450b022..6053254 100644 --- a/src/server_to_master.py +++ b/src/server_to_master.py @@ -73,7 +73,6 @@ send_to_jammer_flag = as_bool(os.getenv('send_to_jammer_flag', '0')) latitude = float(os.getenv('latitude')) longitude = float(os.getenv('longitude')) -i = 0 flag = 0 max_len_bulk = 1 bulk_data = [] @@ -98,6 +97,32 @@ freqs_alarm = {freq: 0 for freq in freqs} # 4. Добавить print, только если deub_module_flag. +def ensure_sending_data_task(): + global sending_data_task + + if sending_data_task is None or sending_data_task.done(): + sending_data_task = asyncio.create_task(sending_data()) + + +async def stop_sending_data_task(): + global sending_data_task + + if sending_data_task is None: + return + + task = sending_data_task + sending_data_task = None + + if task.done(): + return + + task.cancel() + try: + await task + except asyncio.CancelledError: + pass + + ############################################################################ # GPS MODULE - INACTIVE ############################################################################ @@ -299,44 +324,40 @@ async def sending_data(): от текущего статуса тревоги (аларм/не аларм). """ - global i global alarm global jammer_event - if i == 0: - while True: - i=1 - print('while true!') - ModuleDataSingleV2 = await agregate_data(deepcopy(data_queue)) - if send_to_master_flag: - print(f'На Мастер будет отправлена следующая информация: {ModuleDataSingleV2}') - await send_to_master(ModuleDataSingleV2, flag) - - # Если перед отправкой на мастер все было чисто, то ждем 60 сек. - # Если во время этих 60 сек. пришел пакет с алармом, то рассматриваем ситуации: - if not alarm: - for i in range(passive_interval_to_send, 0, -1): - print('ТАЙМЕР ', i) - await asyncio.sleep(1) - if alarm: - break - - # Если стоит флаг отправить данные на джеммер и при этом еще не был получен ивент на глушилку, то - # отправляем на джеммер данные. - elif alarm and send_to_jammer_flag and not jammer_event: - if await send_jam_server_alarm(): - print('Отправили на сервис подавления и все дошло успешно') - else: - print('Не смогли отправить на сервис подавления') - - # Сюда почему-то не заходит и вообще функция не подает признаков жизни после запуска подваителя(( - if alarm and jammer_event: - print('ПОДАВИТЕЛЬ РАБОТАЕТ РАЗБЕГАЙСЯ ААААААААААААААААААА') - - # В случае аларма ждем секунду перед новой отправкой данных. - if alarm: - await asyncio.sleep(active_interval_to_send) - i = 0 + while True: + print('while true!') + ModuleDataSingleV2 = await agregate_data(deepcopy(data_queue)) + if send_to_master_flag: + print(f'На Мастер будет отправлена следующая информация: {ModuleDataSingleV2}') + await send_to_master(ModuleDataSingleV2, flag) + + # Если перед отправкой на мастер все было чисто, то ждем 60 сек. + # Если во время этих 60 сек. пришел пакет с алармом, то рассматриваем ситуации: + if not alarm: + for countdown in range(passive_interval_to_send, 0, -1): + print('ТАЙМЕР ', countdown) + await asyncio.sleep(1) + if alarm: + break + + # Если стоит флаг отправить данные на джеммер и при этом еще не был получен ивент на глушилку, то + # отправляем на джеммер данные. + elif alarm and send_to_jammer_flag and not jammer_event: + if await send_jam_server_alarm(): + print('Отправили на сервис подавления и все дошло успешно') + else: + print('Не смогли отправить на сервис подавления') + + # Сюда почему-то не заходит и вообще функция не подает признаков жизни после запуска подваителя(( + if alarm and jammer_event: + print('ПОДАВИТЕЛЬ РАБОТАЕТ РАЗБЕГАЙСЯ ААААААААААААААААААА') + + # В случае аларма ждем секунду перед новой отправкой данных. + if alarm: + await asyncio.sleep(active_interval_to_send) @app.post('/waterfall') @@ -410,10 +431,8 @@ async def jammer_active(): global jammer_event global freqs_alarm - global sending_data_task - if sending_data_task is not None: - sending_data_task.cancel() + await stop_sending_data_task() freqs_alarm = {freq: 0 for freq in freqs} jammer_event = True @@ -437,11 +456,10 @@ async def jammer_deactive(): global jammer_event global alarm - global sending_data_task alarm = False jammer_event = False set_jammer_active(False) - sending_data_task = asyncio.create_task(sending_data()) + ensure_sending_data_task() print('ОТКЛЮАЕМ ПОДАВИТЕЛЬ ААААААААААААААААААААААААААААААААААААААААААААААААА!!!!') print('-' * 20) @@ -493,9 +511,9 @@ async def jam_server(): if data_from_jam_server['type'] == 'run': alarm_status = (data_from_jam_server['data'])['state'] print(alarm_status) - if alarm_status: + if alarm_status and not jammer_event: await jammer_active() - else: + elif not alarm_status and jammer_event: await jammer_deactive() except Exception as e: jam_server_connect = None @@ -511,14 +529,13 @@ async def startup_event(): Запускаем параллельно задачи jam_server и sending_data. """ - global sending_data_task set_jammer_active(False) asyncio.create_task(jam_server()) - sending_data_task = asyncio.create_task(sending_data()) + ensure_sending_data_task() if __name__ == '__main__': import uvicorn # update_gps_coordinates() register_module() # Регистрация модуля на сервере - uvicorn.run(app, host=lochost, port=int(locport)) \ No newline at end of file + uvicorn.run(app, host=lochost, port=int(locport))