Industrial IoT
Remote Equipment Monitor
Ingest unreliable telemetry from a zoo of industrial equipment, establish honest baselines, and page a human only when it genuinely matters.
The exploration
Mixed fleets of industrial equipment — pumps, compressors, chillers, generators — emit telemetry through whatever their vendors shipped a decade ago. The question this exploration asks: how much monitoring value can disciplined ingestion and honest statistical baselines deliver before any machine learning enters the picture? The hypothesis is: most of it.
The protocol zoo
There is no clean integration story. Modbus registers with vendor-specific meanings, OPC UA servers behind plant firewalls, MQTT brokers with ad-hoc topic schemes, SNMP traps, and — genuinely common — CSV files dropped on an FTP server every fifteen minutes. The design answer is a thin adapter per source that normalizes everything into one signal envelope: source, signal, unit, event time, ingestion time, quality flag. Every adapter’s quirks live in code and tests, not in tribal memory.
Time is the hard part
Field devices drift, batch uploads arrive hours late, and two timestamps that look comparable rarely are. The envelope therefore carries event time and ingestion time separately, and every downstream computation declares which one it uses. Gaps are treated as data: “no reading for 40 minutes” is a distinct, queryable fact — never silently interpolated, never confused with a reading of zero. Replays are idempotent, so a late-arriving batch corrects history instead of corrupting it.

Alerts that respect sleep
An alerting system is a promise about when it is acceptable to wake someone. The design treats paging discipline as a product feature: every alert must name a human action; severity tiers separate “page now” from “morning review”; hysteresis and flap suppression keep oscillating signals from machine-gunning a phone at 3 a.m. Night pages carry an explicit budget — a design target, reviewed like an error budget — and every page is followed by a one-tap “was this worth waking for?” answer that feeds the tuning loop. The mobile companion exists for exactly two verbs: acknowledge and escalate.
No ML until baselines exist
Anomaly detection over raw, heterogeneous, gap-riddled telemetry produces confident noise. The exploration’s stance is sequencing, not skepticism: first, per-signal statistical baselines that account for shift patterns and seasonality; then a measured false-positive rate on rule-based alerts; only then does a model get to argue it can beat the baseline. A model that cannot outperform a well-tuned threshold has no business paging anyone.
Shape of the build
- Adapters for three or four protocol families, each with a conformance test suite
- Time-series store keyed on the dual-timestamp envelope
- Rules engine with severity tiers, hysteresis, and per-rule paging budgets
- Web console for fleet overview and gap forensics; mobile companion for on-call
Evaluation
- Alert precision on a replayed corpus of real-style telemetry with injected faults
- Gap-detection correctness: every synthetic outage surfaced, none invented
- Paging budget adherence across a simulated month of on-call rotation
- Adapter cost: hypothesis that a new device family lands in under a week of work