Reveal before failure. An open industrial IoT platform for predictive maintenance.
Machines rarely fail without warning. Bearings wear, motors run hot and vibration creeps up for weeks before a breakdown. Condition monitoring catches that drift, but commercial systems are priced for large plants and tied to one vendor's sensors and cloud.
PHAEMOS brings the same idea to any workshop, lab or small site: low-cost microcontroller nodes on the machine, a model that learns what normal looks like for that machine and an open stack you host yourself.
Machines fail. Not suddenly but gradually, silently and invisibly. PHAEMOS exists to reveal what machines cannot say about themselves.
The name, pronounced FAY-mos, is coined from two Ancient Greek roots:
| Part | Root | Meaning |
|---|---|---|
| PHAE- | phaen- (φαιν-), as in phaínein | to reveal, to bring to light, the root behind phenomenon |
| -MOS | -mos, as in kósmos (κόσμος) | system or order |
Together they mean "an ordered system that reveals". The platform learns the normal order of each machine and reveals the readings that break it before they become a failure, which is where the tagline comes from: reveal before failure.
PHAEMOS has a sister project, MELOPHOS, named the same way. Its phos (φῶς, light) and the phaen- in PHAEMOS go back to the same ancient root, meaning "to shine".
flowchart LR
STM["STM32 Black Pill<br/>vibration FFT"] -- UART --> ESP["ESP32 gateway<br/>11 sensors"]
NANO["Arduino Nano<br/>auxiliary sensors"] -- serial --> ESP
ANY["Any node"] -. serial .-> EDGE["Rust edge gateway<br/>spools through outages"]
ESP -- HTTPS --> API["FastAPI backend<br/>Isolation Forest scoring"]
PICO["Pico 2W<br/>ambient node"] -- HTTPS --> API
EDGE -- HTTPS --> API
API --> DB[("PostgreSQL")]
API -- WebSocket --> DASH["Next.js dashboard"]
API --> OUT["Alerts, webhooks, Discord,<br/>email and SMS"]
Each node streams its readings to the API, which stores them and scores every reading against the machine's normal behaviour. A reading that drifts raises an alert, which can become a maintenance ticket. The full picture is in docs/architecture.md.
- Four sensor nodes. An ESP32 gateway with 11 sensors, an STM32 running a vibration FFT at 100 Hz, an Arduino Nano and a Raspberry Pi Pico 2W cover temperature, vibration, current, gas, sound, distance and shaft speed.
- Anomaly detection without fault data. An Isolation Forest learns each machine's normal behaviour and scores readings as they arrive, so no labelled failures are needed to start.
- Operations built in. Alert rules, maintenance windows, tickets, webhooks to Slack, Discord and Teams, email and SMS, an audit log of every change and role-based access with optional two-factor enrolment.
- Resilient at the edge. A Rust gateway spools every reading to disk during a network outage and sends it on in order once the link returns.
- Built to be built on. A Python SDK, a simulator with injectable faults and a Go CLI for load testing.
- Open hardware and software. CERN-OHL-S hardware designs, AGPL code and a Docker Compose stack you run yourself.
Note
The platform software runs end to end today, with a simulator standing in for real machines. I am now wiring the four physical nodes and preparing to train the model on real readings.
| Milestone | What it covers |
|---|---|
| Verify: full local test | The whole stack run locally, every page walked end to end |
| Community: Discord server | A scripted Discord server for support, each board and show and tell |
| Launch: external services | The API, dashboard, docs and status page online, with email, SMS and social sign-in |
| Hardware: physical nodes | Every sensor tested on real machines, the model trained on that data, then PCBs and enclosures |
| Python | TypeScript | C++ | Rust | Go | MicroPython |
| FastAPI | SQLAlchemy | scikit-learn | PostgreSQL | Redis |
| Next.js | Tailwind CSS |
| ESP32 | STM32 | CMSIS-DSP | Arduino | Raspberry Pi |
| Proteus | KiCad |
| Docker | Prometheus | Grafana |
| Layer | Stack |
|---|---|
| Sensor nodes | C and C++ on the ESP32, STM32 (CMSIS-DSP) and Arduino Nano, MicroPython on the Pico 2W |
| Edge gateway | Rust |
| Backend | Python, FastAPI, SQLAlchemy and scikit-learn |
| Data | PostgreSQL and Redis |
| Dashboard | TypeScript, Next.js and Tailwind CSS |
| Developer tools | Python SDK and simulator, Go CLI (phaemosctl) |
| Hardware | Proteus for circuit simulation, KiCad for schematics and PCB layouts |
| Infrastructure | Docker Compose, Prometheus and Grafana |
| Repository | What it is |
|---|---|
| phaemos | The monorepo where all development happens. Start here |
| backend | FastAPI ingest, alerting, tickets and anomaly scoring |
| frontend | Next.js live monitoring dashboard |
| firmware | Firmware for the ESP32, STM32, Arduino Nano and Pico 2W nodes |
| hardware | Wiring tables, schematics, PCB layouts and the parts inventory |
| edge | Rust store-and-forward gateway |
| client | Python SDK, telemetry simulator and the phaemosctl Go tool |
| infra | Docker Compose stack, monitoring and reporting SQL |
Every component repository is a read-only copy published from the monorepo. Issues, discussions and pull requests all go to phaemos/phaemos.
- Start here: the welcome post and the roadmap post
- Try it without hardware: run PHAEMOS on a laptop with the simulator
- Questions and ideas: Discussions, with Q&A for help and Research for papers and datasets
- Bugs and feature requests: issues on the monorepo
- Contributing: the contributing guide and issues labelled good first issue
- Security: report vulnerabilities privately through the security policy
- Contact: [email protected]
The software is licensed under AGPL-3.0-or-later and the hardware designs under CERN-OHL-S-2.0. NOTICE.md explains which licence covers what.