This release is a pre-release and may not be stable for production use.
Acquirium
A Data-Metadata Framework for Water Treatment Plants
Acquirium is a framework for storing, managing, querying, and integrating data and metadata for water treatment systems. It combines knowledge graphs and time series data to support analysis, monitoring, and experimentation.
Installation
From PyPI:
pip install acquirium
Optional extras for specific drivers:
pip install "acquirium[mqtt]" # MQTT ingestion driver
pip install "acquirium[xlsx]" # Excel ingestion driver
pip install "acquirium[watertap]" # WaterTAP simulation driver
Or with uv:
uv pip install acquirium
For development from a clone:
git clone https://github.com/DataDrivenCPS/acquirium.git
cd acquirium
uv sync
Quickstart
The easiest way to experiment with acquirium is through an example. We strongly recommend following the steps in the WaterTAP readme. WaterTAP is a simulation tool with an acquirium integration; following the steps there runs acquirium as if it were connected to a live plant, generating physically realistic data you can query and build applications on.
The server and its configured drivers start from one command:
acquirium server --config acquirium.toml
A sample acquirium.toml is included at the repository root. By default everything is stored on local disk (an embedded Oxigraph RDF store and a DuckDB file under data_dir); no external services are required. The first start builds the text-resolution indexes and can take 5-10 minutes; later starts reuse the cache.
Querying is a Python client:
from acquirium import Acquirium
acq = Acquirium(server_url="localhost", server_port=8000)
acq.query().entity("pump").measurement(quantity_kind="pressure").dataframe(shape="wide")
Documentation
The guides live in docs/, organized as tutorials, how-to guides, reference and explanation.
Start here — learning by doing, on the WaterTAP seawater-ro model:
| tutorial | covers |
|---|---|
| Getting started | install, start a server, run a first query |
| Querying | the Query verbs: entities, topology, measurements, filters, columns |
| Query cookbook | domain questions, how to phrase them, the query |
| Working with data | lazy fetching, shapes, units, taking a result apart |
| Your first driver | authoring a CSV driver step by step |
How-to guides — one task each: load a plant model, explore a model, debug a query, insert data, run the server, resolve text to URIs.
Reference — facts, no narrative: client API, drivers, server configuration, HTTP API, glossary.
Explanation — why things are the way they are: the query model, values and units, why drivers, the data stream lifecycle, text resolution, server internals, graph backend.
App documentation is pending the app infrastructure rework.
Docker stack (optional)
A compose.yaml is provided for an all-in-one local stack (Acquirium + TimescaleDB + Grafana):
make up # start
make up ACQUIRIUM_RECREATE=true # wipe data + start
make down # stop
By default each Docker run resets the system. To preserve data across runs, set
ACQUIRIUM_RECREATE=falseincompose.yaml.
WaterTAP integration
The watertap extra installs the Python packages for the built-in WaterTAP driver, plus a one-time install of native solver extensions:
pip install "acquirium[watertap]"
idaes get-extensions # native IDAES/IPOPT solver binaries
# with uv: uv sync --extra watertap && uv run idaes get-extensions
acquirium server --config deployments/WATERTAP/scripts/acquirium.toml
The WaterTAP deployment readme covers the models, the data generator, and the example notebooks under notebooks/watertap/.
Text resolution
Free text anywhere in the API (class names, units, quantity kinds) is matched to ontology URIs by embedding similarity, using two indexes built from the bundled ontologies at server start. See the resolution guide.
Tests
uv run pytest tests/unit # unit tests only (or: make unit-test)
make test # full suite (Docker required)
Status
Acquirium is under active development. Planned work is tracked in improvements.md. Bug reports and feature requests are welcome — please open an issue.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file acquirium-0.4.0a5.tar.gz.
File metadata
- Download URL: acquirium-0.4.0a5.tar.gz
- Upload date:
- Size: 967.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
uv/0.12.9 {"installer":{"name":"uv","version":"0.12.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cee63fa74c031641ca7ae379ff3b099e3b1da1d676e9d75dd47f8d2147d9058b
|
|
| MD5 |
58d2d16ef92c51f937294005f0fd697f
|
|
| BLAKE2b-256 |
85b5f5df4b0cd01617d763edd5155723fcae1bcde85207345f0d7c649d64466a
|
File details
Details for the file acquirium-0.4.0a5-py3-none-any.whl.
File metadata
- Download URL: acquirium-0.4.0a5-py3-none-any.whl
- Upload date:
- Size: 1.0 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
uv/0.12.9 {"installer":{"name":"uv","version":"0.12.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7ea69f41d500212b228e79e9a1e990814bcc4b7e2d27db8b9cc87fc1b32302e7
|
|
| MD5 |
e0e0455eb39a447e1f27777168fe85c8
|
|
| BLAKE2b-256 |
4188080bc220992ce3b8cc38685033bbc273a58fe495f46903b3140674f04462
|