Все проекты

Modem Broker

Координация нескольких приложений при работе с одним Huawei HiLink-модемом

О проекте

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-модему.