Рабочая программа для просмотра/отправки СМС через модем в UI и скриптами

Опубликовал первую версию шлюза между ModemManager (через dbus) и веб-панелью WB. Написан на расте, 9МБ, в отжоре ресурсов пока не замечен. Что может:

  • Отображает состояние модем-менеджера (отдельный девайс) - доступен ли (очищается, если шлюз будет убит без возможности корректной подчистки своих девайсов), статус, сколько модемов, сколько входящих смс
  • Отображает состояние модема (отдельный девайс)
    • Активность (стоит ли смотреть данные, или он пока в инициализации)
    • Общая информация и текущий статус, сотовый оператор, телефонный номер модема, мощность сигнала
    • Блок исходящих СМС: сведения о последней отправленной в этом сеансе СМС и возможность отправки СМС (блок по дефолту отключен, для включения надо запускать шлюз с параметром allow-outgoing-sms)
    • Блок входящих СМС: идентификатор dbus для последней пришедшей СМС (по смене можно понять, что пришла новая СМС), количество СМС, выбор СМС для просмотра, по выбранной СМС - дата/время получения (есть скрытый контрол с таймстампом в юникс-формате - числом), отправитель, признак получена ли целиком или пока доставляется, ну и собственно текст.

Лежит на гитхабе, исполняемый файл приложен к релизу 0.1.0 (прямая ссылка на файл). Копируем на wb, делаем chmod +x, запускаем (-h - хелп по параметрам - но для режима просмотра СМС параметры никакие не нужны). Для постоянной работы можно в крон, но лучше, конечно, обычным systemd-сервисом. Нормально переносит умирания модемов, модемменеджера, mqtt и dbus (но это надо умудриться, конечно).
Скриншот для понимания - см. картинку.

Добрый день.
Спасибо что поделились, многим пользователям будет полезно.

Крутое решение!
А есть поддержка ussd? чтобы можно было отправлять команду для проверки баланса и может автоматизировать этот процесс чтобы не уходить в минус или ловить ненормальные ситуации.

И если нет и надо доделывать, то было бы круто и проброс AT команд сделать, как с отправкой смс, до кучи, тогда бы шикарный многофункциональный комбайн был на все случаи жизни…

И кнопочку “удалить все смс”, т.к. если их там дофига (у меня 60+ накопилось), то по одному удалять - неудобно…

USSD пока в планах (вкупе со звонками и DTMF кодами). Но сначала - управление номерами, на которые можно отправлять сообщение и с которых можно получать команды, а то пока слишком вседозволенно.

“проброс AT команд сделать, как с отправкой смс” - вряд ли, потому что работаю с ModemManager через dbus, а там прямой отправки AT-команд не припомню. А городить рядом с dbus-каналом еще и терминал для AT-команд - не очень хорошая идея. Это все-таки про более или менее стабильный продакшен, а не про эксперименты.

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

как будет реализовано - дайте знать пожалуйста

не силён что как внутри, но какой то скрипт-обёрка от wb через mm пробрасывает AT команды, можно попробовать подсмотреть…

Да, есть, нашел. Но нюанс:
“Note that using this interface call is only allowed when running ModemManager in debug mode or if the project was built using the with-at-command-via-dbus configure option” (the project was built… - это не мой проект, а сам ModemManager)
Т.е. это исследовательская функция, и без предварительных танцев с бубном пользователя WB сама собой не заработает (в описании модема есть этот момент - что для AT через mmcli надо перезапустить ModemManager с параметром --debug). А изначальная цель моей программки - чтобы просто запустилось и работало без бубна:)

Действительно и похоже это нововведения в MM…
Последний раз когда пробовал - работало без debug
Ну и тут приседаний то особо не вижу
Сейчас чтобы была возможность отправки sms надо запустить программку с параметром
Аналогично для отправки at команд - надо тоже с ключом отдельным запускать и при старте выводить сообщение - мол убедить что MM запущен с ключом --debug, всё, дальше головняк пользователя…

в коде никаких ошибок нет?
давно не смотрел на смс, и сейчас все сообщения с текстом null
т.е. дата и отправитель - корректные, а текста нет
перезапуск wb-mm-rs не помогает

Сталкивался с таким еще при попытках работы через АТ - модем считает смс из нескольких частей недошедшими до ЕГО перезагрузки. Побороть не смог, похоже на баг прошивки модема. Проверка: в настройках удалить/добавить модем. Перед этим лучше, конечно, ат-командами посмотреть, что он там думает про свои смс - у меня в результате все длинные смс он показывал как частично доставленные с пустым текстом. В dbus, естественно, то же самое.

Upd: нашел в еще не закомичченных архитектурных записках для чатгпт -

Operational constraint: command SMS are expected to fit into one SMS. Multipart or still-incomplete SMS objects are not considered a reliable command transport because some modem/operator combinations may leave them stuck in receiving for a long time and only recover after a modem restart.