добавил ручки на чтение мака и айпи hackrf

main
Sergey Revyakin 1 month ago
parent a04b7a64fb
commit 4381902eb3

@ -2,14 +2,20 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import os import os
import json import json
import re
import httpx import httpx
import asyncio import asyncio
import requests import requests
import websockets import websockets
import socket
import uuid
from copy import deepcopy from copy import deepcopy
from fastapi import FastAPI from fastapi import FastAPI
from common.runtime import load_root_env, validate_env, as_bool, as_float, as_int, as_str from common.runtime import load_root_env, validate_env, as_bool, as_float, as_int, as_str
from datetime import datetime, timedelta from datetime import datetime, timedelta
import logging
logging.basicConfig(level=logging.INFO)
app = FastAPI() app = FastAPI()
@ -138,39 +144,48 @@ freqs_alarm = {freq: 0 for freq in freqs}
############################################################################ ############################################################################
# MODULE RIGISTR # MODULE RIGISTR
############################################################################ ############################################################################
def _normalize_mac(value: str | None):
if not value:
return None
value = value.strip().lower().replace('-', ':')
if not re.fullmatch(r"[0-9a-f]{2}(:[0-9a-f]{2}){5}", value):
return None
return value
def get_mac_address(interface='enp5s0'): def get_mac_address(interface='enp5s0'):
""" """
Получить мак текущего устройства, на котором развернут модуль сервер. Получить MAC текущего устройства.
:param interface: Приоритет: module_mac из env -> uuid.getnode().
""" """
env_mac = _normalize_mac(os.getenv('module_mac'))
if env_mac:
return env_mac
try: try:
result = os.popen('sudo ifconfig ' + interface).read() mac_int = uuid.getnode()
mac_index = result.find('ether') # Индекс начала строки с MAC-адресом mac = ':'.join(f'{(mac_int >> shift) & 0xff:02x}' for shift in range(40, -1, -8))
if mac_index != -1: return _normalize_mac(mac)
mac_address = result[mac_index + 6:mac_index + 23]
return mac_address
else:
return None
except Exception as e: except Exception as e:
print("Ошибка при получении MAC-адреса:" + str(e)) print('Ошибка при получении MAC-адреса:' + str(e))
return None return None
def get_ip_address(interface='enp5s0'): def get_ip_address(interface='enp5s0'):
""" """
Получить айпишник текущего устройства, на котором развернут модуль сервер. Получить IP текущего устройства.
:param interface: Приоритет: module_ip из env -> исходящий IP до master_server.
""" """
env_ip = os.getenv('module_ip')
if env_ip:
return env_ip.strip()
try: try:
result = os.popen('sudo ifconfig ' + interface).read() with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as sock:
ip_index = result.find('inet') # Индекс начала строки с IP-адресом sock.connect((master_server_ip, int(master_server_port)))
if ip_index != -1: return sock.getsockname()[0]
ip_address = result[ip_index + 5:ip_index + 19]
return ip_address.strip()
else:
return None
except Exception as e: except Exception as e:
print("Ошибка при получении IP-адреса:" + str(e)) print('Ошибка при получении IP-адреса:' + str(e))
return None return None
@ -203,6 +218,10 @@ async def send_to_master(ModuleDataSingleV2, flag):
:return: :return:
""" """
mac_address = get_mac_address() mac_address = get_mac_address()
if not mac_address:
print('MAC адрес не определен, отправка на master пропущена')
return
async with httpx.AsyncClient() as client: async with httpx.AsyncClient() as client:
try: try:
if flag == 0: if flag == 0:
@ -341,7 +360,7 @@ async def process_data(data: dict):
# Агрегируем N пакетов данных от частот в один общий список, он используется в функции agregate data. # Агрегируем N пакетов данных от частот в один общий список, он используется в функции agregate data.
# Каждая позиция списка фиксируется за отдельной частотой. # Каждая позиция списка фиксируется за отдельной частотой.
freq = data_dict['freq'] freq = str(data_dict.get('freq'))
for i in range(len(freqs)): for i in range(len(freqs)):
if freq == freqs[i]: if freq == freqs[i]:
#Так делаем потому, что сервак является центром принятия решений по триггеру. #Так делаем потому, что сервак является центром принятия решений по триггеру.

Loading…
Cancel
Save