Openpresso is composed of several independent projects that together form the complete platform.
Architecture
graph TD
UI_Front[Web UI Frontend] -->|Web Sockets / REST| UI_Back[Web UI Backend]
UI_Back --> Proto1[gRPC / Openpresso.proto] --> Daemon[Openpressod]
UI_Back --> DB[(Openpresso DB)]
CLI[Openpresso-ctl] --> Proto2[gRPC / Openpresso.proto] --> Daemon
Daemon -->|Links against| Lib[Libopenpresso]
Lib --> Hardware{{Sensors / Output drivers}}
click Lib "#libopenpresso" _self
click Daemon "#openpressod" _self
click CLI "#openpresso-ctl" _self
click UI_Front "#openpresso-frontend" _self
click UI_Back "#openpresso-backend" _self
click Proto1 "#openpresso-proto" _self
click Proto2 "#openpresso-proto" _self
Components
Libopenpresso
The foundation of the entire ecosystem.
Libopenpresso provides high-level abstractions for espresso machine hardware such as:
- Temperature sensor
- Pressure controller
- Solenoid valve
- Indicaton lamps and buttons
The library is intentionally made machine-agnostic and can be configured to support different hardware modules and machine architectures.
Openpressod
The machine control daemon.
Openpressod uses Libopenpresso to interact with hardware and exposes machine functionality through gRPC over Unix or TCP sockets.
Current implementation configures the Libopenresso to target specific hardware modules and a machine, such as the Gaggia Classic Pro. Later it may be refactored to make it more flexible or just use as a reference point to implement another deamon.
Openpresso.proto
The shared Openpressod gRPC API definition.
This repository contains protocol definitions and generated stubs used by the daemon and client applications.
Openpresso-ctl
A command-line client for interacting with Openpressod.
It maps daemon gRPC API directly to CLI commands. Useful for testing or creating simple cron tasks like scheduled preheating.
Web Backend (planned)
REST API, database access, daemon communication.
Web Frontend (planned)
Dashboard, brew profile editor, history viewer, and machine control interface with dynamic layout to be able to use on a small touchscreen attached to espresso machine with kiosk mode browser or on any external device in the local network.
Development Infrastructure
Openpresso Toolchain
A helper repository containing Docker images with a cross-compiling toolchain used to compile Openpresso components consistently across development systems.