commit 293d883a50ce27f495fda5b3cb3396fc3ec2553c Author: ghaymah_dev Date: Mon Nov 10 06:00:21 2025 +0000 Add ip_reporter.py diff --git a/ip_reporter.py b/ip_reporter.py new file mode 100644 index 0000000..1ebff15 --- /dev/null +++ b/ip_reporter.py @@ -0,0 +1,117 @@ +# بسم الله الرحمن الرحيم + + +#!/usr/bin/env python3 +""" +IP Reporter for Jetson Nano +Sends IP address to API on startup +""" + +import socket +import requests +import time +import logging +from subprocess import check_output + +# Configuration +API_URL = "https://echo-ip-e46d95cfc953.hosted.ghaymah.systems" # Replace with your API endpoint +DEVICE_ID = "jetson-nano-001" # Change to unique ID for your device +RETRY_DELAY = 30 # seconds between retries +MAX_RETRIES = 100 + +# Setup logging +logging.basicConfig( + level=logging.INFO, + format='%(asctime)s - %(levelname)s - %(message)s', + handlers=[ + logging.FileHandler('/var/log/ip_reporter.log'), + logging.StreamHandler() + ] +) + +def get_ip_address(): + """Get the IP address of the device""" + try: + # Get IP using hostname command + ip_output = check_output(['hostname', '-I']).decode('utf-8').strip() + ips = ip_output.split() + + if ips: + # Return the first IP address (usually the main one) + return ip_output + else: + return None + except Exception as e: + logging.error(f"Error getting IP address: {e}") + return None + +def is_internet_available(): + """Check if internet connection is available""" + try: + # Try to connect to a reliable server + socket.create_connection(("8.8.8.8", 53), timeout=5) + return True + except OSError: + return False + +def send_to_api(ip_address): + """Send IP address to the API""" + payload = { + 'device_id': DEVICE_ID, + 'ip_address': ip_address, + 'timestamp': time.time() + } + + try: + response = requests.post(API_URL, json=payload, timeout=10) + if response.status_code == 200: + logging.info(f"Successfully sent IP {ip_address} to API") + return True + else: + logging.error(f"API returned status code: {response.status_code}") + return False + except requests.exceptions.RequestException as e: + logging.error(f"Error sending to API: {e}") + return False + +def main(): + """Main function""" + logging.info("IP Reporter started") + + retries = 0 + ip_sent = False + + while not ip_sent and retries < MAX_RETRIES: + # Wait for internet connection + if not is_internet_available(): + logging.info("Internet not available, waiting...") + time.sleep(RETRY_DELAY) + retries += 1 + continue + + # Get IP address + ip_address = get_ip_address() + + if ip_address: + logging.info(f"Found IP address: {ip_address}") + + # Send to API + if send_to_api(ip_address): + ip_sent = True + logging.info("IP address successfully reported to API") + break + else: + logging.warning("Failed to send IP to API, retrying...") + else: + logging.warning("Could not get IP address, retrying...") + + time.sleep(RETRY_DELAY) + retries += 1 + + if not ip_sent: + logging.error("Failed to send IP address after maximum retries") + + logging.info("IP Reporter finished") + +if __name__ == "__main__": + main() \ No newline at end of file