Industrial IoT Platform

Harms Oil Company

Real-Time Tank Monitoring & Dispatch Platform

An end to end industrial IoT platform that turns live tank readings from 30+ gauge brands into automated dispatch. SimpleLogix built and operates the edge firmware, the cloud API, and the dashboard.

30+ Gauge models supported
15 min Automated dispatch cadence
Harms Oil fuel station at night

Harms Oil moves bulk fuel to a network of retail and commercial sites. Knowing exactly how much product is in every tank, at every site, in real time is the single biggest lever in their business. It drives dispatch, prevents run-outs, and keeps trucks from rolling on half-full loads. Before SimpleLogix, that visibility depended on phone calls, manual gauge reads, and reactive replenishment.

The Challenge

Harms Oil needed to see every tank on every site in real time, across more than 30 different gauge models from Veeder-Root, OPW, Franklin Fueling, Incon, Gilbarco, EBW, Omntec, and ProGauge. Each gauge spoke its own protocol with its own serial and TCP quirks. There was no unified data layer, dispatch was reactive, and their logistics partner Gravitate required tank data in a specific CSV format on a fixed cadence. This was not a dashboard project. It was an end to end industrial IoT platform.

The Solution: A Three-Tier IoT Platform

SimpleLogix designed, built, and now operates a three-tier platform. A Moxa industrial Linux edge device sits on site and polls the physical gauge over RS-232, RS-485, or raw TCP, parses the proprietary response, and ships normalized JSON to the cloud. An ASP.NET Core 7 cloud API (60+ controllers, MediatR, EF Core, SQL Server) ingests readings, runs scheduled workers, and serves the dashboard. An Angular 17 web dashboard gives dispatchers a live map, a color-coded dispatch board, and fleet health, secured with Azure AD single sign-on.

Engineering Highlights

An edge device that speaks 30+ gauge dialects, each driver handling unique framing and normalizing tank number, gallons, inches, water, temperature, and ullage into one JSON schema. A decoupled reading cadence so a stuck gauge never stops a heartbeat. Over-the-air code updates so a parser fix never needs a truck roll. A Dapper-powered query every 15 minutes renders tank data into Gravitate's CSV shape and pushes it over SFTP, so dispatch orders are generated from live ullage with zero manual work.

Outcomes

Live tank visibility fleet-wide, every tank, every site, every 15 minutes on one screen. Fully automated dispatch handoff to Gravitate with no spreadsheets or phone calls. Self-healing fleet operations through heartbeats, auto-offline detection, OTA updates, and read-error tracking, so ops staff manage by exception. New sites onboard regardless of the gauge brand on the wall.

Tech Stack

Moxa Linux edge (PHP / Bash)ASP.NET Core 7MediatREF Core + DapperSQL ServerAngular 17 + SSRAzure AD (MSAL)Google MapsApexChartsRenci.SshNet (SFTP)NLogIIS

Have a Project Like This?

Tell us what you are trying to build or fix. We design the integration, write the cloud, and stay on as your engineering team.