#!/usr/bin/env python3 """ Device Registration Script Pre-registers drone detection devices with proper names and locations """ import requests import json import os from datetime import datetime # Configuration API_BASE_URL = os.getenv('API_BASE_URL', 'http://localhost:3002/api') USERNAME = os.getenv('TEST_USERNAME', 'admin') PASSWORD = os.getenv('TEST_PASSWORD', 'admin123') # Device locations matching drone_simulator.py DEVICE_REGISTRATIONS = [ { "id": 1941875381, "name": "SecureGuard-001", "geo_lat": 59.3293, "geo_lon": 18.0686, "location_description": "Stockholm Central Station", "category": "transportation_hubs" }, { "id": 1941875382, "name": "SecureGuard-002", "geo_lat": 59.6519, "geo_lon": 17.9186, "location_description": "Arlanda Airport", "category": "airports" }, { "id": 1941875383, "name": "SecureGuard-003", "geo_lat": 58.5342, "geo_lon": 14.5219, "location_description": "Karlsborg Fortress", "category": "military_bases" }, { "id": 1941875384, "name": "SecureGuard-004", "geo_lat": 59.3267, "geo_lon": 18.0717, "location_description": "Swedish Parliament", "category": "government" }, { "id": 1941875385, "name": "SecureGuard-005", "geo_lat": 57.6628, "geo_lon": 12.2944, "location_description": "Landvetter Airport", "category": "airports" } ] def authenticate(): """Authenticate with the API and get access token""" try: login_data = { "username": USERNAME, "password": PASSWORD } response = requests.post(f"{API_BASE_URL}/users/login", json=login_data, timeout=10) if response.status_code == 200: data = response.json() if data.get('success') and 'data' in data and 'token' in data['data']: token = data['data']['token'] print("✅ Authentication successful") return token else: print("❌ Login failed: Invalid response format") return None else: print(f"❌ Login failed: HTTP {response.status_code}") print(f" Response: {response.text}") return None except Exception as e: print(f"❌ Authentication error: {e}") return None def register_device(token, device_data): """Register a single device""" try: headers = { "Content-Type": "application/json", "Authorization": f"Bearer {token}" } # Check if device already exists response = requests.get(f"{API_BASE_URL}/devices/{device_data['id']}", headers=headers, timeout=10) if response.status_code == 200: # Device exists, update it print(f"📝 Updating existing device {device_data['id']}: {device_data['name']}") update_data = { "name": device_data["name"], "geo_lat": device_data["geo_lat"], "geo_lon": device_data["geo_lon"], "location_description": device_data["location_description"], "is_approved": True, "is_active": True } response = requests.put(f"{API_BASE_URL}/devices/{device_data['id']}", json=update_data, headers=headers, timeout=10) if response.status_code == 200: print(f"✅ Device {device_data['id']} updated successfully") return True else: print(f"❌ Failed to update device {device_data['id']}: {response.status_code}") print(f" Response: {response.text}") return False elif response.status_code == 404: # Device doesn't exist, create it print(f"➕ Creating new device {device_data['id']}: {device_data['name']}") create_data = { "id": device_data["id"], "name": device_data["name"], "geo_lat": device_data["geo_lat"], "geo_lon": device_data["geo_lon"], "location_description": device_data["location_description"], "heartbeat_interval": 300, "is_approved": True, "is_active": True } response = requests.post(f"{API_BASE_URL}/devices", json=create_data, headers=headers, timeout=10) if response.status_code == 201: print(f"✅ Device {device_data['id']} created successfully") return True else: print(f"❌ Failed to create device {device_data['id']}: {response.status_code}") print(f" Response: {response.text}") return False else: print(f"❌ Error checking device {device_data['id']}: {response.status_code}") return False except Exception as e: print(f"❌ Error registering device {device_data['id']}: {e}") return False def main(): print("🔧 DRONE DETECTION DEVICE REGISTRATION") print("=" * 50) print(f"🔗 API URL: {API_BASE_URL}") print(f"👤 Username: {USERNAME}") print(f"⏰ Registration Time: {datetime.now()}") print() # Authenticate token = authenticate() if not token: print("❌ Failed to authenticate. Exiting.") return print() print("📋 Registering devices...") print("-" * 30) success_count = 0 total_count = len(DEVICE_REGISTRATIONS) for device_data in DEVICE_REGISTRATIONS: if register_device(token, device_data): success_count += 1 print() print("📊 REGISTRATION SUMMARY") print("-" * 30) print(f"✅ Successfully registered: {success_count}/{total_count}") print(f"❌ Failed: {total_count - success_count}/{total_count}") if success_count == total_count: print() print("🎉 All devices registered successfully!") print("📍 You can now run drone_simulator.py and devices will appear on the map with proper names and locations.") else: print() print("⚠️ Some devices failed to register. Check the errors above.") if __name__ == "__main__": main()