You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
docs(readme): rewrite for v2.0 Tag API and trim to 160 lines
Replaces the old 307-line README that still referenced the retired
Sensor / addThresholdRule / addStateChannel / EventConfig API. New
structure foregrounds the Tag domain model (SensorTag / StateTag /
MonitorTag / CompositeTag / TagRegistry), drops in-README screenshots,
and replaces the Five-Pillars walk-through with a compact
"What's in the box" capability list.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
**200+ FPS. 100M+ points. Zero toolbox dependencies.**
11
+
> **Sensor data, at the scale you actually have it — in MATLAB.**
12
12
13
-
Sensor monitoring and dashboarding platform for MATLAB and GNU Octave. Plot massive time series with SIMD-accelerated downsampling, define state-dependent threshold rules, detect violations in real time, and compose interactive dashboards with 21 widget types — all in pure MATLAB.
13
+
FastSense is a pure-MATLAB platform for working with massive sensor time-series. Plot 100M+ points without crashing, model sensors as **Tags** with state-aware behaviour, detect events as they happen, and compose interactive dashboards — all without a single toolbox license.
Built for engineers who deal with real industrial data: long recordings, condition-dependent alarm limits, dashboards that need to stay live for hours, and the moment when MATLAB's own `plot()` falls over at 10M points.
d.save('my_dashboard.json'); % reload later with DashboardEngine.load()
42
-
```
43
-
44
-
---
45
-
46
-
## Table of Contents
47
-
48
-
-[Why FastSense?](#why-fastsense)
49
-
-[Performance](#performance)
50
-
-[Features at a Glance](#features-at-a-glance)
51
-
-[Installation](#installation)
52
-
-[The Five Pillars](#the-five-pillars)
53
-
-[Examples](#examples)
54
-
-[Documentation](#documentation)
55
-
-[Contributing](#contributing)
56
-
-[Citation](#citation)
57
-
-[License](#license)
58
-
59
-
---
60
-
61
-
## Why FastSense?
62
-
63
-
MATLAB's built-in `plot()` loads every data point into GPU memory and redraws the entire figure on each zoom or pan. For sensor data at 10M+ points, this means multi-second lag, memory exhaustion, or a crash.
64
-
65
-
FastSense solves three problems that no existing MATLAB toolbox addresses together:
66
-
67
-
-**Scale** — render 100M+ point datasets without loading them fully into memory, using SIMD-accelerated MinMax and LTTB downsampling that keeps only the pixels you can actually see
68
-
-**Context** — model real industrial sensors where alarm limits change based on machine state (idle vs. running vs. fault), not just static threshold values
69
-
-**Organization** — compose multi-widget monitoring dashboards with tabbed pages, collapsible sections, and detachable pop-out windows — without writing layout code
70
-
71
-
All of this runs in pure MATLAB with no toolbox requirements. MEX C extensions with AVX2/NEON SIMD are optional accelerators; pure MATLAB fallbacks are used automatically.
72
-
73
-
---
74
-
75
-
## Performance
76
-
77
-
FastSense vs. MATLAB's built-in `plot()` on 10M data points:
<sub>MacBook Pro M1 Pro, 16 GB, GNU Octave 11, MEX+NEON. Point reduction: 99.96%. Performance is tracked on every commit — regressions trigger alerts. <ahref="https://hansur94.github.io/FastSense/dev/bench/">Live benchmark charts</a></sub>
33
+
That renders in **a few milliseconds and stays at 200+ FPS while you zoom and pan**. MATLAB's built-in `plot()` takes ~3 seconds on the same data and crawls at ~2 FPS. ([benchmarks ↓](#performance))
87
34
88
35
---
89
36
90
-
## Features at a Glance
91
-
92
-
**Time Series Engine** — Render 10M+ points at 200+ FPS with automatic per-pixel downsampling. MinMax and LTTB algorithms, linked axes, datetime support, 6 built-in themes. Optional MEX C acceleration (AVX2/NEON) with pure-MATLAB fallback.
37
+
## The core idea: Tags
93
38
94
-
**Sensor Modeling** — State-dependent threshold rules where alarm limits change based on machine state. Automatic violation grouping, statistics, and a sensor registry for predefined catalogs.
39
+
Everything in FastSense — sensors, machine states, alarms, derived signals — is a **Tag**. One unified type, four flavours:
95
40
96
-
**Dashboard Engine** — 21 widget types on a 24-column responsive grid. Multi-page navigation, collapsible sections, detachable pop-out widgets, per-widget info tooltips. JSON persistence and live mode with synchronized refresh.
Tags carry their own metadata (units, criticality, labels) and live in a shared **`TagRegistry`** so every part of the system — plots, dashboards, event detection, the web bridge — speaks the same language.
112
49
113
50
```matlab
114
-
install; % adds paths + compiles MEX accelerators
115
-
```
116
-
117
-
No toolbox dependencies. No internet required. MEX compilation is optional — pure MATLAB fallbacks are used automatically if no C compiler is available.
**Requirements:** MATLAB R2020b+ or GNU Octave 7+ | Linux, macOS, or Windows
120
-
121
-
---
54
+
% Alarm whenever pressure > 55 bar
55
+
alarm = MonitorTag('press_high', press, @(x, y) y > 55);
122
56
123
-
## The Five Pillars
57
+
TagRegistry.register(press);
58
+
TagRegistry.register(alarm);
124
59
125
-
### FastSense — Ultra-Fast Time Series Engine
126
-
127
-
The core plotting engine. Renders 10M+ data points with automatic downsampling (MinMax and LTTB), dynamic thresholds, and interactive zoom/pan — all at 200+ FPS. See [Performance](#performance) for benchmarks.
-**SQLite-backed storage** — disk-backed DataStore for 100M+ datasets exceeding memory
66
+
The same `alarm` tag drives event detection, lights up status widgets in the dashboard, fires notifications, and shows up in the browser bridge — without you re-declaring the rule four times. For monitors that depend on multiple parents (e.g., a state-conditional alarm), compose them via `CompositeTag`.
Bundles time-series data with discrete system states and condition-based threshold rules. A running machine has different alarm limits than an idle one — SensorThreshold models exactly that.
72
+
Compose monitoring dashboards from widgets on a 24-column grid. The same Tags drive the data — no re-wiring.
151
73
152
74
```matlab
153
-
s = Sensor('pressure', 'Name', 'Chamber Pressure', 'ID', 101);
-**State channels** — discrete system states (idle, running, error) as zero-order-hold lookups
166
-
-**Condition-based rules** — thresholds that activate only when conditions match
167
-
-**Automatic violation grouping** — pre-computed during `resolve()`
168
-
-**Sensor registry** — predefined sensor catalog for quick setup
169
-
170
-
---
171
-
172
-
### EventDetection — Violation Detection and Live Pipeline
173
-
174
-
Groups threshold violations into discrete events with statistics, live monitoring, and notifications. Detects when sensors exceed limits, how long, and how severe.
-**Multi-page tabs · collapsible groups · pop-out detached widgets**
89
+
-**Live mode** — synchronised refresh on a configurable timer
90
+
-**Browser bridge** — `WebBridge(d).serve()` exposes the dashboard over TCP to a FastAPI + uPlot frontend
190
91
191
92
---
192
93
193
-
### Dashboard — Widget-Based Dashboard Engine
194
-
195
-
Build monitoring dashboards from composable widgets on a 24-column grid. Supports live data, JSON persistence, multi-page navigation, collapsible sections, and 21 widget types.
-**Multi-page navigation** — tabbed pages for organizing large dashboards
215
-
-**Collapsible sections** — fold/unfold grouped widgets with a single click
216
-
-**Detachable widgets** — pop any widget into its own independent figure window, live-mirrored from the dashboard
217
-
-**Info tooltips** — per-widget Markdown documentation shown on hover or click
105
+
<sub>MacBook Pro M1 Pro · GNU Octave 11 · MEX + NEON. Tracked on every commit; regressions trigger alerts. <ahref="https://hansur94.github.io/FastSense/dev/bench/">Live benchmark charts</a></sub>
-**Live mode** — synchronized data refresh across all widgets on a configurable timer
222
-
-**Script export** — regenerate the dashboard as a `.m` script
107
+
The trick: per-pixel **MinMax** and **LTTB** downsampling (SIMD C kernels with pure-MATLAB fallbacks), an SQLite-backed disk store for datasets that don't fit in RAM, and a render pipeline that only touches the points you can actually see.
223
108
224
109
---
225
110
226
-
### WebBridge — Browser-Based Visualization
111
+
##What's in the box
227
112
228
-
Exposes dashboards to a web frontend over TCP. MATLAB stays the data engine; the browser handles rendering.
MEX is optional — pure-MATLAB fallbacks kick in if no C compiler is available. Requires MATLAB R2020b+ or GNU Octave 7+ on Linux, macOS, or Windows.
272
137
273
138
---
274
139
275
-
## Contributing
140
+
## Examples & docs
276
141
277
-
Contributions are welcome! Here's how to get started:
142
+
40+ runnable scripts in [`examples/`](examples/), grouped by topic (`01-basics` … `07-advanced`). Run them all with `run_all_examples`.
278
143
279
-
1.**Report a bug** — open an [issue](https://github.com/HanSur94/FastSense/issues) with a minimal reproducer
280
-
2.**Suggest a feature** — open an issue to discuss before writing code
281
-
3.**Submit a fix** — fork, branch, and open a pull request
282
-
283
-
For architecture details and development setup, see the [Architecture wiki page](https://github.com/HanSur94/FastSense/wiki/Architecture). The test suite runs with `run_all_tests` in MATLAB/Octave.
144
+
Full reference lives in the [Wiki](https://github.com/HanSur94/FastSense/wiki): Getting Started · API Reference · Architecture · MEX details · Performance.
284
145
285
146
---
286
147
287
-
## Citation
288
-
289
-
If you use FastSense in your research, please cite it:
148
+
## Citation · License
290
149
291
150
```bibtex
292
151
@software{fastsense,
293
-
author = {Suhr, Hannes},
294
-
title = {FastSense: Sensor Monitoring and Dashboarding for MATLAB and GNU Octave},
295
-
url = {https://github.com/HanSur94/FastSense},
296
-
license = {MIT}
152
+
title = {FastSense: Sensor Monitoring and Dashboarding for MATLAB and GNU Octave},
153
+
url = {https://github.com/HanSur94/FastSense},
154
+
license= {MIT}
297
155
}
298
156
```
299
157
300
158
See [`CITATION.cff`](CITATION.cff) for the full citation metadata.
0 commit comments