Skip to main content

API Connector to fetch power usage data from Contact Energy NZ utilities provider

This library wraps for accessing the Contact Energy API, allowing developers to programmatically interact with Contact Energy, utilities provider in New Zealand. This library supports a subset of operations: authenticate, get default account and retrieve energy-related usage data for that account.

Table of Contents

Installation

To install the Contact Energy Python API Library, you can use pip, the Python package manager:

pip install contact-energy-nz

Usage

To get started, import API and main data types into code:

from contact_enegry_nz import AuthException, ContactEnergyApi, UsageDatum

Authentication

Before making API calls, you'll need to authenticate with Contact Energy and obtain a token. As far as I'm aware the only method to authenticate is to exchange user's email and password for an opaque access token. This becomes a session header on subsequent requests.

Library also needs an API key that presumably identifies the client to the backend. The value currently shipping with the library comes from myaccount.contact.co.nz website. It can be verified/updated by downloading the latest https://myaccount.contact.co.nz/main.<hash>.esm.js file (search for x-api-key in there). Since it's so easy to obtain I don't consider it to be very secret.

from contact_enegry_nz import AuthException, ContactEnergyApi

    try:
        async with async_timeout.timeout(TIMEOUT):
            connector = await ContactEnergyApi.from_credentials(CONF_USERNAME, CONF_PASSWORD)
    except asyncio.TimeoutError as err:
        pass # handle timeout
    except AuthException as err:
        pass # handle auth errors

API Endpoints

Currently we service just a couple of endpoints useful for HomeAssistant

Get accounts and contracts

    try:
        await connector.account_summary()
    except Exception:
        pass # handle error

Call to /accounts/v2?ba= returns the following structure:

{
    "accountsSummary": [
        {
            "id": "111111111",
            "nickname": "",
            "contracts": [
                {
                    "contractId": "111111111",
                    "premiseId": "111111111",
                    "address": "1 Queen Street / Auckland-Auckland Central 1010"
                }
            ]
        }
    ],
    "accountDetail": {
        "id": "111111111",
        "nickname": "",
        "correspondencePreference": "email",
        "paymentMethod": "Direct Debit",
        "isDirectDebit": true,
        "isSmoothPay": false,
        "isPrepay": false,
        "isControlpay": false,
        "isEligibleMonthOff": false,
        "directDebitAccount": "0001",
        "billingFrequency": "Monthly",
        "accountBalance": {
            "prepayDebtBalance": 0,
            "currentBalance": 0,
            "formattedCurrentBalance": "$0.00",
            "remainingDays": 0,
            "refundEligible": false,
            "refundMax": 0,
            "refundInProgress": 0
        },
        "invoice": {
            "amountPaid": 0,
            "amountDue": 888.88,
            "discountTotal": 0,
            "paymentDueDate": "1 Aug 2023",
            "daysTilOverdue": 0
        },
        "nextBill": {
            "date": "28 Aug 2023",
            "amount": 99.99,
            "ppd": 0
        },
        "monthOff": {},
        "payments": [
            {
                "amount": "$999.99",
                "date": "1 Aug 2023"
            },
            {
                "amount": "$999.99",
                "date": "1 Jul 2023"
            },
            {
                "amount": "$999.99",
                "date": "1 Jun 2023"
            }
        ],
        "contracts": [
            {
                "id": "111111111",
                "icp": "111111111",
                "meterType": "SMART METER",
                "promptPaymentDiscount": 0,
                "contractType": 1,
                "contractTypeLabel": "Electricity",
                "dualEnergy": false,
                "premise": {
                    "id": "111111111",
                    "supplyAddress": {
                        "houseNumber": "1",
                        "street": "Queen Street",
                        "city": "Auckland",
                        "postcode": 1010,
                        "shortForm": "1 Queen Street, Auckland Central, Auckland 1010"
                    },
                    "isEligibleForBroadband": true
                },
                "devices": [
                    {
                        "id": "111111111",
                        "serialNumber": "111111111",
                        "deviceProductTypeId": 1,
                        "nextMeterReadDate": "25 Aug 2023",
                        "nextReadingIsEstimate": false,
                        "meterLocationCode": "23",
                        "registers": [
                            {
                                "id": "001",
                                "registerType": "Load",
                                "previousMeterReading": "99999.00",
                                "readingUnit": "kWH",
                                "previousMeterReadingDate": "27 Jul 2023"
                            }
                        ],
                        "nonBillableRegisters": [
                            {
                                "id": "002",
                                "registerType": "Load",
                                "previousMeterReading": "0.00",
                                "readingUnit": "kWH",
                                "previousMeterReadingDate": "Invalid date"
                            }
                        ]
                    },
                    {
                        "id": "111111111",
                        "serialNumber": "111111111",
                        "deviceProductTypeId": 1,
                        "nextMeterReadDate": "25 Aug 2023",
                        "nextReadingIsEstimate": false,
                        "meterLocationCode": "00",
                        "registers": [],
                        "nonBillableRegisters": []
                    }
                ]
            }
        ],
        "hasMedicalDependant": false,
        "hasVulnerablePerson": false,
        "accountType": "RESI"
    },
    "statusCode": 2201,
    "xcsrfToken": "00000000"
}

Get usage data

    try:
        async with async_timeout.timeout(TIMEOUT):
            data = await self._api.get_latest_usage()
    except asyncio.TimeoutError as err:
        pass # handle timeout
    except Exception as err:
        pass # handle error

Call to /usage/v2/{contract_id}?ba={account_id}&interval=monthly&from=YYY-MM-DD&to=YYYY-MM-DD returns the following structure:

[
    {
        "currency": "NZD",
        "year": 2023,
        "month": 4,
        "day": 1,
        "hour": 0,
        "date": "2023-04-01T00:00:00.000+13:00",
        "value": "999.999",
        "dollarValue": "999.999",
        "offpeakValue": "99.999",
        "unchargedValue": "99.999",
        "offpeakDollarValue": "0.000",
        "unit": "kWh",
        "timeZone": "Pacific/Auckland",
        "percentage": 9.99
    },
    {
        "currency": "NZD",
        "year": 2023,
        "month": 5,
        "day": 1,
        "hour": 0,
        "date": "2023-05-01T00:00:00.000+12:00",
        "value": "999.999",
        "dollarValue": "999.999",
        "offpeakValue": "99.999",
        "unchargedValue": "99.999",
        "offpeakDollarValue": "0.000",
        "unit": "kWh",
        "timeZone": "Pacific/Auckland",
        "percentage": 9.99
    },
    {
        "currency": "NZD",
        "year": 2023,
        "month": 6,
        "day": 1,
        "hour": 0,
        "date": "2023-06-01T00:00:00.000+12:00",
        "value": "999.999",
        "dollarValue": "999.999",
        "offpeakValue": "99.999",
        "unchargedValue": "99.999",
        "offpeakDollarValue": "0.000",
        "unit": "kWh",
        "timeZone": "Pacific/Auckland",
        "percentage": 9.99
    },
    {
        "currency": "NZD",
        "year": 2023,
        "month": 7,
        "day": 1,
        "hour": 0,
        "date": "2023-07-01T00:00:00.000+12:00",
        "value": "999.999",
        "dollarValue": "999.999",
        "offpeakValue": "99.999",
        "unchargedValue": "99.999",
        "offpeakDollarValue": "0.000",
        "unit": "kWh",
        "timeZone": "Pacific/Auckland",
        "percentage": 9.99
    },
    {
        "currency": "NZD",
        "year": 2023,
        "month": 8,
        "day": 1,
        "hour": 0,
        "date": "2023-08-01T00:00:00.000+12:00",
        "value": "999.999",
        "dollarValue": "999.999",
        "offpeakValue": "99.999",
        "unchargedValue": "99.999",
        "offpeakDollarValue": "0.000",
        "unit": "kWh",
        "timeZone": "Pacific/Auckland",
        "percentage": 9.99
    }
]

Contributing

Contributions are welcome and encouraged. If you want to add new features, please feel free to open PRs here.

License

This library is provided under the MIT License.


Disclaimer: This library is an independent project and is not affiliated with Contact Energy. While it provides access to certain API features, it does not cover all available functionalities. Please note that the upstream API can change unexpectedly, potentially leading to disruptions in functionality, as has occurred around May 2023. Use at your own discretion.

Release files for contact-energy-nz 0.1.5917054733

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for contact-energy-nz 0.1.5917054733
File Size Uploaded
contact-energy-nz-0.1.5917054733.tar.gz 7.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for contact-energy-nz 0.1.5917054733
File Interpreter ABI Platform
contact_energy_nz-0.1.5917054733-py3-none-any.whl Python 3 none any Details

Total release size: 15.5 kB

Release files / contact-energy-nz-0.1.5917054733.tar.gz

Download URL contact-energy-nz-0.1.5917054733.tar.gz
Size 7.7 kB
Tags Source
SHA-256 checksum
How to use checksums
8514a85ad268b494bbff809216daaf263ab731f8f00edffd0354ab117fc69b09
BLAKE2b-256 checksum
How to use checksums
7db0a3c77ee5a22e7bf9b2313d181dff505a8a4c06ce46414475744eaafed8bb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.11.4

Release files / contact_energy_nz-0.1.5917054733-py3-none-any.whl

Download URL contact_energy_nz-0.1.5917054733-py3-none-any.whl
Size 7.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
18120c9e92babf81f0bc1052a4a452decc9d42c76a1c5db6e42161955b0a21cd
BLAKE2b-256 checksum
How to use checksums
9a7ed1832e8b3c7b1b061b7ec6e3c46c27a39db66541dd587fe81e2ef7ca89ba
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.11.4
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page