Проблемы с автоматическим выбором SIM-карты

Добрый день!
У нас при старте контоллера автоматически выбирается SIM на которой лучше прием. В итоге получаем конфиг такого вида:

{
    "connectivity_check_url": "http://network-test.debian.org/nm",
    "tiers": {
        "high": [
            "wb-eth0",
            "ServiceAP",
            "LegacyWiFi"
        ],
        "low": [
            "wb-gsm-sim1"
        ],
        "medium": [
            "wb-gsm-sim2"
        ]
    },
    "debug": false
}

Всё работает хорошо, пока на приоритетной симке не заканчивается трафик.
Это приводит к частым попыткам контроллера работать на “wb-gsm-sim2”, сети нет - возвращается на “wb-gsm-sim1”. И так бесконечно.

Причем иногда контроллер без сети висит довольно долго, не возвращаясь на действительно работающую сим карту. Далее уже срабатывает мой скрипт, перезагружая контроллер, в панике, что нет интернета.
У меня сохранен журнал целиком, могу скинуть разработчикам. Прикрепляю диагностический архив.

приложен диагностический архив, доступен только сотрудникам поддержки
(383,5 КБ)

  1. Планируются ли доработки в wb-connection-manager? Можно было бы реже опрашивать неработающую сим “накапливая ошибки”.
  2. Почему контроллер не возвращается длительное время на работающую сим карту?
  3. Проверка по http://network-test.debian.org/nm не самая надежная, мы сталкивались с блокировкой стандартного порта MQTT 8883 со стороны одного из мобильных операторов в РФ, было бы очень полезно указывать свой скрипт для проверки наличия интернета, как это сделано, например, в monit.

Еще один вопрос, уже не связанный с работой сим карт, но вытекающий из частого переключения.
Я заметил повышенный расход трафика при частой смене канала связи. Не сталкивались ли с таким? Есть ли способы избежать перерасхода?

Добрый день!

  1. Задачи такой не стоит, но можем поставить! Вы пробовали менять Минимальное время активности SIM-слота или Wi-Fi соединения в секундах (Deny SIM/Wi-Fi switching period in seconds) в настройках приоритетов соединений?
  2. Насколько длительное время не возвращается к работающей сим-карте? Судя по логам Network Manager перезапускается и начинает снова с первой симки стартовать.
  3. В Network Manager можно использовать пользовательский URL для проверки доступности интернета, скрипты не поддерживаются. Я бы, если бы мне надо было написать свой скрипт для проверки, поднимал бы свой маленький веб-сервер локально, который бы отвечал “NetworkManager is online” (или что-то другое) в зависимости от проверок сетевой доступности моим скриптом под капотом. Но не стал бы рекомендовать такое решение для production-среды.
  4. Нет, такого не наблюдал, но не может это быть связано с тарификацией соединий у провайдера? (Что-то типа минимальный квант учета трафика за соединение – Х мегабайт, и неважно, сколько передано, хоть байт один.) Посмотрите в детализации, если есть возможность

Еще есть контроллер, который не стал переключать сим карту на запасную, после того как закончился трафик.

приложен диагностический архив, доступен только сотрудникам поддержки
(409,0 КБ)

Добрый день!

Контроллер перезапускался по моему вочдогу, получается изредка до более получаса небыло сети. А в среднем судя по графику по 10 минут висит.

Нет, не видел в настройках, думаю можно попробовать. Но беспокоит сразу и частое переключение и при этом зависание на не работающей.

Спасибо за идею, подумаем.

А в какой момент не стал переключать? Я вижу в логах из диагностического архива, что NM постоянно сим-карты перебирает.

Я попрошу вас прислать в следующий раз не диагностический архив даже, а файл с выводом journalctl -u NetworkManager, чтоб туде попадал проблемный интервал времени, так будет проще разобраться.

Я пока не смотрел по нему логи, но он не был в сети с 27 июля 19:15 по 28 июля 17:15.
Журнал щас пришлю, могу целиком, не проблема.

ntwrk_log.txt.zip (651,2 КБ)

Может быть mosquitto не успевает переподключиться через запасную сим?
У меня в настройках моста выставлено:

start_type automatic
restart_timeout 10 60

В ллоге мало данных, только за два часа и не вижу, чтоб Network Manager долго зависал на неработающей симке: надо, видимо, поймать момент.

Хотел спросить, как вы отслеживаете переключения между симками, как вообще все выглядит на вашей стороне: нет связи, нет данных, что-то еще, какая симка активна? Можно чуть подробнее? Я в логах смотрю за поведением модема, переключениями и подключениями, но, возможно, проблема в другом?
Как работает ваш вотчдог-скрипт?

Доброе утро!

Проблему доступности IQ704000 нашел, не актуально

Вроде вот в этом логе данные с Jul 27 14:30:43 по Jul 28 14:52:40 (под конец продлили тариф и данные пошли):

Постараюсь найти интервал.

Пока могу поделиться скриптом для визуализации:
check_sims.py (17,4 КБ)

Вызов простой ./check_sims.py journal.txt (передать путь до файла с журналом целиком).
Сейчас прогнал скрипт для IQ704000 контроллера, получил странную картину, на второй симке почему-то всегда статус denied. Симка активна, будем отдельно сами разбираться. Это Билайн, там вроде есть прием Билайна.


Соответственно, зеленая полоска непрерывная (стабильно работает на первой сим) появилась после пробленя тарифа. Выглядит всё корректно.

Предлагаю вернуться к проблеме с первым контроллером.
Получается, можно увеличить интервал проверки другой сим, когда текущая работает, верно? Правильно понимаю, что если сим не работает, то этот параметр будет проигнорирован - сим переключиться на другую в поисках интернета?

Используем mmcli, затем конвертируем в JSON и выцепляем нужные данные. Не особо удобно, но дает всё необходимое.

Сетью дополнительно никак не управляем, только мониторинг. Всё лежит на wb-connection-manager, только в процессе запуска скрипт включает по очереди обе сим, чтобы замерить уровень сигнала и выставить приоритетную в wb-connection-manager.conf. Получаем конфиг такого вида:

{
    "connectivity_check_url": "http://network-test.debian.org/nm",
    "tiers": {
        "high": [
            "wb-eth0",
            "ServiceAP",
            "LegacyWiFi"
        ],
        "low": [
            "wb-gsm-sim1"
        ],
        "medium": [
            "wb-gsm-sim2"
        ]
    },
    "debug": false
}

Проверяем наличие интернета по сообщениям в MQTT со стороны сервера. Если данных нет 30 минут - перезагружаем контроллер. Ранее, на debian stretch без wb-connection-manager, переключали симки.

Обсудил сегодня работу переключения с коллегами, проведу эксперимент, завтра напишу алгоритм работы. Пробовали ли вы менять sticky_connection_period_s ?

Большое спасибо!

Пока нет, я убрал приоретизацию на проблемных контроллерах (где закончился трафик), сейчас работает стабильно.

Я думаю, что sticky_connection_period_s мне нужно будет увеличить, но объективно не могу понять какую задержку ставить.

Так же я решил сменить алгоритм приоретизации. Буду выделять приоритетную симку, только в случае, если на одной действительно плохой сигнал. В других случаях кажется нет смысла ставить приоритет.

Да, достаточно много различных факторов и процессов, которые определяют выбор сим-карты. То, что у нас все-таки не два модема, а один, который аппаратно переключает симки, добавляет дополнительные перерывы в связи, когда приоритеты включены.
В README репозитория wb-nm-helper более подробно описан процесс переключения и приоритезации соединений.

Добрый вечер!
Спасибо за разъяснения.
Еще несколько вопросов.

Вижу из README:

Если текущее активное соединение не является наиболее приоритетным, сервис с периодом в 60 секунд будет пытаться активировать более приоритетные соединения.

Получается, если не задан sticky_connection_period_s, дефолтный 60 секунд? Получается, модем будет слишком часто пытаться вернуться на приоритетную сим, mosquitto просто не успеет понять, что произошел разрыв соединения. В итоге контроллер не доступен.

Там все немного хитрее, 60 с это таймаут для определения отвалившегося соединения, а дефолтный sticky (минимальное время активности sim-слота) – для переключения между симками – 15 минут.
В той же ридми на cкриншоте web-интерфейса (старая версия) есть более подробное описание:
“GSM-модем может работать только с одной SIM-картой. Для проверки доступности интернета текущая SIM-карта отключается и подключается проверяемая.
Если соединение через модем с одной из SIM-карт успешно установлено, не переключать SIM-карту для проверки в течение указанного периода. Аналогично, все Wi-Fi соединения также работают через одно беспроводное устройство и для проверки одного соединения требуется отключить другое”
Этот период 15 минут, 900 секунд то есть.
Да, там если в ваших логах посмотреть, много было соединений длительностью меньше минуты.

Получил лог с другого контроллера. Вчера закончился трафик на 2м слоте. 1й слот ловит плохо.

Но контроллер не вышел на связь с 1го слота и при этом, когда пополнили 2й слот, появился на связи только через час. Пополнили примерно в 9:30.

Смог выкачать логи:
all.txt.zip (4,0 МБ)

Переключение сим выполняется раз в минуту, судя по графику.


Может 60 секунд просто не хватает для полноценной регистрации SIM?

Получается:
Если менее приоритетная сим активна и прошла тесты, проверка связи на основной сим должно быть через 15 минут (по умолчанию).
Если ни одна сим не проходит тест, они будут щелкаться раз в 60 секунд.
Верно?