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, plusco2,filter_hoursandlight_level(model-dependent — see below), and the rawVMGI/VMGOinteger fieldsasync_set_fan_mode(mode: FanMode)—OFF, LOW, MEDIUM, HIGH, MAX, BOOST, NIGHT, FREE_COOLINGasync_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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
886ebf48e7cc6bd1922b3ec572dbe2d485ac52392561d776da98a69cb1a16358
|
|
| MD5 |
923137b1e04ffd5fe0a8cf4429dfd71d
|
|
| BLAKE2b-256 |
b11bcabd00016869e440285397845d23ae126f92ae0c7f8654b388a2e0b63874
|
Provenance
The following attestation bundles were made for pyhelty-0.2.0.tar.gz:
Publisher:
release.yml on ebaschiera/pyhelty
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pyhelty-0.2.0.tar.gz -
Subject digest:
886ebf48e7cc6bd1922b3ec572dbe2d485ac52392561d776da98a69cb1a16358 - Sigstore transparency entry: 1675073245
- Sigstore integration time:
-
Permalink:
ebaschiera/pyhelty@1db0d3a9a045995e9fa5695731ace178f340b01d -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/ebaschiera
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@1db0d3a9a045995e9fa5695731ace178f340b01d -
Trigger Event:
release
-
Statement type:
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f57f022306c376d91a329019aa2346bc2f58e21ef569d82e25d06743d6aaf1ff
|
|
| MD5 |
0515b3637cb763c8d7190d3a75cf701e
|
|
| BLAKE2b-256 |
9591dcdb05fc4a6f36b450e14a0abcc71c10445a1c32b4d436120f0df718298e
|
Provenance
The following attestation bundles were made for pyhelty-0.2.0-py3-none-any.whl:
Publisher:
release.yml on ebaschiera/pyhelty
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pyhelty-0.2.0-py3-none-any.whl -
Subject digest:
f57f022306c376d91a329019aa2346bc2f58e21ef569d82e25d06743d6aaf1ff - Sigstore transparency entry: 1675073251
- Sigstore integration time:
-
Permalink:
ebaschiera/pyhelty@1db0d3a9a045995e9fa5695731ace178f340b01d -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/ebaschiera
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@1db0d3a9a045995e9fa5695731ace178f340b01d -
Trigger Event:
release
-
Statement type: