Skip to main content

python-pooldose

PyPI version Python License: MIT Pylint Mypy Tests

Unofficial async Python client for SEKO Pooldosing systems. SEKO is a manufacturer of various monitoring and control devices for pools and spas. Some devices from VÁGNER POOL and BWT are compatible as well.

This client uses an undocumented local HTTP API. It provides live readings for pool sensors such as temperature, pH, ORP/Redox, as well as status information and control over the dosing logic.

Disclaimer: Use at your own risk. No liability for damages or malfunctions.

Features

  • Async/await support for non-blocking operations
  • Dynamic sensor discovery based on device model and firmware
  • Dictionary-style access to instant values
  • Structured data API with type-based organization
  • Device analyzer for discovering unsupported device capabilities
  • PEP-561 compliant with full type hints for Home Assistant integrations
  • Command-line interface for direct device interaction and testing
  • Secure by default - WiFi passwords excluded unless explicitly requested
  • Comprehensive error handling with detailed logging
  • Cloud connection status
  • WiFi RSSI signal

Each method queries the device live and returns the current value.

  • SSL/HTTPS support for secure communication

Prerequisites

  1. Install and set-up the PoolDose devices according to the user manual.
    1. In particular, connect the device to your WiFi network.
    2. Identify the IP address or hostname of the device.
  2. Browse to the IP address or hostname (default port: 80).
    1. Try to log in to the web interface with the default password (0000).
    2. Check availability of data in the web interface.
  3. Optionally: Block the device from internet access to ensure cloudless-only operation.

Installation

(i) Release Version (PyPI)

Install the latest stable release from PyPI:

pip install python-pooldose

(ii) Development Version (GitHub)

Install the latest development state directly from the main branch:

pip install "git+https://github.com/lmaertin/python-pooldose.git@main"

If you want to work on the code locally (editable install):

git clone https://github.com/lmaertin/python-pooldose.git
cd python-pooldose
pip install -e .

macOS/Linux Quick Installer

For convenience, the repository also provides a bootstrap script that downloads the latest source archive from GitHub, installs it into a local virtual environment, and creates a launcher on the Desktop.

curl -fsSLO https://raw.githubusercontent.com/lmaertin/python-pooldose/main/install-unix.sh
bash install-unix.sh

The installer creates:

  • macOS: ~/Library/Application Support/python-pooldose and ~/Desktop/PoolDose.command
  • Linux: ~/.local/share/python-pooldose and ~/Desktop/PoolDose.sh

Network access hint:

  • macOS: If prompted, allow Local Network access for Terminal/iTerm/Python.
  • Linux: If a firewall is enabled, allow local network access for Terminal/Python.

Run the same installer again later to update to the latest source from GitHub. The generated launcher can also forward normal CLI arguments:

~/Desktop/PoolDose.command --host 192.168.1.100
~/Desktop/PoolDose.command --help

On Linux, use ~/Desktop/PoolDose.sh instead of ~/Desktop/PoolDose.command.

Windows Quick Installer

Use the PowerShell installer to download and install the latest source into a local virtual environment and create a Desktop launcher.

Invoke-WebRequest https://raw.githubusercontent.com/lmaertin/python-pooldose/main/install-windows.ps1 -OutFile install-windows.ps1
powershell -ExecutionPolicy Bypass -File .\install-windows.ps1

The installer creates:

  • %LOCALAPPDATA%\python-pooldose for source and virtual environment
  • %USERPROFILE%\Desktop\PoolDose.cmd as a launcher

If Python is not installed yet, the script stops and shows instructions to install Python first (python.org installer or winget).

Network access hint:

  • If Windows Firewall prompts for Python/Terminal network access, click Allow.

Quick Start

import asyncio
from pooldose.client import PooldoseClient
from pooldose.request_status import RequestStatus

async def main():
    client = PooldoseClient(host="192.168.1.100")
    status = await client.connect()
    if status != RequestStatus.SUCCESS:
        print(f"Connection failed: {status}")
        return

    # Dictionary-style access
    status, values = await client.instant_values()
    if status == RequestStatus.SUCCESS and values:
        print(f"Temperature: {values['temperature']}")
        print(f"pH: {values.get('ph', 'N/A')}")

    # Structured data (grouped by type)
    status, data = await client.instant_values_structured()
    if status == RequestStatus.SUCCESS:
        for sensor, info in data.get("sensor", {}).items():
            print(f"{sensor}: {info['value']} {info.get('unit', '')}")

asyncio.run(main())

Command Line Usage

# Connect to device
pooldose --host 192.168.1.100

# With HTTPS
pooldose --host 192.168.1.100 --ssl

# Analyze device capabilities
pooldose --host 192.168.1.100 --analyze

# Mock mode (testing without hardware)
pooldose --mock path/to/data.json

# Show help / version
pooldose --help
pooldose --version

See docs/cli.md for full CLI documentation and device analysis details.

Supported Devices

Device PRODUCT_CODE FW Code Notes
SEKO PoolDose Double PDPR1H1HAW100 539187
SEKO PoolDose Double Spa PDPR1H04AW100 539292
SEKO POOLDOSE pH+ORP CF Group Wi-Fi PDPR1H1HAW102 539187 Alias for PDPR1H1HAW100 mapping
SEKO PoolDose pH PDPH1H1HAW100 539176 pH-only device
BWT MEDO CONNECT Wi-Fi PDPH1H1HAW1B0 539494 Based on SEKO PoolDose pH mapping
BWT Manager Connect Duo PDPR1H1HAW1B0_I 539472 Uses PDPR1H1HAW1B0 data-key mapping
VÁGNER POOL VA DOS BASIC PDHC1H1HAR1V0 539224
VÁGNER POOL VA DOS EXACT PDHC1H1HAR1V1 539224 Own dedicated mapping (incl. chlorine); raw data keys use PDPR1H1HAR1V0 prefix
KEMI DOSE AQUAVIVA pH-ORP KDPR5050AWH00 539191 pH/ORP device (no chlorine); untested
KEMI DOSE AQUAVIVA pH-ORP-CL KDHC5050AWH01 539191 pH/ORP/chlorine device; resolves to KDPR5050AWH00 data-key mapping

Other models may work but are untested. See docs/device-support.md for how to request support for new devices.

Documentation

Topic Description
API Reference Constructor, methods, properties, data formats
CLI & Device Analysis Command line usage and device analyzer
Examples Basic and advanced usage examples
Mock Client Testing without hardware using JSON files
SSL/HTTPS SSL configuration and migration guide
Security Data classification and sensitive data handling
Type Hints & HA PEP-561 compliance and Home Assistant integration

Changelog

For detailed release notes and version history, please see CHANGELOG.md.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

python_pooldose-0.9.9.tar.gz (61.4 kB view details)

Uploaded Source

Built Distribution

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

python_pooldose-0.9.9-py3-none-any.whl (47.8 kB view details)

Uploaded Python 3

File details

Details for the file python_pooldose-0.9.9.tar.gz.

File metadata

  • Download URL: python_pooldose-0.9.9.tar.gz
  • Upload date:
  • Size: 61.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for python_pooldose-0.9.9.tar.gz
Algorithm Hash digest
SHA256 94c573576b1c3e80ef207cca248435fd9824c71c69df38fe5f88ea7408578f80
MD5 04cef5119fbaa6cbf7b4ccb76a2b2e48
BLAKE2b-256 37a4daa7171e83ea4c1976eb2688150ca96bc097f8965bf16daa65ca8be4cb7d

See more details on using hashes here.

Provenance

The following attestation bundles were made for python_pooldose-0.9.9.tar.gz:

Publisher: python-publish.yml on lmaertin/python-pooldose

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

File details

Details for the file python_pooldose-0.9.9-py3-none-any.whl.

File metadata

  • Download URL: python_pooldose-0.9.9-py3-none-any.whl
  • Upload date:
  • Size: 47.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for python_pooldose-0.9.9-py3-none-any.whl
Algorithm Hash digest
SHA256 64899d27b699e2ba522447891457c9b10bfbf706f4d5a5a030902c472526d683
MD5 2efc2ca68f9fd213c0b54a5a45b6feb6
BLAKE2b-256 50b7f0e4f5a8f87dceb9b2ef1aee37a69bd5d9a5224d3701f574bef1dd2e33b0

See more details on using hashes here.

Provenance

The following attestation bundles were made for python_pooldose-0.9.9-py3-none-any.whl:

Publisher: python-publish.yml on lmaertin/python-pooldose

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

Release history Release notifications | RSS feed

0.9.10

2 files

This release

0.9.9 This release

2 files

0.9.8

2 files

0.9.6

2 files

0.9.1

2 files

0.9.0

2 files

0.8.6

2 files

0.8.5

2 files

0.8.2

2 files

0.8.1

2 files

0.8.0

2 files

0.7.9

2 files

0.7.8

2 files

0.7.7

2 files

0.7.0

2 files

0.6.9

2 files

0.6.8

2 files

0.6.6

2 files

0.6.5

2 files

0.6.0

2 files

0.5.1

2 files

0.5.0

2 files

0.4.6

2 files

0.4.5

2 files

0.4.2

2 files

0.4.1

2 files

0.4.0

2 files

0.3.1

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page