Come scrivo un AppleScript che si ricollega automaticamente al Wi-Fi?

3

A volte ho bisogno di scaricare file molto grandi da internet usando torrent (sto usando Transmission) e il Wi-Fi scende sempre. Ho comprato diversi router e modem e nessuno di loro funziona. Ho avuto questo problema per un po '(~ 10 anni, con Windows e Mac).

Ora ho deciso di imparare un po 'e scrivere un AppleScript che si ricollega automaticamente:

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

la parte dopo then funziona, si disconnette dal Wi-Fi e la ricollega, ma il problema è con la parte if , perché non so come rilevare quando la connessione Wi-Fi viene interrotta da il torrente. Come devo fare questo?

Inoltre, una ripetizione con un intervallo sarebbe davvero bella, qualcosa del tipo: repeat every 10 seconds .

    
posta Adam 04.12.2011 - 16:23
fonte

2 risposte

1

Ecco un semplice gestore di Appplescript che ho scritto qualche tempo fa per risolvere questo problema esatto. Esegue il ping del server OpenDNS (entrambi per la ridondanza) per verificare se la connessione Internet è attiva. Restituisce vero in caso di successo, falso in caso di fallimento. Basta copiarlo nel tuo script e chiamarlo come:

set connected to checkInternetConnection

Quindi puoi mettere tutto ciò che vuoi fare in un'istruzione if come:

if connected then
    -- Do stuff here
end if

Il gestore:

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
    
risposta data 03.01.2012 - 20:43
fonte
0

A casa, mantengo uno script perl chiamato ping-random-server. Ogni volta che sospetto un problema di rete, lo eseguo. il ping è un'opzione anche per te. Esegui un comando ping con un numero limitato di ping contro un indirizzo IP o nome host noto per rispondere al ping e agisci se il ping restituisce una perdita di pacchetti del 100%.

Per sapere come inserirlo nel tuo applescript, prova

if (do script di shell "ping -c 10 www.whitehouse.gov | grep transmited")="10 pacchetti trasmessi, 0 pacchetti ricevuti, 100.0% perdita di pacchetti"

Non ho provato questo a parte l'esecuzione dei comandi ping in Terminale e l'esame dell'output.

    
risposta data 04.12.2011 - 20:03
fonte

Leggi altre domande sui tag