Current Project

Wind-Turbine Sensor Data Pipeline

A live industrial telemetry platform that moves wind-turbine sensor data through Kafka, stores time-series history in InfluxDB, and serves realtime plus historical monitoring to a Shiny dashboard.

Project Story

From raw turbine telemetry to usable monitoring.

The platform is designed around a practical data-engineering split: Kafka carries the live stream, InfluxDB keeps historical time-series data queryable, and the dashboard uses each system for the thing it does best. Live views connect to the Kafka live stream API over `/ws/live`, while historical charts call `/history`, which queries InfluxDB.

Architecture

Purpose-built flow for live and historical telemetry.

Source

Wind Turbine Sensors

Industrial telemetry arrives through MQTT topics.

Message Stream

Kafka

Receives normalized windfarm telemetry and makes it available to storage and live API consumers.

Kafka WebSocket API

Kafka Live Stream API

Consumes Kafka, keeps a live buffer, broadcasts `/ws/live`, and serves `/history` from InfluxDB.

Storage Worker

store

Consumes Kafka messages and writes clean time-series points into InfluxDB.

Time-Series DB

InfluxDB

Stores historical readings for range queries and sensor comparisons.

Dashboard

consume

Shiny + Plotly dashboard combines `/ws/live` updates with Influx-backed historical charts.

Design Decisions

Realtime and history are treated as separate jobs.

Kafka as the stream boundary

Kafka is the realtime spine. The live API subscribes to the Kafka topic instead of coupling the dashboard to upstream telemetry ingestion.

InfluxDB for historical analysis

InfluxDB stores time-series data for historical queries, comparisons, and asset-level sensor analysis.

Websocket for true live UI

The dashboard receives snapshot, status, and event payloads through `/ws/live`, backed by the Kafka consumer in the live API.

Engineering Work

Problems handled so far.

This list is intentionally editable as the project grows.

01

Realtime transport

Replaced brittle live polling with websocket-based updates.

02

Stream boundary

Kept live updates on `/ws/live` while historical query charts use `/history` backed by InfluxDB.

03

Dashboard usability

Added separate live selection, multi-sensor history comparison, and asset filtering.

04

Operational packaging

Docker Compose keeps the pipeline services runnable as a full local system.

Use Cases

Where this architecture fits.

Industrial telemetry dashboards Wind farm monitoring Asset-level sensor analysis Predictive maintenance visibility Realtime data-engineering showcase

Tech Stack

Tools chosen for the data path.

Python MQTT Kafka InfluxDB Kafka WebSocket API Docker Compose Plotly Shiny