Skip to main content

Async client library for Helty Flow VMC (mechanical ventilation) units with the smart Wi-Fi interface

Project description

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

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

pyhelty-0.2.1.tar.gz (9.8 kB view details)

Uploaded Source

Built Distribution

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

pyhelty-0.2.1-py3-none-any.whl (9.7 kB view details)

Uploaded Python 3

File details

Details for the file pyhelty-0.2.1.tar.gz.

File metadata

  • Download URL: pyhelty-0.2.1.tar.gz
  • Upload date:
  • Size: 9.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pyhelty-0.2.1.tar.gz
Algorithm Hash digest
SHA256 8c5f1ebbb1953ef85875d06a622e25b904c569930cafd29ee4b246897dee42f1
MD5 cf501563619fbbaa8d798c6f98f188b1
BLAKE2b-256 819682dab36f9f5c6b4ae5f738e1ac9572b1de1ee32782f16322a6637ccc328a

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyhelty-0.2.1.tar.gz:

Publisher: release.yml on ebaschiera/pyhelty

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

File details

Details for the file pyhelty-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: pyhelty-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 9.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pyhelty-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 c60dd3d43348a192f43ee872be4e826c1252dbc06e83e67e040ecb1b43478a80
MD5 2f82297fa531face8b4d063b77cf1b8f
BLAKE2b-256 07798a2c374543c397700449c8f902adc0c3c03f21bad1539fc1ba3bd3312c75

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyhelty-0.2.1-py3-none-any.whl:

Publisher: release.yml on ebaschiera/pyhelty

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

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