Чи може AppleScript або будь-який інший сценарій вимірювати потужність сигналу Wi-Fi у Macbook?


3

У мене вдома два окремі маршрутизатори через погані сигнали, коли вони знаходяться в одному місці проти іншого.

Коли я працюю над своїм Macbook з різних місць, мені здається, що це дратує, коли мені доводиться перемикатися між маршрутизаторами. Кінцева мета - запустити складніший сценарій, launchdщоб визначити, чи є кращі мережі та автоматизувати зміни.

Я пробував експериментувати з networksetup -listnetworkserviceorderі , networksetup -listallhardwareportsале не мали ніякої удачі.

У AppleScript або будь-якій іншій мові сценаріїв спосіб виміряти потужність двох маршрутизаторів, аналогічний тому, що видно на wifi-сигналі в рядку меню?

Відповіді:


3

Якщо ваш головний пріоритет - автоматичний перехід вашого Mac до наступної найсильнішої точки доступу .....

Ваш Mac вже може це зробити для вас.

Звичайно, ви повинні встановити обидва маршрутизатори як Автоматичне приєднання та вгорі списку.

Тоді скажіть йому розгулятися, і він автоматично підключиться до наступної сильнішої сигнальної мережі.

Ще краще, якщо ваш SSID і WPA однакові для обох.

Щоб увімкнути роумінг у випадку, якщо його було вимкнено, зробіть це в Терміналі:

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

Потім встановіть його для автоматичного приєднання наступної найсильнішої точки доступу

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

Ви закінчили, тепер ви можете пересуватися, і ваш Mac буде тримати вас підключеним до найсильнішого сигналу.

Більше матеріалів для читання тут

І Apple пояснює це, як це працює

Якщо ви все ще віддаєте перевагу сценарію цього процесу, ось список команд аеропорту /System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport


У статті, яку ви пов’язали ("Більше читання матеріалів тут"), йдеться, що вміст com.apple.airport.opproam ОС ігнорується з часів Yosemite. Тому я не думаю, що ваша команда працюватиме, якщо ви не запустите стару ОС.
Wowfunhappy

@Wowfunhappy, щойно перевірив, чи він все ще є і активний на Високій Сьєррі. "/ Бібліотека / Налаштування / com.apple.airport.opproam.plist`
Ruskes

1
Він є, але не використовується. "Handoff" (що змушує клієнтів від однієї AP до іншої) обробляється контролером мережі WiFi. Щоб це працювало, має бути мінімум дельти -12 дБМ між двома сигналами
Аллан

@ Пороговий триггер тривоги Поріг тригера - це мінімальний рівень сигналу, який вимагає клієнт, щоб підтримувати поточне з'єднання. Клієнти macOS контролюють та підтримують поточне підключення BSSID, поки RSSI не переступить поріг -75 дБм. Після того, як RSSI переступить цей поріг, macOS сканує для BSSID-кандидатів роумінг для поточної ESSID.
Рускес

3

Ось сценарій JavaScript для автоматизації (JXA), який скануватиме мережі WiFi та отримує значення SSID та 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;

})();

Тут представлено вихід пар ключових значень, відсортованих за силою сигналу (RSSI) в порядку, починаючи спочатку з найсильнішого сигналу мережі WiFi:

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

Тут значення RSSI - це від’ємні числа, число яких ближче до 0 (більше позитивних), що вказує на більш сильний сигнал Wi-Fi.


2

Так - і поточна мережа, і потенційні мережі можуть бути скриптовані з командного рядка / оболонки unix, так що вони поширюються на більшість мов автоматизації - включаючи AppleScript. Я б склав вашу остаточну програму в python або swift, але ось як розпочати процес із силою сигналу.

Отримання поточної підключеної мережі легко та швидко. Відповідні записи для сигналу та шуму - це необроблені значення радіо на каналі, який узгоджується, але було б краще відключити швидкість передачі, оскільки поки ви швидше, ніж мережа X, це не має особливого значення, який шум / сигнал після передачі швидкість падає, коли сигнал падає або шум піднімається.

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

Сканування всіх можливих радіостанцій та каналів відбувається досить повільніше (5–10 секунд замість частки секунди для запуску), ніж простий дамп вгорі, тому вам знадобиться програма для обробки цього або сценарій, який набагато більш кмітливий. Я б почав airport --scanі фільтрував бажаний SSID або відому MAC-адресу на базових станціях:

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

Після сканування, ви system_profilerповинні повідомити про більше результатів, оскільки результати сканування, здається, кешуються локально протягом певного часу.

Інженери WiFi проводять цю оптимізацію постійно, контролюючи швидкість MCS / передачі. Просто виберіть усі швидкості передачі, якими ви бажаєте виселити всіх клієнтів для свого основного радіо, і як тільки вони втратять зв’язок на бажаних високих швидкостях, усі ОС впадуть, а потім підберіть наступне радіо, яке є в наявності. Набагато простіше, ніж розгортати спеціальні сценарії на всі пристрої, які підключаються до двох ваших радіо.

Крім того, само собою зрозуміло - якщо ви могли б зробити обидва радіопередачі на одному SSID - тоді ваші продукти Apple просто блукали, але, можливо, у вас є вагомі причини не мати однакового мережевого імені та спростити свою роботу.

А щоб відповісти на запитання @nohillside "як вирішити, який Wi-Fi сильніший", ось декілька вказівок.

введіть тут опис зображення


Чи можете ви додати трохи деталей про те, як читати вихід, особливо про те, як вирішити, який Wi-Fi сильніший?
nohillside

@nohillside Добре, я не дуже хороший в сценарії, але спробую простий.
maP1E bluE

1
Я отримав вас @ maP1EbluE - Це дуже відома проблема дизайну для інженерів WiFi. RSSI і сигнал - це погані автоматизовані речі, але якщо ОП хоче сигнал - він є. Справжні два пункти, на які слід звернути увагу, - це індекс MCS та швидкість передачі, і ваша відповідь ідеально підходить для того, щоб визначити, коли ОП хоче розпочати процес падіння. Спроба написати всю програму / сценарій занадто широка для одного питання, тому ваша відповідь повинна бути ідеальною для того, як розпочати роботу. +1
bmike

Я насправді не запитував сценарій, а лише пояснення, яке значення має важливе значення.
nohillside

1
@nohillside Ви не запитували сценарій, але у ОП це було після головного питання. Я відредагував питання, щоб зробити це не надто широким. Тут є гарна інформація - сподіваємось, я тут не додав занадто багато слів - будь-хто, будь ласка, сформулював мій текст, якщо коротка відповідь airport --getinfoі airport --scanвсе, що тут потрібно, та пояснення, щоб переглянути швидкість передачі, коли ви хочете замість цього здійснити заставку в мережі. значень RSSI / SNR / сигнал / шум децибел.
bmike
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.