Skip to main content

PyISY

Python library for the Universal Devices ISY-994, Polisy, and eisy controllers.

This library allows for easy interaction with ISY nodes, programs, variables, and the network module. It provides asynchronous communication and supports near real-time updates via WebSocket or SOAP event streams.

The full documentation is available at https://pyisy.readthedocs.io.

Features

  • Asynchronous communication via asyncio and aiohttp.
  • Support for ISY-994 (v4 and v5 firmware), Polisy, and eisy.
  • Automatic updates from the device via WebSocket or SOAP.
  • Interaction with nodes, groups, programs, variables, and networking modules.
  • Command-line interface for quick testing and monitoring.

Installation

pip install pyisy

Quick Start

You can test the connection to your ISY directly from the command line:

python3 -m pyisy http://your-isy-url:port username password

Basic Usage

import asyncio
from pyisy import ISY


async def main():
    # Connect to ISY controller
    isy = ISY("192.168.1.10", 80, "admin", "password")

    # Initialize the connection and download information
    await isy.initialize()

    # Get a node by its address
    node = isy.nodes["1A 2B 3C 1"]
    print(f"Node Name: {node.name}")
    print(f"Node Status: {node.status}")

    # Turn a node on
    await node.turn_on()

    # Shutdown the connection
    await isy.shutdown()


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

Development

Contributions are welcome! This project uses pre-commit to ensure code quality.

Setup

# Clone the repository
git clone https://github.com/automicus/PyISY.git
cd PyISY

# Install development + test dependencies
pip install -r requirements.txt -r requirements-dev.txt -r requirements-test.txt
pip install -e .

# Install pre-commit hooks
pre-commit install

We use ruff for formatting and linting. You can run it manually:

ruff check .
ruff format .

A VSCode DevContainer is also provided for a consistent development environment.

Tests

PyISY has an offline pytest suite covering the XML parsers, connection behavior, the full ISY.initialize() lifecycle, and the per-node / per-program action methods used by the Home Assistant isy994 integration. The fixtures are anonymized real-controller exports — running the suite needs no live ISY.

Please run the tests before opening a PR. They are fast (~10 s) and catch most regressions in the public API that Home Assistant Core depends on.

# Run the full suite
pytest

# Run with a coverage report
pytest --cov=pyisy --cov-report=term-missing

# Run a single file or test
pytest tests/test_nodes.py
pytest tests/test_climate_lock.py::test_set_climate_setpoint_heat_doubles_for_uom_101

The same pytest job runs in CI on Python 3.11 and 3.14 (matching the range Home Assistant supports). The terminal coverage report is visible in the workflow logs.

If you change parsing or status behavior, be ready to refresh snapshots:

pytest --snapshot-update

Snapshots live under tests/__snapshots__/ and are tracked in git.

Releases

Detailed change logs are available on the GitHub Releases page.

Credits

Metadata

Release files for pyisy 3.8.0

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

Source distribution (sdist)

Source distribution for pyisy 3.8.0
File Size Uploaded
pyisy-3.8.0.tar.gz 149.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for pyisy 3.8.0
File Interpreter ABI Platform
pyisy-3.8.0-py3-none-any.whl Python 3 none any Details

Total release size: 227.7 kB

Release files / pyisy-3.8.0.tar.gz

Download URL pyisy-3.8.0.tar.gz
Size 149.5 kB
Tags Source
SHA-256 checksum
How to use checksums
9d48c380a1544eb1eb94fef26889086876d0de52e46e0ea0c96bf709d35b6b64
BLAKE2b-256 checksum
How to use checksums
204d07f01d16f613712478cb87095b92f497a16020b6fbadf1a36b9b68414e9f
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 14, 2026.

Transparency log

Release files / pyisy-3.8.0-py3-none-any.whl

Download URL pyisy-3.8.0-py3-none-any.whl
Size 78.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e5facd67e49b60557e46cd364df5f9811f998049e976ffd430bec51b0a1450a3
BLAKE2b-256 checksum
How to use checksums
f38ede52aee6cde87e85346d66d461ad155fb5ee4da2e1f533b3fd9911fbf7a9
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 14, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

3.8.0 This release

2 release files

3.7.0

2 release files

3.6.1

2 release files

3.6.0

2 release files

3.5.1

2 release files

3.4.1

2 release files

3.4.0

2 release files

3.3.0

2 release files

3.2.0

2 release files

3.1.15

2 release files

3.1.14

2 release files

3.1.11

2 release files

3.1.10

2 release files

3.1.9

2 release files

3.1.8

2 release files

3.1.7

2 release files

3.1.6

2 release files

3.1.5

2 release files

3.1.4

2 release files

3.1.3

2 release files

3.1.2

2 release files

3.1.1

2 release files

3.0.10

2 release files

3.0.9

2 release files

3.0.8

2 release files

3.0.7

2 release files

3.0.6

2 release files

3.0.5

2 release files

3.0.3

2 release files

3.0.2

2 release files

3.0.1

2 release files

3.0.0

2 release files

2.1.7

2 release files

2.1.6

2 release files

2.1.5

2 release files

2.1.4

2 release files

2.1.3

2 release files

2.1.2

2 release files

2.1.1

2 release files

2.1.0

2 release files

2.0.2

2 release files

2.0.1

1 release file

1.1.2

2 release files

1.1.1

1 release file

1.1.0

1 release file

1.0.8

1 release file

1.0.7

1 release file

1.0.6

1 release file

1.0.5

1 release file

1.0.4

1 release file

1.0.3

1 release file

1.0.2

1 release file

1.0.1

1 release file

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