...
Вместе с тем зачастую существует необходимость выполнить проверку подключения, и качества связи, для всех (или большинства) найденных сенсором точке точек доступа. Фактически, вам необходимо в цикле выполнить цепочку проверок типа WifiConnect/WifiAuth/WifiQuality для каждой из найденных BSSID с учетом заданных критериев. При этом число таких цепочек заранее не определено, так как зависит от динамического критерия - числа BSSID. например, для двухдиапазонных точек было бы желательно проверять работу точки подключением к каждому из её радио-модулей.
Напомним, что в настройках задачи указывается список подряд выполняющихся инструкций, причем цепочка WifiConnect/WifiAuth/WifiQuality (подключение, портальная авторизация, проверка качества) должна встречаться в нем строго один раз. Сделать несколько последовательных цепочек с разными настройками можно, но толком это работать не будет (вы заранее не знаете число BSSID).
Решение задачи проверки нескольких точек подряд состоит в последовательном применении следующих шагов:
- Создать инструкцию типа Service, в которой надо разместить код вызова библиотечной функции-настройщика цикла проверок, плюс необходимые пороговые критерии:
- В скрипте инструкции отредактировать, по желанию, настроечные параметры:
import subprocess
import sys
sys.path.append(r'/root/qow')
from wnam_helpers import config_loop# максимальное число точек доступа, которые проверять
max_bssids=7
# минимальный кровеньуровень сигнала, чтобы точку включить в список проверяемых
min_rssi=-100
# делать подключения и проверки в 2.4 и 5 ГГц, либо только на заданном интерфейсе
both_bands=True
# здесь можно явно указать BSSID тестируемых AP, через запятую или пробел
bssids=''config = config_loop(max_bssids, min_rssi, both_bands, bssids)
print(config) - Добавить эту инструкцию в вашу Задачу, после инструкции сканирования типа WifiScan и инструкции подключения типа WifiConnect:
- Применить задачу к вашему сенсору
Задача с такой структурыструктурой, запускаемая на сенсоре, производит следующие действия (их можно посмотреть в лог-файле /var/log/wnam_qos.log или через alias-команды чтения логов tn или tf):
1. Задача типа WifiScan находит сети (в том числе и ваши, с заданным SSID):
2021-04-13 10:45:18,171 wnam_job >> INFO: Name: 1_Сканирование сетей_моисети
2021-04-13 10:45:18,173 wnam_job >> INFO: Sequence in Task: 3
При этом в файл /tmp/mynetworks будет записан список BSSID, с номером диапазона (0 или 1) и уровнем сигнала:
0 50:87:89:E3:5B:D1 -43
0 DC:AE:EB:1A:83:B8 -44
0 B8:69:F4:AF:B1:E9 -66
1 50:87:89:E3:5B:DE -35
1 DC:AE:EB:1A:83:BC -34
1 B8:69:F4:AF:B1:E8 -74
2. Задача типа Service по настройке цикла проведет фильтрацию и сортировку этого списка:
...
3. В результате сканирования в этом примере найдены шесть подходящих BSSID (три точки доступа вещают одну "нашу" сеть на каждом из диапазонов 2.4 и 5 ГГЦГГц).
4. Функция config_loop проводит динамическую перестройку инструкций прямо в текущей выполняющейся задаче таким образом, что две инструкции типа WifiConnect/WifiQuality превращаются в шесть пар таких же инструкций, причем в качестве входных параметров им передаются конкретные параметры bssid и interface:
...
{
"id": "606df62d9aea79561e616437",
"measurements": {
"config": "6",
"success": true
},
"name": "1X_\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0446\u0438\u043a\u043b\u0430",
"start_time": 1618308035,
"stop_time": 1618308041,
"success": true
},
...
Также результаты измерения по каждой из инструкций видны в popup-окне в "отчетах", с указанием порядкового номера [в квадратных скобках]: