Уже много лет мы эксплуатируем для наших клиентов собственную платформу GPS-отслеживания: транспортные средства и устройства передают свою позицию на наш сервер трекинга, клиенты видят свой автопарк в реальном времени на карте, ведут журналы поездок, определяют геозоны и получают уведомления о тревогах. Интерфейс для этого был выросшим со временем PHP-приложением с собственным управлением пользователями, собственным выставлением счетов и собственной отчётностью — параллельно со всем остальным, что мы используем в компании.
Теперь мы это изменили. Отслеживание отныне — модуль в нашей Odoo 19 Community и, таким образом, часть той же системы, в которой работают клиенты, договоры, счета и поддержка. Для наших клиентов, пользующихся отслеживанием, это означает: один логин, один интерфейс, и счёт за отслеживание лежит там же, где и все остальные счета.
Почему мы перенесли отслеживание в Odoo
Две раздельные системы означают дублирование основных данных. Каждый клиент существовал один раз в системе отслеживания и один раз в ERP, каждое изменение адреса приходилось делать дважды, а расчётный запуск отслеживания создавал документы, которые затем вручную переносились в бухгалтерию.
С переездом в Odoo теперь действует простой принцип: основные данные в Odoo, массовые данные снаружи. Клиенты, пользователи, трекеры, группы, геозоны, продукты и цены находятся в Odoo и там связаны с бухгалтерским учётом, порталом и управлением правами. Данные о позициях — собственно поток данных устройств, круглосуточно — остаются в отдельном хранилище позиций. База данных ERP — не то место для миллионов GPS-точек, и ей это не нужно.
Сервер трекинга, принимающий данные устройств, переход не затронул. Именно это и сделало перестройку вообще реалистичной: интерфейс можно было создать заново, не трогая приём данных.
Что теперь есть у наших клиентов в портале
Клиенты, пользующиеся отслеживанием, входят в клиентский портал Odoo и находят там раздел Отслеживание. Тот, кто пользуется исключительно отслеживанием, после входа сразу попадает на карту и не видит другого содержимого портала.
Карта в реальном времени
Карта показывает все собственные и предоставленные в доступ транспортные средства со статусом (в движении, стоит, офлайн), скоростью, направлением движения и расшифрованным адресом. Позиции поступают в реальном времени через WebSocket-соединение с сервером трекинга — одно-единственное соединение на всю установку, а не по одному на каждый открытый браузер — и распределяются с фильтрацией: каждый клиент получает только те транспортные средства, которые принадлежат ему или предоставлены ему в доступ. Транспортные средства плавно перемещаются между двумя сообщениями, а не прыгают.
В качестве базовых карт на выбор доступны OpenStreetMap, карта рельефа, официальная австрийская Basemap вместе с аэрофотоснимком и чёрно-белая карта; рельеф и 3D-здания можно включить как слои. Вид, с которым открывается карта — тип карты, фрагмент, группа по умолчанию — Odoo запоминает для каждого пользователя.
Журнал поездок со служебными и частными поездками
Поездки распознаются на сервере, а не в браузере: поездка фиксируется, даже если никто не открывал карту. Начало, конец, адреса старта и назначения, показания одометра, маршрут и продолжительность записываются для каждой поездки.
Каждую поездку можно классифицировать как служебную или частную — по каждой поездке, а не по транспортному средству, потому что один и тот же автомобиль утром едет к клиенту, а вечером домой, а это различие в Австрии имеет налоговое значение. При начале поездки на карте сразу появляется окно для классификации; кто делает это позже, найдёт поездку в журнале поездок вместе с полем для заметки. Водители распознаются по ключам-чипам iButton, если транспортное средство ими оснащено.
Доступны два отчёта, оба в PDF и Excel:
- Индивидуальный журнал поездок – поездки одного транспортного средства за выбранный период с маршрутом, классификацией и заметкой
- Журнал поездок автопарка – одна строка на транспортное средство со временем в пути, маршрутом, разделением на служебные и частные километры и рассчитанным расходом, а также итогами по группам и общими итогами
Геозоны и тревоги
Геозоны рисуются прямо на карте — в виде круга, квадрата или произвольного многоугольника — или берутся из общих шаблонов, например «Австрия» или «Вена». Для каждой зоны и транспортного средства можно задать, нужно ли оповещение при входе или выходе и куда: по SMS, электронной почте, через Webhook или сообщением нашему колл-центру.
Тревоги — смена зоны, скорость, зажигание, потеря напряжения, экстренный вызов, движение, офлайн — поступают в Odoo как отдельные записи с временем, позицией и статусом обработки.
Поиск: какое транспортное средство было здесь?
Приходит штраф, указано место измерения — но какое транспортное средство это было? Поиск по истории маршрутов отвечает именно на это: выберите точку на карте или адрес, ограничьте радиус и период, и система отслеживания покажет, какие транспортные средства там были. Пункты измерения скорости из OpenStreetMap для этого уже лежат на карте в виде слоя.
Управление самим клиентом
То, что раньше приходилось поручать нам, клиенты теперь делают в портале:
- Активация трекеров – ввести IMEI с наклейки на устройстве, выбрать группу или создать новую, готово
- Трекеры и группы – названия, значки, принадлежность к группе, заправки с количеством и ценой, отчёты по каждому транспортному средству
- Права доступа – предоставление транспортных средств другим пользователям или компаниям с правом чтения или записи и возможностью скрывать отдельные поля, такие как адрес или показания одометра
- Геозоны – рисовать, редактировать, задавать оповещение
- iButton – сопоставлять ключи-чипы с именами водителей
Что изменилось внутри у нас
В бэкенде Odoo есть раздел Отслеживание с картой в реальном времени, управлением трекерами, тревогами, поездками, основными данными (группы, геозоны, типы устройств, производители) и расчётами.
Управление трекерами. Каждое устройство содержит IMEI, номер SIM-карты, тип устройства, входы и выходы (зажигание, блокировка двигателя, автономный отопитель и другие), калибровку, коррекцию одометра, порог офлайн и параметры журнала поездок. История в Chatter Odoo протоколирует каждое изменение.
SMS на устройства. Трекеры настраиваются по SMS. Отправка теперь идёт из Odoo, протоколируется без пропусков и защищена от ошибочных действий: верхний предел на одну операцию отправки не позволяет одним щелчком запустить сотни платных сообщений, а неполные номера телефонов вообще не передаются.
Колл-центр. Сообщения о краже и авариях появляются как заявки с данными транспортного средства, контактными данными владельца и управляемым процессом: владелец найден? Ложная тревога? Дальнейшие меры? Каждый шаг протоколируется, а ответственные сотрудники получают push-уведомление.
Расчёты. Расчётный запуск учитывает все трекеры, у которых наступил следующий срок выставления счёта, и создаёт из них черновики счетов в Odoo — с ценой для конечного клиента или партнёрской ценой. Утверждение намеренно остаётся за бухгалтерией: запуск ничего не проводит, он готовит. Интервал выставления счетов, продукт и следующий срок привязаны к трекеру; после запуска строки счёта видны прямо на устройстве.
Архитектура
GPS-устройства
│
▼
Сервер трекинга ──► Хранилище позиций Odoo 19 Community
(без изменений) сейчас: существующая ├─ Основные данные (трекеры, клиенты, геозоны)
база данных ├─ Клиентский портал /my/ortung
позже: PostGIS ├─ Бэкенд Отслеживание / …
▲ ├─ Расчёты (черновики счетов)
└── только чтение ─┘
Доступ к позициям осуществляется исключительно через заменяемый интерфейс. Сегодня Odoo читает данные из существующей базы данных отслеживания, которую сервер трекинга продолжает без изменений заполнять. Переход на собственный сервер PostGIS — таким образом, изменение конфигурации, а не перестройка — пространственные расчёты, такие как проверки геозон, затем выполняет сам PostGIS. Для разработки и обучения дополнительно есть демо-хранилище с синтетическими данными, с которым модуль работает и без сервера трекинга.
Адреса расшифровываются через собственный геокодер и кэшируются в Odoo с округлением примерно до одиннадцати метров: стоящее транспортное средство не расшифровывается заново при каждом шуме GPS, а карта не зависит от времени ответа внешнего сервиса.
Как прошёл переход
Мы переходили не одним махом, а шаг за шагом по шаблону Strangler: старая система оставалась работоспособной, обратный прокси решал для каждого пути, кто отвечает, а новая карта сначала работала для пилотной группы параллельно со старой.
Перенос основных данных был при этом самой деликатной частью. Скрипт миграции считывает клиентов, пользователей, трекеры, группы и геозоны из старого приложения и создаёт их в Odoo — с возможностью повторения в виде дельта-запуска, с прежним идентификатором в качестве ключа. Поскольку многие клиенты, пользующиеся отслеживанием, давно существовали в Odoo как партнёры, мастер предлагает сопоставления, которые необходимо подтверждать по одному: неверно связанная компания увидела бы чужие транспортные средства, а это дороже, чем дубликат.
Что намеренно не было перенесено: двойная кодовая база для десктопа и мобильных устройств (фронтенд Odoo адаптивный), собственная таблица переводов, собственная обработка прав и сессий и добрая дюжина отчётов, которые на практике никто больше не открывал.
Что это значит для вас как клиента
Если вы наш клиент по отслеживанию, вы уже получили доступ к порталу или получите его в ближайшие недели. Ваши транспортные средства, группы, геозоны и права доступа перенесены; журнал поездок продолжает работать без перерыва.
В одном портале вы найдёте ваше отслеживание, ваши счета и ваши обращения в поддержку. А если вам нужно больше, чем отслеживание — Helpdesk, договоры на обслуживание, расчёты по проектам — это та же система.
Мы с радостью ответим на вопросы о переходе. А кто ищет для своей компании отслеживание транспортных средств, связанное с ERP, а не стоящее рядом, — обращайтесь к нам.