¿Puede AppleScript o cualquier otro script medir la potencia de la señal wifi de un Macbook?

3

En mi casa tengo dos enrutadores separados debido a señales deficientes cuando estoy en una ubicación opuesta a otra.

Cuando trabajo en mi Macbook desde diferentes ubicaciones, me resulta molesto cuando tengo que cambiar de enrutador. El objetivo final es ejecutar una secuencia de comandos más compleja en launchd para identificar si hay mejores redes presentes y automatizar el cambio.

He intentado experimentar con networksetup -listnetworkserviceorder y networksetup -listallhardwareports pero no he tenido suerte.

En AppleScript o en cualquier otro lenguaje de scripting, ¿una forma de medir la potencia de dos enrutadores similar a lo que se ve en la señal wifi de la barra de menús?

    
pregunta ʀ2ᴅ2 04.11.2018 - 14:57

3 respuestas

3

Si su principal prioridad es que su Mac cambie automáticamente al siguiente punto de acceso más fuerte ...

Tu Mac ya puede hacer eso por ti.

Por supuesto, debe haber configurado ambos enrutadores como Únete automáticamente y en la parte superior de su lista.

Luego dile que se desplace y se conectará automáticamente a la siguiente red de señal más fuerte.

Aún mejor es si su SSID y WPA son los mismos para ambos.

Para activar el roaming en caso de que esté apagado, haga esto en la Terminal:

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

Luego configúralo para unirse automáticamente al siguiente punto de acceso más fuerte

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

Ya ha terminado, ahora puede moverse y su Mac lo mantendrá conectado a la señal más fuerte.

Más material de lectura aquí

Y Apple lo explica cómo funciona

Si aún prefieres usar este proceso de secuencias de comandos, aquí está la lista de comandos del Aeropuerto /System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport

    
respondido por el Buscar웃 04.11.2018 - 15:48
3

Aquí hay un script de JavaScript para automatización (JXA) que buscará redes WiFi y recuperará los valores de SSID y 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 la salida de los pares clave-valor ordenados por intensidad de señal (RSSI) en orden, comenzando con la señal de red WiFi más fuerte primero:

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

Aquí, los valores RSSI son números negativos, con un número más cercano a 0 (más positivo) indicativo de una señal WiFi más fuerte.

    
respondido por el CJK 04.11.2018 - 16:41
2

Sí: tanto la red actual como las redes potenciales pueden tener secuencias de comandos desde la línea de comandos / shell de Unix, de modo que se extienden a la mayoría de los lenguajes de automatización, incluido AppleScript. Haría su programa final en Python o Swift, pero aquí le indicamos cómo comenzar su proceso con intensidad de señal.

Obtener la red conectada actual es fácil y rápido. Las entradas relevantes para la señal y el ruido son los valores de radio sin procesar en el canal negociado, pero sería mejor descartar la velocidad de transmisión, ya que siempre que la red X sea más rápida, no importa el ruido o la señal desde la transmisión. la velocidad disminuye cuando la señal cae o el ruido 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

La exploración de todas las radios y canales posibles es bastante más lenta (de 5 a 10 segundos en lugar de una fracción de segundo) que el simple volcado anterior, por lo que necesita un programa para manejar eso o un script que sea mucho más comprensión. Comenzaría con airport --scan y filtraría su SSID preferido o dirección MAC conocida en sus estaciones base:

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

Una vez que haya escaneado, system_profiler debería informar más resultados, ya que los resultados del análisis parecen estar almacenados en caché localmente por un tiempo.

Los ingenieros de WiFi realizan esta optimización todo el tiempo controlando la velocidad de transmisión / MCS. Simplemente elija todas las velocidades de transmisión que desee para desalojar a todos los clientes de su radio principal y una vez que pierdan la conexión a las altas velocidades preferidas, todos los sistemas operativos caerán y luego recogerán la siguiente radio disponible. Mucho más fácil que la implementación de scripts personalizados para todos los dispositivos que se conectan a sus dos radios.

Además, no hace falta decir que, si pudiera hacer que ambas radios se transmitieran en el mismo SSID, entonces sus productos Apple simplemente se moverían pero quizás tenga una buena razón para no tener el mismo nombre de red y simplificar su trabajo.

Y para responder a la pregunta @nohillside "cómo decidir qué Wi-Fi es más fuerte" aquí hay algunas pautas.

    
respondido por el maP1E bluE 04.11.2018 - 15:18

Lea otras preguntas en las etiquetas