Skip to main content

Async Python client for madVR Envy IP Control.

Project description

madVR Envy Python Library

Spec-first async Python client for madVR Envy IP Control.

This project intentionally does not inherit implementation patterns from existing community libraries. It is being built from the official Envy IP Control specification and protocol captures.

Current API Shape

  • Typed command helpers in madvr_envy.commands
  • High-level async client in madvr_envy.client.MadvrEnvyClient
  • Typed protocol parser in madvr_envy.protocol

Example:

import asyncio

from madvr_envy.client import MadvrEnvyClient


async def main() -> None:
    client = MadvrEnvyClient(host="192.168.1.100")
    await client.start()
    await client.wait_synced(timeout=10)

    await client.get_mac_address(wait_for_ack=True)
    await client.display_message(3, "Hello from py-madvr-envy")
    await client.change_option("temporary\\hdrNits", 120)

    groups = await client.enum_profile_groups_collect()
    for group in groups:
        print(group.group_id, group.name)

    await client.stop()


asyncio.run(main())

Protocol Basis

  • Source: https://madvrenvy.com/wp-content/uploads/EnvyIpControl.pdf
  • Document title: madVR Envy IP Control revision 1.1.3
  • Retrieved: 2026-02-27
  • HTTP metadata observed during retrieval: Last-Modified: Mon, 20 May 2024 02:40:13 GMT

Development

uv sync --group dev
uv run ruff check .
uv run ruff format --check .
uv run ty check madvr_envy
uv run pytest -v

Protocol Coverage

See docs/PROTOCOL_COVERAGE.md for implemented command and notification coverage.

Enumeration Collectors

For stream enumerations, use typed collectors:

  • enum_profile_groups_collect()
  • enum_profiles_collect(profile_group)
  • enum_setting_pages_collect()
  • enum_config_pages_collect()
  • enum_options_collect(page_or_path)

These helpers wait for protocol end markers and raise EnumerationTimeoutError if an end marker is not observed in time.

HA Adapter

Use madvr_envy.adapter.EnvyStateAdapter to convert mutable runtime state into immutable snapshots plus typed deltas/events:

  • snapshot: stable full-state view for coordinator data
  • deltas: field-level changes since previous snapshot
  • events: integration-friendly event stream (temporary resets, display changes, settings store/restore, etc.)

You can wire this directly through the client:

from madvr_envy.adapter import EnvyStateAdapter

adapter = EnvyStateAdapter()

def on_update(snapshot, deltas, events):
    ...

handle = client.register_adapter_callback(adapter, on_update)
# later: client.deregister_adapter_callback(handle)

For Home Assistant coordinator/event-bus integration, use madvr_envy.ha_bridge:

  • coordinator_payload(snapshot)
  • to_ha_events(events)
  • build_bridge_update(snapshot, deltas, events)

Reference coordinator wiring: docs/ha_coordinator_example.py.

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

madvr_envy-0.1.6.tar.gz (35.1 kB view details)

Uploaded Source

Built Distribution

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

madvr_envy-0.1.6-py3-none-any.whl (20.5 kB view details)

Uploaded Python 3

File details

Details for the file madvr_envy-0.1.6.tar.gz.

File metadata

  • Download URL: madvr_envy-0.1.6.tar.gz
  • Upload date:
  • Size: 35.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for madvr_envy-0.1.6.tar.gz
Algorithm Hash digest
SHA256 fffc0b352f82e1b5b65d62d100ba38ee228243f51cfdc2cad4df5aa197bef16b
MD5 9cd59a99b605fbfcb65ac58a1d47510b
BLAKE2b-256 0ea9ca67cc4fa568466a8d8912e13168a4c56da89fd83631832db7488a1cef02

See more details on using hashes here.

Provenance

The following attestation bundles were made for madvr_envy-0.1.6.tar.gz:

Publisher: release.yml on binarylogic/py-madvr-envy

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

File details

Details for the file madvr_envy-0.1.6-py3-none-any.whl.

File metadata

  • Download URL: madvr_envy-0.1.6-py3-none-any.whl
  • Upload date:
  • Size: 20.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for madvr_envy-0.1.6-py3-none-any.whl
Algorithm Hash digest
SHA256 a82de57e5bf6702eca4063a479a1b2ee8b994c61e4715714e5cf96ab762cd9c5
MD5 b0082ac8254a62efa3a9c494888c2997
BLAKE2b-256 618e35b075f5c9f75d46aced1f466fb27ab7603d51f83af875cc8b7e257b0fba

See more details on using hashes here.

Provenance

The following attestation bundles were made for madvr_envy-0.1.6-py3-none-any.whl:

Publisher: release.yml on binarylogic/py-madvr-envy

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