Fix jwt-token
This commit is contained in:
@@ -257,6 +257,53 @@ class DroneSimulator:
|
|||||||
|
|
||||||
return detection
|
return detection
|
||||||
|
|
||||||
|
def send_heartbeat(device_id):
|
||||||
|
"""Send heartbeat to keep device online"""
|
||||||
|
global DEBUG_MODE
|
||||||
|
url = f"{API_BASE_URL}/heartbeat"
|
||||||
|
headers = {
|
||||||
|
"Content-Type": "application/json"
|
||||||
|
}
|
||||||
|
|
||||||
|
heartbeat_data = {
|
||||||
|
"type": "heartbeat",
|
||||||
|
"key": f"device_{device_id}",
|
||||||
|
"device_id": device_id,
|
||||||
|
"signal_strength": random.randint(-70, -30), # Simulate signal strength
|
||||||
|
"battery_level": random.randint(70, 100), # Simulate battery level
|
||||||
|
"temperature": random.randint(20, 45), # Simulate temperature
|
||||||
|
"uptime": random.randint(3600, 86400), # Simulate uptime
|
||||||
|
"memory_usage": random.randint(30, 80), # Simulate memory usage
|
||||||
|
"firmware_version": "1.0.0"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Debug output for heartbeat
|
||||||
|
if DEBUG_MODE:
|
||||||
|
print("\n" + "-"*40)
|
||||||
|
print("💓 DEBUG: Sending heartbeat to backend")
|
||||||
|
print("-"*40)
|
||||||
|
print(f"URL: {url}")
|
||||||
|
print("Heartbeat payload:")
|
||||||
|
print(json.dumps(heartbeat_data, indent=2, sort_keys=True))
|
||||||
|
print("-"*40 + "\n")
|
||||||
|
|
||||||
|
try:
|
||||||
|
response = requests.post(url, json=heartbeat_data, headers=headers, timeout=10)
|
||||||
|
|
||||||
|
if response.status_code == 201:
|
||||||
|
if DEBUG_MODE:
|
||||||
|
print(f"💓 Device {device_id}: Heartbeat sent successfully")
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
if DEBUG_MODE:
|
||||||
|
print(f"❌ Heartbeat failed: {response.status_code} - {response.text}")
|
||||||
|
return False
|
||||||
|
|
||||||
|
except requests.exceptions.RequestException as e:
|
||||||
|
if DEBUG_MODE:
|
||||||
|
print(f"❌ Heartbeat network error: {e}")
|
||||||
|
return False
|
||||||
|
|
||||||
def send_detection(detection_data):
|
def send_detection(detection_data):
|
||||||
"""Send detection data to the API"""
|
"""Send detection data to the API"""
|
||||||
global DEBUG_MODE
|
global DEBUG_MODE
|
||||||
@@ -375,18 +422,32 @@ def simulate_orlan_detection_test():
|
|||||||
|
|
||||||
print("\n" + "=" * 70)
|
print("\n" + "=" * 70)
|
||||||
print("STARTING ORLAN APPROACH SIMULATION")
|
print("STARTING ORLAN APPROACH SIMULATION")
|
||||||
|
print("💓 Sending initial heartbeat to keep device online...")
|
||||||
print("=" * 70)
|
print("=" * 70)
|
||||||
|
|
||||||
|
# Send initial heartbeat to target device
|
||||||
|
send_heartbeat(target_device['id'])
|
||||||
|
|
||||||
# Simulation parameters
|
# Simulation parameters
|
||||||
total_steps = 50
|
total_steps = 50
|
||||||
final_distance = 0.0 # Directly overhead
|
final_distance = 0.0 # Directly overhead
|
||||||
drone_id = 3000 # Unique ID for Orlan test
|
drone_id = 3000 # Unique ID for Orlan test
|
||||||
|
last_heartbeat = time.time()
|
||||||
|
heartbeat_interval = 60 # Send heartbeat every 60 seconds
|
||||||
|
|
||||||
detection_started = False
|
detection_started = False
|
||||||
critical_alerts_started = False
|
critical_alerts_started = False
|
||||||
|
|
||||||
try:
|
try:
|
||||||
for step in range(1, total_steps + 1):
|
for step in range(1, total_steps + 1):
|
||||||
|
current_time = time.time()
|
||||||
|
|
||||||
|
# Send periodic heartbeat to keep device online
|
||||||
|
if current_time - last_heartbeat >= heartbeat_interval:
|
||||||
|
print("💓 Sending heartbeat to maintain device status...")
|
||||||
|
send_heartbeat(target_device['id'])
|
||||||
|
last_heartbeat = current_time
|
||||||
|
|
||||||
# Calculate current distance (exponential approach)
|
# Calculate current distance (exponential approach)
|
||||||
progress = step / total_steps
|
progress = step / total_steps
|
||||||
distance_km = start_distance * (1 - progress) ** 1.8 + final_distance * progress ** 1.8
|
distance_km = start_distance * (1 - progress) ** 1.8 + final_distance * progress ** 1.8
|
||||||
@@ -476,11 +537,19 @@ def simulate_realistic_scenario(duration_minutes=10):
|
|||||||
"""Simulate realistic drone scenario with persistent tracking"""
|
"""Simulate realistic drone scenario with persistent tracking"""
|
||||||
print(f"🚁 Starting realistic drone simulation for {duration_minutes} minutes...")
|
print(f"🚁 Starting realistic drone simulation for {duration_minutes} minutes...")
|
||||||
print("📊 Scenario: Multiple drones with persistent tracking, RSSI changes, movement patterns")
|
print("📊 Scenario: Multiple drones with persistent tracking, RSSI changes, movement patterns")
|
||||||
|
print("💓 Heartbeat system: Keeping devices online during test")
|
||||||
print("=" * 80)
|
print("=" * 80)
|
||||||
|
|
||||||
simulator = DroneSimulator()
|
simulator = DroneSimulator()
|
||||||
start_time = time.time()
|
start_time = time.time()
|
||||||
end_time = start_time + (duration_minutes * 60)
|
end_time = start_time + (duration_minutes * 60)
|
||||||
|
last_heartbeat = start_time
|
||||||
|
heartbeat_interval = 60 # Send heartbeat every 60 seconds (well under 300s limit)
|
||||||
|
|
||||||
|
# Send initial heartbeats to all devices
|
||||||
|
print("💓 Sending initial heartbeats to all devices...")
|
||||||
|
for device in DEVICES:
|
||||||
|
send_heartbeat(device['id'])
|
||||||
|
|
||||||
# Force create initial drone for testing
|
# Force create initial drone for testing
|
||||||
if len(DEVICES) > 0:
|
if len(DEVICES) > 0:
|
||||||
@@ -491,6 +560,7 @@ def simulate_realistic_scenario(duration_minutes=10):
|
|||||||
|
|
||||||
detection_count = 0
|
detection_count = 0
|
||||||
last_update = start_time
|
last_update = start_time
|
||||||
|
heartbeat_count = 0
|
||||||
|
|
||||||
try:
|
try:
|
||||||
while time.time() < end_time:
|
while time.time() < end_time:
|
||||||
@@ -498,6 +568,14 @@ def simulate_realistic_scenario(duration_minutes=10):
|
|||||||
time_delta = current_time - last_update
|
time_delta = current_time - last_update
|
||||||
last_update = current_time
|
last_update = current_time
|
||||||
|
|
||||||
|
# Send periodic heartbeats to keep devices online
|
||||||
|
if current_time - last_heartbeat >= heartbeat_interval:
|
||||||
|
print(f"💓 Sending heartbeats to {len(DEVICES)} devices...")
|
||||||
|
for device in DEVICES:
|
||||||
|
if send_heartbeat(device['id']):
|
||||||
|
heartbeat_count += 1
|
||||||
|
last_heartbeat = current_time
|
||||||
|
|
||||||
# Randomly spawn new drones (1-15% chance per cycle)
|
# Randomly spawn new drones (1-15% chance per cycle)
|
||||||
if random.random() < 0.15 and len(simulator.active_drones) < 8:
|
if random.random() < 0.15 and len(simulator.active_drones) < 8:
|
||||||
device = random.choice(DEVICES)
|
device = random.choice(DEVICES)
|
||||||
@@ -531,7 +609,6 @@ def simulate_realistic_scenario(duration_minutes=10):
|
|||||||
|
|
||||||
if should_detect:
|
if should_detect:
|
||||||
detection = simulator.generate_detection(drone, device, distance)
|
detection = simulator.generate_detection(drone, device, distance)
|
||||||
detection["_distance"] = f"{distance:.1f}" # For logging only
|
|
||||||
|
|
||||||
if send_detection(detection):
|
if send_detection(detection):
|
||||||
detection_count += 1
|
detection_count += 1
|
||||||
@@ -547,7 +624,7 @@ def simulate_realistic_scenario(duration_minutes=10):
|
|||||||
if int(elapsed_minutes) % 2 == 0 and elapsed_minutes > 0:
|
if int(elapsed_minutes) % 2 == 0 and elapsed_minutes > 0:
|
||||||
active_count = len(simulator.active_drones)
|
active_count = len(simulator.active_drones)
|
||||||
if active_count > 0:
|
if active_count > 0:
|
||||||
print(f"📍 Status: {active_count} active drones, {detection_count} total detections")
|
print(f"📍 Status: {active_count} active drones, {detection_count} total detections, {heartbeat_count} heartbeats sent")
|
||||||
|
|
||||||
time.sleep(3) # 3 second cycle time
|
time.sleep(3) # 3 second cycle time
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user