Ever wanted to know where your caravan, boat, trailer or ute is — right now, from your phone — without paying a monthly subscription to a tracking company?
In this guide we will build a complete, self-hosted live asset tracker using:
- An OzzMaker SARA-R5 LTE-M GPS + 10DOF board on a Raspberry Pi Zero
- Traccar, a free and open-source GPS tracking server
- A free “Always Free” VM on Oracle Cloud to host Traccar
- A PPP data connection over LTE-M to upload positions
- Geofencing, so you get an alert the moment your asset leaves (or enters) an area you define
Why Traccar?

Traccar is a mature, open-source GPS tracking platform used by everyone from hobbyists to commercial fleets — and self-hosting it means you get all of its features for free, with your data staying on your own server. Highlights include:
- Live tracking — watch all your devices move on a map in real time, from any browser or the free Traccar Manager app (iOS/Android).
- Geofencing — draw virtual boundaries (circles or polygons) on the map and have Traccar watch them for you. We’ll set this up in Part 7.
- Alerts & notifications — get notified by email, web popup or push notification when a device exits a geofence, exceeds a speed limit, goes offline, moves after being stationary, or triggers an ignition/motion event.
- Route replay — scrub back through history and replay exactly where an asset travelled on any day, complete with speed at every point. Great for reviewing a trip, or working out where the trailer went last Tuesday.
- Reports — built-in trip, stop, distance, and event summary reports over any date range, exportable to Excel.
- Multiple devices — one server can track as many devices as you like. Build a second tracker for the boat, add the family cars with the free Traccar Client phone app — all on the same map.
- Users & sharing — create extra accounts with access to only some devices, handy if you want to share the caravan’s location with family without handing over admin access.
- Full REST API — everything the web interface can do can be scripted, so you can integrate tracking data into your own projects.
We’ll be using live tracking, geofencing, alerts and route replay in this guide — but it’s worth exploring the rest once you’re up and running.
How it all fits together
The SARA-R5 module does two jobs at once. Its integrated M8 GNSS receiver streams NMEA position data to the Pi, while the LTE-M modem provides an internet connection via PPP. A small Python script reads the GPS position and sends it to your Traccar server every few seconds using Traccar’s simple HTTP-based OsmAnd protocol.
- NMEA data is sent from GPS to the Pi
- A python script sends the location data to the Traccar host on the internet via PPP
- The SARA-R5 establishes a PPP connection, giving the Pi internet access
Part 1 — Create a free Oracle Cloud VM
Oracle’s “Always Free” tier includes small VMs that never expire and cost nothing — ideal for a lightweight Traccar server.
- Sign up at oracle.com/cloud/free
- This is a very important gotcha in this guide. Create your Virtual Cloud Network (VCN) before you create your instance. If you skip this and try to create the network during instance setup, the public IP option will be greyed out — meaning you won’t be able to connect to your server via SSH.
- Click the hamburger menu (☰) in the top-left corner
- Click ‘Networking’
- Click “Virtual Cloud Networks”
- Click “Create VCN” and then give it a name (you will use this name later), keep all other values as default and click “save”
- From the hamburger menu (☰), go to Compute → Instances → Create Instance
- Under Image, select Ubuntu 22.04 (or later) as the image
- Under Shape, choose “VM.Standard.E2.1.Micro” Always Free eligible shape.
- Click Next
- Under “Networking” , choose ‘Select existing virtual cloud network’, then under network compartment, choose the VCN you created in step one.
- And choose existing subnet.
- At the bottom of the page, download SSH public key
- Click next and then leave everything default on storage page.
- Next and then click “Create” on the summary page.
Once the instance is created, you will be able to see the public IP assigned to it.

One last item to do is to update the firewall rules to allow your Raspberry Pi to send information to Traccar and to allow access to the web GUI.
- Click the hamburger menu (☰) in the top-left corner
- Click ‘Networking’
- Click “Virtual Cloud Networks”
- Click the VCN you created earlier.
- Go to “subnets” tab
- Select public subnet for your VCN
- Go to security
- Go to the default security list for your VCN
- And then go to “Security rules”
- Click “Add ingress rule”
- Source Type = CIDR
- Source CIDR = 0.0.0.0/0
- IP Protocol = TCP
- Destination port = 8082
- Add a second ingress rule, with port 5055
- Your rules should look something like the below image

Oracle Cloud Security list
Log into your VM via SSH and install Traccar
To log into your VM, you will use the SSH private key downloaded earlier.
We will need to convert this into a format which can be used by Putty.
Convert private key
- Download PuttyGen from here. Search for
puttygen.exe - Open puttygen and import your key using the “Load” button.
You should see something like below. (you may need to change the dropdown in the file selection to show all file types) - Now click “Save private key”. A password isnt needed.
Load private key into Putty
- Open putty, put in the public IP address for your Oracle free VM

Putty with Oracle VM IP - Go to connection → Data in the left menu and enter in “ubuntu” as the username. This is the default user account on the Oracle VM

Putty login username - Go to connection → SSH → Auth → Credentials and add the converted private key

Putty with private key - You should now be able to log into your VM via SSH.
Part 2 — Install Traccar (and Docker)
We will be using docker and downloading the Traccar container
ubuntu@traccar:~$ sudo apt install -y docker.io
Now setup the container
sudo docker run -d --restart unless-stopped --name traccar \ -p 8082:8082 \ -p 5055:5055 \ -v /opt/traccar/data:/opt/traccar/data:rw \ -v /opt/traccar/logs:/opt/traccar/logs:rw \ -e CONFIG_USE_ENVIRONMENT_VARIABLES=true \ -e MAIL_SMTP_HOST=smtp.gmail.com \ -e MAIL_SMTP_PORT=587 \ -e MAIL_SMTP_STARTTLS_ENABLE=true \ -e MAIL_SMTP_AUTH=true \ -e MAIL_SMTP_FROM=username@gmail.com \ -e MAIL_SMTP_USERNAME=username@gmail.com \ -e MAIL_SMTP_PASSWORD="xxxxxxx" \ traccar/traccar:latest
If you don’t want to enable email notifications, you can skip the lines beginning with MAIL_SMTP.
Setting up email will allow you to receive email alerts for events, such as geofence events.
If all goes well, you should be able to log into the web page of your Traccar instance, using
Register a device in Traccar
- In the Traccar web UI, click the + button to add a device
- Give it a name, e.g.
caravan - Set the Identifier to something unique, e.g.
ozzmaker-tracker-01
The identifier is how Traccar matches incoming position reports to a device — we’ll use it in our Python script shortly.
Part 3 — Setup multiplexing on the Pi Serial interface
We need to setup multiplexing on the serial interface of the Raspberry Pi . When enabling the multiplexer protocol on the Raspberry Pi and SARA-R5 module, you can access 3 UART channels which would be able to perform these functions;
- Channel 0 – AT Commands and Data
- Channel 1 – AT Commands and Data
- Channel 2 – GNSS Streaming
We have a dedicated guide for this here.
Part 4 — Stream GNSS data to a dedicated serial interface
You now need to stream the GNSS data to the Raspberry Pi virtual serial interface (/dev/ttyGSM2).
We have a dedicated guide for this also, which can be found here
Part 5 — Set up the PPP data connection on the Raspberry Pi
Now to get the Pi online through the SARA-R5’s LTE-M modem. We’ll use pppd with a chat script, dialling out over the multiplexer data channel (/dev/ttyGSM1).
You can follow this guide on how to get PPP going on your SARA-R5.
Part 6 — Send GPS position to Traccar
With the GPS streaming NMEA sentences on /dev/ttyGSM2 and an internet connection over ppp0, all that’s left is a script to glue the two together.
Traccar’s OsmAnd protocol makes this trivially easy — it’s just an HTTP request with the position in the URL parameters:
http://YOUR_SERVER_IP:5055/?id=ozzmaker-tracker-01&lat=-33.86&lon=151.20&speed=0
Here is the python script used to send GPS data to your Traccar host(make sure you update the Traccar host IP);
#!/usr/bin/env python3
"""
Live asset tracker for OzzMaker SARA-R5 LTE-M GPS + 10DOF
Reads position data from gpsd and uploads it to a Traccar
server using the OsmAnd protocol.
"""
import time
import requests
import gpsd
TRACCAR_HOST = "YOUR_SERVER_IP" # Public IP of your Oracle VM
DEVICE_ID = "ozzmaker-tracker-01" # Must match the Identifier you set in Traccar
INTERVAL = 10 # Seconds between position uploads
SPEED_MS_TO_KNOTS = 1.94384
gpsd.connect()
while True:
try:
p = gpsd.get_current()
# Only send if we have at least a 2D fix
if p.mode >= 2:
requests.get(
f"http://{TRACCAR_HOST}:5055/",
params={
"id": DEVICE_ID,
"lat": p.lat,
"lon": p.lon,
"speed": p.hspeed * SPEED_MS_TO_KNOTS,
"timestamp": int(time.time()), # Seconds — Traccar converts to ms itself
},
timeout=10,
)
print(f"Sent {p.lat:.6f}, {p.lon:.6f}")
except requests.RequestException as e:
# Cellular link dropped or server unreachable — just retry next loop
print(f"Upload failed: {e}")
except (gpsd.NoFixError, KeyError, UserWarning) as e:
print(f"No GPS fix yet: {e}")
time.sleep(INTERVAL)
Run the script with python3 tracker.py, then open the Traccar web interface and you should see your device turn green and appear on the map, updating live. That’s it — you have a working tracker!
Just like the PPP connection, you can run this script as a systemd service so it starts automatically at boot.
Data usage: Each position report is only a few hundred bytes. At a 10-second interval that’s roughly 2–3MB per day of continuous movement — and far less in practice, since you can lengthen the interval or only report when moving.
⚠️ Important: Data usage
Each position report is only a few hundred bytes. At a 10-second interval that’s roughly 2–3MB per day of continuous movement — and far less in practice, since you can lengthen the interval or only report when moving.
Part 7 — Geofencing

This is where Traccar really shines for asset tracking. A geofence is a virtual boundary on the map — and Traccar can notify you the moment your asset crosses it.
Some practical examples:
- Storage yard fence — get an email the second your caravan leaves the storage yard. If you didn’t move it, someone else is!
- Mooring fence — a small circle around your boat’s mooring. If the boat drifts (or is taken), you’ll know.
- Home fence — get notified when the work truck arrives back home.
Creating a geofence
- In the Traccar web UI, go to Settings → Geofences
- Click + to add a new geofence and give it a name, e.g.
Storage Yard - Use the drawing tools on the map to define the area, Polygon is the best to work with
- Save the geofence
Linking the geofence to your device
A geofence does nothing until it’s connected to a device:
- Select your device (e.g.
caravan) in the device list - Open the device’s Connections (the link/chain icon)
- Under Geofences, tick
Storage Yard
From now on, every position report is checked against the fence, and Traccar records geofenceEnter and geofenceExit events for that device.
Getting alerts
To actually be told when it happens:
- Go to Settings → Notifications and click +
- Set Type to
Geofence Exit(add a second one forGeofence Enterif you want both) - Set Channels to
WebandMail - Save, then link the notification to your device via its Connections page, just like the geofence
Make sure your email address is set under Account → Preferences. Now, the moment your caravan rolls out of the storage yard, an email lands in your inbox with the device name and event — typically within one position-report interval of it happening.
Part 8 — Replaying routes and reports
Every position your tracker uploads is stored on your server, which means you can go back in time.
Route replay
- Select your device and click the Replay icon (or go to Reports → Replay)
- Choose a device and a time period, e.g.
Yesterdayor a custom range - Press play
Traccar animates the journey on the map, with a slider so you can scrub backwards and forwards. Clicking any point on the route shows the exact time, speed and heading at that moment. If you towed the caravan somewhere last weekend, you can re-watch the whole trip.
Reports
Under Reports you’ll also find ready-made summaries for any date range:
- Trips — each journey with start/end location, distance, duration and average speed
- Stops — where the asset sat still, and for how long
- Summary — total distance and engine hours per day
- Events — a log of every geofence entry/exit and other alerts
All of them can be exported to Excel, and you can email yourself a scheduled report — for example, a weekly summary of everywhere the trailer has been.
Where to from here?
You now have a fully self-hosted live tracker with geofence alerts, for the cost of a few megabytes of cellular data. Some ideas to take it further:
- Power saving — the SARA-R5 supports PSM and eDRX low-power modes, and the GPS supports periodic fixes drawing under 200uA. Combined with only reporting positions while moving, a battery-powered tracker can run for a very long time.
- Assisted GPS — use AssistNow so the tracker gets a fix within seconds of a cold boot. See our Assisted GPS guide.
- Use the 10DOF sensors — the onboard accelerometer can wake the tracker when movement is detected, so it only powers the modem when there’s actually something to report.
- Explore more of Traccar — speed-limit alerts, scheduled reports, extra user accounts for family members, and the full REST API for pulling tracking data into your own projects.
If you build a tracker with your SARA-R5 board, we’d love to hear about it in the comments below.




Hi Mark. I’ve built a proof of concept Dead Fred Beacon (in case we lose it) but having an issue with JP1 for a warm restart with the mux. Ive posted on the forum.
Thanks