Wie schreibe ich ein AppleScript, das sich automatisch wieder mit Wi-Fi verbindet?

Manchmal muss ich sehr große Dateien aus dem Internet mit Torrents herunterladen (ich verwende Transmission) und das Wi-Fi fällt immer aus. Ich habe mehrere Router und Modems gekauft und keines davon funktioniert. Ich habe dieses Problem schon seit einiger Zeit (~ 10 Jahre, sowohl mit Windows als auch mit Mac).

Jetzt habe ich beschlossen, ein bisschen zu lernen und ein AppleScript zu schreiben, das sich automatisch wieder verbindet:

repeat
if (do shell script "curl --connect-timeout 1 <WIFI_IP>") = "curl: (7) couldn't connect to host" then
    do shell script "networksetup -setairportpower AirPort off"
    do shell script "networksetup -setairportpower AirPort on"
    do shell script "networksetup -setairportnetwork en1 <ROUTER_NAME> <ROUTER_PASS>"
end if
end repeat

Das Teil nach thender Arbeit trennt es von Wi-Fi und verbindet es wieder, aber das Problem liegt bei dem ifTeil, weil ich nicht weiß, wie ich erkennen kann, wann die Wi-Fi-Verbindung durch den Torrent unterbrochen wird. Wie soll ich das machen?

Außerdem wäre eine Wiederholung mit Intervall wirklich schön, so etwas wie: repeat every 10 seconds.

Ich würde eine Verzögerung wie delay 300kurz vor hinzufügen repeat end, um zu verhindern, dass das Skript ständig nach einer Verbindung sucht. 300 Sekunden würde es alle 5 Minuten überprüfen lassen.

Antworten (2)

Hier ist ein einfacher Applescript-Handler, den ich vor einiger Zeit geschrieben habe, um genau dieses Problem zu lösen. Es pingt den OpenDNS-Server (beide aus Redundanzgründen) an, um zu prüfen, ob die Internetverbindung besteht. Es gibt true bei Erfolg zurück, false bei Misserfolg. Kopieren Sie es einfach in Ihr Skript und nennen Sie es wie folgt:

set connected to checkInternetConnection

Dann können Sie alles, was Sie tun möchten, in eine if-Anweisung schreiben:

if connected then
    -- Do stuff here
end if

Der Handler:

on checkInternetConnection()
    -- Ping the primary OpenDNS server.
    try
        set pingResult1 to do shell script "ping -c 1 208.67.222.222"
    on error
        set pingResult1 to ""
    end try

    -- Check the results returned and return true or false.
    set p to number of paragraphs in pingResult1
    if p < 5 then
        -- Ping another Open DNS server for redundancy.
        try
            set pingResult2 to do shell script "ping -c 1 208.67.220.2220"
        on error
            set pingResult2 to ""
        end try

        set p to number of paragraphs in pingResult2
        if p < 5 then return false
    else
        return true
    end if
end checkInternetConnection
gibt Fehler zurückCan’t make «handler checkInternetConnection» into type boolean

Zu Hause betreue ich ein Perl-Skript namens ping-random-server. Immer wenn ich ein Netzwerkproblem vermute, führe ich es aus. Ping ist auch eine Option für Sie. Führen Sie einen Ping-Befehl mit einer begrenzten Anzahl von Pings gegen eine IP-Adresse oder einen Hostnamen aus, von dem bekannt ist, dass er auf Ping reagiert, und ergreifen Sie Maßnahmen, wenn der Ping 100 % Paketverlust zurückgibt.

Versuchen Sie, dies in Ihr Applescript einzufügen

if (do Shell script "ping -c 10 www.whitehouse.gov | grep transmitted") = "10 Pakete übertragen, 0 Pakete empfangen, 100,0 % Paketverlust"

Ich habe dies nicht anders getestet, als die Ping-Befehle im Terminal auszuführen und die Ausgabe zu untersuchen.