Demin Youtubeye video yüklemem gerekti. Bilgisayar başından ayrılmam gerekti.
Bu kod sayesinde Ethernet Ağ Bağlantısında dosya upload hızı 3mbps altına düşerse,
Sistem 10 kere 5 saniye arayla kontrol ediyor. Her seferinde durum aynı olursa,
10. çalıştırma sonrası kod bilgisayarı kapatıyor.

# Bu ktüphaneyi yükleyin önce
#pip install --upgrade psutil

import psutil
import time
import os
from datetime import datetime

# ================== AYARLAR ==================

# Görev yöneticisinde görünen ağ adaptörü adı
# Örnek: "Ethernet", "Wi-Fi"
ADAPTER_NAME = "Ethernet"

# Altına düşerse takip başlayacak upload hızı
LIMIT_MBPS = 3.0

# Kaç saniyede bir kontrol edilecek
CHECK_INTERVAL = 5

# Kaç kez üst üste düşük kalırsa kapatılacak
MAX_LOW_CHECKS = 10

# Test için True yaparsan bilgisayarı kapatmaz, sadece yazar
DRY_RUN = False

# =============================================


def get_upload_bytes(adapter_name):
    counters = psutil.net_io_counters(pernic=True)

    if adapter_name not in counters:
        print("Ağ adaptörü bulunamadı!")
        print("Mevcut adaptörler:")
        for name in counters.keys():
            print("-", name)
        raise SystemExit

    return counters[adapter_name].bytes_sent


def calculate_upload_mbps(adapter_name, interval=1):
    first = get_upload_bytes(adapter_name)
    time.sleep(interval)
    second = get_upload_bytes(adapter_name)

    bytes_diff = second - first

    # byte -> bit -> megabit
    mbps = (bytes_diff * 8) / interval / 1_000_000

    return mbps


def shutdown_pc():
    print("Bilgisayar kapatılıyor...")

    if DRY_RUN:
        print("DRY_RUN açık olduğu için kapatma komutu çalıştırılmadı.")
    else:
        os.system("shutdown /s /t 0")


def main():
    print("Upload hız takip botu başladı.")
    print(f"Adaptör: {ADAPTER_NAME}")
    print(f"Limit: {LIMIT_MBPS} Mbps")
    print("-" * 40)

    low_count = 0

    while True:
        upload_speed = calculate_upload_mbps(ADAPTER_NAME, interval=1)

        now = datetime.now().strftime("%H:%M:%S")
        print(f"[{now}] Upload hızı: {upload_speed:.2f} Mbps")

        if upload_speed < LIMIT_MBPS:
            low_count += 1
            print(f"Düşük hız tespit edildi: {low_count}/{MAX_LOW_CHECKS}")

            if low_count >= MAX_LOW_CHECKS:
                print(
                    f"Upload hızı {MAX_LOW_CHECKS} kontrol boyunca "
                    f"{LIMIT_MBPS} Mbps altında kaldı."
                )
                shutdown_pc()
                break

            time.sleep(CHECK_INTERVAL)

        else:
            if low_count > 0:
                print("Upload hızı tekrar normale döndü. Sayaç sıfırlandı.")

            low_count = 0
            time.sleep(CHECK_INTERVAL)


if __name__ == "__main__":
    main()