Skip to main content

OpenElectricity Python Client

Project description

OpenElectricity Python Client

logo

[!WARNING] This project and the v4 API are currently under active development.

A Python client for the OpenElectricity API, providing access to electricity and energy network data and metrics for Australia.

[!NOTE] API key signups are currently waitlisted and will be released gradually.

To obtain an API key visit platform.openelectricity.org.au

For documentation visit docs.openelectricity.org.au

Features

  • Synchronous and asynchronous API clients
  • Fully typed with comprehensive type annotations
  • Automatic request retries and error handling
  • Context manager support
  • Modern Python (3.10+) with full type annotations
  • Direct conversion to Pandas and Polars DataFrames

Installation

# or with uv (recommended)
uv add openelectricity

# Install with data analysis support (Polars/Pandas)
uv add "openelectricity[analysis]"

# Install base package with pip
pip install openelectricity

Quick Start

First, set your API key in the environment:

# Set your API key
export OPENELECTRICITY_API_KEY=your-api-key

# Optional: Override API server (defaults to production)
export OPENELECTRICITY_API_URL=http://localhost:8000/v4

Quick Test

You can test the client and authentication with the following:


Data Examples

Examples of using the client are in the examples directory. Here are some basic examples:

from datetime import datetime, timedelta
from openelectricity import OEClient
from openelectricity.types import DataMetric, UnitFueltechType, UnitStatusType

# Calculate date range
end_date = datetime.now().replace(hour=0, minute=0, second=0, microsecond=0)
start_date = end_date - timedelta(days=7)

# Using context manager (recommended)
with OEClient() as client:
    # Get operating solar and wind facilities
    facilities = client.get_facilities(
        network_id=["NEM"],
        status_id=[UnitStatusType.OPERATING],
        fueltech_id=[UnitFueltechType.SOLAR_UTILITY, UnitFueltechType.WIND],
    )

    # Get network data for NEM
    response = client.get_network_data(
        network_code="NEM",
        metrics=[DataMetric.POWER, DataMetric.ENERGY],
        interval="1d",
        date_start=start_date,
        date_end=end_date,
        secondary_grouping="fueltech_group",
    )

    # Print results
    for series in response.data:
        print(f"\nMetric: {series.metric}")
        print(f"Unit: {series.unit}")

        for result in series.results:
            print(f"\n  {result.name}:")
            print(f"  Fuel Tech Group: {result.columns.fueltech_group}")
            for point in result.data:
                print(f"    {point.timestamp}: {point.value:.2f} {series.unit}")

For async usage:

from openelectricity import AsyncOEClient
import asyncio

async def main():
    async with AsyncOEClient() as client:
        # Get operating solar and wind facilities
        facilities = await client.get_facilities(
            network_id=["NEM"],
            status_id=[UnitStatusType.OPERATING],
            fueltech_id=[UnitFueltechType.SOLAR_UTILITY, UnitFueltechType.WIND],
        )

        # Get network data
        response = await client.get_network_data(
            network_code="NEM",
            metrics=[DataMetric.POWER],
            interval="1d",
            secondary_grouping="fueltech_group",
        )
        # Process response...

asyncio.run(main())

Data Analysis

The client provides built-in support for converting API responses to popular data analysis formats.

Using with Polars

# Make sure you've installed with analysis extras
# uv add "openelectricity[analysis]"

from openelectricity import OEClient
from openelectricity.types import DataMetric

with OEClient() as client:
    response = client.get_network_data(
        network_code="NEM",
        metrics=[DataMetric.POWER, DataMetric.ENERGY],
        interval="1d",
        secondary_grouping="fueltech_group",
    )

    # Convert to Polars DataFrame
    df = response.to_polars()

    # Get metric units
    units = response.get_metric_units()

    # Analyze data
    energy_by_fueltech = (
        df.group_by("fueltech_group")
        .agg(
            pl.col("energy").sum().alias("total_energy_mwh"),
            pl.col("power").mean().alias("avg_power_mw"),
        )
        .sort("total_energy_mwh", descending=True)
    )

Using with Pandas

# Make sure you've installed with analysis extras
# uv add "openelectricity[analysis]"

from openelectricity import OEClient
from openelectricity.types import DataMetric

with OEClient() as client:
    response = client.get_network_data(
        network_code="NEM",
        metrics=[DataMetric.POWER, DataMetric.ENERGY],
        interval="1d",
        secondary_grouping="fueltech_group",
    )

    # Convert to Pandas DataFrame
    df = response.to_pandas()

    # Get metric units
    units = response.get_metric_units()

    # Analyze data
    energy_by_fueltech = (
        df.groupby("fueltech_group")
        .agg({
            "energy": "sum",
            "power": "mean",
        })
        .sort_values("energy", ascending=False)
    )

Development

Development is preferred with uv and there are targets in the Makefile for common tasks and managing releases. There are optional dependency groups for development, analysis and testing. You can install all of them with make install (which runs uv sync --all-extras).

  1. Clone the repository

  2. Install development dependencies:

    make install
    
  3. Run tests:

    make test
    
  4. Format code:

    make format
    
  5. Run linters:

    make lint
    

License

This project is licensed under the MIT License - see the LICENSE file for details.

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

openelectricity-0.10.1.tar.gz (242.7 kB view details)

Uploaded Source

Built Distribution

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

openelectricity-0.10.1-py3-none-any.whl (19.6 kB view details)

Uploaded Python 3

File details

Details for the file openelectricity-0.10.1.tar.gz.

File metadata

  • Download URL: openelectricity-0.10.1.tar.gz
  • Upload date:
  • Size: 242.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.2 {"installer":{"name":"uv","version":"0.11.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for openelectricity-0.10.1.tar.gz
Algorithm Hash digest
SHA256 e007aceb23f6b0155c7a73e1aaef9e044be9435d01af62d3c01eca74f44903d8
MD5 61d9297b455f86036f83b404d6db094e
BLAKE2b-256 8f7d52df14448b6aec1baeefd5bf7137d47ae5f1afb2b3bb3d3d3f76a2998fee

See more details on using hashes here.

File details

Details for the file openelectricity-0.10.1-py3-none-any.whl.

File metadata

  • Download URL: openelectricity-0.10.1-py3-none-any.whl
  • Upload date:
  • Size: 19.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.2 {"installer":{"name":"uv","version":"0.11.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for openelectricity-0.10.1-py3-none-any.whl
Algorithm Hash digest
SHA256 9a663370746e07add406d11727395640526a87e33c314e1a7ff352c2b13f4402
MD5 d5a7d222e16d6890463297b6e64390bd
BLAKE2b-256 2dc6ff7464cc8f3813c989fca387a797d0debf64da6f7e296066d72a58e02540

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