Async Python library for the Pooldigital Violet pool controller.
Project description
myviolet — Python client for the Pooldigital Violet pool controller
Async Python library for the Pooldigital Violet pool controller — the successor to the ProCon.IP unit (sister library: proconip). Primarily intended as the foundation for a Home Assistant integration, but usable on its own for any Python application that talks to the controller.
- Documentation: https://ylabonte.github.io/myviolet/
- Live demo controller (vendor-owned): https://demo.myviolet.de/getReadings?ALL
- Pooldigital community forum (DE) — links to manuals, demo system, and discussions: https://www.poolsteuerung.de/
Requirements
- Python ≥ 3.13
aiohttp >= 3.13.5, < 4yarl >= 1.23.0, < 2
Dependency ranges match the Home Assistant Core 2026.5 pins.
Install
pip install myviolet
Usage
Reading state
import asyncio
import aiohttp
from myviolet import VioletClient
async def main() -> None:
async with aiohttp.ClientSession() as session:
async with VioletClient(
session,
host="violet.local",
username="admin",
password="...",
) as client:
snapshot = await client.readings.get()
if snapshot.water_chemistry.ph is not None:
print(f"pH: {snapshot.water_chemistry.ph.value}")
if snapshot.water_chemistry.orp is not None:
print(f"ORP: {snapshot.water_chemistry.orp.value} mV")
if snapshot.pump is not None and snapshot.pump.state.is_on:
print(f"Pump running for {snapshot.pump.runtime}")
asyncio.run(main())
Control
async with VioletClient(session, host="violet.local", username="admin", password="...") as client:
await client.control.pump("ON", speed=2)
await client.control.heater("AUTO")
await client.control.dosing("CL", "ON", duration=60)
await client.targets.set_ph(7.2) # validates 6.8-7.8 range
await client.control.cover_open(acknowledge_unsafe=True)
Cover movement is gated behind a mandatory acknowledge_unsafe=True keyword
because the vendor disallows fully-automated cover control (people / debris
in the pool). Callers are expected to add their own safety logic.
The Violet API at a glance
- Pure JSON over HTTP, HTTP Basic auth, no WebSocket / SSE — polling.
- Reads:
GET /getReadings?ALL,DOSAGE,RUNTIMESreturns ~400 keys. - Writes:
GET /setFunctionManually?<KEY>,<ACTION>,<DURATION>,<VALUE>,GET /setTargetValues?...,POST /setConfig,POST /setDosingParameters. - ~200 documented fields are exposed via typed views (with shared enums for
OutputState,CoverState, etc.); the remaining ~200 firmware-specific keys remain accessible viasnapshot.raw[...].
Disclaimer
I have nothing to do with the development, selling, marketing, or support of the Violet pool controller itself. This library is a community project intended to make the controller easier to integrate with Home Assistant and other Python-based automations.
License
MIT — see LICENSE.
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 myviolet-0.1.1.tar.gz.
File metadata
- Download URL: myviolet-0.1.1.tar.gz
- Upload date:
- Size: 42.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
36b9deabd1953850adb0b1b57cb4785fabef6f5d88b151e54c2b559fbf915cb6
|
|
| MD5 |
69c085a8af4ed168776b8b5afcb1c583
|
|
| BLAKE2b-256 |
f906fcfb4582d20e5d300ce7ca634e4f5663f8074cb9fa9f4c2110cdd08ed6d6
|
Provenance
The following attestation bundles were made for myviolet-0.1.1.tar.gz:
Publisher:
python-publish.yml on ylabonte/myviolet
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
myviolet-0.1.1.tar.gz -
Subject digest:
36b9deabd1953850adb0b1b57cb4785fabef6f5d88b151e54c2b559fbf915cb6 - Sigstore transparency entry: 1530955174
- Sigstore integration time:
-
Permalink:
ylabonte/myviolet@79571171d9e9ff65f47e70d6c20be4ccfc22980a -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/ylabonte
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@79571171d9e9ff65f47e70d6c20be4ccfc22980a -
Trigger Event:
release
-
Statement type:
File details
Details for the file myviolet-0.1.1-py3-none-any.whl.
File metadata
- Download URL: myviolet-0.1.1-py3-none-any.whl
- Upload date:
- Size: 33.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 |
669e28a028eea6a05a74e57afb570d1080bc3dd4edd10f1a8b8812ee4c7a4c75
|
|
| MD5 |
61a87028d780e82243280ddcd4cdb221
|
|
| BLAKE2b-256 |
4426b8674dda990c2d353729961aa0a95db8779ecf760fb049ac59462be02fa8
|
Provenance
The following attestation bundles were made for myviolet-0.1.1-py3-none-any.whl:
Publisher:
python-publish.yml on ylabonte/myviolet
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
myviolet-0.1.1-py3-none-any.whl -
Subject digest:
669e28a028eea6a05a74e57afb570d1080bc3dd4edd10f1a8b8812ee4c7a4c75 - Sigstore transparency entry: 1530955313
- Sigstore integration time:
-
Permalink:
ylabonte/myviolet@79571171d9e9ff65f47e70d6c20be4ccfc22980a -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/ylabonte
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@79571171d9e9ff65f47e70d6c20be4ccfc22980a -
Trigger Event:
release
-
Statement type: