Skip to main content
Yanked

This release has been yanked by its maintainers, and will be ignored by installers, except when explicitly specified.
Consider using release 3.1.0 instead.
Reason given by maintainers: Accidental release

GitHub Release Python Versions Project Stage Project Maintenance License

Build Status Code Coverage

Asynchronous Python client for Hot Spring Connected Spa Kit 2.

About

This package allows you to control and monitor a Hot Spring spa equipped with the Connected Spa Kit 2 programmatically via its local HTTP API. It communicates with the Home Network Adapter (HNA), which bridges your home network to the spa's control board over LoRA radio.

It is primarily designed to be used as the communication layer for an official Home Assistant integration.

Supported Features

  • Temperature monitoring & control — Read current/target water temperature, set target temperature, change heating modes
  • Jets & blower — Control jet speeds (off, low, high) across all jet pumps
  • Multi-zone lighting — Set colors and brightness for up to 4 light zones plus the logo light
  • Water care — Monitor FreshWater IQ salt system metrics (pH, chlorine, ORP, sensor life)
  • Diagnostics & Test Metrics — Read raw hardware test point currents, line voltages, sensor flow/switch states, and failure diagnostics
  • Runtime Tracking — Cumulative heater runtime and individual jet pump runtime in hours
  • Connection monitoring — Check LoRA bridge and cloud connectivity status
  • Energy saving schedules — View configured energy saving time windows
  • Clean cycle — Start or stop the 10-minute clean cycle

Compatible Spas

This library works with any Hot Spring, Caldera, or Freeflow spa that supports the Connected Spa Kit 2 (compatible with spas from 2014 onwards that use the IQ2020/Eagle control board).

Installation

pip install python-hotspring

Usage

import asyncio

from hotspring import HotSpring


async def main() -> None:
    """Show example of controlling your Hot Spring spa."""
    async with HotSpring("192.168.1.100") as spa_client:
        # Get full spa status
        spa = await spa_client.update()
        print(f"Water temperature: {spa.heater.current_temperature}°F")
        print(f"Heater: {'on' if spa.heater.is_on else 'off'}")
        print(f"Heating mode: {spa.heater.heating_mode.name}")

        # Control the spa
        await spa_client.set_temperature(102)
        await spa_client.set_jet(1, "highSpeed")
        await spa_client.set_light_color(1, "Blue")
        await spa_client.set_clean_cycle(enabled=True)


if __name__ == "__main__":
    asyncio.run(main())

Demos

Several demonstration scripts are available in the demo/ directory to help you get started with the library and verify connectivity with your spa.

Architecture

The Hot Spring Connected Spa Kit 2 uses a two-part system:

  • HNA (Home Network Adapter) — Located inside the home, connects to WiFi/Internet and runs the local HTTP API that this library communicates with
  • SNA (Spa Network Adapter) — Located inside the spa, wired to the IQ2020 control board via RS485, communicates with the HNA via LoRA radio

All API calls go through the HNA, which relays commands to the spa over LoRA. Commands typically take 2–5 seconds to process.

Changelog & Releases

This repository keeps a change log using GitHub's releases functionality.

Releases are based on Semantic Versioning, and use the format of MAJOR.MINOR.PATCH. In a nutshell, the version will be incremented based on the following:

  • MAJOR: Incompatible or major changes.
  • MINOR: Backwards-compatible new features and enhancements.
  • PATCH: Backwards-compatible bugfixes and package updates.

Contributing

This is an active open-source project. We are always open to people who want to use the code or contribute to it.

Thank you for being involved! 😍

Setting up development environment

This Python project is fully managed using the Poetry dependency manager.

You need at least:

To install all packages, including all development requirements:

poetry install

As this repository uses the prek framework, all changes are linted and tested with each commit. You can run all checks and tests manually, using the following command:

poetry run prek run --all-files

To run just the Python tests:

poetry run pytest

Authors & contributors

The original setup of this repository is by @Moustachauve.

The structure of this library is inspired by python-wled from @frenck and pytechnove from @Moustachauve.

Metadata

Release files for python-hotspring 3.0.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for python-hotspring 3.0.2
File Size Uploaded
python_hotspring-3.0.2.tar.gz 28.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for python-hotspring 3.0.2
File Interpreter ABI Platform
python_hotspring-3.0.2-py3-none-any.whl Python 3 none any Details

Total release size: 55.3 kB

Release files / python_hotspring-3.0.2.tar.gz

Download URL python_hotspring-3.0.2.tar.gz
Size 28.2 kB
Tags Source
SHA-256 checksum
How to use checksums
b6c75ce26dc8bee59579be2d7030b33bc51cd2b75476ee8925a7bac30982f2d3
BLAKE2b-256 checksum
How to use checksums
4b5957c9cec1c7a4cf31b7b1f490234aee78d8d0544233e2a59f28be8f145dd5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 4, 2026.

Transparency log

Release files / python_hotspring-3.0.2-py3-none-any.whl

Download URL python_hotspring-3.0.2-py3-none-any.whl
Size 27.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
234ab04b4cf9fa5a6c87aaf70c03fcd2659c41cf91f33de681f47f83bd88bca1
BLAKE2b-256 checksum
How to use checksums
020dd70ea549d9cef898d731a9f279d86c2bf86f1aa1b65e1cccf515217be0f3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 4, 2026.

Transparency log

Release history Release notifications | RSS feed

3.1.0

2 release files

This release

3.0.2 This release

2 release files

3.0.1

2 release files

3.0.0

2 release files

2.1.0

2 release files

2.0.1

2 release files

2.0.0

2 release files

1.3.0

2 release files

1.2.0

2 release files

1.1.0

2 release files

1.0.1

2 release files

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page