← Back to Portfolio
Industrial IoT Platform

Industrial Things

Industrial Things Hero Image

An Industrial IoT platform for manufacturing monitoring, OEE analytics, and event-driven alerting. Built with Go, TimescaleDB, and Apache Kafka to ingest and process real-time machine telemetry from CNC machines and industrial equipment.

Role

Sole Architect & Developer

Timeline

2024 — Present

7Microservices
5Kafka Consumers
20+API Endpoints
16Domain Packages
5Notification Channels
GoLanguage
Loading architecture...

The platform follows a highly decoupled 7-service microservice architecture designed for fault tolerance and horizontal scalability. By routing all heavy ingestion and state changes through Kafka, the API server remains responsive even during traffic spikes from shop-floor devices.

Core Services

  • API Server: Handles client requests, organizational hierarchy management, and device configuration.
  • Event Consumer: Processes discrete machine events (e.g., Execution, ControllerMode, PartCount) from Kafka into TimescaleDB.
  • Sample Consumer: Handles continuous numeric time-series data (e.g., SpindleSpeed, Temperature, Load).
  • Condition Consumer: Tracks machine fault states, warnings, and system alarms.
  • Job Event Consumer: Synchronizes ERP/MES production data with real-time machine activity.
  • OEE Consumer: Continuously aggregates state changes to update Availability, Performance, and Quality metrics.
  • Notification Worker: Evaluates subscriptions against the event bus and dispatches alerts via multi-channel webhooks.

Real-Time IoT Ingestion

  • ▹ Batch processing with LRU caching
  • ▹ Dead letter queues for unparseable data
  • ▹ Auto-component registration on first sight

OEE Analytics

  • ▹ Availability × Performance × Quality
  • ▹ Nil semantics (distinguishing zero from missing data)
  • ▹ Short-stop detection algorithms

Event-Driven Alerting

  • ▹ Plugin-based EventBus architecture
  • ▹ Subscription pattern matching (exact + wildcard)
  • ▹ Duration conditions & rate limiting

Notification System

  • ▹ Transactional outbox pattern
  • ▹ Multi-channel delivery (Slack, Teams, Email)
  • ▹ Exponential backoff retry mechanics

The platform relies heavily on the Go ecosystem for high-throughput concurrency, while TimescaleDB provides the bedrock for fast time-series analytical queries alongside standard relational data.

Language

Go 1.22

Databases

TimescaleDB PostgreSQL 17

Messaging

Apache Kafka

Framework & Tooling

Gin sqlc Goose

Infrastructure

Docker Kubernetes Helm

Observability

Prometheus

The platform implements a sophisticated plugin-based domain event architecture. Rather than tightly coupling services, actions emit strictly typed events that other domains can react to asynchronously.

Event Naming Convention

Events follow a rigid dot-notation structure: domain.entity.action

  • observation.event.created
  • device.runtime.updated
  • maintenance.threshold.exceeded
  • oee.record.created

Subscription Evaluation Flow

When a user creates an alert rule (e.g., "Tell me when Device A is down for more than 5 minutes"), the Notification Worker runs the event through a multi-stage pipeline:

  1. Pattern Matching: Does the event type match? Supports wildcards (e.g., observation.*.created).
  2. Filter Rules: Do the payload values match the user's AND/OR logic rules?
  3. Duration Conditions: Has this state been active continuously for X minutes?
  4. Rate Limiting: Has this user been alerted about this recently?
  5. Outbox Commit: Securely write the notification intent to the database within the same transaction.

Overall Equipment Effectiveness (OEE) is the gold standard for measuring manufacturing productivity. Industrial Things calculates this continuously based on real-time state changes, rather than relying on delayed end-of-shift reports.

Availability

Run Hours / Planned Hours

×

Performance

(Total Parts × Ideal Cycle) / Run Hours

×

Quality

Good Parts / Total Parts

Nil Semantics

A crucial design decision was implementing strict Nil Semantics. In many platforms, a missing value is treated as zero. In Industrial Things, nil explicitly means "we lack sufficient data to calculate this." If a machine hasn't run any parts today, its Performance is nil, not 0%. This prevents skewed aggregates.

Value Capping

Performance anomalies (like an operator batch-entering 1,000 parts at once) can cause Performance to spike to 500%. The analytics engine caps individual metric components at 1.0 (100%) to ensure the overall OEE remains mathematically sound.

7-Day OEE Trend

Simulated Plant Data
7-Day OEE Trend Chart0%25%50%75%100%MonTueWedThuFriSatSun
Availability
Performance
Quality
OEE (Overall)

Industrial Things is a high-performance, event-driven Industrial IoT platform designed to ingest, process, and analyze real-time telemetry from manufacturing environments. Built primarily to monitor CNC machines and industrial equipment using the MTConnect standard, the platform transforms raw shop-floor data into actionable insights, automated workflows, and precise OEE (Overall Equipment Effectiveness) metrics.

The Problem

Modern manufacturing facilities generate a massive amount of telemetry data, but it is often siloed, difficult to query historically, and disconnected from maintenance and operational workflows. Tracking the true efficiency of a machine requires correlating its real-time operating state with ongoing labor activities, active production jobs, and rigid maintenance schedules.

The Solution

I designed Industrial Things as a distributed, 7-service microservice architecture built with Go, Apache Kafka, and TimescaleDB. It acts as the central nervous system for the shop floor:

  • High-Volume Ingestion: Real-time IoT observations (events, samples, conditions) are streamed directly from edge devices into Kafka topics.
  • Precision Analytics: It calculates OEE (Availability × Performance × Quality) with strict downtime categorization and short-stop detection.
  • Event-Driven Workflows: A robust plugin-based event system evaluates thousands of rules per second, dispatching alerts via Webhooks, Slack, Teams, Email, and SMS.
  • Automated Maintenance: By integrating with Limble CMMS, the platform translates real-time machine runtime thresholds directly into automated maintenance work orders.
  • Hierarchical Modeling: A flexible organizational model tracks sites, facilities, value streams, devices, and individual components.

The platform is designed for uncompromising reliability, utilizing transactional outbox patterns, exponential backoff retries, and comprehensive Prometheus observability across all services to ensure no critical event is ever missed.

Technologies Used

Go TimescaleDB Apache Kafka Gin Docker Kubernetes Helm Prometheus sqlc