AppleScript o qualsiasi altro script può misurare la potenza del segnale wifi di un Macbook?

3

A casa mia ho due router separati a causa di segnali poveri quando ci si trova in una posizione opposta a un'altra.

Quando lavoro sul mio Macbook da luoghi diversi, trovo fastidioso quando devo passare da un router all'altro. L'obiettivo finale è eseguire uno script più complesso sotto launchd per identificare se è presente una rete migliore e automatizzare la modifica.

Ho provato a sperimentare con networksetup -listnetworkserviceorder e networksetup -listallhardwareports ma non ho avuto fortuna.

In AppleScript o in qualsiasi altro linguaggio di scripting un modo per misurare la forza di due router simile a ciò che è visibile sul segnale wifi della barra dei menu?

    
posta ʀ2ᴅ2 04.11.2018 - 14:57
fonte

3 risposte

3

Se la tua priorità principale è far passare automaticamente il tuo Mac al prossimo punto di accesso più strong .....

Il tuo Mac può farlo già per te.

Ovviamente devi configurare entrambi i router come Automaticamente Join e in cima al tuo elenco.

Quindi dì di vagare e si collegherà automaticamente alla prossima rete di segnale più strong.

Ancora meglio se il tuo SSID e WPA sono uguali per entrambi.

Per attivare il roaming in caso fosse spento, fallo nel Terminale:

sudo defaults write /Library/Preferences/com.apple.airport.opproam enabled -bool true

Quindi configuralo per unirsi automaticamente al prossimo punto di accesso più strong

sudo /System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport prefs joinMode=Strongest

Il gioco è fatto, ora puoi muoverti e il tuo Mac ti manterrà connesso al segnale più strong.

Altro materiale di lettura qui

E Apple spiega come funziona

Se preferisci ancora lo scripting di questo processo, ecco l'elenco dei comandi Airport /System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport

    
risposta data 04.11.2018 - 15:48
fonte
3

Ecco uno script JavaScript for Automation (JXA) che cercherà le reti WiFi e recupererà i SSID e i valori RSSI:

ObjC.import('CoreWLAN');
nil = $();

(() => {

    const defaultInterface = $.CWWiFiClient.sharedWiFiClient.interface;

    if (!defaultInterface.powerOn) return false;

    const networks = defaultInterface
                    .scanForNetworksWithNameError(nil,nil)
                    .allObjects;

    const SSIDs = ObjC.deepUnwrap(networks.valueForKey('ssid'));
    const RSSIValues = ObjC.deepUnwrap(networks.valueForKey('rssiValue'));

    const WiFi = SSIDs.reduce((ξ, item, i)=>{ 
                    ξ[item] = RSSIValues[i];
                    return ξ;
               }, {})

    var WiFiByStrength = {};
    Object.keys(WiFi).sort((i,j)=>{ return WiFi[j] - WiFi[i]; })
                     .map(key=>WiFiByStrength[key] = WiFi[key]);

    return WiFiByStrength;

})();

Presenta l'output delle coppie chiave-valore ordinate per forza del segnale (RSSI) in ordine, iniziando con il segnale della rete WiFi più strong prima:

{"CK.net":-38, "NCC-1701-D":-59, "Peter's Wi-Fi Network":-67, 
"BTWifi-X":-68, "BTWifi-with-FON":-68, "BTHub4-WMJM":-68}

Qui i valori RSSI sono numeri negativi, con un numero più vicino a 0 (più positivo) indicativo di un segnale WiFi più strong.

    
risposta data 04.11.2018 - 16:41
fonte
2

Sì: sia la rete corrente che le potenziali reti possono essere programmate da unix command line / shell in modo tale da estendersi alla maggior parte dei linguaggi di automazione, incluso AppleScript. Realizzerei il tuo programma finale in python o swift, ma ecco come avviare il tuo processo con la potenza del segnale.

Ottenere l'attuale rete connessa è facile e veloce. Le voci rilevanti per il segnale e il rumore sono i valori radio grezzi sul canale negoziato, ma sarebbe meglio escludere il Transmit Rate dal momento che se si ha più veloce della rete X, non importa quale rumore / segnale dal momento della trasmissione la frequenza scende quando il segnale diminuisce o il rumore aumenta.

system_profiler SPAirPortDataType :

       AC88U_5G:
          PHY Mode: 802.11ac
          BSSID: 54:36:9b:2d:78:e2
          Channel: 149
          Country Code: CN
          Network Type: Infrastructure
          Security: WPA2 Personal
          Signal / Noise: -26 dBm / -81 dBm
          Transmit Rate: 867
          MCS Index: 9
      Other Local Wi-Fi Networks:
        AC88U:
          PHY Mode: 802.11n
          BSSID: 54:36:9b:2d:78:e1
          Channel: 7
          Country Code: CN
          Network Type: Infrastructure
          Security: WPA2 Personal
          Signal / Noise: -18 dBm / 0 dBm

Scansionare tutte le radio e i canali possibili è molto più lento (da 5 a 10 secondi invece di una frazione di secondo da eseguire) rispetto al semplice dump sopra, quindi avresti bisogno di un programma per gestirlo o di uno script molto più esperto. Vorrei iniziare con airport --scan e filtrare il tuo SSID preferito o l'indirizzo MAC noto sulle tue stazioni di base:

/System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport --scan

Dopo aver eseguito la scansione, system_profiler dovrebbe riportare più risultati poiché i risultati della scansione sembrano essere memorizzati nella cache localmente per un po 'di tempo.

I tecnici WiFi eseguono costantemente questa ottimizzazione controllando la frequenza MCS / Transmit. Basta scegliere tutte le velocità di trasmissione che si desidera sfrattare tutti i client per la propria radio principale e una volta che perdono la connessione alle alte velocità preferite, tutto il sistema operativo verrà interrotto e quindi prelevare la successiva radio disponibile. Molto più facile del lancio di script personalizzati su tutti i dispositivi che si collegano alle due radio.

Inoltre, è ovvio che se potessi far trasmettere entrambe le radio sullo stesso SSID, i tuoi prodotti Apple si limiterebbero a vagare ma forse hai una buona ragione per non avere lo stesso nome di rete e semplificare il tuo lavoro.

E per rispondere alla domanda @nohillside "come decidere quale Wi-Fi è più strong" ecco alcune linee guida.

    
risposta data 04.11.2018 - 15:18
fonte

Leggi altre domande sui tag