EQ Sight — JupyterLab
The JupyterLab view, accessible via the Erlenmeyer flask icon in the sidebar, provides an interactive Python environment for advanced analysis of power quality data. JupyterLab is pre-installed on EQ Gateways along with equser, an open-source Python package for working with EQ Wave data.
Overview
JupyterLab provides an interactive analysis environment for users who need to:
- Perform custom calculations on waveform data
- Create specialized visualizations
- Develop automated analysis workflows
- Export data in custom formats
Getting Started
When you open the JupyterLab tab:
- A new notebook session starts automatically
- The
equserpackage is pre-installed and ready to use - Sample notebooks in
tutorials/,analysis/, andtools/demonstrate common analysis patterns
You can also install equser on any computer with pip install equser to work with exported data or connect to a gateway remotely.
Working with CPOW Waveform Data
Load continuous point-on-wave (CPOW) parquet files directly from the gateway’s storage:
from equser.data import load_cpow_scaled
# Load a CPOW parquet file (32 kHz, 7 channels)
data = load_cpow_scaled('/var/lib/eq/data/cpow/20250615_120000.parquet')
# Scaled voltage and current arrays are ready to use
print(f"Phase A voltage range: {data['VA'].min():.1f} to {data['VA'].max():.1f} V")
print(f"Start time: {data['start_time']}")
print(f"Sample rate: {data['sample_rate']} Hz")
print(f"Samples: {len(data['VA']):,}")
The load_cpow_scaled() function automatically handles raw int32-to-float scaling using the vscale/iscale metadata embedded in each parquet file.
Querying Data via the REST API
The gateway exposes a REST API at port 8080. See the API Reference for endpoint details.
Power Monitoring Data (Arrow IPC)
from equser.api import api_get_arrow
# Fetch recent PMon data for a device
table = api_get_arrow('/api/v1/devices/wave-001/pmon/data', params={
'start_time': '2025-06-15T12:00:00Z',
'end_time': '2025-06-15T13:00:00Z',
})
# table is a pyarrow.Table; convert to pandas for analysis
df = table.to_pandas()
print(df.columns.tolist())
SQL Queries
from equser.api import api_post_sql
# Query aggregated power data via SQL
results = api_post_sql(
"SELECT timestamp, vrms_a, vrms_b, vrms_c FROM pmon ORDER BY timestamp DESC",
limit=100
)
Live Streaming via WebSocket
from equser.api import connect_spectral_ws
# Stream real-time spectral data
for frame in connect_spectral_ws(device_id='wave-001', phase='va', fft_size=4096):
print(f"Frequencies: {len(frame.get('magnitudes', []))} bins")
break # Remove to stream continuously
Plotting Tools
The equser package includes plotting utilities for common visualizations:
from equser.plotting import PowerMonitorPlotter, WaveformPlotter
Waveform analysis helpers such as find_zero_crossings(), extract_complete_cycles(), and plot_extracted_cycles() are available for detailed cycle-level inspection.
Saving Work
Your notebooks are automatically saved to your user workspace. You can also:
- Download notebooks to your local computer
- Export results as CSV, PNG, or PDF
Resources
- Sample Notebooks: Browse the
tutorials/,analysis/, andtools/directories in the file browser - API Documentation: Built-in help via
help(equser) - equser Package: See
from equser import pmon, plotting, analysis, data, apifor available modules
Performance Notes
JupyterLab runs on the gateway alongside EQ Watch and EQ Sight. For large data analyses:
- Use time filters to limit data volume
- Consider downsampling for trend analysis
- Export large datasets for processing on dedicated workstations