equser
User toolkit for power quality data from EQ Wave sensors.
Overview
equser is a Python library for loading, analyzing, and visualizing continuous waveform (CPOW) and power monitoring (PMon) data from EQ Wave hardware. It provides:
- Data loading (
data): Load CPOW and PMon Parquet files with automatic scaling - Waveform analysis (
analysis): Zero-crossing detection, cycle extraction - Visualization (
plotting): Static plots for power quality data (requires[analysis]) - API client (
api): REST and WebSocket clients for EQ gateways (requires[analysis]) - Live acquisition (
pmon): Real-time sensor data acquisition (requires[daq]) - CLI tools: Command-line interface for monitoring and conversion
Installation
Base installation (data loading + analysis)
pip install equser
With plotting and API support
pip install equser[analysis]
With JupyterLab notebook environment
pip install equser[jupyter]
With live sensor acquisition
pip install equser[daq]
Full installation (all features)
pip install equser[full]
Quick Start
Load and explore CPOW data
from equser.data import load_cpow_scaled
result = load_cpow_scaled('20250623_075056.parquet')
print(f"Voltage A peak: {result['VA'].max():.1f} V")
print(f"Start time: {result['start_time']}")
print(f"Sample rate: {result['sample_rate']} Hz")
Load PMon summary data
from equser.data import load_pmon
table = load_pmon('20250623_0750.parquet')
print(table.column_names)
Analyze waveform zero crossings
import numpy as np
from equser.data import load_cpow_scaled, SAMPLE_RATE_HZ
from equser.analysis import find_zero_crossings
result = load_cpow_scaled('cpow_data.parquet')
time = np.arange(len(result['VA'])) / SAMPLE_RATE_HZ
crossings, indices = find_zero_crossings(result['VA'], time)
print(f"Found {len(crossings)} zero crossings")
Plot data (requires [analysis])
from equser.plotting import PowerMonitorPlotter, WaveformPlotter
# Plot power monitor data
plotter = PowerMonitorPlotter()
plotter.plot_file('pmon_data.parquet')
# Plot waveform data
wf_plotter = WaveformPlotter()
wf_plotter.plot_file('cpow_data.parquet')
Query a gateway (requires [analysis])
from equser.api import GatewayClient
client = GatewayClient('http://gateway')
devices = client.list_devices()
table = client.get_pmon_data(devices[0]['id'])
Command Line
# Start power monitoring (requires EQ Wave sensor + [daq])
equser pmon acquire -c config.yaml
# Convert Avro files to Parquet (requires [daq])
equser pmon convert data/*.avro --remove
# Plot data file (requires [analysis])
equser plot data.parquet
Reference notebooks
equser bundles a set of tutorial and analysis notebooks inside the installed
package, so they travel with pip install (no separate download). Because they
live under site-packages, use the CLI rather than hunting for the path:
# One step: copy the notebooks into ./equser-notebooks and open JupyterLab there
equser notebooks launch
# Or copy them into a directory of your choice (then open however you like)
equser notebooks copy --dest ~/eq-notebooks
# See what's bundled, or print where they live
equser notebooks list
equser notebooks path # the bundled directory
equser notebooks path tutorials/03-backend-api.ipynb # a specific notebook
launch requires the JupyterLab environment (pip install equser[jupyter]).
From inside an already-running JupyterLab, you can pull a writable copy into the current folder in one cell:
from equser.notebooks import copy_notebooks, get_notebooks_dir
copy_notebooks('.') # writes tutorials/ and analysis/ here
print(get_notebooks_dir()) # or just locate the read-only originals
Bundled notebooks:
| Notebook | What it covers |
|---|---|
tutorials/01-parquet-files.ipynb |
Load and plot CPOW/PMon data from parquet files |
tutorials/02-local-duckdb.ipynb |
Query parquet files with SQL via DuckDB |
tutorials/03-backend-api.ipynb |
Query a gateway over the REST API |
tutorials/04-live-streaming.ipynb |
Live CPOW and spectral WebSocket streaming |
analysis/harmonic-analysis.ipynb |
FFT-based harmonic analysis (IEEE 519) |
analysis/power-trends.ipynb |
Long-term voltage, frequency, and power trends |
analysis/delta-analysis.ipynb |
Delta-configuration analysis |
analysis/ai-event-analysis.ipynb |
AI event analysis via the RAG API (needs demo access) |
Configuration
equser looks for configuration in the following locations (in order):
EQUSER_CONFIGenvironment variable./equser.yaml(current directory)~/.config/equser/config.yaml(XDG config)/etc/equser/config.yaml(system-wide)
Example configuration:
sensor:
address: "192.168.10.10"
port: 1535
pmon:
connection:
retry_delay: 3
parquet:
interval: 86400
compression:
method: ZSTD
level: 4
Dependency Tiers
| Extra | Description | Key Packages |
|---|---|---|
| (base) | Data loading, analysis, CLI | numpy, pyarrow, pyyaml, argcomplete, colorlog |
[daq] |
Live sensor acquisition | avro, fastavro |
[analysis] |
Plotting + API client | matplotlib, requests, websocket-client |
[jupyter] |
Full notebook environment | [analysis] + jupyterlab, duckdb, ipywidgets |
[dev] |
Development tools | pytest, ruff, mypy |
[full] |
All of the above (except dev) | - |
Requirements
- Python 3.10 or later
- Linux (for hardware integration features)
Documentation
License
MIT License — © 2026 EQ Systems Inc.
About
equser is developed by Energy Quotient for continuous waveform intelligence in power systems. It provides Python access to data from EQ gateways running EQ Coherence™ software.
Metadata
Release files for equser 0.8.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| equser-0.8.0.tar.gz | 74.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| equser-0.8.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 164.5 kB
Release files / equser-0.8.0.tar.gz
| Download URL | equser-0.8.0.tar.gz |
|---|---|
| Size | 74.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
4da0c74520ae60c40e415276983c7184e966319cc86d38330636a3a6de7e7229
|
|
BLAKE2b-256 checksum How to use checksums |
a2fc594205c4b182576a2420d0aaa450692924931eeb09ec87e17356ed8b00d3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.10.17
|
Release files / equser-0.8.0-py3-none-any.whl
| Download URL | equser-0.8.0-py3-none-any.whl |
|---|---|
| Size | 89.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
2b740db2c6442f0395e931ed3a5c56d95f1cf6e3a9411cc621b9115d998f9939
|
|
BLAKE2b-256 checksum How to use checksums |
0b1dc8052545f12701a1eebf49117c791376f947a487de16c919cf2282ad85a3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.10.17
|