Skip to main content

GitHub Release Python Versions Project Stage Project Maintenance License

Build Status Code Coverage

Asynchronous Python client for Hot Spring Connected Spa Kit 2.

[!WARNING] This library is currently in heavy development. Not all features might work perfectly, and some features may not be fully tested as they depend on the physical hardware available for testing.

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 — Read voltage, power consumption, and failure states
  • 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

[!CAUTION] The spa's energy consumption and usage metrics are not always accurate. Most values related to power (including current, amp, volt, etc) and values based on time (like the amount of time the jet have been turned on) are most likely incorrect, as I have not been able to fully reverse engineer these aspects of the API.

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).

[!NOTE] This library has been primarily tested on a Hotspring Hot Spot Relay 2025. Compatibility with other specific models and configurations may vary.

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! :heart_eyes:

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.

Download files

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

Source Distribution

python_hotspring-1.1.0.tar.gz (18.5 kB view details)

Uploaded Source

Built Distribution

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

python_hotspring-1.1.0-py3-none-any.whl (17.1 kB view details)

Uploaded Python 3

File details

Details for the file python_hotspring-1.1.0.tar.gz.

File metadata

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

File hashes

Hashes for python_hotspring-1.1.0.tar.gz
Algorithm Hash digest
SHA256 6b07120d5abb5b7d4139b12d81c41782c4a86e89b875fd694f30e3eafbf6f22d
MD5 e742d5b4f58422cf859e7a44c7376205
BLAKE2b-256 7a233c2dd87bff189a0cfcd9558f854dd9f810979d2dbd65a2f5ba024ad2a12f

See more details on using hashes here.

Provenance

The following attestation bundles were made for python_hotspring-1.1.0.tar.gz:

Publisher: release.yaml on Moustachauve/python-hotspring

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_hotspring-1.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for python_hotspring-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6df22153222a6dd539c99fbaec20f760f8b789e16b1fbcb8b769f6373ebc0453
MD5 6f7dc1379f4e3c581c25182bc51f23b1
BLAKE2b-256 244b26a09781c55d099e41f0a5108788a1818583fb4d637354f165e4f09b26ba

See more details on using hashes here.

Provenance

The following attestation bundles were made for python_hotspring-1.1.0-py3-none-any.whl:

Publisher: release.yaml on Moustachauve/python-hotspring

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

Release history Release notifications | RSS feed

1.3.0

2 files

1.2.0

2 files

This release

1.1.0 This release

2 files

1.0.1

2 files

1.0.0

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