For many years, we have operated our own GPS tracking platform for our customers: vehicles and devices report their position to our tracking server, customers see their fleet live on the map, keep logbooks, define geofences and are notified of alerts. The interface for this was a PHP application that had grown over time, with its own user management, its own invoicing and its own reporting – running in parallel to everything else we use in the company.
We have now changed that. As of now, tracking is a module in our Odoo 19 Community and thus part of the same system in which customers, contracts, invoices and support also run. For our tracking customers, this means: one login, one interface, and the tracking invoice sits where all other invoices sit too.
Why We Brought Tracking into Odoo
Two separate systems mean duplicate master data. Every customer existed once in tracking and once in the ERP, every change of address had to be made twice, and the tracking billing run produced documents that then had to be transferred to accounting by hand.
With the move to Odoo, a simple principle now applies: master data in Odoo, bulk data outside. Customers, users, trackers, groups, geofences, products and prices are held in Odoo, where they are connected to accounting, the portal and access rights management. The position data – the actual data stream from the devices, around the clock – remains in a separate position store. An ERP database is not the right place for millions of GPS points, and it does not need to be.
The tracking server that receives the devices' data is unaffected by the changeover. That is exactly what made the rebuild realistic in the first place: the interface could be built anew without touching data reception.
What Our Customers Now Have in the Portal
Tracking customers sign in to the Odoo customer portal and find the Tracking section there. Anyone who uses tracking exclusively lands directly on the map after logging in and sees no other portal content.
Live Map
The map shows all of your own and shared vehicles with status (moving, stationary, offline), speed, direction of travel and resolved address. Positions arrive in real time via a WebSocket connection to the tracking server – a single connection for the whole installation, not one per open browser – and are distributed with filtering: each customer receives only the vehicles that belong to them or are shared with them. Vehicles move smoothly between two reports instead of jumping.
OpenStreetMap, a terrain map, the official Austrian basemap including aerial imagery and a black-and-white map are available as base maps; terrain and 3D buildings can be switched on as layers. The view with which the map opens – map type, extent, default group – is remembered by Odoo for each user.
Logbook with Business and Private Trips
Trips are detected on the server, not in the browser: a trip takes place even if nobody has the map open. Start, end, start and destination address, odometer reading, distance and duration are recorded for each trip.
Each trip can be classified as a business trip or a private trip – per trip, not per vehicle, because the same car drives to a customer in the morning and home in the evening, and the distinction is relevant for tax purposes in Austria. When a trip starts, the classification window appears directly on the map; if you do it later, you will find the trip again in the logbook, together with a notes field. Drivers are identified by iButton key fobs if the vehicle is equipped with them.
Two reports are available, both as PDF and Excel:
- Individual logbook – the trips of one vehicle in the selected period with route, classification and note
- Fleet logbook – one line per vehicle with driving time, distance, the split into business and private kilometres and the extrapolated consumption, plus group and overall totals
Geofences and Alerts
Geofences are drawn directly on the map – as a circle, square or free polygon – or adopted from shared templates such as “Austria” or “Vienna”. For each zone and vehicle, you can specify whether an alert is triggered on entry or exit and where it goes: by SMS, email, webhook or as a message to our call centre.
Alerts – zone changes, speed, ignition, loss of voltage, emergency call, movement, offline – appear as separate records in Odoo, with time, position and processing status.
Search: Which Vehicle Was Here?
A parking or speeding ticket arrives, the location is stated on it – but which vehicle was it? The route history search answers exactly that: select a point on the map or an address, narrow down the radius and time period, and tracking shows which vehicles were there. The speed camera locations from OpenStreetMap are already on the map as a layer for this purpose.
Management by the Customer Themselves
What previously had to be delegated to us, customers now do themselves in the portal:
- Activate trackers – type in the IMEI from the device label, choose or create a group, done
- Trackers and groups – names, icons, group assignment, refuelling with quantity and price, reports per vehicle
- Permissions – share vehicles with other users or companies, with read or write access and the option of hiding individual fields such as address or odometer reading
- Geofences – draw, edit, define alerting
- iButtons – assign key fobs to driver names
What Has Changed for Us Internally
In the Odoo backend, there is a Tracking area with the live map, tracker management, alerts, trips, master data (groups, geofences, device types, manufacturers) and billing.
Tracker management. Each device carries its IMEI, SIM phone number, device type, inputs and outputs (ignition, engine immobiliser, auxiliary heater and others), calibration, odometer correction, offline threshold and the logbook parameters. Odoo's chatter history logs every change.
SMS to devices. Trackers are configured by SMS. Sending now runs from within Odoo, is logged without gaps and is protected against operating errors: an upper limit per send operation prevents a single click from triggering hundreds of chargeable messages, and incomplete phone numbers are not even passed on.
Call centre. Theft and accident reports appear as cases with vehicle data, the owner's contact details and a guided workflow: owner reached? False alarm? Further measures? Every step is logged, and the responsible handlers are notified by push.
Billing. The billing run takes into account all trackers whose next billing date has been reached and generates draft invoices in Odoo from them – with end-customer or partner pricing. Approval deliberately remains with accounting: the run books nothing, it prepares. Billing interval, product and next date are attached to the tracker; after the run, the invoice lines are available directly on the device.
The Architecture Behind It
GPS devices
│
▼
Tracking server ──► Position store Odoo 19 Community
(unchanged) today: existing ├─ Master data (trackers, customers, geofences)
database ├─ Customer portal /my/ortung
later: PostGIS ├─ Backend Tracking / …
▲ ├─ Billing (draft invoices)
└── read-only ─┘
Access to positions runs exclusively via an interchangeable interface. Today, Odoo reads from the existing tracking database, which the tracking server continues to fill unchanged. Moving to a dedicated PostGIS server is therefore a configuration change, not a rebuild – PostGIS then performs spatial evaluations such as geofence checks itself. For development and training, there is also a demo store with synthetic data, with which the module runs even without a tracking server.
Addresses are resolved via our own geocoder and cached in Odoo, rounded to around eleven metres: a stationary vehicle is not re-resolved with every bit of GPS noise, and the map does not depend on the response time of an external service.
How the Migration Went
We did not switch over in one go but step by step, following the strangler pattern: the legacy system remained operational, a reverse proxy decided per path who answers, and the new map initially ran for a pilot group in parallel with the old one.
Taking over the master data was the most delicate part. A migration script reads customers, users, trackers, groups and geofences from the legacy application and creates them in Odoo – repeatable as a delta run, with the old identifier as the key. Because many tracking customers had long existed in Odoo as partners, a wizard suggests matches that must each be confirmed individually: a wrongly linked company would get to see other people's vehicles, and that is more expensive than a duplicate.
What deliberately did not make the move: the duplicate codebase for desktop and mobile (the Odoo frontend is responsive), the separate translation table, the separate rights and session handling and a good dozen reports that, in practice, nobody opened any more.
What This Means for You as a Customer
If you are a tracking customer of ours, you have already received your portal access or will receive it in the next few weeks. Your vehicles, groups, geofences and permissions have been carried over; the logbook continues seamlessly.
In one portal, you find your tracking, your invoices and your support requests. And if you want more than tracking – helpdesk, maintenance contracts, project billing – it is the same system.
We are happy to answer questions about the changeover. And if you are looking for vehicle tracking for your own company that is connected to the ERP instead of standing beside it: get in touch.