Skip to main content

aiomelcloudhome

GitHub Release Python Versions Project Stage Project Maintenance License

GitHub Activity PyPI Downloads GitHub Last Commit Open in Dev Containers

Build Status Typing Status Code Coverage

Asynchronous Python client for MELCloud Home.

About

aiomelcloudhome is an async client for the MELCloud Home API, focused on:

  • Fetching account context (buildings and devices)
  • Controlling Air-to-Air units
  • Controlling Air-to-Water units
  • Reading telemetry (energy and actual measurements)

The library is under active development and endpoint coverage will keep expanding.

Installation

pip install aiomelcloudhome

Usage

Authenticate with username and password

import asyncio

from aiohttp import ClientSession

from aiomelcloudhome import MELCloudHome


async def main() -> None:
    async with ClientSession() as session:
        async with MELCloudHome(
            username="your@email.com",
            password="your_password",
            session=session,
        ) as client:
            context = await client.get_context()

            for building in context.buildings:
                print(f"Building: {building.name}")

                for unit in building.air_to_air_units:
                    print(f"ATA: {unit.name} (room: {unit.room_temperature} C)")

                for unit in building.air_to_water_units:
                    print(f"ATW: {unit.name} (tank: {unit.tank_water_temperature} C)")


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

Authenticate with an existing access token

from aiomelcloudhome import MELCloudHome


client = MELCloudHome(access_token="YOUR_ACCESS_TOKEN")

Control an Air-to-Air unit

from aiomelcloudhome import ATAFanSpeed, ATAOperationMode, MELCloudHome


await client.control_ata_unit(
    "ata-unit-id",
    power=True,
    operation_mode=ATAOperationMode.HEAT,
    set_temperature=21.0,
    set_fan_speed=ATAFanSpeed.AUTO,
)

Control an Air-to-Water unit

from aiomelcloudhome import ATWZoneMode


await client.control_atw_unit(
    "atw-unit-id",
    power=True,
    operation_mode_zone1=ATWZoneMode.HEAT_ROOM_TEMPERATURE,
    set_temperature_zone1=21.0,
    set_tank_water_temperature=50.0,
)

Fetch telemetry

from datetime import UTC, datetime, timedelta


energy = await client.get_energy_telemetry(
    "unit-id",
    from_dt=datetime.now(UTC) - timedelta(days=1),
    to_dt=datetime.now(UTC),
)

outdoor = await client.get_outdoor_temperature("ata-unit-id")

Live updates over WebSocket

Instead of polling get_context(), you can opt in to a live update stream. stream_updates() connects to the MELCloud Home realtime WebSocket, reuses the client's existing authentication, reconnects transparently, and yields a typed UnitStateDelta whenever a unit changes. Control, telemetry and the initial state snapshot still use the REST API.

async for delta in client.stream_updates():
    print(delta.unit_id, delta.unit_type, delta.changes)
    # e.g. changes == {"SetTemperature": 21.0} or {"OperationMode": ATAOperationMode.COOL}

The stream raises MelCloudHomeWebSocketError if the realtime channel cannot be established, so you can fall back to polling.

For a long-lived listener that you need to start and stop (for example a Home Assistant coordinator), use client.websocket() to hold a handle, run stream() in a background task, and close() it on teardown:

ws = client.websocket()
task = asyncio.create_task(_listen(ws))  # _listen iterates `async for delta in ws.stream()`

# on shutdown (e.g. async_unload_entry):
await ws.close()  # stops gracefully; stream() ends on its own
await task

More examples can be found in the examples directory.

Documentation

Project documentation and API reference: https://github.com/erwindouna/aiomelcloudhome

Contributing

Contributions are welcome. Please open an issue or pull request.

For local development:

uv sync --all-groups && uv run pre-commit install

Run checks:

uv run pre-commit run --all-files

Run tests:

uv run pytest

Update snapshot tests:

uv run pytest --snapshot-update

License

MIT License

Copyright (c) 2026 Erwin Douna

Metadata

Release files for aiomelcloudhome 0.2.4

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

Source distribution (sdist)

Source distribution for aiomelcloudhome 0.2.4
File Size Uploaded
aiomelcloudhome-0.2.4.tar.gz 18.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for aiomelcloudhome 0.2.4
File Interpreter ABI Platform
aiomelcloudhome-0.2.4-py3-none-any.whl Python 3 none any Details

Total release size: 42.4 kB

Release files / aiomelcloudhome-0.2.4.tar.gz

Download URL aiomelcloudhome-0.2.4.tar.gz
Size 18.8 kB
Tags Source
SHA-256 checksum
How to use checksums
8a21e3d3faffed21c7211f5f79b47bf2a4bb885993b47a0baba1c48672ee803b
BLAKE2b-256 checksum
How to use checksums
82f5d3cc36e1551ce542028b267f9a008604ca8662be05f1d248b1f4cf3a8431
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 30, 2026.

Transparency log

Release files / aiomelcloudhome-0.2.4-py3-none-any.whl

Download URL aiomelcloudhome-0.2.4-py3-none-any.whl
Size 23.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d37d0f0c53b2f2aaeb11e8df110b25b90c389ae60c7dfef749a4534a781d14d9
BLAKE2b-256 checksum
How to use checksums
3a3ee894c47ecf4431db2010d6553e29137ffbbd22d97cc211ceaf0caceac2e7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 30, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.2.4 This release

2 release files

0.2.3

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.9

2 release files

0.1.8

2 release files

0.1.7

2 release files

0.1.6

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release 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