Опубликовал первую версию шлюза между 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-команд - не очень хорошая идея. Это все-таки про более или менее стабильный продакшен, а не про эксперименты.
Удалить все - пожалуй, нет: все-таки это больше под скрипты, морда - это больше для контроля и если скрипты не справились. Т.е. прощелкать один раз много - терпимо, а вот случайно удалить все, ошибившись контролом и не прочитав - гораздо хуже.
Да, есть, нашел. Но нюанс:
“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.