Skip to main content

pyhelty

Async Python client for Helty Flow VMC (mechanical ventilation / MVHR) units equipped with the smart Wi-Fi interface, such as the Flow Plus.

It speaks the unit's reverse-engineered TCP protocol (default port 5001) and exposes a small, fully typed asyncio API. It is the device-communication layer behind the Home Assistant helty integration; it has no Home Assistant dependency and can be used standalone.

The protocol has no official specification. Behaviour is reverse-engineered from a real Helty FlowPlus; your mileage may vary on other models.

Install

pip install pyhelty

Usage

import asyncio
from pyhelty import HeltyClient, FanMode

async def main() -> None:
    client = HeltyClient("192.168.1.50")  # port defaults to 5001

    data = await client.async_get_data()
    print(data.name, data.fan_mode, data.indoor_temperature, data.indoor_humidity)

    await client.async_set_fan_mode(FanMode.NIGHT)
    await client.async_set_led(False)

asyncio.run(main())

API

  • HeltyClient(host, port=5001, *, timeout=10.0)
  • async_get_name() -> str — the user-assigned name (also used as a stable id)
  • async_get_data() -> HeltyData — name, fan mode, LED state, indoor/outdoor temperature, indoor humidity, plus co2, filter_hours and light_level (model-dependent — see below), and the raw VMGI/VMGO integer fields
  • async_set_fan_mode(mode: FanMode) — OFF, LOW, MEDIUM, HIGH, MAX, BOOST, NIGHT, FREE_COOLING
  • async_set_led(on: bool)
  • async_reset_filter()
  • async_set_light(level: int) — front-light brightness 0-100 (0 = off)

Model-dependent fields

co2, filter_hours and light_level are only meaningful on models that have the corresponding hardware. A Helty FlowPlus, for example, reports co2 == 0 (no sensor) and accepts the light command without a physical light. The consuming application should decide whether to surface them (e.g. only when co2 > 0).

Errors derive from HeltyError: HeltyConnectionError, HeltyResponseError, HeltyCommandError.

Protocol notes

Command Purpose Reply
VMNM? device name VMNM <name>
VMGI? sensors (15 fields, tenths) VMGI,<indoor_t>,<outdoor_t>,<indoor_rh>,...
VMGH? status (15 fields) VMGO,<fan_mode>,<led>,...
VMWH000000<n> set fan mode n (0-7) OK
VMWH0100010 / VMWH0100000 LED on / off OK
VMWH0417744 reset filter counter OK

The unit serves one command per TCP connection and then closes it; the client serialises commands with a lock.

Development

pip install -e ".[test,dev]"
pytest
ruff check .
mypy src

Acknowledgements

The TCP protocol has no official specification; it was reverse-engineered with the help of the prior work of @MatteoManzoni and @DanRobo76. Thanks to both.

License

MIT

Metadata

Release files for pyhelty 0.2.1

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

Source distribution (sdist)

Source distribution for pyhelty 0.2.1
File Size Uploaded
pyhelty-0.2.1.tar.gz 9.8 kB Details

Built distribution (wheel)

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

Total release size: 19.5 kB

Release files / pyhelty-0.2.1.tar.gz

Download URL pyhelty-0.2.1.tar.gz
Size 9.8 kB
Tags Source
SHA-256 checksum
How to use checksums
8c5f1ebbb1953ef85875d06a622e25b904c569930cafd29ee4b246897dee42f1
BLAKE2b-256 checksum
How to use checksums
819682dab36f9f5c6b4ae5f738e1ac9572b1de1ee32782f16322a6637ccc328a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

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 Jun 6, 2026.

Transparency log

Release files / pyhelty-0.2.1-py3-none-any.whl

Download URL pyhelty-0.2.1-py3-none-any.whl
Size 9.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
c60dd3d43348a192f43ee872be4e826c1252dbc06e83e67e040ecb1b43478a80
BLAKE2b-256 checksum
How to use checksums
07798a2c374543c397700449c8f902adc0c3c03f21bad1539fc1ba3bd3312c75
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

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 Jun 6, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.2.1 This release

2 release files

0.2.0

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