Skip to main content

User toolkit for power quality data from EQ Wave sensors

Project description

equser

Python 3.10+ License: MIT

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:8080')
devices = client.list_devices()
table = client.get_pmon_data(devices[0]['id'])

The class was previously named SynapseClient; that name is preserved as a deprecated module-level alias and still resolves to GatewayClient, so existing code using from equser.api import SynapseClient continues to work without modification. Importing the alias emits a DeprecationWarning; the alias will be removed in a future release. Migrate to from equser.api import GatewayClient. (A future DatalakeClient will provide cross-site queries against the server-side aggregated datalake; the gateway-vs-datalake split mirrors the addressing model.)

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

Configuration

equser looks for configuration in the following locations (in order):

  1. EQUSER_CONFIG environment variable
  2. ./equser.yaml (current directory)
  3. ~/.config/equser/config.yaml (XDG config)
  4. /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 (which run EQ Coherence™ software; the underlying Debian package is currently named eq-synapse, pending rename to eq-coherence per syntropy-repo SEP-058).

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

equser-0.0.4.tar.gz (64.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

equser-0.0.4-py3-none-any.whl (81.8 kB view details)

Uploaded Python 3

File details

Details for the file equser-0.0.4.tar.gz.

File metadata

  • Download URL: equser-0.0.4.tar.gz
  • Upload date:
  • Size: 64.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for equser-0.0.4.tar.gz
Algorithm Hash digest
SHA256 ddd3b7daa88ae1dac1129b5a4c8994e4dd3024008b45a741726f57bb543afe69
MD5 11de233a7707bd7ba769cbb09f5f1887
BLAKE2b-256 bbde29e552385ce35e17b46c3dab09690f1b37962de75e13fa12844d3744cdc2

See more details on using hashes here.

File details

Details for the file equser-0.0.4-py3-none-any.whl.

File metadata

  • Download URL: equser-0.0.4-py3-none-any.whl
  • Upload date:
  • Size: 81.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for equser-0.0.4-py3-none-any.whl
Algorithm Hash digest
SHA256 5db15feb3a3b275091e987334be36437fad79a1658cc82259f3644d7ccbd67cc
MD5 0ebecfb3aca5e8538594bc299a2c0885
BLAKE2b-256 c26ec72ccb1828913ade0f47ab52b3df9499ce1f6d6a44cf6f636e0f0091cd6c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page