Протягом багатьох років ми експлуатуємо для наших клієнтів власну платформу GPS-відстеження: транспортні засоби та пристрої передають свою позицію на наш сервер трекінгу, клієнти бачать свій автопарк наживо на карті, ведуть журнали поїздок, визначають геозони й отримують сповіщення про тривоги. Інтерфейс до неї був застосунком на PHP, що розросся з часом, із власним керуванням користувачами, власним виставленням рахунків і власною звітністю – паралельно з усім, що ми використовуємо в компанії.
Це ми тепер змінили. Відстеження відтепер є модулем у нашому Odoo 19 Community і, отже, частиною тієї самої системи, в якій працюють також клієнти, договори, рахунки та підтримка. Для наших клієнтів відстеження це означає: один логін, один інтерфейс, а рахунок за відстеження лежить там, де й усі інші рахунки.
Чому ми перенесли відстеження в Odoo
Дві окремі системи означають подвійні основні дані. Кожен клієнт існував один раз у системі відстеження і один раз в ERP, кожну зміну адреси доводилося робити двічі, а цикл виставлення рахунків відстеження створював документи, які потім уручну переходили в бухгалтерію.
З переходом на Odoo тепер діє простий принцип: основні дані в Odoo, масові дані поза ним. Клієнти, користувачі, трекери, групи, геозони, продукти та ціни зберігаються в Odoo і там пов'язані з бухгалтерією, порталом та керуванням правами. Дані про позиції – власне потік даних від пристроїв, цілодобово – залишаються в окремому сховищі позицій. База даних ERP – не те місце для мільйонів точок GPS, і не мусить таким бути.
Сервер трекінгу, що приймає дані від пристроїв, перехід не зачепив. Саме це й зробило перебудову реалістичною: інтерфейс можна було створити заново, не чіпаючи прийом даних.
Що тепер мають наші клієнти в порталі
Клієнти відстеження входять у клієнтський портал Odoo і знаходять там розділ Відстеження. Хто користується виключно відстеженням, після входу одразу потрапляє на карту і не бачить іншого вмісту порталу.
Жива карта
Карта показує всі власні та надані в доступ транспортні засоби зі статусом (рухається, стоїть, офлайн), швидкістю, напрямком руху та розпізнаною адресою. Позиції надходять у реальному часі через з'єднання WebSocket із сервером трекінгу – одне-єдине з'єднання для всієї інсталяції, а не по одному на кожен відкритий браузер – і розподіляються з фільтрацією: кожен клієнт отримує лише ті транспортні засоби, що йому належать або надані йому в доступ. Транспортні засоби плавно рухаються між двома повідомленнями, а не стрибають.
Як базові карти на вибір доступні OpenStreetMap, карта місцевості, офіційна австрійська Basemap із аерофотознімком і чорно-біла карта; рельєф і 3D-будівлі можна додати як шари. Вигляд, з яким відкривається карта – тип карти, фрагмент, група за замовчуванням – Odoo запам'ятовує для кожного користувача.
Журнал поїздок зі службовими та приватними поїздками
Поїздки розпізнаються на сервері, а не в браузері: поїздка відбувається і тоді, коли ніхто не відкрив карту. Початок, кінець, адреси старту й призначення, показання одометра, відстань і тривалість фіксуються для кожної поїздки.
Кожну поїздку можна класифікувати як службову або приватну – для кожної поїздки, а не для кожного транспортного засобу, адже той самий автомобіль зранку їде до клієнта, а ввечері додому, і в Австрії це розрізнення має податкове значення. На початку поїздки на карті одразу з'являється вікно для класифікації; хто робить це пізніше, знаходить поїздку в журналі поїздок разом із полем для нотатки. Водіїв розпізнають за ключами-чипами iButton, якщо транспортний засіб ними оснащений.
Доступні два звіти, обидва у форматах PDF і Excel:
- Журнал окремих поїздок – поїздки одного транспортного засобу за вибраний період із маршрутом, класифікацією та нотаткою
- Журнал поїздок автопарку – один рядок на транспортний засіб із часом руху, відстанню, розподілом на службові та приватні кілометри та екстрапольованою витратою палива, а також підсумки за групами та загальні підсумки
Геозони та тривоги
Геозони малюються безпосередньо на карті – як коло, квадрат або довільний полігон – або переносяться зі спільних шаблонів, як-от «Австрія» чи «Відень». Для кожної зони й транспортного засобу можна задати, чи подавати тривогу під час входу або виходу і куди: через SMS, електронну пошту, вебхук або як повідомлення до нашого кол-центру.
Тривоги – зміна зони, швидкість, запалювання, втрата напруги, виклик допомоги, рух, офлайн – надходять як окремі записи в Odoo з часом, позицією та статусом обробки.
Пошук: який транспортний засіб був тут?
Надходить штраф, зазначено місце вимірювання – але який транспортний засіб це був? Пошук за історією маршрутів відповідає саме на це: виберіть точку на карті або адресу, обмежте радіус і період, і система відстеження покаже, які транспортні засоби там були. Пункти вимірювання швидкості з OpenStreetMap для цього вже є шаром на карті.
Керування самим клієнтом
Те, що раніше доводилося делегувати нам, клієнти тепер роблять у порталі:
- Активація трекерів – ввести IMEI з наклейки на пристрої, вибрати групу або створити нову, готово
- Трекери та групи – назви, символи, належність до груп, заправки з кількістю та ціною, звіти для кожного транспортного засобу
- Дозволи – надавати доступ до транспортних засобів іншим користувачам або компаніям, з правом читання чи запису та можливістю приховувати окремі поля, як-от адреса чи показання одометра
- Геозони – малювати, редагувати, визначати сповіщення
- iButtons – зіставляти ключі-чипи з іменами водіїв
Що змінилося для нас усередині
У бекенді 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, а не стоїть поруч: звертайтеся до нас.