Skip to main content

HYXI Cloud API

hyxi-cloud-api

PyPI Python Downloads License

Tests Coverage Security OpenSSF Scorecard


An asynchronous Python client for interacting with the HYXI Cloud API.

This library was primarily built to power the HYXI Cloud Home Assistant Integration, but it can be used in any Python 3.14 project to fetch telemetry data from HYXI solar inverters and battery systems.

📦 Installation

You can install the package directly from PyPI:

pip install hyxi-cloud-api

🚀 Quick Start

This library uses aiohttp for non-blocking network requests. You will need to provide your Developer API credentials (AK/SK), along with an active aiohttp.ClientSession.

[!NOTE] The HYXI Open API requires a separate developer account registered at open.hyxicloud.com. If your developer email is different from your main HYXI app account, you must Share your Plant from the app to your developer email address to access your data.

import asyncio
import aiohttp
from hyxi_cloud_api import HyxiApiClient

async def main():
    # Replace with your actual HYXi Cloud credentials
    ACCESS_KEY = "your_access_key"
    SECRET_KEY = "your_secret_key"
    BASE_URL = "https://open.hyxicloud.com"

    async with aiohttp.ClientSession() as session:
        # 1. Initialize the client
        client = HyxiApiClient(
            access_key=ACCESS_KEY,
            secret_key=SECRET_KEY,
            base_url=BASE_URL,
            session=session
        )

        # 2. Fetch device data
        try:
            device_data = await client.get_all_device_data()
            print("Successfully fetched HYXi data:")
            print(device_data)
        except Exception as e:
            print(f"Error communicating with HYXi Cloud: {e}")

if __name__ == "__main__":
    asyncio.run(main())

HYXI Open API base URLs vary by region. The examples in this README use the Europe endpoint by default.

Node Request Address
China https://open-cn.hyxicloud.com
Europe (default) https://open.hyxicloud.com
North America https://open-or.hyxicloud.com

🔧 Device Control

You can control inverter operating modes directly through the API. This requires a device serial number, which you can obtain from the device data response above.

async def control_example(client, device_sn):
    # Set operating mode
    await client.set_mode_self_consume(device_sn)
    await client.set_mode_charge(device_sn, watts=3000)
    await client.set_mode_discharge(device_sn, watts=2500)
    await client.set_mode_idle(device_sn)

    # Peak shaving (close, charge, discharge, stop, hold)
    await client.set_peak_shaving(device_sn, action="charge")

    # Frequency control
    await client.set_frequency_control(device_sn, enabled=True)

Control failures raise HyxiApiClient.ControlError:

try:
    await client.set_mode_charge(device_sn, watts=3000)
except client.ControlError as e:
    print(f"Control command failed: {e}")

🔔 Subscriptions

You can subscribe a callback URL to HYXI push notifications for real-time data, alarms, and FCAS/frequency-modulation real-time data.

async def subscription_example(client):
    callback_url = "https://your-public-callback-host/hyxi/callback"
    device_sns = ["60700000000001", "60700000000002"]

    real_time = await client.subscribe_real_time_data(
        callback_url,
        device_sns,
        post_rate=60000,  # milliseconds, 5000-3600000
    )

    alarm = await client.subscribe_alarm(
        callback_url,
        device_sns,
        post_rate=60000,  # milliseconds, 5000-3600000
    )

    fcas = await client.subscribe_fm_real_time_data(
        callback_url,
        device_sns,
        post_rate=1,  # hours, 1-6
    )

    await client.cancel_subscription(real_time["data"]["subscribeCode"])

Subscription failures raise HyxiApiClient.SubscriptionError.

🛠️ Requirements

  • Python 3.14 (not yet 3.15 — the upper bound lifts once 3.15 is covered by CI)
  • aiohttp >= 3.13.5

🔐 Privacy & Debug Logging

When debug logging is enabled, this library automatically masks sensitive identifiers before writing them to the log — no manual redaction needed.

Field Behaviour
Serial numbers (deviceSn, parentSn, batSn) Hashed securely using SHA-256 (first 8 chars shown) to enable deterministic cross-device tracing without exposing the original identifier, e.g. e3b0c442
Plant IDs (plantId) Same SHA-256 hashing format
Home/site address (plantAddress) Fully redacted → [REDACTED]
IMEI (gprsImei) Same SHA-256 hashing format

Masking is deterministic, so parent/child device relationships remain traceable across log lines.

⚠️ Disclaimer

This is an unofficial, community-driven project. It is not affiliated with, endorsed by, or connected to HYXiPower in any official capacity. Use this software at your own risk.

Support

If this library is useful to you and you'd like to support its development:

Buy Me a Coffee

Download files

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

Source Distribution

hyxi_cloud_api-1.4.6.tar.gz (85.4 kB view details)

Uploaded Source

Built Distribution

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

hyxi_cloud_api-1.4.6-py3-none-any.whl (32.0 kB view details)

Uploaded Python 3

File details

Details for the file hyxi_cloud_api-1.4.6.tar.gz.

File metadata

  • Download URL: hyxi_cloud_api-1.4.6.tar.gz
  • Upload date:
  • Size: 85.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for hyxi_cloud_api-1.4.6.tar.gz
Algorithm Hash digest
SHA256 11402df8cb738602d99398f8036d34c79e18d3f273a99e30da378e39cf137f06
MD5 3e8b5ee42b817226978e9d5b381a1502
BLAKE2b-256 d97a5bc795916a74e34d86daef2f40a593d3a6e2fe6084155cdf1f7cf1606b3a

See more details on using hashes here.

Provenance

The following attestation bundles were made for hyxi_cloud_api-1.4.6.tar.gz:

Publisher: ci-cd.yml on Veldkornet/hyxi-cloud-api

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file hyxi_cloud_api-1.4.6-py3-none-any.whl.

File metadata

  • Download URL: hyxi_cloud_api-1.4.6-py3-none-any.whl
  • Upload date:
  • Size: 32.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for hyxi_cloud_api-1.4.6-py3-none-any.whl
Algorithm Hash digest
SHA256 d18bc51eeede872085b62173ab50b4befd74d2ec01f636885adf65aa798b6615
MD5 f6df0bd108c166945af381443a89cd43
BLAKE2b-256 d59921b618ad46177dfae3c3a4cded3e552290d6870984b661d6d04c1a3c78dd

See more details on using hashes here.

Provenance

The following attestation bundles were made for hyxi_cloud_api-1.4.6-py3-none-any.whl:

Publisher: ci-cd.yml on Veldkornet/hyxi-cloud-api

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

1.4.7

2 files

This release

1.4.6 This release

2 files

1.4.5

2 files

1.4.4

2 files

1.4.3

2 files

1.4.2

2 files

1.4.1

2 files

1.4.0

2 files

1.3.9

2 files

1.3.8

2 files

1.3.7

2 files

1.3.6

2 files

1.3.5

2 files

1.3.4

2 files

1.3.3

2 files

1.3.2

2 files

1.3.1

2 files

1.3.0

2 files

1.2.8

2 files

1.2.7

2 files

1.2.6

2 files

1.2.5

2 files

1.2.4

2 files

1.2.3

2 files

1.2.2

2 files

1.2.1

2 files

1.2.0

2 files

1.1.5

2 files

1.1.4

2 files

1.1.3

2 files

1.1.2

2 files

1.1.1

2 files

1.1.0

2 files

1.0.10

2 files

1.0.9

2 files

1.0.8

2 files

1.0.7

2 files

1.0.6

2 files

1.0.5

2 files

1.0.4

2 files

1.0.3

2 files

1.0.2

2 files

1.0.1

2 files

1.0.0

2 files

0.1.9

2 files

0.1.8

2 files

0.1.7

2 files

0.1.6

2 files

0.1.5

2 files

0.1.4

2 files

0.1.3

2 files

0.1.2

2 files

0.1.1

2 files

0.1.0

2 files

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