О проекте
Modem Broker — брокер запросов для Huawei HiLink. Он позволяет нескольким приложениям работать с одним физическим модемом через общую очередь, последовательно выполняя обращения к устройству и централизованно управляя его сессией.
- Стек
- Python · Docker · systemd · HiLink API
- Направление
- IoT и интеграции
- Год
- 2026
Задача
Несколько сервисов использовали один Huawei HiLink-модем и могли обращаться к нему одновременно. Это приводило к конфликтам: приложения работали с общей сессией устройства и одним проверочным токеном, поэтому параллельные запросы периодически мешали друг другу.
Сначала проблему решал простой шлюз, который не позволял выполнять несколько запросов одновременно. В процессе эксплуатации стало понятно, что одной блокировки мало. Понадобилась нормальная очередь, предсказуемая обработка запросов разных клиентов и защита от повторного выполнения операций, если связь с модемом оборвалась в неподходящий момент.
Так первоначальный шлюз постепенно вырос в отдельный сервис координации работы с модемом.
Реализация
Modem Broker принимает запросы от нескольких приложений и помещает их в общую ограниченную FIFO-очередь. Для каждого физического модема работает один обработчик, поэтому клиенты могут обращаться к брокеру одновременно, а запросы к самому Huawei выполняются строго последовательно.
Сессия устройства, cookie и проверочный токен поддерживаются централизованно внутри брокера. Клиентским приложениям не приходится самостоятельно делить общую сессию модема.
Состояние операций, которые что-либо изменяют, хранится в SQLite. Перед обращением к модему операция фиксируется в базе. Если после отправки запроса невозможно точно определить результат, брокер не пытается автоматически выполнить его ещё раз. Это позволяет избежать, например, повторной отправки SMS после тайм-аута.
Дополнительно появились профили клиентов, ограничения доступных операций и получателей SMS, проверка XML-запросов, ограничение частоты запросов и сетевое разделение. Всё это дополняет основную функцию проекта — последовательную и предсказуемую работу нескольких систем с одним модемом.
Modem Broker можно развернуть через Docker Compose или как обычный systemd-сервис.
Результат
Сейчас Modem Broker работает с Huawei E3372-325 и обслуживает несколько приложений. Они могут обращаться к сервису независимо друг от друга, а брокер сам выстраивает запросы в очередь и последовательно передаёт их модему.
Проблема гонок за общей сессией исчезла, а операции с неопределённым результатом после сбоя больше не повторяются вслепую.
Из небольшого шлюза для блокировки параллельных запросов получился самостоятельный сервис, который можно использовать в любых сценариях, где нескольким приложениям нужен общий доступ к одному Huawei HiLink-модему.