Fleet Telemetry Analysis on flespi: What Breaks at Scale
A fleet of two thousand GPS trackers. Last week, roughly forty of them went dark. Which forty? Nobody can say without pulling an export, joining it against the device list, and spending an afternoon in a spreadsheet. Meanwhile the vehicles behind those forty trackers are still driving — uninsured against every claim, dispute, and compliance question that telemetry exists to answer.
This is the recurring shape of fleet telemetry analysis at scale: flespi ingests and parses messages from hundreds of tracker models reliably, but the operational health of the fleet — which devices report, which channels parse cleanly, which streams deliver — degrades quietly unless someone is watching. And on fleets past a few hundred devices, nobody is watching everything.
This guide maps the failure modes that matter, why each one happens, how to detect it today with a flespi panel path or a REST call, and what it typically costs a fleet operator. It assumes you have a flespi account and a token — ideally a read-only ACL token for anything you script.
This is part one of a three-part series. Part two is a hands-on guide to GPS fleet monitoring with flespi's native tools — panel, REST API, MQTT, analytics. Part three covers automating flespi fleet operations with an AI agent.
1. Devices that silently stop reporting
What it is. The single most important health signal in any tracker fleet is last-message age: how long since each device produced a message. A tracker can die a dozen ways — SIM deactivated by the carrier, data plan exhausted, antenna damaged, firmware crash, power cut during a vehicle repair — and every one of them looks identical from the platform side: silence. flespi will not raise its hand on your behalf; a device with no messages is simply a device with no messages.
Why it happens at scale. On 50 devices, a driver or dispatcher notices a stale dot on the map within hours. On 2,000, a silent device is statistically invisible — the map still looks full. Silent-device counts in unmonitored fleets commonly drift to 2–5% before anyone runs a reconciliation, and each silent day is a day of untracked mileage, unbillable data (if you resell telemetry), and blind spots in driver-safety or ELD-style compliance reporting.
How to detect it. In the panel: Telematics hub → Devices, then sort or filter the grid by the last-message column and scan for stale timestamps. For anything scriptable, use the telemetry endpoint — the timestamp parameter is the epoch time of each device's most recent message:
curl -s -H "Authorization: FlespiToken $TOKEN" \
"https://flespi.io/gw/devices/all/telemetry/timestamp" \
| jq --arg now "$(date +%s)" '
.result[]
| {id, last: (.telemetry.timestamp.value // 0)}
| .age_hours = ((($now | tonumber) - .last) / 3600 | floor)
| select(.age_hours > 24)'
Anything over 24 hours for a vehicle that should be in service is a ticket. Anything over a week is probably a hardware or SIM problem, not a connectivity blip.
Typical impact. For operators billing per active device, silent devices are direct revenue leakage; for internal fleets they are compliance and dispute exposure. Either way, detection latency — not the failure itself — is the expensive part.
2. Message drops and parsing errors on mixed tracker fleets
What it is. Real fleets are heterogeneous: Teltonika here, Queclink there, a batch of Ruptela units from an acquisition, and a few no-name OEM trackers someone bought in 2021. In flespi, each protocol terminates in a channel, and channels are where parsing goes wrong: devices connecting to the wrong channel port, firmware updates that shift a proprietary field, malformed packets rejected by the protocol parser, or trackers misidentifying themselves so their traffic never reaches the right device object.
Why it happens at scale. Every tracker model added multiplies the protocol surface. Firmware rollouts happen fleet-wide and vendor-silently — the tracker updates itself overnight, and the first symptom is a parameter that stops arriving.
How to detect it. Open the channel in Telematics hub → Channels and check its Logs — connection events, parsing errors, and rejected frames are all recorded there per channel. Via REST:
curl -s -G -H "Authorization: FlespiToken $TOKEN" \
"https://flespi.io/gw/channels/all/logs" \
--data-urlencode 'data={"reverse":true,"count":100}' \
| jq '.result[] | {channel_id, timestamp, source, event_code}'
Scan for repeated error events concentrated on one channel or one device ident — that's your misbehaving tracker model. Cross-check volume too: a channel whose daily message count drops 30% while its device count holds steady is dropping or losing traffic somewhere.
Typical impact. Parsing failures are nastier than silence because the device looks alive — it connects, it appears in logs — while producing incomplete or zero usable messages. Trip reports and driver-behavior scores computed from partial data are worse than no data: they're confidently wrong.
3. Stream backlogs and delivery failures
What it is. The flespi model has three moving parts: channels ingest, devices store and normalize, streams forward to your downstream systems (your own backend, a TSP platform, a data warehouse). Streams fail independently of ingestion: the destination endpoint times out, credentials rotate, a TLS certificate expires. flespi queues undelivered messages for a stream, but a queue is a debt — if the destination stays down long enough, you're running your dispatch or billing system on stale data without knowing it.
How to detect it. Telematics hub → Streams shows each stream's state and queue in the panel. Via REST, list streams and look at queue size:
curl -s -H "Authorization: FlespiToken $TOKEN" \
"https://flespi.io/gw/streams/all?fields=id,name,enabled,queue_size" | jq
A non-zero queue that grows between two checks ten minutes apart means the destination is not keeping up or not accepting at all. Stream logs (/gw/streams/all/logs, same pattern as channel logs) tell you why.
Typical impact. Hours-long delivery gaps are common findings on first audit, and they surface downstream as "the map is frozen" support tickets that get misdiagnosed as tracker problems.
4. Geofence and parameter drift
What it is. Two slow-motion failure modes. First, geofence drift: depots move, customer sites change, geofences defined in Telematics hub → Geofences two years ago no longer match reality, so entry/exit events fire wrongly or not at all — and every report built on them inherits the error. Second, parameter drift: the set of parameters a device sends changes over time (firmware updates add or rename fields, an installer wires an input differently), so a calculator or downstream report that depends on din, ignition, or a fuel-level parameter silently reads nulls.
How to detect it. For parameter drift, diff the current telemetry parameter set of one device per tracker model against what your reports consume:
curl -s -H "Authorization: FlespiToken $TOKEN" \
"https://flespi.io/gw/devices/1234567/telemetry/all" \
| jq '.result[0].telemetry | keys'
If a parameter your trip logic depends on is missing from that list for a whole model cohort, you've found drift. For geofences, there is no substitute for a periodic review of the geofence list against current operational sites — schedule it quarterly.
Typical impact. Drift rarely breaks anything visibly; it degrades report accuracy month over month until someone disputes an invoice or a detention charge and the geofence evidence doesn't hold up.
5. Telemetry volume vs. retention cost
What it is. flespi bills around traffic and storage, and both scale with message frequency and retention. Every device and channel has a messages_ttl controlling how long messages persist. Defaults set during a proof of concept — high-frequency reporting, long TTLs, media (photos, CAN dumps) retained indefinitely — get inherited by the production fleet. Two thousand trackers at a 10-second reporting interval generate roughly 17 million messages a day; retaining all of it for a year because nobody revisited a TTL is a pure cost decision made by default.
How to detect it. Inventory TTLs across the fleet:
curl -s -H "Authorization: FlespiToken $TOKEN" \
"https://flespi.io/gw/devices/all?fields=id,name,messages_ttl,media_ttl" \
| jq '.result | group_by(.messages_ttl) | map({ttl_seconds: .[0].messages_ttl, devices: length})'
Then ask the only question that matters: what is the longest lookback any report, dispute process, or regulation actually requires? Everything beyond that is optional spend.
Typical impact. Retention rarely dominates a flespi bill, but on large fleets a TTL review typically trims a meaningful single-digit percentage — and it's a one-hour exercise.
Why the weekly export keeps failing you
Each check above takes minutes. The problem is arithmetic: five checks × per-channel and per-model granularity × a fleet that changes daily. A weekly export answers "which devices were silent as of last Tuesday" — by the time anyone acts, the SIM has been dead for ten days and the customer has already called. Fleet health isn't a report; it's a rate. Devices go silent continuously, firmware drifts continuously, streams back up at 2 a.m. The operators who stay ahead of it are the ones who made detection continuous instead of calendar-driven.
Start manual: part two of this series turns every check in this article into a repeatable DIY workflow using only the flespi panel, REST API, MQTT, and analytics engine.
Make the checks continuous
Everything in this guide can run unattended. CloudThinker connects to flespi with a read-only token and watches the whole surface continuously — last-message age per device, parsing errors per channel, stream queues, parameter drift — surfacing findings the day they appear instead of the week after, with any action gated behind your approval. Try CloudThinker free — 100 premium credits, no card required — or continue with the DIY flespi monitoring guide.
