Вопросы приёма СМС. На пути к СМС-боту

Дорогие разработчики и пользователи WB!

В условиях отключений мобильного интернета и широкого распространения белых списков, я пришел к необходимости иметь резервный канал управления через СМС, который (пока) не отключают. Изучил опыт на портале, например, из свежего:

Навайбкодил сервис, который слушает gdbus и отправляет в mqtt, используя gdbus monitor --system --dest org.freedesktop.ModemManager1 (но можно и через периодический опрос mmcli -m wbc --messaging-list-sms, тоже работает). Бота реализовал в wb-rules и, казалось, счастье наступило, но нет.

Имею на руках три контроллера 6-й, 7-й и 8-й серий (6-й скоропостижно скончался, но он успел принять участие в тестировании). Все ведут себя примерно одинаково: через какое-то время (всегда по-разному, зависимости не нашел) модем как-будто засыпает и перестает принимать СМС. В логах при этом никаких следов нет. Если через модем выходим в интернет, то СМС перестают приниматься быстрее, уже через несколько минут после старта. Если сделать systemctl restart ModemManager, то отправленные ранее СМС пролезают через gdbus и появляются в списке mmcli. Но не всегда и не все. Если СМС было отправлено давно, за несколько часов до рестарта, то оно может и не появиться.

Логи пока не привожу (кажется, от них нет толка, я в них смотрел много дней как в матрицу, пропускал через естественный и искусственный интеллект), а ищу единомышленников, которые сталкивались с проблемой и которые заинтересованы в таком СМС боте, чтобы совместно её решить.

Напишите, у кого так же, кому тоже нужен бот, а кто уже решил проблему. Даже если вы по каким-то причинам не готовы делиться решением, сам факт наличия решения уже будет хорошим результатом.

Решения найти не удалось - СМС после простоя просто теряются, перезагрузка модема не помогает, перезагрузка модемменеджера - тоже. А после перезагрузки контроллера часть СМС доходит, но последние перед перезагрузкой СМС могут и не сохраниться. Так что СМС-канал, к сожалению, видится нерабочим (поэтому и забросил свой проект на расте). Остаются звонки с DTMF - но это пока не пробовал.

Подозреваю кривую прошивку модема, на которую вряд ли будут обновления.

Доброго дня! Взяли в работу, обсудим с коллегами

Напишите, пожалуйста, эта проблема на одном и том же модеме 4G или на разных?

Вообще нужно разобраться, кажется, что проблема не только у вас. Коллеги уже разбирают подобную проблему по одному из обращений, и я всё таки попросил бы отправить серийные номера модемов и архивы с указанных вами контроллеров, где наблюдается и/или фиксируется проблема с СМС

На разных модемах, на разных платформах - WB6, 7, 8.
Высылаю архив с WB7, модем на нем :

  --------------------------------
  Hardware |         manufacturer: INCORPORATED
           |                model: A7602E-H
           |    firmware revision: A50C4B11A7600M7
           |            supported: gsm-umts
           |              current: gsm-umts
           |         equipment id: 860803061024820
  --------------------------------

модем на другом контроллере WB8:

--------------------------------
  Hardware |         manufacturer: INCORPORATED
           |                model: A7602E-H
           |    firmware revision: A50C4B08A7600M7
           |            supported: gsm-umts
           |              current: gsm-umts
           |         equipment id: 860803066387057
  --------------------------------

прошивки разные, а поведение одинаковое.

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

Добрый день, Дмитрий.

Посмотрели архив с WB7. Журнал ModemManager/NetworkManager без явных ошибок как вы и говорили, но модем периодически отваливается от USB и переопределяется - видно и в ядре (option1 ttyUSB0 … now disconnected), и в самом ModemManager (port … released by device 'wbc', port ttyUSB1 timed out 2 consecutive times); в вашем архиве это происходило 26–28 июня несколько раз. Картина совпадает с нашими errata по этому модему:

Главное сейчас - ревизия вашего модуля: пришлите, пожалуйста, фото платы модема с двух сторон, а также тип антенны (штатная/выносная) и уровень сигнала.

И проверьте ту же строку на WB6 и WB8:

dmesg -T | grep -Ei "now disconnected from ttyUSB|device disconnected" | tail -20

Вывод можете отправить сюда.

Также судя по архиву, контроллер на testing - для единственного канала связи это лучше пересмотреть.

26-28 я много экспериментировал, а такие строчки появляются, например, если сделать mmcli -m wbc -r. На этом контроллере пока не замечал, чтобы модем отваливался сам. C WB6 у меня была такая проблема, знаю как это происходит.

Testing использую везде, проблем никогда не было, а если и были, то решались. Вот вчера на WB7 накатил trixie и, кстати, пока заметил следующее - curl стал ресолвить по умолчанию в ipv6 (лечится добавлением параметра -4), а также сломался “Системный журнал” в webUI - показывает только последние несколько десятков строчек и невозможно прокрутить историю назад.

В любом случае, все это никак не влияет на приём СМС, не зависит ни от прошивок, ни от модемов, ни от версий ПО.

Сосредоточимся на приёме. Раз модем при этом на связи и отправка работает, теряется, похоже, не сам приём, а уведомление о вхэодящем. СМС оседает в памяти модема, а ModemManager о ней не узнаёт. Видно это только в отладочном логе. Ключевой момент в том, что нужно снять его, не перезапуская ModemManager (иначе он перечитает память и залипание не увидим). В момент, когда приём уже встал:

mmcli --set-logging=DEBUG
mmcli -m any --messaging-status
journalctl -u ModemManager -f

Дальше отправте себе тестовую СМС и посмотрите, приходит ли от модема +CMTI/+CMT и не переполнено ли хранилище (--messaging-status). Пришлите этот кусок лога, а с ним уже можно заводить обращение разработчикам предметно. Потом еще нужно вернуть: mmcli --set-logging=INFO.

Жду от вас обратной связи со всеми данными.

Провел эксперимент.

Логи с WB7 testing/trixie. Отправил два сообщения, ни одно не пришло
mmWB7.log (43,1 КБ)

На WB7 поднят интернет через LTE, работает.

Логи с WB8 testing/bullseye. Отправил два сообщения
mmWB8.log (11,5 КБ)
Пока снимал логи, ни одно не пришло. Но чуть позже пришло первое, второе так и не пришло.

На WB8 интернет через модем не поднят, используется только проводное подключение.

Снял логи еще раз, отправил два сообщения, оба пришли:
mmWB8_1.log (12,6 КБ)

В итоге, +CMTI появляется только когда доходят сообщения.

Интересно, что на trixie не работает отправка из wb-rules:

Jul 02 16:57:34 dacha wb-gsm[18694]: main: Called from pid 18619 (sh)
Jul 02 16:57:34 dacha wb-gsm[18706]: guess_of_node: Got of_gsm_node: /soc/usb@1c1c000/wbc-modem@1
Jul 02 16:57:34 dacha wb-gsm[18730]: gsm_check_present: Modem is enabled in DT (/soc/usb@1c1c000/wbc-modem@1)
Jul 02 16:57:34 dacha wb-gsm[18761]: should_enable: Should enable GSM modem
Jul 02 16:57:34 dacha wb-rules[12410]: INFO: [rule info] sending sms (via ModemManager): Test SMS done
Jul 02 16:57:34 dacha ModemManager[11571]: <inf> [modem0] processing user request to create SMS message...
Jul 02 16:57:34 dacha ModemManager[11571]: <inf> [modem0] created SMS message: /org/freedesktop/ModemManager1/SMS/5
Jul 02 16:57:34 dacha wb-rules[12410]: ERROR: [rule error] error sending sms:
                                       
                                       error: no actions specified

При этом mmcli --send -s 5 работает. Видимо, ошибка в wb-notify.js

# cat wb-notify.js | grep mmcli
    'mmcli -m any --messaging-create-sms="number={},text={}" | sed -n \'s#^Success.*/SMS/\\([0-9]\\+\\).*$#\\1#p\' | xargs mmcli --send -s';

bash: syntax error near unexpected token `('

UPD: вывод mmcli изменился:
bullseye

Successfully created new SMS: /org/freedesktop/ModemManager1/SMS/32

trixie

  ------------------------
  Messaging | created sms: /org/freedesktop/ModemManager1/SMS/6

Рановато я соблазнился на trixie :sob:

На WB7 откатился до wb-2606 (as stable), target wb7/bullseye

Спойлер
# mmcli -m wbc
  --------------------------------
  General  |                 path: /org/freedesktop/ModemManager1/Modem/0
           |            device id: bac34e6cc24d1dedcdfb7412c796a3055a76f7d9
  --------------------------------
  Hardware |         manufacturer: INCORPORATED
           |                model: A7602E-H
           |    firmware revision: A50C4B11A7600M7
           |            supported: gsm-umts
           |              current: gsm-umts
           |         equipment id: 860803061024820
  --------------------------------
  System   |               device: wbc
           |              drivers: option, rndis_host
           |               plugin: simtech
           |         primary port: ttyUSB1
           |                ports: ttyUSB0 (ignored), ttyUSB1 (at), ttyUSB2 (at), 
           |                       ttyUSB3 (ignored), usb0 (net)
  --------------------------------
  Numbers  |                  own: +7916
  --------------------------------
  Status   |       unlock retries: sim-pin (3), sim-puk (10), sim-pin2 (3), sim-puk2 (10)
           |                state: connected
           |          power state: on
           |          access tech: lte
           |       signal quality: 64% (recent)
  --------------------------------
  Modes    |            supported: allowed: any; preferred: none
           |              current: allowed: any; preferred: none
  --------------------------------
  IP       |            supported: ipv4, ipv6, ipv4v6
  --------------------------------
  3GPP     |                 imei: 860803061024820
           |          operator id: 25001
           |        operator name: MTS RUS
           |         registration: home
           | packet service state: attached
  --------------------------------
  3GPP EPS | ue mode of operation: csps-1
  --------------------------------
  SIM      |     primary sim path: /org/freedesktop/ModemManager1/SIM/0
           |       sim slot paths: slot 1: /org/freedesktop/ModemManager1/SIM/0 (active)
           |                       slot 2: none
  --------------------------------
  Bearer   |                paths: /org/freedesktop/ModemManager1/Bearer/0

Повторил эксперимент, логи:

mm1.log (30,6 КБ)

СМС не проходят практически сразу после перезагрузки. Если перегрузить ModemManager - они появляются.

Прикладываю свежий архив. Чуть позже пришлю фото модема

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

Фото модема:


Антенна выносная, уровень сигнала 65-80%

Добрый день, Дмитрий. Посовещался с коллегами по этой теме.

Сначала о статусе, чтобы ожидания были честными. Штатная функциональность контроллеров по части СМС - это отправка: через модуль уведомлений и функцию Notify в wb-rules. Приём СМС, как и голосовые вызовы, в официально поддерживаемую функциональность ПО не входит - он работает «как умеет» связка модема и ModemManager, без гарантий с нашей стороны. Поэтому починить приём в рамках поддержки мы, к сожалению, не можем.

При этом проделанная в теме работа не пропала: по вашим логам причина локализована - модем A7602E-H при активной пакетной сессии перестаёт выдавать уведомления о входящих СМС (+CMTI); сообщения ложатся в память модема, а ModemManager узнаёт о них только при переинициализации, отсюда «появляются после рестарта». Это поведение прошивки самого модема, обновления которой выпускает производитель. Спасибо, Дмитрий, за качественно собранные материалы, они легли в основу разбора.

Тему и пожелание о поддерживаемом приёме СМС мы внесем в список предложений по развитию продукта вместе с собранной здесь диагностикой. Обещать сроки или само появление функции не можем, но запрос зафиксирован.

Что можно сделать уже сейчас своими силами, по опыту темы и коллег:

  1. Держать передачу данных выключенной, если модем нужен только для СМС;
  2. Отправлять командные СМС в один сегмент;
  3. Как обходной путь - периодический перезапуск ModemManager (он перечитывает память модема);
  4. И самое главное - проверить наличие более свежей прошивки модема по инструкциям ваших модемов, например: Прошивка модемов SIMCom A76xxE-H.

Очень жаль.

Вероятно, я все-таки плохо собрал материал, раз вы сделали такой вывод. Не покидает ощущение, что со мной общается ИИ. Только он может не увидеть столь очевидные вещи :wink:

Приз за лучший ответ в ветке достается @Diamon, дальнейшее обсуждение лишь подтвердило его заключение.

Дмитрий, замечание справедливое формулировка в моём закрывающем сообщении получилась неточной, из-за того, что собирал ответ из разных источников.

И вы правы насчёт итога: заключение @Diamon по сути совпало с финальным диагнозом. Разница лишь в том, что ваши логи превратили гипотезу в доказанный и локализованный механизм, без них предметного разговора с производителем прошивки не получилось бы. Спасибо за них ещё раз.