Asset tracking sounds simple on paper: figure out what a thing is and where it is.
Then you add a second location, a third device type, and a warehouse with spotty Wi-Fi, and suddenly it's not so simple.
GPS gives you coordinates. RFID readers give you "I saw this tag." BLE receivers give you proximity signals. IoT sensors give you temperature and vibration. None of them speak the same language, and your job is to turn all that noise into something people can actually act on.
A good tracking system does more than put dots on a map. It keeps a trustworthy history, survives flaky connectivity, spots the events that matter, and helps someone make a decision. Here's how I'd think about building one.
1. Start with layers
Here's the rough shape:
Physical Assets
|
v
GPS / RFID / BLE / IoT Devices
|
v
Connectivity and Data Ingestion
|
v
Validation and Normalization
|
v
Event Processing and Business Rules
|
v
Storage and Asset History
|
v
APIs / Dashboards / Notifications
|
v
Operational Action
Devices collect, ingestion receives, processing interprets, storage remembers, and APIs and UIs expose the results.
The payoff of keeping these concerns separate is that you can swap a device vendor, add a new technology, or scale one piece without rewriting everything else. You'll be glad of that the first time hardware changes mid-project.
2. Don't force everything into a "location" model
It's tempting to treat every event as a lat/long. Resist that. An RFID read isn't a coordinate, and a temperature reading definitely isn't.
Instead, define a common event envelope that can carry different event types:
{
"event_id": "evt-10482",
"asset_id": "asset-204",
"event_type": "location_update",
"source": "gps",
"observed_at": "2026-10-08T12:30:00Z",
"received_at": "2026-10-08T12:30:03Z",
"location": {
"latitude": 40.7128,
"longitude": -74.0060
},
"metadata": {
"device_id": "device-18"
}
}
To be clear, this is an illustrative schema, not a standard. Adapt it to your own needs.
The part I'd keep is the two timestamps:
-
observed_at: when the device saw it happen. -
received_at: when your platform found out.
They'll drift apart whenever a device goes offline and dumps its buffer later. If you only store one, you'll lose the ability to reason about delays.
3. Normalize without erasing meaning
Say these four things happen:
- GPS reports a vehicle's position.
- An RFID reader picks up a tagged container at a warehouse door.
- A BLE receiver notices a tool nearby.
- A sensor reports a temperature change.
All four are about assets, but they're different kinds of evidence. Standardize the shared stuff (asset IDs, timestamps, source IDs, event types) but keep the original measurement and what it actually means.
An RFID detection shouldn't quietly become an exact location. A BLE signal strength isn't an indoor coordinate unless you have a real positioning method behind it.
A consistent data model should simplify processing without hiding uncertainty.
4. Assume devices will go offline
Real devices live in the real world. A truck drives through a dead zone. A sensor drops off the network. A reader uploads a batch after an outage.
If your backend assumes events show up immediately and in order, your asset history will quietly lie to you.
Things worth planning for:
- Local buffering (where the device supports it)
- Retries with backoff
- Event IDs for deduplication
- Device and server timestamps
- Out-of-order events
- Device health monitoring
- A clear policy for stale data
A typical recovery flow looks like this:
Device loses connectivity
|
v
Events buffered locally
|
v
Connection restored
|
v
Buffered events uploaded
|
v
Events validated and deduplicated
|
v
Asset history reconciled
Not every device can buffer, so design around what your hardware can actually do.
Also: keep "last known location" and "current location" as separate ideas. If a device hasn't reported in an hour, showing its last ping as if it's live is how people end up driving to the wrong building.
5. Observations aren't business events
A raw observation says what a device reported. A business event says what that means for your operation.
GPS Observation
|
v
Geofence Evaluation
|
v
Approved Movement Rules
|
v
Unexpected Exit Event
|
v
Notification or Workflow
A location update on its own isn't a problem. Before raising a flag, you might need to check the asset's assigned site, schedule, operating hours, or authorized moves.
Keeping this split means device processing stays independent of business policy, and when the policy changes (it will), you're not digging through ingestion code.
6. Design alerts to be quiet
A tracking platform produces a lot of events. If every one pings someone's phone, people will mute the channel within a week.
Alert on what needs attention:
IF asset leaves an approved area
AND movement is not authorized
THEN create an alert
For condition monitoring:
IF temperature exceeds configured threshold
FOR the required duration
THEN create a condition alert
Make thresholds and durations configurable per asset or use case. In production you'll also want to think about duplicate notifications, flapping thresholds, escalation, and recovery events. A temperature alert, for example, probably should stay open until readings return to normal or someone acknowledges it.
The goal is alerts people can act on, not a live feed of sensor chatter.
7. Let access patterns drive storage
Most tracking systems end up answering questions like:
- Where was this asset last seen?
- What happened to it last Tuesday?
- Which assets entered this area?
- Which devices stopped reporting?
- Which readings crossed their thresholds?
Those queries have different performance needs, so a common pattern is to keep a current-state view for fast lookups and a separate historical event store for reporting and investigations:
Incoming Events
|
v
Event Processing
|
+------> Current Asset State
|
+------> Historical Event Store
|
+------> Alert Processing
The right database depends on your event volume, retention needs, query patterns, and constraints. Index the fields you query most, partition history where it makes sense, and set retention policies early to keep performance and cost under control.
8. Integration is a feature, not an afterthought
Asset tracking almost never lives alone. It usually has to talk to inventory, fleet, maintenance, warehouse management, or ERP systems.
A maintenance tool might consume usage or condition events to plan servicing. A warehouse app might use RFID reads to update an asset's recorded movements.
But integration is more than exposing an endpoint. Think about authentication, authorization, rate limits, schema versioning, retries, and idempotency. If a message gets delivered twice, it shouldn't trigger the same business action twice.
9. Bake in security from day one
Location and movement history can reveal a lot about how an organization operates. Treat it accordingly:
- Device identity and secure provisioning
- Authentication and authorization
- Encryption in transit and at rest
- Role-based access control
- API access logging
- Secure credential management
- Retention and deletion policies
- Monitoring for suspicious activity
Match access to responsibility. A technician might only need equipment at one facility, while a fleet manager needs vehicles across regions. Retrofitting this after launch is painful, so design for it up front.
10. Measure whether it's actually useful
You can process millions of events and still not solve the problem you set out to solve.
Technical metrics matter: ingestion latency, processing failures, device availability, API response times. But so do operational ones, depending on your use case:
- How long it takes to find equipment
- Accuracy and completeness of asset records
- How often device data goes stale
- How long it takes to investigate important alerts
- Reduction in manual asset checks
- Equipment utilization
- Reliability of condition monitoring
These tie system performance to business outcomes, and they help you tell whether the problem is the technology, the workflow, or how people use the information.
Wrapping up
Building a reliable asset tracking system takes a lot more than reading GPS coordinates or scanning RFID tags. It has to understand different event types, protect data quality, cope with unreliable connectivity, apply sensible business rules, and get useful information to the right people and systems.
If you take away only a few things:
- Keep device ingestion separate from business logic.
- Normalize data, but preserve what it means.
- Expect delayed, duplicated, and missing events.
- Treat raw observations and business events as different things.
- Alert only when it's useful.
- Store current state and history in ways that fit how you query them.
- Integrate securely with the systems around you.
- Measure operational outcomes, not just technical ones.
Platforms like Asset Track Pro are a good illustration of the broader need to bring GPS, RFID, BLE, and IoT together around asset visibility and monitoring.
In the end, the goal is simple:
Collect reliable data, understand what it means, and turn it into action that improves an operation.
What's been the messiest part of tracking assets in your own projects? Let me know in the comments.
A few notes on what I changed:
Top comments (1)
tr.ee/dev-to