#!/usr/bin/env python3 """UniFi Monitor - To be run manually""" import requests import urllib3 from datetime import datetime # Disable SSL warnings urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) # Config CONTROLLER = "https://192.168.0.39:8443" USER = "corey" PASS = "is41945549" SITE = "default" print("="*50) print("UniFi Network Monitor") print("="*50) print(f"Controller: {CONTROLLER}") print(f"User: {USER}") print(f"Time: {datetime.now().strftime('%Y-%m-%d %H:%M')}") print() # Step 1: Login print("Step 1: Logging in...") login_url = f"{CONTROLLER}/api/auth/login" resp = requests.post(login_url, json={"username": USER, "password": PASS}, verify=False, timeout=10) print(f" Status: {resp.status_code}") if resp.status_code != 200: print(" ❌ Login failed!") print(f" Response: {resp.text[:200]}") exit(1) print(" ✅ Login successful") cookies = resp.cookies # Step 2: Get clients print("\nStep 2: Getting clients...") clients_url = f"{CONTROLLER}/proxy/network/api/s/{SITE}/stat/sta" resp = requests.get(clients_url, cookies=cookies, verify=False, timeout=10) clients = resp.json().get('data', []) print(f" Found: {len(clients)} clients") # Step 3: Get devices print("\nStep 3: Getting devices...") devices_url = f"{CONTROLLER}/proxy/network/api/s/{SITE}/stat/device" resp = requests.get(devices_url, cookies=cookies, verify=False, timeout=10) devices = resp.json().get('data', []) print(f" Found: {len(devices)} devices") # Generate report print("\n" + "="*50) print("REPORT") print("="*50) print(f"\nConnected Clients: {len(clients)}") wired = [c for c in clients if c.get('is_wired', False)] wireless = [c for c in clients if not c.get('is_wired', False)] print(f" - Wireless: {len(wireless)}") print(f" - Wired: {len(wired)}") print(f"\nUniFi Devices: {len(devices)}") for d in devices[:3]: name = d.get('name', d.get('mac', 'Unknown')[:17]) model = d.get('model', 'Unknown') print(f" - {name} ({model})") print("\n" + "="*50)