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

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.0.tar.gz (9.7 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.0-py3-none-any.whl (9.5 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: pyhelty-0.2.0.tar.gz
  • Upload date:
  • Size: 9.7 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.0.tar.gz
Algorithm Hash digest
SHA256 886ebf48e7cc6bd1922b3ec572dbe2d485ac52392561d776da98a69cb1a16358
MD5 923137b1e04ffd5fe0a8cf4429dfd71d
BLAKE2b-256 b11bcabd00016869e440285397845d23ae126f92ae0c7f8654b388a2e0b63874

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyhelty-0.2.0.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.0-py3-none-any.whl.

File metadata

  • Download URL: pyhelty-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 9.5 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.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f57f022306c376d91a329019aa2346bc2f58e21ef569d82e25d06743d6aaf1ff
MD5 0515b3637cb763c8d7190d3a75cf701e
BLAKE2b-256 9591dcdb05fc4a6f36b450e14a0abcc71c10445a1c32b4d436120f0df718298e

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyhelty-0.2.0-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