Metadata-Version: 2.5
Name: py-atmos-wg1000
Version: 2026.10.1
Summary: Async Python client for the ATMOS WG1000 local WebSocket API (TLS, binary framing, register poll)
Project-URL: Repository, https://github.com/marpi82/py-atmos-wg1000
Author-email: MarPi82 <marpi82.dev@google.com>
Maintainer-email: MarPi82 <marpi82.dev@google.com>
License-Expression: MIT
License-File: LICENSE
Keywords: atmos,boiler,heating,home-assistant,home-automation,pydantic,websocket,wg1000
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Home Automation
Classifier: Typing :: Typed
Requires-Python: <3.15,>=3.13.2
Requires-Dist: pydantic<3.0.0,>=2.10.4
Requires-Dist: websockets<16.0,>=14.0
Description-Content-Type: text/x-rst

py-atmos-wg1000
===============

Async Python library for the local WebSocket API of an **ATMOS WG1000** gateway.
It is the data layer for a future Home Assistant integration: a heavy catalog at
configuration time, and a light value feed at runtime.

**PyPI name:** ``py-atmos-wg1000`` (PyPI rejected ``py-atmos`` / ``pyatmos`` as too similar to the existing ``pyatmos`` project).
Import as ``import pyatmos_wg1000``.

**Status:** stable (``2026.10.1``). The frame codec, language tables, Info dump,
register poller, and stock ``Pages.js`` poll-interval parser are in place.
Writes to the boiler are encoded.

Install
-------

.. code-block:: bash

   pip install py-atmos-wg1000

Two paths
---------

Configuration (heavy)
   Download ``Lang.json`` and ``texty_brana.json``, pick a language by column
   code (``POL``) or by the gateway index in ``USER1_LANG``, and resolve labels.
   This is ``pyatmos_wg1000.i18n.LanguageCatalog``. Drop it after the entities exist.

Runtime (light)
   Keep one WebSocket, log in, and poll a fixed set of register ids.
   ``pyatmos_wg1000.feed.AtmosFeed`` stores raw words and publishes
   ``pyatmos_wg1000.feed.RegisterUpdate`` only when a word changes. It does not
   load the language files.

The gateway does not push temperatures. The socket stays open and the feed asks
again on an interval. Stock panel cadence is in ``Pages.js`` (``PrmID1s`` …
``PrmID30s``); ``parse_pages_js_hod16_intervals`` reads it. The Informace page
requests Info dumps every 1 s (``INFO_PAGE_POLL_INTERVAL``). Circuit room
temperatures on the homepage use the 30 s bucket.

Credentials
-----------

Copy ``.env.example`` to ``.env``. The real file is gitignored.

.. code-block:: text

   PYATMOS_URL=https://192.168.0.10
   PYATMOS_USER=user
   PYATMOS_PASSWORD=secret

Development
-----------

Python 3.13. Version comes from git tags (``hatch-vcs``), with fallback ``0.0.0``
until the first tag. See ``CONTRIBUTING.md``, ``AGENTS.md``, and ``SECURITY.md``.

.. code-block:: bash

   uv sync --group dev --group test --locked
   uv run pre-commit install --hook-type pre-commit --hook-type pre-push
   uv run --group dev --group test poe validate
