Menu
Industrial IoT

Connected fuel management and tank telemetry platform for fleet operators

A platform that turns a fuel dispenser into a controlled, connected device: fuel does not flow until the operator, vehicle, hose and tank are authorised, every unit dispensed is metered, priced and attributed, and tank inventory is reconciled against what was actually dispensed — behind a Java backend, a Vue 3 operations console and a React Native field application.

Client — an industrial IoT vendor serving fuel and fleet operators
Concept visuals — not actual screenshots
01 — Challenge

Fleet operators storing their own fuel face a control problem that's individually mundane and collectively expensive: fuel is dispensed at an unattended pump, by a driver, into a vehicle, with nobody watching, and the record of what happened is a clipboard. Tank contents are unknown between manual dips. Meters and level sensors both drift as they age, so metered volume and true tank contents quietly diverge, and a shrinkage figure that's actually instrument error is indistinguishable from a real loss until someone separates the two. Deliveries, dispensing and stock levels tell three different stories, and a controller that loses power mid-dispense leaves an open transaction and possibly an open valve — a safety problem before it's an accounting one.

02 — Approach

Made authorisation a precondition of physical actuation: before a valve opens, the platform verifies operator, company, department, hose, tank, product, active price, vehicle, and vehicle-hose and operator-vehicle authorisation as a sequence of independently coded checks, each with its own outcome, so a refused dispense always tells the operator exactly what's wrong rather than returning a generic error. Priced dispensing is never retrospective — fuel can't flow without an active, non-zero price for that product at that company.

Built the device protocol as a first-class layer: registration, heartbeat, valve control and completion frames are decoded through a dedicated codec with CRC checksums, sequence numbering and command acknowledgement, with every frame persisted alongside its raw payload so a disputed transaction can be re-derived from exactly what the hardware sent. When there's no network, the mobile application talks to the dispenser controller directly over Bluetooth using the same command vocabulary, runs the dispense locally and buffers the resulting transactions for bulk upload on reconnection. Level sensors and meters are calibrated independently — a level-sensor offset from reading versus physical measurement, a meter correction factor from indicated versus actual dispensed volume — each with a full change history, so a reconciliation report can separate instrument drift from real loss. A minute-interval watchdog finds transactions a device never reported complete, closes them and raises an alert, treating device silence as an operational event rather than a data gap.

03 — Impact

Dispensing became a controlled, attributed event instead of an unwatched pump and a clipboard. Remote sites operate at full capability with no connectivity, because Bluetooth dispensing with deferred sync means no signal doesn't mean no fuel and no missing records. Tank contents are known continuously through level telemetry rather than periodic manual measurement, instrument drift is separated from real inventory loss through independently audited calibration, and incomplete dispenses are caught and closed automatically rather than sitting open in the ledger.

Stack
MySQLReact NativeVue.jsJavaSpring BootMySQLMyBatis-PlusRedisMQTTNettyVue 3React Native
More work
Configurable edge PLC platform for remote water infrastructure monitoring→

Something holding you back?

New build, rebuild, or adding AI to what you already have — I'll take a look and give you an honest perspective.

Get in touch ↗