From edc3359bc21b45c8d6a24eba5fe20cef5983e05b Mon Sep 17 00:00:00 2001 From: Christopher Fenner <9592452+CFenner@users.noreply.github.com> Date: Tue, 13 Aug 2024 10:16:34 +0200 Subject: [PATCH 01/31] chore(ci): create release drafter workflow (#3) --- .github/workflows/draft-release.yml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 .github/workflows/draft-release.yml diff --git a/.github/workflows/draft-release.yml b/.github/workflows/draft-release.yml new file mode 100644 index 00000000..238acd0b --- /dev/null +++ b/.github/workflows/draft-release.yml @@ -0,0 +1,18 @@ +name: Release Drafter + +# yamllint disable-line rule:truthy +on: + push: + branches: + - main + workflow_dispatch: + +jobs: + update_release_draft: + name: ✏️ Draft release + runs-on: ubuntu-latest + steps: + - name: πŸš€ Run Release Drafter + uses: release-drafter/release-drafter@v6.0.0 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From 47fc07cef787fb2a31075b5c58742bfdb1bd1609 Mon Sep 17 00:00:00 2001 From: Christopher Fenner <9592452+CFenner@users.noreply.github.com> Date: Wed, 14 Aug 2024 11:51:02 +0200 Subject: [PATCH 02/31] chore(ci): create release-drafter config (#4) Create release-drafter.yml --- .github/release-drafter.yml | 57 +++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 .github/release-drafter.yml diff --git a/.github/release-drafter.yml b/.github/release-drafter.yml new file mode 100644 index 00000000..cb404ea3 --- /dev/null +++ b/.github/release-drafter.yml @@ -0,0 +1,57 @@ +--- +name-template: "v$RESOLVED_VERSION" +tag-template: "v$RESOLVED_VERSION" +change-template: "- $TITLE @$AUTHOR (#$NUMBER)" +sort-direction: ascending + +categories: + - title: "🚨 Breaking changes" + labels: + - "breaking-change" + - title: "✨ New features" + labels: + - "new-feature" + - title: "πŸ› Bug fixes" + labels: + - "bugfix" + - title: "πŸš€ Enhancements" + labels: + - "enhancement" + - "refactor" + - "performance" + - title: "🧰 Maintenance" + labels: + - "maintenance" + - "ci" + - title: "πŸ“š Documentation" + labels: + - "documentation" + - title: "⬆️ Dependency updates" + labels: + - "dependencies" + +version-resolver: + major: + labels: + - "major" + - "breaking-change" + minor: + labels: + - "minor" + - "new-feature" + patch: + labels: + - "bugfix" + - "chore" + - "ci" + - "dependencies" + - "documentation" + - "enhancement" + - "performance" + - "refactor" + default: patch + +template: | + ## What’s changed + + $CHANGES From 554218281b59f729b18dfb7b311518efd1a797be Mon Sep 17 00:00:00 2001 From: Christopher Fenner <9592452+CFenner@users.noreply.github.com> Date: Wed, 14 Aug 2024 12:53:45 +0200 Subject: [PATCH 03/31] chore: use poetry (#6) * add poetry * remove requirements.txt * add test workflow * add lint workflow * fix codespell * chage python version for testing * add authlib * fix lockfile * add requests * fix pylint issues * remove old pylint workflow --- .github/workflows/build.yml | 58 --- .github/workflows/lint.yml | 85 ++++ .github/workflows/test.yml | 44 +++ PyViCare/Feature.py | 2 +- PyViCare/PyViCareHeatPump.py | 46 +-- poetry.lock | 733 +++++++++++++++++++++++++++++++++++ pyproject.toml | 56 +++ requirements.txt | 6 - setup.py | 23 -- 9 files changed, 942 insertions(+), 111 deletions(-) delete mode 100644 .github/workflows/build.yml create mode 100644 .github/workflows/lint.yml create mode 100644 .github/workflows/test.yml create mode 100644 poetry.lock create mode 100644 pyproject.toml delete mode 100644 requirements.txt delete mode 100644 setup.py diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml deleted file mode 100644 index 7c161560..00000000 --- a/.github/workflows/build.yml +++ /dev/null @@ -1,58 +0,0 @@ -name: Python package - -on: - push: - branches: - - master - pull_request: - branches: - - master - -jobs: - pylint: - runs-on: ubuntu-20.04 - strategy: - matrix: - python-version: ["3.9"] - steps: - - uses: actions/checkout@v2 - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v2 - with: - python-version: ${{ matrix.python-version }} - - name: Install dependencies - run: | - python -m pip install --upgrade pip - pip install pylint - if [ -f requirements.txt ]; then pip install -r requirements.txt; fi - - name: Analysing the code with pylint - run: pylint $(git ls-files '*.py') - - build: - runs-on: ubuntu-20.04 - strategy: - matrix: - python-version: ["3.6", "3.8", "3.9"] - - steps: - - uses: actions/checkout@v2 - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v2 - with: - python-version: ${{ matrix.python-version }} - - name: Install dependencies - run: | - python -m pip install --upgrade pip - pip install flake8 pytest - if [ -f requirements.txt ]; then pip install -r requirements.txt; fi - - name: Setup flake8 annotations - uses: rbialon/flake8-annotations@v1 - - name: Lint with flake8 - run: | - # stop the build if there are Python syntax errors or undefined names - flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics - # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide - flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics - - name: Test with pytest - run: | - pytest diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 00000000..7c5a6a64 --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,85 @@ +--- + name: Linting + + # yamllint disable-line rule:truthy + on: + push: + branches: + - main + pull_request: + workflow_dispatch: + + env: + DEFAULT_PYTHON: "3.11" + + jobs: + codespell: + name: codespell + runs-on: ubuntu-latest + steps: + - name: ‡️ Check out code from GitHub + uses: actions/checkout@v4.1.7 + - name: πŸ— Set up Poetry + run: pipx install poetry + - name: πŸ— Set up Python ${{ env.DEFAULT_PYTHON }} + id: python + uses: actions/setup-python@v5.1.1 + with: + python-version: ${{ env.DEFAULT_PYTHON }} + cache: "poetry" + - name: πŸ— Install workflow dependencies + run: | + poetry config virtualenvs.create true + poetry config virtualenvs.in-project true + - name: πŸ— Install Python dependencies + run: poetry install --no-interaction + - name: πŸš€ Check code for common misspellings + run: poetry run codespell **/*.py + + ruff: + name: Ruff + runs-on: ubuntu-latest + steps: + - name: ‡️ Check out code from GitHub + uses: actions/checkout@v4.1.7 + - name: πŸ— Set up Poetry + run: pipx install poetry + - name: πŸ— Set up Python ${{ env.DEFAULT_PYTHON }} + id: python + uses: actions/setup-python@v5.1.1 + with: + python-version: ${{ env.DEFAULT_PYTHON }} + cache: "poetry" + - name: πŸ— Install workflow dependencies + run: | + poetry config virtualenvs.create true + poetry config virtualenvs.in-project true + - name: πŸ— Install Python dependencies + run: poetry install --no-interaction + - name: πŸš€ Run ruff linter + run: poetry run ruff check --output-format=github . +# - name: πŸš€ Run ruff formatter +# run: poetry run ruff format --check . + + pylint: + name: pylint + runs-on: ubuntu-latest + steps: + - name: ‡️ Check out code from GitHub + uses: actions/checkout@v4.1.7 + - name: πŸ— Set up Poetry + run: pipx install poetry + - name: πŸ— Set up Python ${{ env.DEFAULT_PYTHON }} + id: python + uses: actions/setup-python@v5.1.1 + with: + python-version: ${{ env.DEFAULT_PYTHON }} + cache: "poetry" + - name: πŸ— Install workflow dependencies + run: | + poetry config virtualenvs.create true + poetry config virtualenvs.in-project true + - name: πŸ— Install Python dependencies + run: poetry install --no-interaction + - name: πŸš€ Run pylint + run: poetry run pylint **/*.py diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 00000000..2f16ad06 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,44 @@ +name: Testing + +# yamllint disable-line rule:truthy +on: + push: + branches: + - main + pull_request: + workflow_dispatch: + +env: + DEFAULT_PYTHON: "3.11" + +jobs: + pytest: + name: Python ${{ matrix.python }} + runs-on: ubuntu-latest + strategy: + matrix: + python: ["3.11", "3.12"] + steps: + - name: ‡️ Check out code from GitHub + uses: actions/checkout@v4.1.7 + - name: πŸ— Set up Poetry + run: pipx install poetry + - name: πŸ— Set up Python ${{ matrix.python }} + id: python + uses: actions/setup-python@v5.1.1 + with: + python-version: ${{ matrix.python }} + cache: "poetry" + - name: πŸ— Install workflow dependencies + run: | + poetry config virtualenvs.create true + poetry config virtualenvs.in-project true + - name: πŸ— Install dependencies + run: poetry install --no-interaction + - name: πŸš€ Run pytest + run: poetry run pytest --cov src tests + - name: ⬆️ Upload coverage artifact + uses: actions/upload-artifact@v4.3.6 + with: + name: coverage-${{ matrix.python }} + path: .coverage diff --git a/PyViCare/Feature.py b/PyViCare/Feature.py index db7ad957..272b0240 100644 --- a/PyViCare/Feature.py +++ b/PyViCare/Feature.py @@ -1,6 +1,6 @@ # Feature flag to raise an exception in case of a non existing device feature. # The flag should be fully removed in a later release. -# It allows dependend libraries to gracefully migrate to the new behaviour +# It allows dependent libraries to gracefully migrate to the new behaviour raise_exception_on_not_supported_device_feature = True # Feature flag to raise exception if rate limit of the API is hit diff --git a/PyViCare/PyViCareHeatPump.py b/PyViCare/PyViCareHeatPump.py index 335b7de1..bf3ec6e6 100644 --- a/PyViCare/PyViCareHeatPump.py +++ b/PyViCare/PyViCareHeatPump.py @@ -109,18 +109,18 @@ def getAvailableVentilationModes(self): def getActiveVentilationMode(self): return self.service.getProperty("ventilation.operating.modes.active")["properties"]["value"]["value"] - """ Set the active mode - Parameters - ---------- - mode : str - Valid mode can be obtained using getModes() - - Returns - ------- - result: json - json representation of the answer - """ def setActiveVentilationMode(self, mode): + """ Set the active mode + Parameters + ---------- + mode : str + Valid mode can be obtained using getModes() + + Returns + ------- + result: json + json representation of the answer + """ return self.service.setProperty("ventilation.operating.modes.active", "setMode", {'mode': mode}) @handleNotSupported @@ -137,19 +137,19 @@ def getAvailableVentilationPrograms(self): def getActiveVentilationProgram(self): return self.service.getProperty("ventilation.operating.programs.active")["properties"]["value"]["value"] - """ Activate a ventilation program - NOTE - DEVICE_COMMUNICATION_ERROR can just mean that the program is already on - Parameters - ---------- - program : str - - Returns - ------- - result: json - json representation of the answer - """ def activateVentilationProgram(self, program): + """ Activate a ventilation program + NOTE + DEVICE_COMMUNICATION_ERROR can just mean that the program is already on + Parameters + ---------- + program : str + + Returns + ------- + result: json + json representation of the answer + """ return self.service.setProperty(f"ventilation.operating.programs.{program}", "activate", {}) class Compressor(HeatingDeviceWithComponent): diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 00000000..fdc8f0ee --- /dev/null +++ b/poetry.lock @@ -0,0 +1,733 @@ +# This file is automatically @generated by Poetry and should not be changed by hand. + +[[package]] +name = "astroid" +version = "3.2.4" +description = "An abstract syntax tree for Python with inference support." +category = "dev" +optional = false +python-versions = ">=3.8.0" +files = [ + {file = "astroid-3.2.4-py3-none-any.whl", hash = "sha256:413658a61eeca6202a59231abb473f932038fbcbf1666587f66d482083413a25"}, + {file = "astroid-3.2.4.tar.gz", hash = "sha256:0e14202810b30da1b735827f78f5157be2bbd4a7a59b7707ca0bfc2fb4c0063a"}, +] + +[[package]] +name = "authlib" +version = "1.3.1" +description = "The ultimate Python library in building OAuth and OpenID Connect servers and clients." +category = "main" +optional = false +python-versions = ">=3.8" +files = [ + {file = "Authlib-1.3.1-py2.py3-none-any.whl", hash = "sha256:d35800b973099bbadc49b42b256ecb80041ad56b7fe1216a362c7943c088f377"}, + {file = "authlib-1.3.1.tar.gz", hash = "sha256:7ae843f03c06c5c0debd63c9db91f9fda64fa62a42a77419fa15fbb7e7a58917"}, +] + +[package.dependencies] +cryptography = "*" + +[[package]] +name = "certifi" +version = "2024.7.4" +description = "Python package for providing Mozilla's CA Bundle." +category = "main" +optional = false +python-versions = ">=3.6" +files = [ + {file = "certifi-2024.7.4-py3-none-any.whl", hash = "sha256:c198e21b1289c2ab85ee4e67bb4b4ef3ead0892059901a8d5b622f24a1101e90"}, + {file = "certifi-2024.7.4.tar.gz", hash = "sha256:5a1e7645bc0ec61a09e26c36f6106dd4cf40c6db3a1fb6352b0244e7fb057c7b"}, +] + +[[package]] +name = "cffi" +version = "1.17.0" +description = "Foreign Function Interface for Python calling C code." +category = "main" +optional = false +python-versions = ">=3.8" +files = [ + {file = "cffi-1.17.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f9338cc05451f1942d0d8203ec2c346c830f8e86469903d5126c1f0a13a2bcbb"}, + {file = "cffi-1.17.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a0ce71725cacc9ebf839630772b07eeec220cbb5f03be1399e0457a1464f8e1a"}, + {file = "cffi-1.17.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c815270206f983309915a6844fe994b2fa47e5d05c4c4cef267c3b30e34dbe42"}, + {file = "cffi-1.17.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d6bdcd415ba87846fd317bee0774e412e8792832e7805938987e4ede1d13046d"}, + {file = "cffi-1.17.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8a98748ed1a1df4ee1d6f927e151ed6c1a09d5ec21684de879c7ea6aa96f58f2"}, + {file = "cffi-1.17.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0a048d4f6630113e54bb4b77e315e1ba32a5a31512c31a273807d0027a7e69ab"}, + {file = "cffi-1.17.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24aa705a5f5bd3a8bcfa4d123f03413de5d86e497435693b638cbffb7d5d8a1b"}, + {file = "cffi-1.17.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:856bf0924d24e7f93b8aee12a3a1095c34085600aa805693fb7f5d1962393206"}, + {file = "cffi-1.17.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:4304d4416ff032ed50ad6bb87416d802e67139e31c0bde4628f36a47a3164bfa"}, + {file = "cffi-1.17.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:331ad15c39c9fe9186ceaf87203a9ecf5ae0ba2538c9e898e3a6967e8ad3db6f"}, + {file = "cffi-1.17.0-cp310-cp310-win32.whl", hash = "sha256:669b29a9eca6146465cc574659058ed949748f0809a2582d1f1a324eb91054dc"}, + {file = "cffi-1.17.0-cp310-cp310-win_amd64.whl", hash = "sha256:48b389b1fd5144603d61d752afd7167dfd205973a43151ae5045b35793232aa2"}, + {file = "cffi-1.17.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c5d97162c196ce54af6700949ddf9409e9833ef1003b4741c2b39ef46f1d9720"}, + {file = "cffi-1.17.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5ba5c243f4004c750836f81606a9fcb7841f8874ad8f3bf204ff5e56332b72b9"}, + {file = "cffi-1.17.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bb9333f58fc3a2296fb1d54576138d4cf5d496a2cc118422bd77835e6ae0b9cb"}, + {file = "cffi-1.17.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:435a22d00ec7d7ea533db494da8581b05977f9c37338c80bc86314bec2619424"}, + {file = "cffi-1.17.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d1df34588123fcc88c872f5acb6f74ae59e9d182a2707097f9e28275ec26a12d"}, + {file = "cffi-1.17.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:df8bb0010fdd0a743b7542589223a2816bdde4d94bb5ad67884348fa2c1c67e8"}, + {file = "cffi-1.17.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8b5b9712783415695663bd463990e2f00c6750562e6ad1d28e072a611c5f2a6"}, + {file = "cffi-1.17.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ffef8fd58a36fb5f1196919638f73dd3ae0db1a878982b27a9a5a176ede4ba91"}, + {file = "cffi-1.17.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4e67d26532bfd8b7f7c05d5a766d6f437b362c1bf203a3a5ce3593a645e870b8"}, + {file = "cffi-1.17.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:45f7cd36186db767d803b1473b3c659d57a23b5fa491ad83c6d40f2af58e4dbb"}, + {file = "cffi-1.17.0-cp311-cp311-win32.whl", hash = "sha256:a9015f5b8af1bb6837a3fcb0cdf3b874fe3385ff6274e8b7925d81ccaec3c5c9"}, + {file = "cffi-1.17.0-cp311-cp311-win_amd64.whl", hash = "sha256:b50aaac7d05c2c26dfd50c3321199f019ba76bb650e346a6ef3616306eed67b0"}, + {file = "cffi-1.17.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:aec510255ce690d240f7cb23d7114f6b351c733a74c279a84def763660a2c3bc"}, + {file = "cffi-1.17.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2770bb0d5e3cc0e31e7318db06efcbcdb7b31bcb1a70086d3177692a02256f59"}, + {file = "cffi-1.17.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:db9a30ec064129d605d0f1aedc93e00894b9334ec74ba9c6bdd08147434b33eb"}, + {file = "cffi-1.17.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a47eef975d2b8b721775a0fa286f50eab535b9d56c70a6e62842134cf7841195"}, + {file = "cffi-1.17.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f3e0992f23bbb0be00a921eae5363329253c3b86287db27092461c887b791e5e"}, + {file = "cffi-1.17.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6107e445faf057c118d5050560695e46d272e5301feffda3c41849641222a828"}, + {file = "cffi-1.17.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb862356ee9391dc5a0b3cbc00f416b48c1b9a52d252d898e5b7696a5f9fe150"}, + {file = "cffi-1.17.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c1c13185b90bbd3f8b5963cd8ce7ad4ff441924c31e23c975cb150e27c2bf67a"}, + {file = "cffi-1.17.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:17c6d6d3260c7f2d94f657e6872591fe8733872a86ed1345bda872cfc8c74885"}, + {file = "cffi-1.17.0-cp312-cp312-win32.whl", hash = "sha256:c3b8bd3133cd50f6b637bb4322822c94c5ce4bf0d724ed5ae70afce62187c492"}, + {file = "cffi-1.17.0-cp312-cp312-win_amd64.whl", hash = "sha256:dca802c8db0720ce1c49cce1149ff7b06e91ba15fa84b1d59144fef1a1bc7ac2"}, + {file = "cffi-1.17.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:6ce01337d23884b21c03869d2f68c5523d43174d4fc405490eb0091057943118"}, + {file = "cffi-1.17.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cab2eba3830bf4f6d91e2d6718e0e1c14a2f5ad1af68a89d24ace0c6b17cced7"}, + {file = "cffi-1.17.0-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:14b9cbc8f7ac98a739558eb86fabc283d4d564dafed50216e7f7ee62d0d25377"}, + {file = "cffi-1.17.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b00e7bcd71caa0282cbe3c90966f738e2db91e64092a877c3ff7f19a1628fdcb"}, + {file = "cffi-1.17.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:41f4915e09218744d8bae14759f983e466ab69b178de38066f7579892ff2a555"}, + {file = "cffi-1.17.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e4760a68cab57bfaa628938e9c2971137e05ce48e762a9cb53b76c9b569f1204"}, + {file = "cffi-1.17.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:011aff3524d578a9412c8b3cfaa50f2c0bd78e03eb7af7aa5e0df59b158efb2f"}, + {file = "cffi-1.17.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:a003ac9edc22d99ae1286b0875c460351f4e101f8c9d9d2576e78d7e048f64e0"}, + {file = "cffi-1.17.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ef9528915df81b8f4c7612b19b8628214c65c9b7f74db2e34a646a0a2a0da2d4"}, + {file = "cffi-1.17.0-cp313-cp313-win32.whl", hash = "sha256:70d2aa9fb00cf52034feac4b913181a6e10356019b18ef89bc7c12a283bf5f5a"}, + {file = "cffi-1.17.0-cp313-cp313-win_amd64.whl", hash = "sha256:b7b6ea9e36d32582cda3465f54c4b454f62f23cb083ebc7a94e2ca6ef011c3a7"}, + {file = "cffi-1.17.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:964823b2fc77b55355999ade496c54dde161c621cb1f6eac61dc30ed1b63cd4c"}, + {file = "cffi-1.17.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:516a405f174fd3b88829eabfe4bb296ac602d6a0f68e0d64d5ac9456194a5b7e"}, + {file = "cffi-1.17.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dec6b307ce928e8e112a6bb9921a1cb00a0e14979bf28b98e084a4b8a742bd9b"}, + {file = "cffi-1.17.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e4094c7b464cf0a858e75cd14b03509e84789abf7b79f8537e6a72152109c76e"}, + {file = "cffi-1.17.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2404f3de742f47cb62d023f0ba7c5a916c9c653d5b368cc966382ae4e57da401"}, + {file = "cffi-1.17.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3aa9d43b02a0c681f0bfbc12d476d47b2b2b6a3f9287f11ee42989a268a1833c"}, + {file = "cffi-1.17.0-cp38-cp38-win32.whl", hash = "sha256:0bb15e7acf8ab35ca8b24b90af52c8b391690ef5c4aec3d31f38f0d37d2cc499"}, + {file = "cffi-1.17.0-cp38-cp38-win_amd64.whl", hash = "sha256:93a7350f6706b31f457c1457d3a3259ff9071a66f312ae64dc024f049055f72c"}, + {file = "cffi-1.17.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1a2ddbac59dc3716bc79f27906c010406155031a1c801410f1bafff17ea304d2"}, + {file = "cffi-1.17.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6327b572f5770293fc062a7ec04160e89741e8552bf1c358d1a23eba68166759"}, + {file = "cffi-1.17.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dbc183e7bef690c9abe5ea67b7b60fdbca81aa8da43468287dae7b5c046107d4"}, + {file = "cffi-1.17.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5bdc0f1f610d067c70aa3737ed06e2726fd9d6f7bfee4a351f4c40b6831f4e82"}, + {file = "cffi-1.17.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6d872186c1617d143969defeadac5a904e6e374183e07977eedef9c07c8953bf"}, + {file = "cffi-1.17.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0d46ee4764b88b91f16661a8befc6bfb24806d885e27436fdc292ed7e6f6d058"}, + {file = "cffi-1.17.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f76a90c345796c01d85e6332e81cab6d70de83b829cf1d9762d0a3da59c7932"}, + {file = "cffi-1.17.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0e60821d312f99d3e1569202518dddf10ae547e799d75aef3bca3a2d9e8ee693"}, + {file = "cffi-1.17.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:eb09b82377233b902d4c3fbeeb7ad731cdab579c6c6fda1f763cd779139e47c3"}, + {file = "cffi-1.17.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:24658baf6224d8f280e827f0a50c46ad819ec8ba380a42448e24459daf809cf4"}, + {file = "cffi-1.17.0-cp39-cp39-win32.whl", hash = "sha256:0fdacad9e0d9fc23e519efd5ea24a70348305e8d7d85ecbb1a5fa66dc834e7fb"}, + {file = "cffi-1.17.0-cp39-cp39-win_amd64.whl", hash = "sha256:7cbc78dc018596315d4e7841c8c3a7ae31cc4d638c9b627f87d52e8abaaf2d29"}, + {file = "cffi-1.17.0.tar.gz", hash = "sha256:f3157624b7558b914cb039fd1af735e5e8049a87c817cc215109ad1c8779df76"}, +] + +[package.dependencies] +pycparser = "*" + +[[package]] +name = "charset-normalizer" +version = "3.3.2" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +category = "main" +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, + {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, +] + +[[package]] +name = "codespell" +version = "2.3.0" +description = "Codespell" +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "codespell-2.3.0-py3-none-any.whl", hash = "sha256:a9c7cef2501c9cfede2110fd6d4e5e62296920efe9abfb84648df866e47f58d1"}, + {file = "codespell-2.3.0.tar.gz", hash = "sha256:360c7d10f75e65f67bad720af7007e1060a5d395670ec11a7ed1fed9dd17471f"}, +] + +[package.extras] +dev = ["Pygments", "build", "chardet", "pre-commit", "pytest", "pytest-cov", "pytest-dependency", "ruff", "tomli", "twine"] +hard-encoding-detection = ["chardet"] +toml = ["tomli"] +types = ["chardet (>=5.1.0)", "mypy", "pytest", "pytest-cov", "pytest-dependency"] + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +category = "dev" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "coverage" +version = "7.6.1" +description = "Code coverage measurement for Python" +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "coverage-7.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b06079abebbc0e89e6163b8e8f0e16270124c154dc6e4a47b413dd538859af16"}, + {file = "coverage-7.6.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cf4b19715bccd7ee27b6b120e7e9dd56037b9c0681dcc1adc9ba9db3d417fa36"}, + {file = "coverage-7.6.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e61c0abb4c85b095a784ef23fdd4aede7a2628478e7baba7c5e3deba61070a02"}, + {file = "coverage-7.6.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fd21f6ae3f08b41004dfb433fa895d858f3f5979e7762d052b12aef444e29afc"}, + {file = "coverage-7.6.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f59d57baca39b32db42b83b2a7ba6f47ad9c394ec2076b084c3f029b7afca23"}, + {file = "coverage-7.6.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a1ac0ae2b8bd743b88ed0502544847c3053d7171a3cff9228af618a068ed9c34"}, + {file = "coverage-7.6.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e6a08c0be454c3b3beb105c0596ebdc2371fab6bb90c0c0297f4e58fd7e1012c"}, + {file = "coverage-7.6.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f5796e664fe802da4f57a168c85359a8fbf3eab5e55cd4e4569fbacecc903959"}, + {file = "coverage-7.6.1-cp310-cp310-win32.whl", hash = "sha256:7bb65125fcbef8d989fa1dd0e8a060999497629ca5b0efbca209588a73356232"}, + {file = "coverage-7.6.1-cp310-cp310-win_amd64.whl", hash = "sha256:3115a95daa9bdba70aea750db7b96b37259a81a709223c8448fa97727d546fe0"}, + {file = "coverage-7.6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7dea0889685db8550f839fa202744652e87c60015029ce3f60e006f8c4462c93"}, + {file = "coverage-7.6.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ed37bd3c3b063412f7620464a9ac1314d33100329f39799255fb8d3027da50d3"}, + {file = "coverage-7.6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d85f5e9a5f8b73e2350097c3756ef7e785f55bd71205defa0bfdaf96c31616ff"}, + {file = "coverage-7.6.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bc572be474cafb617672c43fe989d6e48d3c83af02ce8de73fff1c6bb3c198d"}, + {file = "coverage-7.6.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c0420b573964c760df9e9e86d1a9a622d0d27f417e1a949a8a66dd7bcee7bc6"}, + {file = "coverage-7.6.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1f4aa8219db826ce6be7099d559f8ec311549bfc4046f7f9fe9b5cea5c581c56"}, + {file = "coverage-7.6.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:fc5a77d0c516700ebad189b587de289a20a78324bc54baee03dd486f0855d234"}, + {file = "coverage-7.6.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b48f312cca9621272ae49008c7f613337c53fadca647d6384cc129d2996d1133"}, + {file = "coverage-7.6.1-cp311-cp311-win32.whl", hash = "sha256:1125ca0e5fd475cbbba3bb67ae20bd2c23a98fac4e32412883f9bcbaa81c314c"}, + {file = "coverage-7.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:8ae539519c4c040c5ffd0632784e21b2f03fc1340752af711f33e5be83a9d6c6"}, + {file = "coverage-7.6.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:95cae0efeb032af8458fc27d191f85d1717b1d4e49f7cb226cf526ff28179778"}, + {file = "coverage-7.6.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5621a9175cf9d0b0c84c2ef2b12e9f5f5071357c4d2ea6ca1cf01814f45d2391"}, + {file = "coverage-7.6.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:260933720fdcd75340e7dbe9060655aff3af1f0c5d20f46b57f262ab6c86a5e8"}, + {file = "coverage-7.6.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07e2ca0ad381b91350c0ed49d52699b625aab2b44b65e1b4e02fa9df0e92ad2d"}, + {file = "coverage-7.6.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c44fee9975f04b33331cb8eb272827111efc8930cfd582e0320613263ca849ca"}, + {file = "coverage-7.6.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:877abb17e6339d96bf08e7a622d05095e72b71f8afd8a9fefc82cf30ed944163"}, + {file = "coverage-7.6.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:3e0cadcf6733c09154b461f1ca72d5416635e5e4ec4e536192180d34ec160f8a"}, + {file = "coverage-7.6.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c3c02d12f837d9683e5ab2f3d9844dc57655b92c74e286c262e0fc54213c216d"}, + {file = "coverage-7.6.1-cp312-cp312-win32.whl", hash = "sha256:e05882b70b87a18d937ca6768ff33cc3f72847cbc4de4491c8e73880766718e5"}, + {file = "coverage-7.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:b5d7b556859dd85f3a541db6a4e0167b86e7273e1cdc973e5b175166bb634fdb"}, + {file = "coverage-7.6.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a4acd025ecc06185ba2b801f2de85546e0b8ac787cf9d3b06e7e2a69f925b106"}, + {file = "coverage-7.6.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a6d3adcf24b624a7b778533480e32434a39ad8fa30c315208f6d3e5542aeb6e9"}, + {file = "coverage-7.6.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0c212c49b6c10e6951362f7c6df3329f04c2b1c28499563d4035d964ab8e08c"}, + {file = "coverage-7.6.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e81d7a3e58882450ec4186ca59a3f20a5d4440f25b1cff6f0902ad890e6748a"}, + {file = "coverage-7.6.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78b260de9790fd81e69401c2dc8b17da47c8038176a79092a89cb2b7d945d060"}, + {file = "coverage-7.6.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a78d169acd38300060b28d600344a803628c3fd585c912cacc9ea8790fe96862"}, + {file = "coverage-7.6.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2c09f4ce52cb99dd7505cd0fc8e0e37c77b87f46bc9c1eb03fe3bc9991085388"}, + {file = "coverage-7.6.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6878ef48d4227aace338d88c48738a4258213cd7b74fd9a3d4d7582bb1d8a155"}, + {file = "coverage-7.6.1-cp313-cp313-win32.whl", hash = "sha256:44df346d5215a8c0e360307d46ffaabe0f5d3502c8a1cefd700b34baf31d411a"}, + {file = "coverage-7.6.1-cp313-cp313-win_amd64.whl", hash = "sha256:8284cf8c0dd272a247bc154eb6c95548722dce90d098c17a883ed36e67cdb129"}, + {file = "coverage-7.6.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:d3296782ca4eab572a1a4eca686d8bfb00226300dcefdf43faa25b5242ab8a3e"}, + {file = "coverage-7.6.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:502753043567491d3ff6d08629270127e0c31d4184c4c8d98f92c26f65019962"}, + {file = "coverage-7.6.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a89ecca80709d4076b95f89f308544ec8f7b4727e8a547913a35f16717856cb"}, + {file = "coverage-7.6.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a318d68e92e80af8b00fa99609796fdbcdfef3629c77c6283566c6f02c6d6704"}, + {file = "coverage-7.6.1-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13b0a73a0896988f053e4fbb7de6d93388e6dd292b0d87ee51d106f2c11b465b"}, + {file = "coverage-7.6.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4421712dbfc5562150f7554f13dde997a2e932a6b5f352edcce948a815efee6f"}, + {file = "coverage-7.6.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:166811d20dfea725e2e4baa71fffd6c968a958577848d2131f39b60043400223"}, + {file = "coverage-7.6.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:225667980479a17db1048cb2bf8bfb39b8e5be8f164b8f6628b64f78a72cf9d3"}, + {file = "coverage-7.6.1-cp313-cp313t-win32.whl", hash = "sha256:170d444ab405852903b7d04ea9ae9b98f98ab6d7e63e1115e82620807519797f"}, + {file = "coverage-7.6.1-cp313-cp313t-win_amd64.whl", hash = "sha256:b9f222de8cded79c49bf184bdbc06630d4c58eec9459b939b4a690c82ed05657"}, + {file = "coverage-7.6.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6db04803b6c7291985a761004e9060b2bca08da6d04f26a7f2294b8623a0c1a0"}, + {file = "coverage-7.6.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f1adfc8ac319e1a348af294106bc6a8458a0f1633cc62a1446aebc30c5fa186a"}, + {file = "coverage-7.6.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a95324a9de9650a729239daea117df21f4b9868ce32e63f8b650ebe6cef5595b"}, + {file = "coverage-7.6.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b43c03669dc4618ec25270b06ecd3ee4fa94c7f9b3c14bae6571ca00ef98b0d3"}, + {file = "coverage-7.6.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8929543a7192c13d177b770008bc4e8119f2e1f881d563fc6b6305d2d0ebe9de"}, + {file = "coverage-7.6.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:a09ece4a69cf399510c8ab25e0950d9cf2b42f7b3cb0374f95d2e2ff594478a6"}, + {file = "coverage-7.6.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:9054a0754de38d9dbd01a46621636689124d666bad1936d76c0341f7d71bf569"}, + {file = "coverage-7.6.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0dbde0f4aa9a16fa4d754356a8f2e36296ff4d83994b2c9d8398aa32f222f989"}, + {file = "coverage-7.6.1-cp38-cp38-win32.whl", hash = "sha256:da511e6ad4f7323ee5702e6633085fb76c2f893aaf8ce4c51a0ba4fc07580ea7"}, + {file = "coverage-7.6.1-cp38-cp38-win_amd64.whl", hash = "sha256:3f1156e3e8f2872197af3840d8ad307a9dd18e615dc64d9ee41696f287c57ad8"}, + {file = "coverage-7.6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:abd5fd0db5f4dc9289408aaf34908072f805ff7792632250dcb36dc591d24255"}, + {file = "coverage-7.6.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:547f45fa1a93154bd82050a7f3cddbc1a7a4dd2a9bf5cb7d06f4ae29fe94eaf8"}, + {file = "coverage-7.6.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:645786266c8f18a931b65bfcefdbf6952dd0dea98feee39bd188607a9d307ed2"}, + {file = "coverage-7.6.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9e0b2df163b8ed01d515807af24f63de04bebcecbd6c3bfeff88385789fdf75a"}, + {file = "coverage-7.6.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:609b06f178fe8e9f89ef676532760ec0b4deea15e9969bf754b37f7c40326dbc"}, + {file = "coverage-7.6.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:702855feff378050ae4f741045e19a32d57d19f3e0676d589df0575008ea5004"}, + {file = "coverage-7.6.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:2bdb062ea438f22d99cba0d7829c2ef0af1d768d1e4a4f528087224c90b132cb"}, + {file = "coverage-7.6.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:9c56863d44bd1c4fe2abb8a4d6f5371d197f1ac0ebdee542f07f35895fc07f36"}, + {file = "coverage-7.6.1-cp39-cp39-win32.whl", hash = "sha256:6e2cd258d7d927d09493c8df1ce9174ad01b381d4729a9d8d4e38670ca24774c"}, + {file = "coverage-7.6.1-cp39-cp39-win_amd64.whl", hash = "sha256:06a737c882bd26d0d6ee7269b20b12f14a8704807a01056c80bb881a4b2ce6ca"}, + {file = "coverage-7.6.1-pp38.pp39.pp310-none-any.whl", hash = "sha256:e9a6e0eb86070e8ccaedfbd9d38fec54864f3125ab95419970575b42af7541df"}, + {file = "coverage-7.6.1.tar.gz", hash = "sha256:953510dfb7b12ab69d20135a0662397f077c59b1e6379a768e97c59d852ee51d"}, +] + +[package.extras] +toml = ["tomli"] + +[[package]] +name = "cryptography" +version = "43.0.0" +description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "cryptography-43.0.0-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:64c3f16e2a4fc51c0d06af28441881f98c5d91009b8caaff40cf3548089e9c74"}, + {file = "cryptography-43.0.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3dcdedae5c7710b9f97ac6bba7e1052b95c7083c9d0e9df96e02a1932e777895"}, + {file = "cryptography-43.0.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d9a1eca329405219b605fac09ecfc09ac09e595d6def650a437523fcd08dd22"}, + {file = "cryptography-43.0.0-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:ea9e57f8ea880eeea38ab5abf9fbe39f923544d7884228ec67d666abd60f5a47"}, + {file = "cryptography-43.0.0-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:9a8d6802e0825767476f62aafed40532bd435e8a5f7d23bd8b4f5fd04cc80ecf"}, + {file = "cryptography-43.0.0-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:cc70b4b581f28d0a254d006f26949245e3657d40d8857066c2ae22a61222ef55"}, + {file = "cryptography-43.0.0-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:4a997df8c1c2aae1e1e5ac49c2e4f610ad037fc5a3aadc7b64e39dea42249431"}, + {file = "cryptography-43.0.0-cp37-abi3-win32.whl", hash = "sha256:6e2b11c55d260d03a8cf29ac9b5e0608d35f08077d8c087be96287f43af3ccdc"}, + {file = "cryptography-43.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:31e44a986ceccec3d0498e16f3d27b2ee5fdf69ce2ab89b52eaad1d2f33d8778"}, + {file = "cryptography-43.0.0-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:7b3f5fe74a5ca32d4d0f302ffe6680fcc5c28f8ef0dc0ae8f40c0f3a1b4fca66"}, + {file = "cryptography-43.0.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac1955ce000cb29ab40def14fd1bbfa7af2017cca696ee696925615cafd0dce5"}, + {file = "cryptography-43.0.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:299d3da8e00b7e2b54bb02ef58d73cd5f55fb31f33ebbf33bd00d9aa6807df7e"}, + {file = "cryptography-43.0.0-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:ee0c405832ade84d4de74b9029bedb7b31200600fa524d218fc29bfa371e97f5"}, + {file = "cryptography-43.0.0-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:cb013933d4c127349b3948aa8aaf2f12c0353ad0eccd715ca789c8a0f671646f"}, + {file = "cryptography-43.0.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:fdcb265de28585de5b859ae13e3846a8e805268a823a12a4da2597f1f5afc9f0"}, + {file = "cryptography-43.0.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:2905ccf93a8a2a416f3ec01b1a7911c3fe4073ef35640e7ee5296754e30b762b"}, + {file = "cryptography-43.0.0-cp39-abi3-win32.whl", hash = "sha256:47ca71115e545954e6c1d207dd13461ab81f4eccfcb1345eac874828b5e3eaaf"}, + {file = "cryptography-43.0.0-cp39-abi3-win_amd64.whl", hash = "sha256:0663585d02f76929792470451a5ba64424acc3cd5227b03921dab0e2f27b1709"}, + {file = "cryptography-43.0.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2c6d112bf61c5ef44042c253e4859b3cbbb50df2f78fa8fae6747a7814484a70"}, + {file = "cryptography-43.0.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:844b6d608374e7d08f4f6e6f9f7b951f9256db41421917dfb2d003dde4cd6b66"}, + {file = "cryptography-43.0.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:51956cf8730665e2bdf8ddb8da0056f699c1a5715648c1b0144670c1ba00b48f"}, + {file = "cryptography-43.0.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:aae4d918f6b180a8ab8bf6511a419473d107df4dbb4225c7b48c5c9602c38c7f"}, + {file = "cryptography-43.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:232ce02943a579095a339ac4b390fbbe97f5b5d5d107f8a08260ea2768be8cc2"}, + {file = "cryptography-43.0.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:5bcb8a5620008a8034d39bce21dc3e23735dfdb6a33a06974739bfa04f853947"}, + {file = "cryptography-43.0.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:08a24a7070b2b6804c1940ff0f910ff728932a9d0e80e7814234269f9d46d069"}, + {file = "cryptography-43.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:e9c5266c432a1e23738d178e51c2c7a5e2ddf790f248be939448c0ba2021f9d1"}, + {file = "cryptography-43.0.0.tar.gz", hash = "sha256:b88075ada2d51aa9f18283532c9f60e72170041bba88d7f37e49cbb10275299e"}, +] + +[package.dependencies] +cffi = {version = ">=1.12", markers = "platform_python_implementation != \"PyPy\""} + +[package.extras] +docs = ["sphinx (>=5.3.0)", "sphinx-rtd-theme (>=1.1.1)"] +docstest = ["pyenchant (>=1.6.11)", "readme-renderer", "sphinxcontrib-spelling (>=4.0.1)"] +nox = ["nox"] +pep8test = ["check-sdist", "click", "mypy", "ruff"] +sdist = ["build"] +ssh = ["bcrypt (>=3.1.5)"] +test = ["certifi", "cryptography-vectors (==43.0.0)", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-xdist"] +test-randomorder = ["pytest-randomly"] + +[[package]] +name = "dill" +version = "0.3.8" +description = "serialize all of Python" +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "dill-0.3.8-py3-none-any.whl", hash = "sha256:c36ca9ffb54365bdd2f8eb3eff7d2a21237f8452b57ace88b1ac615b7e815bd7"}, + {file = "dill-0.3.8.tar.gz", hash = "sha256:3ebe3c479ad625c4553aca177444d89b486b1d84982eeacded644afc0cf797ca"}, +] + +[package.extras] +graph = ["objgraph (>=1.7.2)"] +profile = ["gprof2dot (>=2022.7.29)"] + +[[package]] +name = "idna" +version = "3.7" +description = "Internationalized Domain Names in Applications (IDNA)" +category = "main" +optional = false +python-versions = ">=3.5" +files = [ + {file = "idna-3.7-py3-none-any.whl", hash = "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0"}, + {file = "idna-3.7.tar.gz", hash = "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc"}, +] + +[[package]] +name = "iniconfig" +version = "2.0.0" +description = "brain-dead simple config-ini parsing" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, + {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, +] + +[[package]] +name = "isort" +version = "5.13.2" +description = "A Python utility / library to sort Python imports." +category = "dev" +optional = false +python-versions = ">=3.8.0" +files = [ + {file = "isort-5.13.2-py3-none-any.whl", hash = "sha256:8ca5e72a8d85860d5a3fa69b8745237f2939afe12dbf656afbcb47fe72d947a6"}, + {file = "isort-5.13.2.tar.gz", hash = "sha256:48fdfcb9face5d58a4f6dde2e72a1fb8dcaf8ab26f95ab49fab84c2ddefb0109"}, +] + +[package.extras] +colors = ["colorama (>=0.4.6)"] + +[[package]] +name = "mccabe" +version = "0.7.0" +description = "McCabe checker, plugin for flake8" +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"}, + {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, +] + +[[package]] +name = "mypy" +version = "1.11.1" +description = "Optional static typing for Python" +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "mypy-1.11.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a32fc80b63de4b5b3e65f4be82b4cfa362a46702672aa6a0f443b4689af7008c"}, + {file = "mypy-1.11.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c1952f5ea8a5a959b05ed5f16452fddadbaae48b5d39235ab4c3fc444d5fd411"}, + {file = "mypy-1.11.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e1e30dc3bfa4e157e53c1d17a0dad20f89dc433393e7702b813c10e200843b03"}, + {file = "mypy-1.11.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2c63350af88f43a66d3dfeeeb8d77af34a4f07d760b9eb3a8697f0386c7590b4"}, + {file = "mypy-1.11.1-cp310-cp310-win_amd64.whl", hash = "sha256:a831671bad47186603872a3abc19634f3011d7f83b083762c942442d51c58d58"}, + {file = "mypy-1.11.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7b6343d338390bb946d449677726edf60102a1c96079b4f002dedff375953fc5"}, + {file = "mypy-1.11.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e4fe9f4e5e521b458d8feb52547f4bade7ef8c93238dfb5bbc790d9ff2d770ca"}, + {file = "mypy-1.11.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:886c9dbecc87b9516eff294541bf7f3655722bf22bb898ee06985cd7269898de"}, + {file = "mypy-1.11.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fca4a60e1dd9fd0193ae0067eaeeb962f2d79e0d9f0f66223a0682f26ffcc809"}, + {file = "mypy-1.11.1-cp311-cp311-win_amd64.whl", hash = "sha256:0bd53faf56de9643336aeea1c925012837432b5faf1701ccca7fde70166ccf72"}, + {file = "mypy-1.11.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f39918a50f74dc5969807dcfaecafa804fa7f90c9d60506835036cc1bc891dc8"}, + {file = "mypy-1.11.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0bc71d1fb27a428139dd78621953effe0d208aed9857cb08d002280b0422003a"}, + {file = "mypy-1.11.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b868d3bcff720dd7217c383474008ddabaf048fad8d78ed948bb4b624870a417"}, + {file = "mypy-1.11.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a707ec1527ffcdd1c784d0924bf5cb15cd7f22683b919668a04d2b9c34549d2e"}, + {file = "mypy-1.11.1-cp312-cp312-win_amd64.whl", hash = "sha256:64f4a90e3ea07f590c5bcf9029035cf0efeae5ba8be511a8caada1a4893f5525"}, + {file = "mypy-1.11.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:749fd3213916f1751fff995fccf20c6195cae941dc968f3aaadf9bb4e430e5a2"}, + {file = "mypy-1.11.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b639dce63a0b19085213ec5fdd8cffd1d81988f47a2dec7100e93564f3e8fb3b"}, + {file = "mypy-1.11.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4c956b49c5d865394d62941b109728c5c596a415e9c5b2be663dd26a1ff07bc0"}, + {file = "mypy-1.11.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:45df906e8b6804ef4b666af29a87ad9f5921aad091c79cc38e12198e220beabd"}, + {file = "mypy-1.11.1-cp38-cp38-win_amd64.whl", hash = "sha256:d44be7551689d9d47b7abc27c71257adfdb53f03880841a5db15ddb22dc63edb"}, + {file = "mypy-1.11.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2684d3f693073ab89d76da8e3921883019ea8a3ec20fa5d8ecca6a2db4c54bbe"}, + {file = "mypy-1.11.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:79c07eb282cb457473add5052b63925e5cc97dfab9812ee65a7c7ab5e3cb551c"}, + {file = "mypy-1.11.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:11965c2f571ded6239977b14deebd3f4c3abd9a92398712d6da3a772974fad69"}, + {file = "mypy-1.11.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a2b43895a0f8154df6519706d9bca8280cda52d3d9d1514b2d9c3e26792a0b74"}, + {file = "mypy-1.11.1-cp39-cp39-win_amd64.whl", hash = "sha256:1a81cf05975fd61aec5ae16501a091cfb9f605dc3e3c878c0da32f250b74760b"}, + {file = "mypy-1.11.1-py3-none-any.whl", hash = "sha256:0624bdb940255d2dd24e829d99a13cfeb72e4e9031f9492148f410ed30bcab54"}, + {file = "mypy-1.11.1.tar.gz", hash = "sha256:f404a0b069709f18bbdb702eb3dcfe51910602995de00bd39cea3050b5772d08"}, +] + +[package.dependencies] +mypy-extensions = ">=1.0.0" +typing-extensions = ">=4.6.0" + +[package.extras] +dmypy = ["psutil (>=4.0)"] +install-types = ["pip"] +mypyc = ["setuptools (>=50)"] +reports = ["lxml"] + +[[package]] +name = "mypy-extensions" +version = "1.0.0" +description = "Type system extensions for programs checked with the mypy type checker." +category = "dev" +optional = false +python-versions = ">=3.5" +files = [ + {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, + {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, +] + +[[package]] +name = "packaging" +version = "24.1" +description = "Core utilities for Python packages" +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "packaging-24.1-py3-none-any.whl", hash = "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124"}, + {file = "packaging-24.1.tar.gz", hash = "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002"}, +] + +[[package]] +name = "platformdirs" +version = "4.2.2" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "platformdirs-4.2.2-py3-none-any.whl", hash = "sha256:2d7a1657e36a80ea911db832a8a6ece5ee53d8de21edd5cc5879af6530b1bfee"}, + {file = "platformdirs-4.2.2.tar.gz", hash = "sha256:38b7b51f512eed9e84a22788b4bce1de17c0adb134d6becb09836e37d8654cd3"}, +] + +[package.extras] +docs = ["furo (>=2023.9.10)", "proselint (>=0.13)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)"] +type = ["mypy (>=1.8)"] + +[[package]] +name = "pluggy" +version = "1.5.0" +description = "plugin and hook calling mechanisms for python" +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, + {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, +] + +[package.extras] +dev = ["pre-commit", "tox"] +testing = ["pytest", "pytest-benchmark"] + +[[package]] +name = "pycparser" +version = "2.22" +description = "C parser in Python" +category = "main" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc"}, + {file = "pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6"}, +] + +[[package]] +name = "pylint" +version = "3.2.6" +description = "python code static checker" +category = "dev" +optional = false +python-versions = ">=3.8.0" +files = [ + {file = "pylint-3.2.6-py3-none-any.whl", hash = "sha256:03c8e3baa1d9fb995b12c1dbe00aa6c4bcef210c2a2634374aedeb22fb4a8f8f"}, + {file = "pylint-3.2.6.tar.gz", hash = "sha256:a5d01678349454806cff6d886fb072294f56a58c4761278c97fb557d708e1eb3"}, +] + +[package.dependencies] +astroid = ">=3.2.4,<=3.3.0-dev0" +colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} +dill = [ + {version = ">=0.3.6", markers = "python_version >= \"3.11\""}, + {version = ">=0.3.7", markers = "python_version >= \"3.12\""}, +] +isort = ">=4.2.5,<5.13.0 || >5.13.0,<6" +mccabe = ">=0.6,<0.8" +platformdirs = ">=2.2.0" +tomlkit = ">=0.10.1" + +[package.extras] +spelling = ["pyenchant (>=3.2,<4.0)"] +testutils = ["gitpython (>3)"] + +[[package]] +name = "pytest" +version = "8.3.2" +description = "pytest: simple powerful testing with Python" +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pytest-8.3.2-py3-none-any.whl", hash = "sha256:4ba08f9ae7dcf84ded419494d229b48d0903ea6407b030eaec46df5e6a73bba5"}, + {file = "pytest-8.3.2.tar.gz", hash = "sha256:c132345d12ce551242c87269de812483f5bcc87cdbb4722e48487ba194f9fdce"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "sys_platform == \"win32\""} +iniconfig = "*" +packaging = "*" +pluggy = ">=1.5,<2" + +[package.extras] +dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] + +[[package]] +name = "pytest-cov" +version = "5.0.0" +description = "Pytest plugin for measuring coverage." +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pytest-cov-5.0.0.tar.gz", hash = "sha256:5837b58e9f6ebd335b0f8060eecce69b662415b16dc503883a02f45dfeb14857"}, + {file = "pytest_cov-5.0.0-py3-none-any.whl", hash = "sha256:4f0764a1219df53214206bf1feea4633c3b558a2925c8b59f144f682861ce652"}, +] + +[package.dependencies] +coverage = {version = ">=5.2.1", extras = ["toml"]} +pytest = ">=4.6" + +[package.extras] +testing = ["fields", "hunter", "process-tests", "pytest-xdist", "virtualenv"] + +[[package]] +name = "requests" +version = "2.32.3" +description = "Python HTTP for Humans." +category = "main" +optional = false +python-versions = ">=3.8" +files = [ + {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"}, + {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"}, +] + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = ">=2,<4" +idna = ">=2.5,<4" +urllib3 = ">=1.21.1,<3" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] + +[[package]] +name = "ruff" +version = "0.5.7" +description = "An extremely fast Python linter and code formatter, written in Rust." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "ruff-0.5.7-py3-none-linux_armv6l.whl", hash = "sha256:548992d342fc404ee2e15a242cdbea4f8e39a52f2e7752d0e4cbe88d2d2f416a"}, + {file = "ruff-0.5.7-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:00cc8872331055ee017c4f1071a8a31ca0809ccc0657da1d154a1d2abac5c0be"}, + {file = "ruff-0.5.7-py3-none-macosx_11_0_arm64.whl", hash = "sha256:eaf3d86a1fdac1aec8a3417a63587d93f906c678bb9ed0b796da7b59c1114a1e"}, + {file = "ruff-0.5.7-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a01c34400097b06cf8a6e61b35d6d456d5bd1ae6961542de18ec81eaf33b4cb8"}, + {file = "ruff-0.5.7-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fcc8054f1a717e2213500edaddcf1dbb0abad40d98e1bd9d0ad364f75c763eea"}, + {file = "ruff-0.5.7-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7f70284e73f36558ef51602254451e50dd6cc479f8b6f8413a95fcb5db4a55fc"}, + {file = "ruff-0.5.7-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:a78ad870ae3c460394fc95437d43deb5c04b5c29297815a2a1de028903f19692"}, + {file = "ruff-0.5.7-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9ccd078c66a8e419475174bfe60a69adb36ce04f8d4e91b006f1329d5cd44bcf"}, + {file = "ruff-0.5.7-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7e31c9bad4ebf8fdb77b59cae75814440731060a09a0e0077d559a556453acbb"}, + {file = "ruff-0.5.7-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d796327eed8e168164346b769dd9a27a70e0298d667b4ecee6877ce8095ec8e"}, + {file = "ruff-0.5.7-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:4a09ea2c3f7778cc635e7f6edf57d566a8ee8f485f3c4454db7771efb692c499"}, + {file = "ruff-0.5.7-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:a36d8dcf55b3a3bc353270d544fb170d75d2dff41eba5df57b4e0b67a95bb64e"}, + {file = "ruff-0.5.7-py3-none-musllinux_1_2_i686.whl", hash = "sha256:9369c218f789eefbd1b8d82a8cf25017b523ac47d96b2f531eba73770971c9e5"}, + {file = "ruff-0.5.7-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:b88ca3db7eb377eb24fb7c82840546fb7acef75af4a74bd36e9ceb37a890257e"}, + {file = "ruff-0.5.7-py3-none-win32.whl", hash = "sha256:33d61fc0e902198a3e55719f4be6b375b28f860b09c281e4bdbf783c0566576a"}, + {file = "ruff-0.5.7-py3-none-win_amd64.whl", hash = "sha256:083bbcbe6fadb93cd86709037acc510f86eed5a314203079df174c40bbbca6b3"}, + {file = "ruff-0.5.7-py3-none-win_arm64.whl", hash = "sha256:2dca26154ff9571995107221d0aeaad0e75a77b5a682d6236cf89a58c70b76f4"}, + {file = "ruff-0.5.7.tar.gz", hash = "sha256:8dfc0a458797f5d9fb622dd0efc52d796f23f0a1493a9527f4e49a550ae9a7e5"}, +] + +[[package]] +name = "tomlkit" +version = "0.13.2" +description = "Style preserving TOML library" +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "tomlkit-0.13.2-py3-none-any.whl", hash = "sha256:7a974427f6e119197f670fbbbeae7bef749a6c14e793db934baefc1b5f03efde"}, + {file = "tomlkit-0.13.2.tar.gz", hash = "sha256:fff5fe59a87295b278abd31bec92c15d9bc4a06885ab12bcea52c71119392e79"}, +] + +[[package]] +name = "typing-extensions" +version = "4.12.2" +description = "Backported and Experimental Type Hints for Python 3.8+" +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, + {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, +] + +[[package]] +name = "urllib3" +version = "2.2.2" +description = "HTTP library with thread-safe connection pooling, file post, and more." +category = "main" +optional = false +python-versions = ">=3.8" +files = [ + {file = "urllib3-2.2.2-py3-none-any.whl", hash = "sha256:a448b2f64d686155468037e1ace9f2d2199776e17f0a46610480d311f73e3472"}, + {file = "urllib3-2.2.2.tar.gz", hash = "sha256:dd505485549a7a552833da5e6063639d0d177c04f23bc3864e41e5dc5f612168"}, +] + +[package.extras] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +h2 = ["h2 (>=4,<5)"] +socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] +zstd = ["zstandard (>=0.18.0)"] + +[metadata] +lock-version = "2.0" +python-versions = "^3.11" +content-hash = "ce62651c762404a5aec486bc79a653a7419c57f3fb1fddc0518a1249df5319d9" diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 00000000..90439b09 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,56 @@ +[tool.poetry] +name = "pyvicare" +version = "0.1.0" +description = "Library to communicate with the Viessmann ViCare API." +authors = [ + "Simon Gillet " +] +maintainers = [ + "Christopher Fenner " +] +license = "Apache-2.0" +readme = "README.md" +homepage = "https://github.com/CFenner/PyViCare" +repository = "https://github.com/CFenner/PyViCare" +documentation = "https://github.com/CFenner/PyViCare" +keywords = [ + "viessmann", + "vicare", + "api" +] +classifiers = [ + "Intended Audience :: Developers", + "Natural Language :: English", + "Programming Language :: Python :: 3", + "License :: OSI Approved :: Apache Software License", + "Topic :: Software Development :: Libraries :: Python Modules", + "Operating System :: OS Independent", +] +packages = [ + { include = "PyViCare", from = "." }, +] + +[tool.poetry.urls] +"Bug Tracker" = "https://github.com/CFenner/PyViCare/issues" +Changelog = "https://github.com/CFenner/PyViCare/releases" + +[tool.poetry.dependencies] +authlib = "^1.2.0" +python = "^3.11" +requests = "^2.32.3" +#types-requests +#isort +#twine +#build + +[tool.poetry.group.dev.dependencies] +codespell = "^2.3.0" +mypy = "^1.11.1" +pylint = "^3.2.6" +pytest = "^8.3.2" +pytest-cov = "^5.0.0" +ruff = "^0.5.7" + +[build-system] +build-backend = "poetry.core.masonry.api" +requires = ["poetry-core>=1.0.0"] diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index 4c59fbe2..00000000 --- a/requirements.txt +++ /dev/null @@ -1,6 +0,0 @@ -. -pytest -types-requests -isort -twine -build diff --git a/setup.py b/setup.py deleted file mode 100644 index f29b783c..00000000 --- a/setup.py +++ /dev/null @@ -1,23 +0,0 @@ -import setuptools - -with open("README.md", "r") as fh: - long_description = fh.read() - -setuptools.setup( - name="PyViCare", - version_config=True, - author="Simon Gillet", - author_email="mail+pyvicare@gillet.ninja", - description="Library to communicate with the Viessmann ViCare API", - long_description=long_description, - long_description_content_type="text/markdown", - url="https://github.com/somm15/PyViCare", - packages=setuptools.find_packages(exclude=["tests"]), - install_requires=['Authlib>=1.2.0'], - setup_requires=['setuptools-git-versioning<1.8.0'], - classifiers=[ - "Programming Language :: Python :: 3", - "License :: OSI Approved :: Apache Software License", - "Operating System :: OS Independent", - ], -) From 385d75a5477d261301c75d39181430e89a3ba930 Mon Sep 17 00:00:00 2001 From: Christopher Fenner <9592452+CFenner@users.noreply.github.com> Date: Wed, 14 Aug 2024 13:15:11 +0200 Subject: [PATCH 04/31] chore(ci): modify release to use poetry (#5) * Update release.yml * minor * change name --- .github/workflows/lint.yml | 163 ++++++++++++++++------------------ .github/workflows/release.yml | 62 +++++++++---- pyproject.toml | 2 +- 3 files changed, 126 insertions(+), 101 deletions(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 7c5a6a64..c125bc15 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -1,85 +1,80 @@ ---- - name: Linting +name: Linting - # yamllint disable-line rule:truthy - on: - push: - branches: - - main - pull_request: - workflow_dispatch: - - env: - DEFAULT_PYTHON: "3.11" - - jobs: - codespell: - name: codespell - runs-on: ubuntu-latest - steps: - - name: ‡️ Check out code from GitHub - uses: actions/checkout@v4.1.7 - - name: πŸ— Set up Poetry - run: pipx install poetry - - name: πŸ— Set up Python ${{ env.DEFAULT_PYTHON }} - id: python - uses: actions/setup-python@v5.1.1 - with: - python-version: ${{ env.DEFAULT_PYTHON }} - cache: "poetry" - - name: πŸ— Install workflow dependencies - run: | - poetry config virtualenvs.create true - poetry config virtualenvs.in-project true - - name: πŸ— Install Python dependencies - run: poetry install --no-interaction - - name: πŸš€ Check code for common misspellings - run: poetry run codespell **/*.py - - ruff: - name: Ruff - runs-on: ubuntu-latest - steps: - - name: ‡️ Check out code from GitHub - uses: actions/checkout@v4.1.7 - - name: πŸ— Set up Poetry - run: pipx install poetry - - name: πŸ— Set up Python ${{ env.DEFAULT_PYTHON }} - id: python - uses: actions/setup-python@v5.1.1 - with: - python-version: ${{ env.DEFAULT_PYTHON }} - cache: "poetry" - - name: πŸ— Install workflow dependencies - run: | - poetry config virtualenvs.create true - poetry config virtualenvs.in-project true - - name: πŸ— Install Python dependencies - run: poetry install --no-interaction - - name: πŸš€ Run ruff linter - run: poetry run ruff check --output-format=github . -# - name: πŸš€ Run ruff formatter -# run: poetry run ruff format --check . - - pylint: - name: pylint - runs-on: ubuntu-latest - steps: - - name: ‡️ Check out code from GitHub - uses: actions/checkout@v4.1.7 - - name: πŸ— Set up Poetry - run: pipx install poetry - - name: πŸ— Set up Python ${{ env.DEFAULT_PYTHON }} - id: python - uses: actions/setup-python@v5.1.1 - with: - python-version: ${{ env.DEFAULT_PYTHON }} - cache: "poetry" - - name: πŸ— Install workflow dependencies - run: | - poetry config virtualenvs.create true - poetry config virtualenvs.in-project true - - name: πŸ— Install Python dependencies - run: poetry install --no-interaction - - name: πŸš€ Run pylint - run: poetry run pylint **/*.py +# yamllint disable-line rule:truthy +on: + push: + branches: + - main + pull_request: + workflow_dispatch: +env: + DEFAULT_PYTHON: "3.11" +jobs: + codespell: + name: codespell + runs-on: ubuntu-latest + steps: + - name: ‡️ Check out code from GitHub + uses: actions/checkout@v4.1.7 + - name: πŸ— Set up Poetry + run: pipx install poetry + - name: πŸ— Set up Python ${{ env.DEFAULT_PYTHON }} + id: python + uses: actions/setup-python@v5.1.1 + with: + python-version: ${{ env.DEFAULT_PYTHON }} + cache: "poetry" + - name: πŸ— Install workflow dependencies + run: | + poetry config virtualenvs.create true + poetry config virtualenvs.in-project true + - name: πŸ— Install Python dependencies + run: poetry install --no-interaction + - name: πŸš€ Check code for common misspellings + run: poetry run codespell **/*.py + ruff: + name: ruff + runs-on: ubuntu-latest + steps: + - name: ‡️ Check out code from GitHub + uses: actions/checkout@v4.1.7 + - name: πŸ— Set up Poetry + run: pipx install poetry + - name: πŸ— Set up Python ${{ env.DEFAULT_PYTHON }} + id: python + uses: actions/setup-python@v5.1.1 + with: + python-version: ${{ env.DEFAULT_PYTHON }} + cache: "poetry" + - name: πŸ— Install workflow dependencies + run: | + poetry config virtualenvs.create true + poetry config virtualenvs.in-project true + - name: πŸ— Install Python dependencies + run: poetry install --no-interaction + - name: πŸš€ Run ruff linter + run: poetry run ruff check --output-format=github . + # - name: πŸš€ Run ruff formatter + # run: poetry run ruff format --check . + pylint: + name: pylint + runs-on: ubuntu-latest + steps: + - name: ‡️ Check out code from GitHub + uses: actions/checkout@v4.1.7 + - name: πŸ— Set up Poetry + run: pipx install poetry + - name: πŸ— Set up Python ${{ env.DEFAULT_PYTHON }} + id: python + uses: actions/setup-python@v5.1.1 + with: + python-version: ${{ env.DEFAULT_PYTHON }} + cache: "poetry" + - name: πŸ— Install workflow dependencies + run: | + poetry config virtualenvs.create true + poetry config virtualenvs.in-project true + - name: πŸ— Install Python dependencies + run: poetry install --no-interaction + - name: πŸš€ Run pylint + run: poetry run pylint **/*.py diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 850eed7d..214da9b9 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,26 +1,56 @@ -name: Upload Python Package +name: Release +# yamllint disable-line rule:truthy on: release: - types: [created] + types: + - published + +env: + DEFAULT_PYTHON: "3.11" jobs: - deploy: + release: + name: Releasing to PyPi runs-on: ubuntu-latest +# environment: +# name: release +# url: https://pypi.org/p/python-homeassistant-analytics + permissions: + contents: write + id-token: write steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v2 + - name: ‡️ Check out code from GitHub + uses: actions/checkout@v4.1.7 + - name: πŸ— Set up Poetry + run: pipx install poetry + - name: πŸ— Set up Python ${{ env.DEFAULT_PYTHON }} + id: python + uses: actions/setup-python@v5.1.1 with: - python-version: "3.x" - - name: Install dependencies + python-version: ${{ env.DEFAULT_PYTHON }} + cache: "poetry" + - name: πŸ— Install workflow dependencies run: | - python -m pip install --upgrade pip - pip install setuptools wheel twine - - name: Build and publish - env: - TWINE_USERNAME: __token__ - TWINE_PASSWORD: ${{ secrets.PYPI_APITOKEN }} + poetry config virtualenvs.create true + poetry config virtualenvs.in-project true + - name: πŸ— Install dependencies + run: poetry install --no-interaction + - name: πŸ— Set package version run: | - python setup.py sdist bdist_wheel - twine upload dist/* + version="${{ github.event.release.tag_name }}" + version="${version,,}" + version="${version#v}" + poetry version --no-interaction "${version}" + - name: πŸ— Build package + run: poetry build --no-interaction + - name: πŸš€ Publish to PyPi + uses: pypa/gh-action-pypi-publish@v1.9.0 + with: + verbose: true + print-hash: true +# - name: ✍️ Sign published artifacts +# uses: sigstore/gh-action-sigstore-python@v3.0.0 +# with: +# inputs: ./dist/*.tar.gz ./dist/*.whl +# release-signing-artifacts: true diff --git a/pyproject.toml b/pyproject.toml index 90439b09..dc191aae 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [tool.poetry] -name = "pyvicare" +name = "pyvicare-neo" version = "0.1.0" description = "Library to communicate with the Viessmann ViCare API." authors = [ From 1246b572f7d9fdc7ac1d8e867f21ae0934743bcc Mon Sep 17 00:00:00 2001 From: Christopher Fenner <9592452+CFenner@users.noreply.github.com> Date: Wed, 14 Aug 2024 13:31:47 +0200 Subject: [PATCH 05/31] chore(ci): fix pypi project (#7) Update release.yml --- .github/workflows/release.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 214da9b9..c7f2b878 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -13,9 +13,9 @@ jobs: release: name: Releasing to PyPi runs-on: ubuntu-latest -# environment: -# name: release -# url: https://pypi.org/p/python-homeassistant-analytics + environment: + name: PyPi + url: https://pypi.org/p/PyViCare-neo permissions: contents: write id-token: write From f3d4ccd545ceeac3429115bb24fcd106d5776d65 Mon Sep 17 00:00:00 2001 From: Christopher Fenner <9592452+CFenner@users.noreply.github.com> Date: Wed, 14 Aug 2024 13:43:37 +0200 Subject: [PATCH 06/31] chore: fix project name (#8) Update pyproject.toml --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index dc191aae..e0c3f0f3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [tool.poetry] -name = "pyvicare-neo" +name = "PyViCare-neo" version = "0.1.0" description = "Library to communicate with the Viessmann ViCare API." authors = [ From d6c407da227067a52628c705b318becfbed835c2 Mon Sep 17 00:00:00 2001 From: Christopher Fenner <9592452+CFenner@users.noreply.github.com> Date: Wed, 14 Aug 2024 17:08:41 +0200 Subject: [PATCH 07/31] chore: delete unused files (#11) * Delete publish.sh * Delete Makefile * Delete .pylintrc * Update pyproject.toml * Update pyproject.toml * Delete .flake8 --- .flake8 | 4 ---- .pylintrc | 29 ----------------------------- Makefile | 20 -------------------- publish.sh | 18 ------------------ pyproject.toml | 27 +++++++++++++++++++++++++++ 5 files changed, 27 insertions(+), 71 deletions(-) delete mode 100644 .flake8 delete mode 100644 .pylintrc delete mode 100644 Makefile delete mode 100755 publish.sh diff --git a/.flake8 b/.flake8 deleted file mode 100644 index cd243411..00000000 --- a/.flake8 +++ /dev/null @@ -1,4 +0,0 @@ -[flake8] -ignore = E501,W503,D203 -exclude = .git,__pycache__,docs/source/conf.py,old,build,dist,.eggs,.venv,.mypy_cache -max-complexity = 10 diff --git a/.pylintrc b/.pylintrc deleted file mode 100644 index c919b7cf..00000000 --- a/.pylintrc +++ /dev/null @@ -1,29 +0,0 @@ -[MAIN] - -[MESSAGES CONTROL] -disable= - duplicate-code, - fixme, - line-too-long, - invalid-name, - too-many-public-methods, - too-few-public-methods, - # fix later - arguments-differ, - attribute-defined-outside-init, - bad-classmethod-argument, - chained-comparison, - consider-merging-isinstance, - consider-using-dict-items, - consider-using-generator, - deprecated-decorator, - missing-class-docstring, - missing-function-docstring, - missing-module-docstring, - missing-timeout, - raise-missing-from, - super-init-not-called, - too-many-boolean-expressions, - unspecified-encoding, - useless-object-inheritance, - useless-parent-delegation, diff --git a/Makefile b/Makefile deleted file mode 100644 index fb7c5cc7..00000000 --- a/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -default: format lint test - -lint: - flake8 - mypy . - -format: - isort . - autopep8 --in-place --recursive . - npm_config_yes=true npx prettier --write . - -test: -ifdef PYVICARE_CLIENT_ID - EXEC_INTEGRATION_TEST=1 pytest -else - pytest -endif - -publish: - sh publish.sh diff --git a/publish.sh b/publish.sh deleted file mode 100755 index 46ec6fca..00000000 --- a/publish.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/bash - -set -e - -LAST_TAG=$(git tag --sort=-version:refname | head -1) - -echo -n "Which version do you want to publish? (Last: $LAST_TAG) " -read new_tag - -rm -rf ./dist -git fetch -git checkout master -git reset --hard origin/master -git tag $new_tag - -python -m build --sdist --wheel --outdir dist/ -twine upload dist/* -git push --tags diff --git a/pyproject.toml b/pyproject.toml index e0c3f0f3..8e7ad18a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -51,6 +51,33 @@ pytest = "^8.3.2" pytest-cov = "^5.0.0" ruff = "^0.5.7" +[tool.pylint."MESSAGES CONTROL"] +disable = [ + "duplicate-code", + "fixme", + "line-too-long", + "invalid-name", + "too-many-public-methods", + "too-few-public-methods", + # FIXME: + "arguments-differ", + "attribute-defined-outside-init", + "bad-classmethod-argument", + "chained-comparison", + "consider-merging-isinstance", + "consider-using-dict-items", + "consider-using-generator", + "deprecated-decorator", + "missing-class-docstring", + "missing-function-docstring", + "missing-module-docstring", + "missing-timeout", + "raise-missing-from", + "unspecified-encoding", + "useless-object-inheritance", + "useless-parent-delegation", +] + [build-system] build-backend = "poetry.core.masonry.api" requires = ["poetry-core>=1.0.0"] From 58c0cb2cdc311dc7645dd9f9f8373ab57855edb6 Mon Sep 17 00:00:00 2001 From: Christopher Fenner <9592452+CFenner@users.noreply.github.com> Date: Wed, 14 Aug 2024 23:53:48 +0200 Subject: [PATCH 08/31] fix: correct unit getter for heating.gas.consumption.summary.dhw (#9) * Update PyViCareGazBoiler.py * Update test_Vitodens100W.py * Update PyViCareGazBoiler.py --- PyViCare/PyViCareGazBoiler.py | 2 +- tests/test_Vitodens100W.py | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/PyViCare/PyViCareGazBoiler.py b/PyViCare/PyViCareGazBoiler.py index 0098b584..c46ccc09 100644 --- a/PyViCare/PyViCareGazBoiler.py +++ b/PyViCare/PyViCareGazBoiler.py @@ -180,7 +180,7 @@ def getGasSummaryConsumptionHeatingLastYear(self): # Gas consumption for Domestic Hot Water data: @handleNotSupported def getGasSummaryConsumptionDomesticHotWaterUnit(self): - return self.service.getProperty("heating.gas.consumption.summary.dhw")["properties"]["day"]["unit"] + return self.service.getProperty("heating.gas.consumption.summary.dhw")["properties"]["unit"]["value"] @handleNotSupported def getGasSummaryConsumptionDomesticHotWaterCurrentDay(self): diff --git a/tests/test_Vitodens100W.py b/tests/test_Vitodens100W.py index 2022577d..e85450f0 100644 --- a/tests/test_Vitodens100W.py +++ b/tests/test_Vitodens100W.py @@ -32,3 +32,6 @@ def test_getPowerSummaryConsumptionHeatingCurrentDay(self): def test_getPowerSummaryConsumptionDomesticHotWaterCurrentYear(self): self.assertEqual(self.device.getPowerSummaryConsumptionDomesticHotWaterCurrentYear(), 18) + + def test_getGasSummaryConsumptionDomesticHotWaterUnit(self): + self.assertEqual(self.device.getGasSummaryConsumptionDomesticHotWaterUnit(), "cubicMeter") From 2fec0968138bf389dc22965c386106da1c326942 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 14 Aug 2024 21:55:29 +0000 Subject: [PATCH 09/31] chore: Configure Renovate (#12) Add renovate.json Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- renovate.json | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 renovate.json diff --git a/renovate.json b/renovate.json new file mode 100644 index 00000000..5db72dd6 --- /dev/null +++ b/renovate.json @@ -0,0 +1,6 @@ +{ + "$schema": "https://docs.renovatebot.com/renovate-schema.json", + "extends": [ + "config:recommended" + ] +} From 9f00cc164e1c018b1244f433206eac9fe58ae606 Mon Sep 17 00:00:00 2001 From: Christopher Fenner <9592452+CFenner@users.noreply.github.com> Date: Thu, 15 Aug 2024 08:49:25 +0200 Subject: [PATCH 10/31] chore(ci): add mypy config & workflow (#13) * remove mypy config * add mypy config to toml * add mypy workflow * update dependency * remove request dependency * remove commented deps * add requests dependency --- .github/workflows/type.yml | 36 ++++++++++++++++++++++++++++++++++++ mypy.ini | 11 ----------- poetry.lock | 17 ++++++++++++++++- pyproject.toml | 34 ++++++++++++++++++++++++++++++---- 4 files changed, 82 insertions(+), 16 deletions(-) create mode 100644 .github/workflows/type.yml delete mode 100644 mypy.ini diff --git a/.github/workflows/type.yml b/.github/workflows/type.yml new file mode 100644 index 00000000..e985dff2 --- /dev/null +++ b/.github/workflows/type.yml @@ -0,0 +1,36 @@ +name: Typing + +# yamllint disable-line rule:truthy +on: + push: + branches: + - main + pull_request: + workflow_dispatch: + +env: + DEFAULT_PYTHON: "3.11" + +jobs: + mypy: + name: mypy + runs-on: ubuntu-latest + steps: + - name: ‡️ Check out code from GitHub + uses: actions/checkout@v4.1.7 + - name: πŸ— Set up Poetry + run: pipx install poetry + - name: πŸ— Set up Python ${{ env.DEFAULT_PYTHON }} + id: python + uses: actions/setup-python@v5.1.1 + with: + python-version: ${{ env.DEFAULT_PYTHON }} + cache: "poetry" + - name: πŸ— Install workflow dependencies + run: | + poetry config virtualenvs.create true + poetry config virtualenvs.in-project true + - name: πŸ— Install dependencies + run: poetry install --no-interaction + - name: πŸš€ Run mypy + run: poetry run mypy PyViCare tests diff --git a/mypy.ini b/mypy.ini deleted file mode 100644 index cc421c7d..00000000 --- a/mypy.ini +++ /dev/null @@ -1,11 +0,0 @@ -[mypy] -python_version = 3.9 -warn_return_any = True -warn_unused_configs = True -exclude = setup\.py$|build/ - -[mypy-requests_oauthlib.*] -ignore_missing_imports = True - -[mypy-authlib.*] -ignore_missing_imports = True diff --git a/poetry.lock b/poetry.lock index fdc8f0ee..b92a46ab 100644 --- a/poetry.lock +++ b/poetry.lock @@ -697,6 +697,21 @@ files = [ {file = "tomlkit-0.13.2.tar.gz", hash = "sha256:fff5fe59a87295b278abd31bec92c15d9bc4a06885ab12bcea52c71119392e79"}, ] +[[package]] +name = "types-requests" +version = "2.32.0.20240712" +description = "Typing stubs for requests" +category = "main" +optional = false +python-versions = ">=3.8" +files = [ + {file = "types-requests-2.32.0.20240712.tar.gz", hash = "sha256:90c079ff05e549f6bf50e02e910210b98b8ff1ebdd18e19c873cd237737c1358"}, + {file = "types_requests-2.32.0.20240712-py3-none-any.whl", hash = "sha256:f754283e152c752e46e70942fa2a146b5bc70393522257bb85bd1ef7e019dcc3"}, +] + +[package.dependencies] +urllib3 = ">=2" + [[package]] name = "typing-extensions" version = "4.12.2" @@ -730,4 +745,4 @@ zstd = ["zstandard (>=0.18.0)"] [metadata] lock-version = "2.0" python-versions = "^3.11" -content-hash = "ce62651c762404a5aec486bc79a653a7419c57f3fb1fddc0518a1249df5319d9" +content-hash = "72ec6614ba6dda4be1eb4f7b9446b47b702a1dd5626175cd2aefc858d8f7186d" diff --git a/pyproject.toml b/pyproject.toml index 8e7ad18a..7e0691a8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -37,11 +37,8 @@ Changelog = "https://github.com/CFenner/PyViCare/releases" [tool.poetry.dependencies] authlib = "^1.2.0" python = "^3.11" +types-requests = "^2.32.0.20240712" requests = "^2.32.3" -#types-requests -#isort -#twine -#build [tool.poetry.group.dev.dependencies] codespell = "^2.3.0" @@ -51,6 +48,35 @@ pytest = "^8.3.2" pytest-cov = "^5.0.0" ruff = "^0.5.7" +[tool.mypy] +platform = "linux" +python_version = "3.11" +# show error messages from unrelated files +follow_imports = "normal" +# suppress errors about unsatisfied imports +#ignore_missing_imports = true +disable_error_code = ["arg-type", "call-overload"] +# be strict +# check_untyped_defs = true +# disallow_any_generics = true +# disallow_incomplete_defs = true +disallow_subclassing_any = true +# disallow_untyped_calls = true +disallow_untyped_decorators = true +# disallow_untyped_defs = true +no_implicit_optional = true +strict_optional = true +warn_incomplete_stub = true +warn_no_return = true +warn_redundant_casts = true +warn_return_any = true +warn_unused_configs = true +warn_unused_ignores = true + +[[tool.mypy.overrides]] +module = "authlib.*" +ignore_missing_imports = true + [tool.pylint."MESSAGES CONTROL"] disable = [ "duplicate-code", From 0371e8ec53a6bc957e7a82c83454da5d5a9d150a Mon Sep 17 00:00:00 2001 From: Christopher Fenner <9592452+CFenner@users.noreply.github.com> Date: Thu, 15 Aug 2024 13:59:17 +0200 Subject: [PATCH 11/31] feat(deprecation): remove usage of deprecated data points (#16) * change deprecated data points * change deprecated data points * skip testcases with outdated test data * fix test case * fix test case * update test case * fix linting issue --- PyViCare/PyViCareHeatPump.py | 4 ++-- PyViCare/PyViCareHeatingDevice.py | 8 ++++---- tests/test_TestForMissingProperties.py | 20 ++++++++++++++++---- tests/test_Vitocal250A.py | 3 ++- tests/test_Vitocaldens222F.py | 3 +++ tests/test_VitolaUniferral.py | 1 + 6 files changed, 28 insertions(+), 11 deletions(-) diff --git a/PyViCare/PyViCareHeatPump.py b/PyViCare/PyViCareHeatPump.py index bf3ec6e6..6f0cf3e4 100644 --- a/PyViCare/PyViCareHeatPump.py +++ b/PyViCare/PyViCareHeatPump.py @@ -21,11 +21,11 @@ def getAvailableCompressors(self): @handleNotSupported def getBufferMainTemperature(self): - return self.service.getProperty("heating.buffer.sensors.temperature.main")["properties"]['value']['value'] + return self.service.getProperty("heating.bufferCylinder.sensors.temperature.main")["properties"]['value']['value'] @handleNotSupported def getBufferTopTemperature(self): - return self.service.getProperty("heating.buffer.sensors.temperature.top")["properties"]['value']['value'] + return self.service.getProperty("heating.bufferCylinder.sensors.temperature.top")["properties"]['value']['value'] # Power consumption for Heating: @handleNotSupported diff --git a/PyViCare/PyViCareHeatingDevice.py b/PyViCare/PyViCareHeatingDevice.py index f6a11563..b8a12bb1 100644 --- a/PyViCare/PyViCareHeatingDevice.py +++ b/PyViCare/PyViCareHeatingDevice.py @@ -68,13 +68,13 @@ def getDomesticHotWaterConfiguredTemperature(self): @handleNotSupported def getHotWaterStorageTemperatureTop(self): - return self.service.getProperty("heating.dhw.sensors.temperature.hotWaterStorage.top")["properties"]["value"][ + return self.service.getProperty("heating.dhw.sensors.temperature.dhwCylinder.top")["properties"]["value"][ "value"] @handleNotSupported def getHotWaterStorageTemperatureBottom(self): return \ - self.service.getProperty("heating.dhw.sensors.temperature.hotWaterStorage.bottom")["properties"]["value"][ + self.service.getProperty("heating.dhw.sensors.temperature.dhwCylinder.bottom")["properties"]["value"][ "value"] @handleNotSupported @@ -115,7 +115,7 @@ def getDomesticHotWaterDesiredTemperature(self): @handleNotSupported def getDomesticHotWaterStorageTemperature(self): - return self.service.getProperty("heating.dhw.sensors.temperature.hotWaterStorage")["properties"]["value"][ + return self.service.getProperty("heating.dhw.sensors.temperature.dhwCylinder")["properties"]["value"][ "value"] @handleNotSupported @@ -592,7 +592,7 @@ def getPrograms(self): 'comfortHeating', 'dhwPrecedence', 'eco', 'external', 'fixed', 'forcedLastFromSchedule', 'frostprotection', 'holiday', 'holidayAtHome', 'manual', 'normal', 'normalCooling', 'normalCoolingEnergySaving', 'normalEnergySaving', 'normalHeating', 'reduced', 'reducedCooling', - 'reducedCoolingEnergySaving', 'reducedEnergySaving', 'reducedHeating', 'standby', 'summerEco']: + 'reducedCoolingEnergySaving', 'reducedEnergySaving', 'reducedHeating', 'standby']: with suppress(PyViCareNotSupportedFeatureError): if self.service.getProperty( f"heating.circuits.{self.circuit}.operating.programs.{program}") is not None: diff --git a/tests/test_TestForMissingProperties.py b/tests/test_TestForMissingProperties.py index 4fc2af2e..6a4d1fb4 100644 --- a/tests/test_TestForMissingProperties.py +++ b/tests/test_TestForMissingProperties.py @@ -1,4 +1,3 @@ -import json import re import unittest from os import listdir @@ -58,6 +57,12 @@ def test_missingProperties(self): 'heating.circuits.0.name', # TODO: to analyse, from Vitodens 100W 'heating.circuits.0.zone.mode', # TODO: to analyse, from Vitocal 250A + 'heating.buffer.sensors.temperature.main', # deprecated, removed 2024-09-15 FIXME: remove once data point is removed and test data is updated + 'heating.buffer.sensors.temperature.top', # deprecated, removed 2024-09-15 FIXME: remove once data point is removed and test data is updated + 'heating.dhw.sensors.temperature.hotWaterStorage', # deprecated, removed 2024-09-15 FIXME: remove once data point is removed and test data is updated + 'heating.dhw.sensors.temperature.hotWaterStorage.top', # deprecated, removed 2024-09-15 FIXME: remove once data point is removed and test data is updated + 'heating.dhw.sensors.temperature.hotWaterStorage.bottom', # deprecated, removed 2024-09-15 FIXME: remove once data point is removed and test data is updated + # Ignored for now as both are not documented in https://documentation.viessmann.com/static/iot/data-points 'device.messages.errors.raw', 'device.productIdentification', @@ -77,13 +82,20 @@ def test_missingProperties(self): if not found and len(foundInFiles) > 0 and feature not in ignore: missing_features[feature] = foundInFiles - has_missing_features = len(missing_features) > 0 - self.assertFalse(has_missing_features, json.dumps(missing_features, sort_keys=True, indent=2)) + self.assertDictEqual({}, missing_features) def test_unverifiedProperties(self): # with this test we want to verify if we access # properties which are not in any test response data + ignore = [ + 'heating.dhw.sensors.temperature.dhwCylinder', #FIXME: remove once test data is updated + 'heating.dhw.sensors.temperature.dhwCylinder.top', #FIXME: remove once test data is updated + 'heating.dhw.sensors.temperature.dhwCylinder.bottom', #FIXME: remove once test data is updated + 'heating.bufferCylinder.sensors.temperature.main', #FIXME: remove once test data is updated + 'heating.bufferCylinder.sensors.temperature.top', #FIXME: remove once test data is updated + ] + all_features = self.read_all_features() all_python_files = self.read_all_python_code() @@ -98,7 +110,7 @@ def test_unverifiedProperties(self): feature_name = re.sub(r'\.{(program|active_program)}', '', feature_name) used_features.append(feature_name) - self.assertSetEqual(set([]), set(used_features) - set(all_features)) + self.assertSetEqual(set([]), set(used_features) - set(all_features) - set(ignore)) def find_feature_in_code(self, all_python_files, feature): search_string = f'[\'"]{feature}[\'"]'.replace(".", r"\.") diff --git a/tests/test_Vitocal250A.py b/tests/test_Vitocal250A.py index 0582e56d..544f63bd 100644 --- a/tests/test_Vitocal250A.py +++ b/tests/test_Vitocal250A.py @@ -36,7 +36,7 @@ def test_getSupplyTemperaturePrimaryCircuit(self): self.device.getSupplyTemperaturePrimaryCircuit(), 5.9) def test_getPrograms(self): - expected_programs = ['comfortCooling', 'comfortCoolingEnergySaving', 'comfortEnergySaving', 'comfortHeating', 'fixed', 'forcedLastFromSchedule', 'frostprotection', 'normalCooling', 'normalCoolingEnergySaving', 'normalEnergySaving', 'normalHeating', 'reducedCooling', 'reducedCoolingEnergySaving', 'reducedEnergySaving', 'reducedHeating', 'standby', 'summerEco'] + expected_programs = ['comfortCooling', 'comfortCoolingEnergySaving', 'comfortEnergySaving', 'comfortHeating', 'fixed', 'forcedLastFromSchedule', 'frostprotection', 'normalCooling', 'normalCoolingEnergySaving', 'normalEnergySaving', 'normalHeating', 'reducedCooling', 'reducedCoolingEnergySaving', 'reducedEnergySaving', 'reducedHeating', 'standby'] self.assertListEqual( self.device.circuits[0].getPrograms(), expected_programs) @@ -85,6 +85,7 @@ def test_getPowerSummaryConsumptionHeatingUnit(self): self.assertEqual( self.device.getPowerSummaryConsumptionHeatingUnit(), "kilowattHour") + @unittest.skip("dump is not up to date, underlying data point was rernamed") def test_getBufferMainTemperature(self): self.assertAlmostEqual( self.device.getBufferMainTemperature(), 31.9) diff --git a/tests/test_Vitocaldens222F.py b/tests/test_Vitocaldens222F.py index a64ed310..c095ae16 100644 --- a/tests/test_Vitocaldens222F.py +++ b/tests/test_Vitocaldens222F.py @@ -21,10 +21,12 @@ def test_getAvailableCompressors(self): def test_getActive(self): self.assertEqual(self.device.burners[0].getActive(), False) + @unittest.skip("dump is not up to date, underlying data point was rernamed") def test_getBufferTopTemperature(self): self.assertEqual( self.device.getBufferTopTemperature(), 36) + @unittest.skip("dump is not up to date, underlying data point was rernamed") def test_getBufferMainTemperature(self): self.assertEqual( self.device.getBufferMainTemperature(), 36) @@ -71,6 +73,7 @@ def test_getOutsideTemperature(self): self.assertEqual( self.device.getOutsideTemperature(), 15.3) + @unittest.skip("dump is not up to date, underlying data point was rernamed") def test_getHotWaterStorageTemperatureTop(self): self.assertEqual( self.device.getHotWaterStorageTemperatureTop(), 50.9) diff --git a/tests/test_VitolaUniferral.py b/tests/test_VitolaUniferral.py index f3746bd0..6a3eef23 100644 --- a/tests/test_VitolaUniferral.py +++ b/tests/test_VitolaUniferral.py @@ -25,5 +25,6 @@ def test_getBurnerHours(self): def test_getBoilerTemperature(self): self.assertEqual(self.device.getBoilerTemperature(), 26.6) + @unittest.skip("dump is not up to date, underlying data point was rernamed") def test_getDomesticHotWaterStorageTemperature(self): self.assertEqual(self.device.getDomesticHotWaterStorageTemperature(), 56.9) From 9e97af2e6c5725a23d629ab31791144d4b7e8c86 Mon Sep 17 00:00:00 2001 From: Christopher Fenner <9592452+CFenner@users.noreply.github.com> Date: Thu, 15 Aug 2024 16:22:33 +0200 Subject: [PATCH 12/31] chore(testdata): update test data for Vitocal250A (#17) * update test data * adjust test cases --- tests/response/Vitocal250A.json | 4468 +++++++++++++----------- tests/test_TestForMissingProperties.py | 8 +- tests/test_Vitocal250A.py | 87 +- 3 files changed, 2494 insertions(+), 2069 deletions(-) diff --git a/tests/response/Vitocal250A.json b/tests/response/Vitocal250A.json index 017cfb38..9993ad63 100644 --- a/tests/response/Vitocal250A.json +++ b/tests/response/Vitocal250A.json @@ -4,55 +4,89 @@ "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.dhw.hygiene.trigger", + "feature": "device.messages.errors.raw", "gatewayId": "################", - "isEnabled": false, + "isEnabled": true, "isReady": true, - "properties": {}, - "timestamp": "2023-01-09T13:42:20.773Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.dhw.hygiene.trigger" + "properties": { + "entries": { + "type": "array", + "value": [] + } + }, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/device.messages.errors.raw" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.3.operating.programs.reducedCooling", + "feature": "device.serial", "gatewayId": "################", - "isEnabled": false, + "isEnabled": true, "isReady": true, - "properties": {}, - "timestamp": "2023-01-09T13:42:20.773Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.reducedCooling" + "properties": { + "value": { + "type": "string", + "value": "################" + } + }, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/device.serial" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.3.frostprotection", + "feature": "heating.boiler.sensors.temperature.commonSupply", "gatewayId": "################", - "isEnabled": false, + "isEnabled": true, "isReady": true, - "properties": {}, - "timestamp": "2023-01-09T13:42:26.746Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.3.frostprotection" + "properties": { + "status": { + "type": "string", + "value": "connected" + }, + "value": { + "type": "number", + "unit": "celsius", + "value": 25.5 + } + }, + "timestamp": "2024-08-11T08:12:45.420Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.boiler.sensors.temperature.commonSupply" }, { "apiVersion": 1, "commands": {}, + "deprecated": { + "info": "replaced by heating.bufferCylinder.sensors.temperature.main", + "removalDate": "2024-09-15" + }, "deviceId": "0", - "feature": "heating.circuits.2.heating.curve", + "feature": "heating.buffer.sensors.temperature.main", "gatewayId": "################", - "isEnabled": false, + "isEnabled": true, "isReady": true, - "properties": {}, - "timestamp": "2023-01-09T13:42:20.773Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.2.heating.curve" + "properties": { + "status": { + "type": "string", + "value": "connected" + }, + "value": { + "type": "number", + "unit": "celsius", + "value": 23.4 + } + }, + "timestamp": "2024-08-11T08:12:53.439Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.buffer.sensors.temperature.main" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.sensors.temperature.outside", + "feature": "heating.bufferCylinder.sensors.temperature.main", "gatewayId": "################", "isEnabled": true, "isReady": true, @@ -64,306 +98,199 @@ "value": { "type": "number", "unit": "celsius", - "value": 6.1 + "value": 23.4 } }, - "timestamp": "2023-01-09T15:37:04.740Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.sensors.temperature.outside" + "timestamp": "2024-08-11T08:12:53.439Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.bufferCylinder.sensors.temperature.main" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.1.zone.mode", + "feature": "heating.circuits", "gatewayId": "################", "isEnabled": true, "isReady": true, "properties": { - "active": { - "type": "boolean", - "value": false + "enabled": { + "type": "array", + "value": [ + "0" + ] } }, - "timestamp": "2023-01-09T13:42:26.753Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.1.zone.mode" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.3.operating.programs.reducedCoolingEnergySaving", + "feature": "heating.circuits.0.circulation.pump", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "status": { + "type": "string", + "value": "off" + } + }, + "timestamp": "2024-08-10T22:10:13.129Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.circulation.pump" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.1.circulation.pump", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.773Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.reducedCoolingEnergySaving" + "timestamp": "2024-08-10T22:10:13.129Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.circulation.pump" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.1.operating.modes.dhwAndHeatingCooling", + "feature": "heating.circuits.2.circulation.pump", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.773Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.modes.dhwAndHeatingCooling" + "timestamp": "2024-08-10T22:10:13.129Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.circulation.pump" }, { "apiVersion": 1, - "commands": { - "setSchedule": { - "isExecutable": true, - "name": "setSchedule", - "params": { - "newSchedule": { - "constraints": { - "defaultMode": "off", - "maxEntries": 4, - "modes": ["on"], - "overlapAllowed": false, - "resolution": 10 - }, - "required": true, - "type": "Schedule" - } - }, - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.dhw.schedule/commands/setSchedule" - } - }, + "commands": {}, "deviceId": "0", - "feature": "heating.dhw.schedule", + "feature": "heating.circuits.3.circulation.pump", "gatewayId": "################", - "isEnabled": true, + "isEnabled": false, "isReady": true, - "properties": { - "active": { - "type": "boolean", - "value": true - }, - "entries": { - "type": "Schedule", - "value": { - "fri": [ - { - "end": "09:00", - "mode": "on", - "position": 0, - "start": "04:00" - }, - { - "end": "21:00", - "mode": "on", - "position": 1, - "start": "15:30" - } - ], - "mon": [ - { - "end": "09:00", - "mode": "on", - "position": 0, - "start": "04:00" - }, - { - "end": "17:30", - "mode": "on", - "position": 1, - "start": "12:00" - } - ], - "sat": [ - { - "end": "09:00", - "mode": "on", - "position": 0, - "start": "04:00" - }, - { - "end": "21:00", - "mode": "on", - "position": 1, - "start": "15:30" - } - ], - "sun": [ - { - "end": "10:00", - "mode": "on", - "position": 0, - "start": "05:00" - }, - { - "end": "20:00", - "mode": "on", - "position": 1, - "start": "12:00" - } - ], - "thu": [ - { - "end": "09:00", - "mode": "on", - "position": 0, - "start": "04:00" - }, - { - "end": "17:30", - "mode": "on", - "position": 1, - "start": "12:00" - } - ], - "tue": [ - { - "end": "09:00", - "mode": "on", - "position": 0, - "start": "04:00" - }, - { - "end": "17:30", - "mode": "on", - "position": 1, - "start": "12:00" - } - ], - "wed": [ - { - "end": "09:00", - "mode": "on", - "position": 0, - "start": "04:00" - }, - { - "end": "17:30", - "mode": "on", - "position": 1, - "start": "12:00" - } - ] - } - } - }, - "timestamp": "2023-01-09T13:42:20.773Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.dhw.schedule" + "properties": {}, + "timestamp": "2024-08-10T22:10:13.129Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.3.circulation.pump" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.0.operating.programs.frostprotection", + "feature": "heating.circuits.0.frostprotection", "gatewayId": "################", "isEnabled": true, "isReady": true, "properties": { - "active": { - "type": "boolean", - "value": false + "status": { + "type": "string", + "value": "off" } }, - "timestamp": "2023-01-09T13:42:23.164Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.frostprotection" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.frostprotection" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.3.operating.modes.cooling", + "feature": "heating.circuits.1.frostprotection", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.modes.cooling" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.frostprotection" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.1.operating.programs.frostprotection", + "feature": "heating.circuits.2.frostprotection", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:23.165Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.frostprotection" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.frostprotection" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.3.operating.modes.dhwAndHeatingCooling", + "feature": "heating.circuits.3.frostprotection", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.modes.dhwAndHeatingCooling" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.3.frostprotection" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.sensors.volumetricFlow.allengra", + "feature": "heating.circuits.0.operating.programs.eco", "gatewayId": "################", "isEnabled": true, "isReady": true, "properties": { - "status": { - "type": "string", - "value": "connected" - }, - "value": { - "type": "number", - "unit": "liter", - "value": 1586 + "active": { + "type": "boolean", + "value": false } }, - "timestamp": "2023-01-09T18:03:10.281Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.sensors.volumetricFlow.allengra" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.eco" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.1.operating.modes.cooling", + "feature": "heating.circuits.1.operating.programs.eco", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.modes.cooling" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.eco" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.secondaryCircuit.sensors.temperature.supply", + "feature": "heating.circuits.2.operating.programs.eco", "gatewayId": "################", - "isEnabled": true, + "isEnabled": false, "isReady": true, - "properties": { - "status": { - "type": "string", - "value": "connected" - }, - "value": { - "type": "number", - "unit": "celsius", - "value": 33.1 - } - }, - "timestamp": "2023-01-09T18:03:06.841Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.secondaryCircuit.sensors.temperature.supply" + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.eco" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.0.operating.programs.comfortEnergySaving", + "feature": "heating.circuits.3.operating.programs.eco", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.eco" + }, + { + "apiVersion": 1, + "commands": {}, + "deprecated": { + "info": "replaced by heating.circuits.N.operating.programs.reducedEnergySaving and heating.circuits.0.operating.programs.eco", + "removalDate": "2024-09-15" + }, + "deviceId": "0", + "feature": "heating.circuits.0.operating.programs.summerEco", "gatewayId": "################", "isEnabled": true, "isReady": true, @@ -371,268 +298,248 @@ "active": { "type": "boolean", "value": false - }, - "demand": { - "type": "string", - "value": "heating" - }, - "reason": { - "type": "string", - "value": "summerEco" } }, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.comfortEnergySaving" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.summerEco" }, { "apiVersion": 1, - "commands": { - "activate": { - "isExecutable": false, - "name": "activate", - "params": { - "temperature": { - "constraints": { - "max": 37, - "min": 3, - "stepping": 1 - }, - "required": false, - "type": "number" - } - }, - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.comfortHeating/commands/activate" - }, - "deactivate": { - "isExecutable": false, - "name": "deactivate", - "params": {}, - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.comfortHeating/commands/deactivate" - }, - "setTemperature": { - "isExecutable": true, - "name": "setTemperature", - "params": { - "targetTemperature": { - "constraints": { - "max": 37, - "min": 3, - "stepping": 1 - }, - "required": true, - "type": "number" - } - }, - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.comfortHeating/commands/setTemperature" - } + "commands": {}, + "deprecated": { + "info": "replaced by heating.circuits.N.operating.programs.reducedEnergySaving and heating.circuits.0.operating.programs.eco", + "removalDate": "2024-09-15" }, "deviceId": "0", - "feature": "heating.circuits.0.operating.programs.comfortHeating", + "feature": "heating.circuits.1.operating.programs.summerEco", "gatewayId": "################", - "isEnabled": true, + "isEnabled": false, "isReady": true, - "properties": { - "active": { - "type": "boolean", - "value": true - }, - "demand": { - "type": "string", - "value": "heating" - }, - "temperature": { - "type": "number", - "unit": "celsius", - "value": 19 - } + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.summerEco" + }, + { + "apiVersion": 1, + "commands": {}, + "deprecated": { + "info": "replaced by heating.circuits.N.operating.programs.reducedEnergySaving and heating.circuits.0.operating.programs.eco", + "removalDate": "2024-09-15" }, - "timestamp": "2023-01-09T13:59:20.392Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.comfortHeating" + "deviceId": "0", + "feature": "heating.circuits.2.operating.programs.summerEco", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.summerEco" }, { "apiVersion": 1, "commands": {}, + "deprecated": { + "info": "replaced by heating.circuits.N.operating.programs.reducedEnergySaving and heating.circuits.0.operating.programs.eco", + "removalDate": "2024-09-15" + }, "deviceId": "0", - "feature": "heating.circuits.3.operating.programs.fixed", + "feature": "heating.circuits.3.operating.programs.summerEco", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:23.171Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.fixed" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.summerEco" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.0.operating.programs.standby", + "feature": "heating.circuits.0.sensors.temperature.room", "gatewayId": "################", - "isEnabled": true, + "isEnabled": false, "isReady": true, - "properties": { - "active": { - "type": "boolean", - "value": false - } - }, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.standby" + "properties": {}, + "timestamp": "2024-08-10T22:10:13.129Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.sensors.temperature.room" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.3.operating.modes.standby", + "feature": "heating.circuits.1.sensors.temperature.room", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.modes.standby" + "timestamp": "2024-08-10T22:10:13.129Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.sensors.temperature.room" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.power.consumption.dhw", + "feature": "heating.circuits.2.sensors.temperature.room", "gatewayId": "################", - "isEnabled": true, + "isEnabled": false, "isReady": true, - "properties": { - "day": { - "type": "array", - "unit": "kilowattHour", - "value": [1, 2.4, 2, 1.8, 1.8, 2.3, 2.7, 0.8] - }, - "dayValueReadAt": { - "type": "string", - "value": "2023-01-09T05:56:59.558Z" - }, - "month": { - "type": "array", - "unit": "kilowattHour", - "value": [18, 74.8, 48.7, 48, 10, 0, 0, 0, 0, 0, 0, 0, 0] - }, - "monthValueReadAt": { - "type": "string", - "value": "2023-01-09T05:56:59.558Z" - }, - "week": { - "type": "array", - "unit": "kilowattHour", - "value": [1, 13.8, 15.100000000000001, 16.099999999999998, 17.4, 18.2] - }, - "weekValueReadAt": { - "type": "string", - "value": "2023-01-08T19:27:12.271Z" - }, - "year": { - "type": "array", - "unit": "kilowattHour", - "value": [18, 181.5] - }, - "yearValueReadAt": { - "type": "string", - "value": "2023-01-09T05:56:59.558Z" - } - }, - "timestamp": "2023-01-09T13:42:25.153Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.power.consumption.dhw" + "properties": {}, + "timestamp": "2024-08-10T22:10:13.129Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.sensors.temperature.room" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.dhw.pumps.circulation", + "feature": "heating.circuits.3.sensors.temperature.room", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-10T22:10:13.129Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.3.sensors.temperature.room" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.sensors.temperature.supply", "gatewayId": "################", "isEnabled": true, "isReady": true, "properties": { "status": { "type": "string", - "value": "on" + "value": "connected" + }, + "value": { + "type": "number", + "unit": "celsius", + "value": 23.4 } }, - "timestamp": "2023-01-09T14:59:19.291Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.dhw.pumps.circulation" + "timestamp": "2024-08-11T08:12:53.439Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.sensors.temperature.supply" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.2.heating.schedule", + "feature": "heating.circuits.1.sensors.temperature.supply", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.2.heating.schedule" + "timestamp": "2024-08-10T22:10:13.129Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.sensors.temperature.supply" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.2.operating.programs.standby", + "feature": "heating.circuits.2.sensors.temperature.supply", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.standby" + "timestamp": "2024-08-10T22:10:13.129Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.sensors.temperature.supply" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.2.sensors.temperature.room", + "feature": "heating.circuits.3.sensors.temperature.supply", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:26.759Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.2.sensors.temperature.room" + "timestamp": "2024-08-10T22:10:13.129Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.3.sensors.temperature.supply" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.0.operating.modes.dhw", + "feature": "heating.circuits.0.temperature", "gatewayId": "################", - "isEnabled": true, + "isEnabled": false, "isReady": true, - "properties": { - "active": { - "type": "boolean", - "value": false - } - }, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.modes.dhw" + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.temperature" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.2.operating.modes.active", + "feature": "heating.circuits.1.temperature", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.temperature" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.temperature", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.temperature" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.3.temperature", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:26.506Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.modes.active" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.3.temperature" }, { "apiVersion": 1, "commands": { - "setTargetTemperature": { + "setLevels": { "isExecutable": true, - "name": "setTargetTemperature", + "name": "setLevels", + "params": { + "maxTemperature": { + "constraints": { + "max": 70, + "min": 10, + "stepping": 1 + }, + "required": true, + "type": "number" + }, + "minTemperature": { + "constraints": { + "max": 30, + "min": 1, + "stepping": 1 + }, + "required": true, + "type": "number" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.temperature.levels/commands/setLevels" + }, + "setMax": { + "isExecutable": true, + "name": "setMax", "params": { "temperature": { "constraints": { - "efficientLowerBorder": 0, - "efficientUpperBorder": 55, - "max": 60, + "max": 70, "min": 10, "stepping": 1 }, @@ -640,266 +547,298 @@ "type": "number" } }, - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.dhw.temperature.main/commands/setTargetTemperature" + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.temperature.levels/commands/setMax" + }, + "setMin": { + "isExecutable": true, + "name": "setMin", + "params": { + "temperature": { + "constraints": { + "max": 30, + "min": 1, + "stepping": 1 + }, + "required": true, + "type": "number" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.temperature.levels/commands/setMin" } }, "deviceId": "0", - "feature": "heating.dhw.temperature.main", + "feature": "heating.circuits.0.temperature.levels", "gatewayId": "################", "isEnabled": true, "isReady": true, "properties": { - "value": { + "max": { + "type": "number", + "unit": "celsius", + "value": 60 + }, + "min": { "type": "number", "unit": "celsius", - "value": 43 + "value": 20 } }, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.dhw.temperature.main" + "timestamp": "2024-08-10T22:10:13.129Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.temperature.levels" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.3.operating.programs.normalCoolingEnergySaving", + "feature": "heating.circuits.1.temperature.levels", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.normalCoolingEnergySaving" + "timestamp": "2024-08-10T22:10:13.129Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.temperature.levels" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.2.operating.programs.active", + "feature": "heating.circuits.2.temperature.levels", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:25.172Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.active" + "timestamp": "2024-08-10T22:10:13.129Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.temperature.levels" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.3", + "feature": "heating.circuits.3.temperature.levels", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.3" + "timestamp": "2024-08-10T22:10:13.129Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.3.temperature.levels" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.3.sensors.temperature.room", + "feature": "heating.circuits.0.zone.mode", "gatewayId": "################", - "isEnabled": false, + "isEnabled": true, "isReady": true, - "properties": {}, - "timestamp": "2023-01-09T13:42:26.760Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.3.sensors.temperature.room" + "properties": { + "active": { + "type": "boolean", + "value": false + } + }, + "timestamp": "2024-08-10T22:10:13.129Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.zone.mode" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.1.operating.modes.standby", + "feature": "heating.circuits.1.zone.mode", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.modes.standby" + "timestamp": "2024-08-10T22:10:13.129Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.zone.mode" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.3.temperature", + "feature": "heating.circuits.2.zone.mode", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:26.734Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.3.temperature" + "timestamp": "2024-08-10T22:10:13.129Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.zone.mode" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.1.operating.programs.forcedLastFromSchedule", + "feature": "heating.circuits.3.zone.mode", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.forcedLastFromSchedule" + "timestamp": "2024-08-10T22:10:13.129Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.3.zone.mode" }, { "apiVersion": 1, - "commands": {}, + "commands": { + "setName": { + "isExecutable": true, + "name": "setName", + "params": { + "name": { + "constraints": { + "maxLength": 20, + "minLength": 1 + }, + "required": true, + "type": "string" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0/commands/setName" + } + }, "deviceId": "0", - "feature": "heating.circuits.1.operating.modes.heatingCooling", + "feature": "heating.circuits.0", "gatewayId": "################", - "isEnabled": false, + "isEnabled": true, "isReady": true, - "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.modes.heatingCooling" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.3.operating.programs.frostprotection", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2023-01-09T13:42:23.167Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.frostprotection" + "properties": { + "active": { + "type": "boolean", + "value": true + }, + "name": { + "type": "string", + "value": "" + }, + "type": { + "type": "string", + "value": "heatingCircuit" + } + }, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.1.frostprotection", + "feature": "heating.circuits.1", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:26.743Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.1.frostprotection" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.power.consumption.summary.dhw", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "currentDay": { - "type": "number", - "unit": "kilowattHour", - "value": 1 - }, - "currentMonth": { - "type": "number", - "unit": "kilowattHour", - "value": 18 - }, - "currentYear": { - "type": "number", - "unit": "kilowattHour", - "value": 18 - }, - "lastMonth": { - "type": "number", - "unit": "kilowattHour", - "value": 74.8 - }, - "lastSevenDays": { - "type": "number", - "unit": "kilowattHour", - "value": 14 - }, - "lastYear": { - "type": "number", - "unit": "kilowattHour", - "value": 177.7 - } - }, - "timestamp": "2023-01-09T13:42:26.810Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.power.consumption.summary.dhw" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.2.sensors.temperature.supply", + "feature": "heating.circuits.2", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:26.773Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.2.sensors.temperature.supply" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.0.temperature", + "feature": "heating.circuits.3", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T17:53:45.565Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.temperature" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.3" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.2.operating.programs.summerEco", + "feature": "heating.dhw", "gatewayId": "################", "isEnabled": true, "isReady": true, "properties": { "active": { "type": "boolean", - "value": false + "value": true + }, + "status": { + "type": "string", + "value": "on" } }, - "timestamp": "2023-01-09T13:42:26.786Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.summerEco" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw" }, { "apiVersion": 1, - "commands": {}, + "commands": { + "activate": { + "isExecutable": false, + "name": "activate", + "params": {}, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.hygiene/commands/activate" + }, + "disable": { + "isExecutable": false, + "name": "disable", + "params": {}, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.hygiene/commands/disable" + }, + "enable": { + "isExecutable": true, + "name": "enable", + "params": {}, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.hygiene/commands/enable" + } + }, "deviceId": "0", - "feature": "heating.compressors.0", + "feature": "heating.dhw.hygiene", "gatewayId": "################", "isEnabled": true, "isReady": true, "properties": { - "active": { + "enabled": { "type": "boolean", - "value": true - }, - "phase": { - "type": "string", - "value": "ready" + "value": false } }, - "timestamp": "2023-01-09T17:36:26.597Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.compressors.0" + "timestamp": "2024-08-10T22:10:13.129Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.hygiene" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.2.operating.modes.dhw", + "feature": "heating.dhw.hygiene.trigger", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.modes.dhw" + "timestamp": "2024-08-10T22:14:12.539Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.hygiene.trigger" }, { "apiVersion": 1, - "commands": {}, + "commands": { + "activate": { + "isExecutable": true, + "name": "activate", + "params": {}, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.oneTimeCharge/commands/activate" + }, + "deactivate": { + "isExecutable": true, + "name": "deactivate", + "params": {}, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.oneTimeCharge/commands/deactivate" + } + }, "deviceId": "0", - "feature": "heating.circuits.0.operating.modes.heating", + "feature": "heating.dhw.oneTimeCharge", "gatewayId": "################", "isEnabled": true, "isReady": true, @@ -909,246 +848,163 @@ "value": false } }, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.modes.heating" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.oneTimeCharge" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.3.operating.programs.comfortCooling", + "feature": "heating.dhw.pumps.circulation", "gatewayId": "################", - "isEnabled": false, + "isEnabled": true, "isReady": true, - "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.comfortCooling" + "properties": { + "status": { + "type": "string", + "value": "off" + } + }, + "timestamp": "2024-08-11T06:49:58.799Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.pumps.circulation" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.1.operating.programs.reducedCoolingEnergySaving", + "feature": "heating.dhw.pumps.secondary", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.reducedCoolingEnergySaving" + "timestamp": "2024-08-10T22:10:13.129Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.pumps.secondary" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.compressors.0.statistics", + "feature": "heating.dhw.sensors.temperature.dhwCylinder", "gatewayId": "################", "isEnabled": true, "isReady": true, "properties": { - "hours": { - "type": "number", - "unit": "hour", - "value": 1223 + "status": { + "type": "string", + "value": "connected" }, - "starts": { + "value": { "type": "number", - "unit": "", - "value": 354 + "unit": "celsius", + "value": 41.6 } }, - "timestamp": "2023-01-09T17:38:10.766Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.compressors.0.statistics" + "timestamp": "2024-08-11T08:14:30.091Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.sensors.temperature.dhwCylinder" }, { "apiVersion": 1, "commands": {}, + "deprecated": { + "info": "replaced by heating.dhw.sensors.temperature.dhwCylinder", + "removalDate": "2024-09-15" + }, "deviceId": "0", - "feature": "heating.circuits.0.operating.programs.comfortCoolingEnergySaving", + "feature": "heating.dhw.sensors.temperature.hotWaterStorage", "gatewayId": "################", "isEnabled": true, "isReady": true, "properties": { - "active": { - "type": "boolean", - "value": false - }, - "demand": { + "status": { "type": "string", - "value": "cooling" + "value": "connected" }, - "reason": { - "type": "string", - "value": "summerEco" + "value": { + "type": "number", + "unit": "celsius", + "value": 41.6 } }, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.comfortCoolingEnergySaving" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.2.operating.programs.normalCoolingEnergySaving", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.normalCoolingEnergySaving" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.3.operating.modes.heatingCooling", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.modes.heatingCooling" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.1.operating.programs.normalCoolingEnergySaving", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.normalCoolingEnergySaving" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.1.operating.modes.dhw", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.modes.dhw" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.1.circulation.pump", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2023-01-09T17:34:06.757Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.1.circulation.pump" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.3.operating.programs.normalEnergySaving", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.normalEnergySaving" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.1.operating.modes.dhwAndHeating", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.modes.dhwAndHeating" + "timestamp": "2024-08-11T08:14:30.091Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.sensors.temperature.hotWaterStorage" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.0.operating.programs.reducedEnergySaving", + "feature": "heating.dhw.temperature.levels", "gatewayId": "################", "isEnabled": true, "isReady": true, "properties": { - "active": { - "type": "boolean", - "value": false + "default": { + "type": "number", + "unit": "celsius", + "value": 50 }, - "demand": { - "type": "string", - "value": "heating" + "max": { + "type": "number", + "unit": "celsius", + "value": 10 }, - "reason": { - "type": "string", - "value": "unknown" + "min": { + "type": "number", + "unit": "celsius", + "value": 10 } }, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.reducedEnergySaving" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.1.operating.programs.normalCooling", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.normalCooling" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.temperature.levels" }, { "apiVersion": 1, "commands": { - "activate": { + "changeEndDate": { "isExecutable": false, - "name": "activate", + "name": "changeEndDate", "params": { - "temperature": { + "end": { "constraints": { - "max": 37, - "min": 3, - "stepping": 1 + "regEx": "^[\\d]{4}-[\\d]{2}-[\\d]{2}$", + "sameDayAllowed": true }, - "required": false, - "type": "number" + "required": true, + "type": "string" } }, - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.normalHeating/commands/activate" - }, - "deactivate": { - "isExecutable": false, - "name": "deactivate", - "params": {}, - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.normalHeating/commands/deactivate" + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.operating.programs.holiday/commands/changeEndDate" }, - "setTemperature": { + "schedule": { "isExecutable": true, - "name": "setTemperature", + "name": "schedule", "params": { - "targetTemperature": { + "end": { "constraints": { - "max": 37, - "min": 3, - "stepping": 1 + "regEx": "^[\\d]{4}-[\\d]{2}-[\\d]{2}$", + "sameDayAllowed": true }, "required": true, - "type": "number" + "type": "string" + }, + "start": { + "constraints": { + "regEx": "^[\\d]{4}-[\\d]{2}-[\\d]{2}$" + }, + "required": true, + "type": "string" } }, - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.normalHeating/commands/setTemperature" + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.operating.programs.holiday/commands/schedule" + }, + "unschedule": { + "isExecutable": true, + "name": "unschedule", + "params": {}, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.operating.programs.holiday/commands/unschedule" } }, "deviceId": "0", - "feature": "heating.circuits.0.operating.programs.normalHeating", + "feature": "heating.operating.programs.holiday", "gatewayId": "################", "isEnabled": true, "isReady": true, @@ -1157,96 +1013,126 @@ "type": "boolean", "value": false }, - "demand": { + "end": { "type": "string", - "value": "heating" + "value": "2000-01-01" }, - "temperature": { - "type": "number", - "unit": "celsius", - "value": 18 + "start": { + "type": "string", + "value": "2000-01-01" } }, - "timestamp": "2023-01-09T13:59:20.366Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.normalHeating" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.3.operating.programs.standby", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.standby" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.operating.programs.holiday" }, { "apiVersion": 1, "commands": { - "activate": { + "changeEndDate": { "isExecutable": false, - "name": "activate", - "params": {}, - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.dhw.hygiene/commands/activate" + "name": "changeEndDate", + "params": { + "end": { + "constraints": { + "regEx": "^[\\d]{4}-[\\d]{2}-[\\d]{2}$", + "sameDayAllowed": true + }, + "required": true, + "type": "string" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.operating.programs.holidayAtHome/commands/changeEndDate" }, - "disable": { - "isExecutable": false, - "name": "disable", - "params": {}, - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.dhw.hygiene/commands/disable" + "schedule": { + "isExecutable": true, + "name": "schedule", + "params": { + "end": { + "constraints": { + "regEx": "^[\\d]{4}-[\\d]{2}-[\\d]{2}$", + "sameDayAllowed": true + }, + "required": true, + "type": "string" + }, + "start": { + "constraints": { + "regEx": "^[\\d]{4}-[\\d]{2}-[\\d]{2}$" + }, + "required": true, + "type": "string" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.operating.programs.holidayAtHome/commands/schedule" }, - "enable": { + "unschedule": { "isExecutable": true, - "name": "enable", + "name": "unschedule", "params": {}, - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.dhw.hygiene/commands/enable" + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.operating.programs.holidayAtHome/commands/unschedule" } }, "deviceId": "0", - "feature": "heating.dhw.hygiene", + "feature": "heating.operating.programs.holidayAtHome", "gatewayId": "################", "isEnabled": true, "isReady": true, "properties": { - "enabled": { + "active": { "type": "boolean", "value": false + }, + "end": { + "type": "string", + "value": "2000-01-01" + }, + "start": { + "type": "string", + "value": "2000-01-01" } }, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.dhw.hygiene" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.operating.programs.holidayAtHome" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.2.operating.programs.comfortCoolingEnergySaving", + "feature": "heating.sensors.temperature.hydraulicSeparator", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.comfortCoolingEnergySaving" + "timestamp": "2024-08-11T08:12:53.439Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.sensors.temperature.hydraulicSeparator" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.1.operating.modes.heating", + "feature": "heating.sensors.temperature.outside", "gatewayId": "################", - "isEnabled": false, + "isEnabled": true, "isReady": true, - "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.modes.heating" + "properties": { + "status": { + "type": "string", + "value": "connected" + }, + "value": { + "type": "number", + "unit": "celsius", + "value": 22.4 + } + }, + "timestamp": "2024-08-11T08:14:35.810Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.sensors.temperature.outside" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.dhw.sensors.temperature.hotWaterStorage", + "feature": "heating.sensors.volumetricFlow.allengra", "gatewayId": "################", "isEnabled": true, "isReady": true, @@ -1257,157 +1143,177 @@ }, "value": { "type": "number", - "unit": "celsius", - "value": 37 + "unit": "liter/hour", + "value": 0 } }, - "timestamp": "2023-01-09T18:02:56.901Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.dhw.sensors.temperature.hotWaterStorage" + "timestamp": "2024-08-11T07:33:52.874Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.sensors.volumetricFlow.allengra" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.2.operating.programs.reducedHeating", + "feature": "device.productIdentification", "gatewayId": "################", - "isEnabled": false, + "isEnabled": true, "isReady": true, - "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.reducedHeating" + "properties": { + "product": { + "type": "object", + "value": { + "busAddress": 1, + "busType": "CanExternal", + "productFamily": "B_00027_VC250", + "viessmannIdentificationNumber": "################" + } + } + }, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/device.productIdentification" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.3.operating.modes.heating", + "feature": "device.productMatrix", "gatewayId": "################", - "isEnabled": false, + "isEnabled": true, "isReady": true, - "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.modes.heating" + "properties": { + "product": { + "type": "array", + "value": [ + { + "busAddress": 1, + "busType": "CanExternal", + "productFamily": "B_00027_VC250", + "viessmannIdentificationNumber": "################" + } + ] + } + }, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/device.productMatrix" }, { "apiVersion": 1, - "commands": {}, + "commands": { + "setCurve": { + "isExecutable": true, + "name": "setCurve", + "params": { + "shift": { + "constraints": { + "max": 40, + "min": -13, + "stepping": 1 + }, + "required": true, + "type": "number" + }, + "slope": { + "constraints": { + "max": 3.5, + "min": 0.2, + "stepping": 0.1 + }, + "required": true, + "type": "number" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.heating.curve/commands/setCurve" + } + }, "deviceId": "0", - "feature": "heating.circuits.2.operating.programs.comfortCooling", + "feature": "heating.circuits.0.heating.curve", "gatewayId": "################", - "isEnabled": false, + "isEnabled": true, "isReady": true, - "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.comfortCooling" + "properties": { + "shift": { + "type": "number", + "unit": "", + "value": 6 + }, + "slope": { + "type": "number", + "unit": "", + "value": 0.6 + } + }, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.heating.curve" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.2.operating.programs.normalEnergySaving", + "feature": "heating.circuits.1.heating.curve", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.normalEnergySaving" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.heating.curve" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.power.consumption.total", + "feature": "heating.circuits.2.heating.curve", "gatewayId": "################", - "isEnabled": true, + "isEnabled": false, "isReady": true, - "properties": { - "day": { - "type": "array", - "unit": "kilowattHour", - "value": [ - 6.9, 7.699999999999999, 7.1, 8.1, 7.5, 6.8, 10.600000000000001, 5.1 - ] - }, - "dayValueReadAt": { - "type": "string", - "value": "2023-01-09T17:49:53.785Z" - }, - "month": { - "type": "array", - "unit": "kilowattHour", - "value": [ - 66, 538.6999999999999, 337.00000000000006, 149.8, 38.1, 0, 0, 0, 0, - 0, 0, 0, 0 - ] - }, - "monthValueReadAt": { - "type": "string", - "value": "2023-01-09T17:49:53.785Z" - }, - "week": { - "type": "array", - "unit": "kilowattHour", - "value": [6.9, 52.9, 54.7, 76.8, 206.8, 133.20000000000002] - }, - "weekValueReadAt": { - "type": "string", - "value": "2023-01-08T19:27:12.271Z" - }, - "year": { - "type": "array", - "unit": "kilowattHour", - "value": [66, 1080.3] - }, - "yearValueReadAt": { - "type": "string", - "value": "2023-01-09T17:49:53.785Z" - } - }, - "timestamp": "2023-01-09T17:53:14.995Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.power.consumption.total" + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.heating.curve" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.2.operating.programs.forcedLastFromSchedule", + "feature": "heating.circuits.3.heating.curve", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.forcedLastFromSchedule" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.3.heating.curve" }, { "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.0.operating.programs.reducedCoolingEnergySaving", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "active": { - "type": "boolean", - "value": false - }, - "demand": { - "type": "string", - "value": "cooling" + "commands": { + "resetSchedule": { + "isExecutable": true, + "name": "resetSchedule", + "params": {}, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.heating.schedule/commands/resetSchedule" }, - "reason": { - "type": "string", - "value": "summerEco" + "setSchedule": { + "isExecutable": true, + "name": "setSchedule", + "params": { + "newSchedule": { + "constraints": { + "defaultMode": "reduced", + "maxEntries": 4, + "modes": [ + "normal", + "comfort" + ], + "overlapAllowed": false, + "resolution": 10 + }, + "required": true, + "type": "Schedule" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.heating.schedule/commands/setSchedule" } }, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.reducedCoolingEnergySaving" - }, - { - "apiVersion": 1, - "commands": {}, "deviceId": "0", - "feature": "heating.circuits.0.operating.programs.normalEnergySaving", + "feature": "heating.circuits.0.heating.schedule", "gatewayId": "################", "isEnabled": true, "isReady": true, @@ -1416,273 +1322,368 @@ "type": "boolean", "value": false }, - "demand": { - "type": "string", - "value": "heating" - }, - "reason": { - "type": "string", - "value": "summerEco" + "entries": { + "type": "Schedule", + "value": { + "fri": [ + { + "end": "06:00", + "mode": "comfort", + "position": 0, + "start": "03:00" + }, + { + "end": "23:00", + "mode": "normal", + "position": 1, + "start": "06:00" + } + ], + "mon": [ + { + "end": "06:00", + "mode": "comfort", + "position": 0, + "start": "03:00" + }, + { + "end": "23:00", + "mode": "normal", + "position": 1, + "start": "06:00" + } + ], + "sat": [ + { + "end": "06:00", + "mode": "comfort", + "position": 0, + "start": "03:00" + }, + { + "end": "23:00", + "mode": "normal", + "position": 1, + "start": "06:00" + } + ], + "sun": [ + { + "end": "06:00", + "mode": "comfort", + "position": 0, + "start": "03:00" + }, + { + "end": "23:00", + "mode": "normal", + "position": 1, + "start": "06:00" + } + ], + "thu": [ + { + "end": "06:00", + "mode": "comfort", + "position": 0, + "start": "03:00" + }, + { + "end": "23:00", + "mode": "normal", + "position": 1, + "start": "06:00" + } + ], + "tue": [ + { + "end": "06:00", + "mode": "comfort", + "position": 0, + "start": "03:00" + }, + { + "end": "23:00", + "mode": "normal", + "position": 1, + "start": "06:00" + } + ], + "wed": [ + { + "end": "06:00", + "mode": "comfort", + "position": 0, + "start": "03:00" + }, + { + "end": "23:00", + "mode": "normal", + "position": 1, + "start": "06:00" + } + ] + } } }, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.normalEnergySaving" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.heating.schedule" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.1.operating.programs.comfortHeating", + "feature": "heating.circuits.1.heating.schedule", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.comfortHeating" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.heating.schedule" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.0.operating.programs.normalCoolingEnergySaving", + "feature": "heating.circuits.2.heating.schedule", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.heating.schedule" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.3.heating.schedule", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.3.heating.schedule" + }, + { + "apiVersion": 1, + "commands": { + "setMode": { + "isExecutable": true, + "name": "setMode", + "params": { + "mode": { + "constraints": { + "enum": [ + "heating", + "standby" + ] + }, + "required": true, + "type": "string" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.modes.active/commands/setMode" + } + }, + "deviceId": "0", + "feature": "heating.circuits.0.operating.modes.active", "gatewayId": "################", "isEnabled": true, "isReady": true, "properties": { - "active": { - "type": "boolean", - "value": false - }, - "demand": { - "type": "string", - "value": "cooling" - }, - "reason": { + "value": { "type": "string", - "value": "summerEco" + "value": "standby" } }, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.normalCoolingEnergySaving" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.modes.active" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.0.operating.programs.reducedCooling", + "feature": "heating.circuits.1.operating.modes.active", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.reducedCooling" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.modes.active" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.3.heating.curve", + "feature": "heating.circuits.2.operating.modes.active", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.3.heating.curve" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.modes.active" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.2.operating.programs.reducedEnergySaving", + "feature": "heating.circuits.3.operating.modes.active", "gatewayId": "################", - "isEnabled": true, + "isEnabled": false, "isReady": true, - "properties": { - "active": { - "type": "boolean", - "value": false - }, - "demand": { - "type": "string", - "value": "heating" - }, - "reason": { - "type": "string", - "value": "unknown" - } - }, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.reducedEnergySaving" + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.modes.active" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.sensors.temperature.return", + "feature": "heating.circuits.0.operating.modes.cooling", "gatewayId": "################", - "isEnabled": true, + "isEnabled": false, "isReady": true, - "properties": { - "status": { - "type": "string", - "value": "connected" - }, - "value": { - "type": "number", - "unit": "celsius", - "value": 31.6 - } - }, - "timestamp": "2023-01-09T18:02:56.849Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.sensors.temperature.return" + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.modes.cooling" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.power.consumption.heating", + "feature": "heating.circuits.1.operating.modes.cooling", "gatewayId": "################", - "isEnabled": true, + "isEnabled": false, "isReady": true, - "properties": { - "day": { - "type": "array", - "unit": "kilowattHour", - "value": [5.9, 5.3, 5.1, 6.3, 5.7, 4.5, 7.9, 4.3] - }, - "dayValueReadAt": { - "type": "string", - "value": "2023-01-09T17:49:53.785Z" - }, - "month": { - "type": "array", - "unit": "kilowattHour", - "value": [48, 463.9, 288.3, 101.8, 28.1, 0, 0, 0, 0, 0, 0, 0, 0] - }, - "monthValueReadAt": { - "type": "string", - "value": "2023-01-09T17:49:53.785Z" - }, - "week": { - "type": "array", - "unit": "kilowattHour", - "value": [ - 5.9, 39.099999999999994, 39.6, 60.7, 189.39999999999998, 115 - ] - }, - "weekValueReadAt": { - "type": "string", - "value": "2023-01-08T19:27:12.271Z" - }, - "year": { - "type": "array", - "unit": "kilowattHour", - "value": [48, 898.8000000000001] - }, - "yearValueReadAt": { - "type": "string", - "value": "2023-01-09T17:49:53.785Z" - } - }, - "timestamp": "2023-01-09T17:53:14.993Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.power.consumption.heating" + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.modes.cooling" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.3.circulation.pump", + "feature": "heating.circuits.2.operating.modes.cooling", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T17:34:06.789Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.3.circulation.pump" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.modes.cooling" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.compressors", + "feature": "heating.circuits.3.operating.modes.cooling", "gatewayId": "################", - "isEnabled": true, + "isEnabled": false, "isReady": true, - "properties": { - "enabled": { - "type": "array", - "value": ["0"] - } - }, - "timestamp": "2023-01-09T13:42:24.624Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.compressors" + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.modes.cooling" }, { "apiVersion": 1, - "commands": { - "setMode": { - "isExecutable": true, - "name": "setMode", - "params": { - "mode": { - "constraints": { - "enum": ["standby", "heating", "dhw", "dhwAndHeating"] - }, - "required": true, - "type": "string" - } - }, - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.modes.active/commands/setMode" - } - }, + "commands": {}, "deviceId": "0", - "feature": "heating.circuits.0.operating.modes.active", + "feature": "heating.circuits.0.operating.modes.heating", "gatewayId": "################", "isEnabled": true, "isReady": true, "properties": { - "value": { - "type": "string", - "value": "dhwAndHeating" + "active": { + "type": "boolean", + "value": false } }, - "timestamp": "2023-01-09T13:42:25.815Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.modes.active" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.modes.heating" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.1.operating.programs.fixed", + "feature": "heating.circuits.1.operating.modes.heating", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:23.169Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.fixed" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.modes.heating" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.1.operating.programs.active", + "feature": "heating.circuits.2.operating.modes.heating", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:25.164Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.active" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.modes.heating" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.1.operating.programs.normalHeating", + "feature": "heating.circuits.3.operating.modes.heating", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.modes.heating" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.modes.heatingCooling", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.modes.heatingCooling" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.1.operating.modes.heatingCooling", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.modes.heatingCooling" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.operating.modes.heatingCooling", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.modes.heatingCooling" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.3.operating.modes.heatingCooling", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.normalHeating" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.modes.heatingCooling" }, { "apiVersion": 1, @@ -1695,135 +1696,154 @@ "properties": { "active": { "type": "boolean", - "value": false + "value": true } }, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.modes.standby" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.modes.standby" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.2.operating.programs.normalCooling", + "feature": "heating.circuits.1.operating.modes.standby", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.normalCooling" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.modes.standby" }, { "apiVersion": 1, - "commands": { - "setCurve": { - "isExecutable": true, - "name": "setCurve", - "params": { - "shift": { - "constraints": { - "max": 40, - "min": -13, - "stepping": 1 - }, - "required": true, - "type": "number" - }, - "slope": { - "constraints": { - "max": 3.5, - "min": 0.2, - "stepping": 0.1 - }, - "required": true, - "type": "number" - } - }, - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.heating.curve/commands/setCurve" - } - }, + "commands": {}, "deviceId": "0", - "feature": "heating.circuits.0.heating.curve", + "feature": "heating.circuits.2.operating.modes.standby", "gatewayId": "################", - "isEnabled": true, + "isEnabled": false, "isReady": true, - "properties": { - "shift": { - "type": "number", - "unit": "", - "value": 0 - }, - "slope": { - "type": "number", - "unit": "", - "value": 0.8 - } - }, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.heating.curve" + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.modes.standby" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.0.sensors.temperature.room", + "feature": "heating.circuits.3.operating.modes.standby", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:26.757Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.sensors.temperature.room" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.modes.standby" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.dhw", + "feature": "heating.circuits.0.operating.programs.active", "gatewayId": "################", "isEnabled": true, "isReady": true, "properties": { - "active": { - "type": "boolean", - "value": true - }, - "status": { + "value": { "type": "string", - "value": "on" + "value": "standby" } }, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.dhw" + "timestamp": "2024-08-10T22:10:13.129Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.active" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.3.operating.programs.comfortEnergySaving", + "feature": "heating.circuits.1.operating.programs.active", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.comfortEnergySaving" + "timestamp": "2024-08-10T22:10:13.129Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.active" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.3.operating.programs.normalCooling", + "feature": "heating.circuits.2.operating.programs.active", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.normalCooling" + "timestamp": "2024-08-10T22:10:13.129Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.active" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.2.zone.mode", + "feature": "heating.circuits.3.operating.programs.active", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-10T22:10:13.129Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.active" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.programs.comfortCooling", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.comfortCooling" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.1.operating.programs.comfortCooling", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.comfortCooling" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.operating.programs.comfortCooling", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.comfortCooling" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.3.operating.programs.comfortCooling", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.comfortCooling" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.programs.comfortCoolingEnergySaving", "gatewayId": "################", "isEnabled": true, "isReady": true, @@ -1831,40 +1851,60 @@ "active": { "type": "boolean", "value": false + }, + "demand": { + "type": "string", + "value": "cooling" + }, + "reason": { + "type": "string", + "value": "eco" } }, - "timestamp": "2023-01-09T13:42:26.754Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.2.zone.mode" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.comfortCoolingEnergySaving" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.2.operating.programs.frostprotection", + "feature": "heating.circuits.1.operating.programs.comfortCoolingEnergySaving", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:23.166Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.frostprotection" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.comfortCoolingEnergySaving" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.2.temperature", + "feature": "heating.circuits.2.operating.programs.comfortCoolingEnergySaving", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:26.733Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.2.temperature" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.comfortCoolingEnergySaving" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.0.zone.mode", + "feature": "heating.circuits.3.operating.programs.comfortCoolingEnergySaving", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.comfortCoolingEnergySaving" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.programs.comfortEnergySaving", "gatewayId": "################", "isEnabled": true, "isReady": true, @@ -1872,205 +1912,99 @@ "active": { "type": "boolean", "value": false + }, + "demand": { + "type": "string", + "value": "heating" + }, + "reason": { + "type": "string", + "value": "eco" } }, - "timestamp": "2023-01-09T13:42:26.752Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.zone.mode" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.comfortEnergySaving" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.1.operating.programs.comfortEnergySaving", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.comfortEnergySaving" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.operating.programs.comfortEnergySaving", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.comfortEnergySaving" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.3.operating.programs.comfortEnergySaving", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.comfortEnergySaving" }, { "apiVersion": 1, "commands": { - "setSchedule": { - "isExecutable": true, - "name": "setSchedule", + "activate": { + "isExecutable": false, + "name": "activate", "params": { - "newSchedule": { + "temperature": { "constraints": { - "defaultMode": "off", - "maxEntries": 4, - "modes": ["on"], - "overlapAllowed": false, - "resolution": 10 + "max": 37, + "min": 3, + "stepping": 1 }, - "required": true, - "type": "Schedule" + "required": false, + "type": "number" } }, - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.dhw.pumps.circulation.schedule/commands/setSchedule" - } - }, - "deviceId": "0", - "feature": "heating.dhw.pumps.circulation.schedule", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "active": { - "type": "boolean", - "value": true + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.comfortHeating/commands/activate" }, - "entries": { - "type": "Schedule", - "value": { - "fri": [ - { - "end": "08:00", - "mode": "on", - "position": 0, - "start": "05:20" - }, - { - "end": "15:00", - "mode": "on", - "position": 1, - "start": "11:30" - }, - { - "end": "21:00", - "mode": "on", - "position": 2, - "start": "16:00" - } - ], - "mon": [ - { - "end": "08:00", - "mode": "on", - "position": 0, - "start": "05:20" - }, - { - "end": "21:00", - "mode": "on", - "position": 1, - "start": "16:00" - } - ], - "sat": [ - { - "end": "10:00", - "mode": "on", - "position": 0, - "start": "07:00" - }, - { - "end": "21:10", - "mode": "on", - "position": 1, - "start": "12:00" - } - ], - "sun": [ - { - "end": "10:00", - "mode": "on", - "position": 0, - "start": "07:00" - }, - { - "end": "21:10", - "mode": "on", - "position": 1, - "start": "12:00" - } - ], - "thu": [ - { - "end": "08:00", - "mode": "on", - "position": 0, - "start": "05:20" - }, - { - "end": "21:00", - "mode": "on", - "position": 1, - "start": "16:00" - } - ], - "tue": [ - { - "end": "08:00", - "mode": "on", - "position": 0, - "start": "05:20" - }, - { - "end": "21:00", - "mode": "on", - "position": 1, - "start": "16:00" - } - ], - "wed": [ - { - "end": "08:00", - "mode": "on", - "position": 0, - "start": "05:20" - }, - { - "end": "21:00", - "mode": "on", - "position": 1, - "start": "16:00" - } - ] - } - } - }, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.dhw.pumps.circulation.schedule" - }, - { - "apiVersion": 1, - "commands": { - "changeEndDate": { + "deactivate": { "isExecutable": false, - "name": "changeEndDate", - "params": { - "end": { - "constraints": { - "regEx": "^[\\d]{4}-[\\d]{2}-[\\d]{2}$", - "sameDayAllowed": true - }, - "required": true, - "type": "string" - } - }, - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.operating.programs.holidayAtHome/commands/changeEndDate" + "name": "deactivate", + "params": {}, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.comfortHeating/commands/deactivate" }, - "schedule": { + "setTemperature": { "isExecutable": true, - "name": "schedule", + "name": "setTemperature", "params": { - "end": { - "constraints": { - "regEx": "^[\\d]{4}-[\\d]{2}-[\\d]{2}$", - "sameDayAllowed": true - }, - "required": true, - "type": "string" - }, - "start": { + "targetTemperature": { "constraints": { - "regEx": "^[\\d]{4}-[\\d]{2}-[\\d]{2}$" + "max": 37, + "min": 3, + "stepping": 1 }, "required": true, - "type": "string" + "type": "number" } }, - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.operating.programs.holidayAtHome/commands/schedule" - }, - "unschedule": { - "isExecutable": true, - "name": "unschedule", - "params": {}, - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.operating.programs.holidayAtHome/commands/unschedule" + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.comfortHeating/commands/setTemperature" } }, "deviceId": "0", - "feature": "heating.operating.programs.holidayAtHome", + "feature": "heating.circuits.0.operating.programs.comfortHeating", "gatewayId": "################", "isEnabled": true, "isReady": true, @@ -2079,91 +2013,60 @@ "type": "boolean", "value": false }, - "end": { + "demand": { "type": "string", - "value": "2000-01-01" + "value": "heating" }, - "start": { - "type": "string", - "value": "2000-01-01" + "temperature": { + "type": "number", + "unit": "celsius", + "value": 22 } }, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.operating.programs.holidayAtHome" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.comfortHeating" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.0.operating.modes.cooling", + "feature": "heating.circuits.1.operating.programs.comfortHeating", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.modes.cooling" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.comfortHeating" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.1.heating.schedule", + "feature": "heating.circuits.2.operating.programs.comfortHeating", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.1.heating.schedule" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.comfortHeating" }, { "apiVersion": 1, - "commands": { - "changeEndDate": { - "isExecutable": false, - "name": "changeEndDate", - "params": { - "end": { - "constraints": { - "regEx": "^[\\d]{4}-[\\d]{2}-[\\d]{2}$", - "sameDayAllowed": true - }, - "required": true, - "type": "string" - } - }, - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.operating.programs.holiday/commands/changeEndDate" - }, - "schedule": { - "isExecutable": true, - "name": "schedule", - "params": { - "end": { - "constraints": { - "regEx": "^[\\d]{4}-[\\d]{2}-[\\d]{2}$", - "sameDayAllowed": true - }, - "required": true, - "type": "string" - }, - "start": { - "constraints": { - "regEx": "^[\\d]{4}-[\\d]{2}-[\\d]{2}$" - }, - "required": true, - "type": "string" - } - }, - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.operating.programs.holiday/commands/schedule" - }, - "unschedule": { - "isExecutable": true, - "name": "unschedule", - "params": {}, - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.operating.programs.holiday/commands/unschedule" - } - }, + "commands": {}, "deviceId": "0", - "feature": "heating.operating.programs.holiday", + "feature": "heating.circuits.3.operating.programs.comfortHeating", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.comfortHeating" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.programs.fixed", "gatewayId": "################", "isEnabled": true, "isReady": true, @@ -2171,155 +2074,118 @@ "active": { "type": "boolean", "value": false - }, - "end": { - "type": "string", - "value": "2022-11-06" - }, - "start": { - "type": "string", - "value": "2022-11-04" } }, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.operating.programs.holiday" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.fixed" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.1.operating.programs.reducedHeating", + "feature": "heating.circuits.1.operating.programs.fixed", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.reducedHeating" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.fixed" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.0.operating.programs.summerEco", + "feature": "heating.circuits.2.operating.programs.fixed", "gatewayId": "################", - "isEnabled": true, + "isEnabled": false, "isReady": true, - "properties": { - "active": { - "type": "boolean", - "value": false - } - }, - "timestamp": "2023-01-09T13:59:20.409Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.summerEco" + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.fixed" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.2.circulation.pump", + "feature": "heating.circuits.3.operating.programs.fixed", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T17:34:06.777Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.2.circulation.pump" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.fixed" }, { "apiVersion": 1, - "commands": {}, + "commands": { + "activate": { + "isExecutable": false, + "name": "activate", + "params": {}, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.forcedLastFromSchedule/commands/activate" + }, + "deactivate": { + "isExecutable": true, + "name": "deactivate", + "params": {}, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.forcedLastFromSchedule/commands/deactivate" + } + }, "deviceId": "0", - "feature": "heating.circuits.0.frostprotection", + "feature": "heating.circuits.0.operating.programs.forcedLastFromSchedule", "gatewayId": "################", "isEnabled": true, "isReady": true, "properties": { - "status": { - "type": "string", - "value": "off" + "active": { + "type": "boolean", + "value": false } }, - "timestamp": "2023-01-09T13:42:26.742Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.frostprotection" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.forcedLastFromSchedule" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.2.operating.programs.comfortHeating", + "feature": "heating.circuits.1.operating.programs.forcedLastFromSchedule", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.comfortHeating" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.forcedLastFromSchedule" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.0.sensors.temperature.supply", + "feature": "heating.circuits.2.operating.programs.forcedLastFromSchedule", "gatewayId": "################", - "isEnabled": true, + "isEnabled": false, "isReady": true, - "properties": { - "status": { - "type": "string", - "value": "connected" - }, - "value": { - "type": "number", - "unit": "celsius", - "value": 31.2 - } - }, - "timestamp": "2023-01-09T17:52:14.324Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.sensors.temperature.supply" + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.forcedLastFromSchedule" }, { "apiVersion": 1, - "commands": { - "activate": { - "isExecutable": false, - "name": "activate", - "params": { - "temperature": { - "constraints": { - "max": 37, - "min": 3, - "stepping": 1 - }, - "required": false, - "type": "number" - } - }, - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.reducedHeating/commands/activate" - }, - "deactivate": { - "isExecutable": false, - "name": "deactivate", - "params": {}, - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.reducedHeating/commands/deactivate" - }, - "setTemperature": { - "isExecutable": true, - "name": "setTemperature", - "params": { - "targetTemperature": { - "constraints": { - "max": 37, - "min": 3, - "stepping": 1 - }, - "required": true, - "type": "number" - } - }, - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.reducedHeating/commands/setTemperature" - } - }, + "commands": {}, "deviceId": "0", - "feature": "heating.circuits.0.operating.programs.reducedHeating", + "feature": "heating.circuits.3.operating.programs.forcedLastFromSchedule", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.forcedLastFromSchedule" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.programs.frostprotection", "gatewayId": "################", "isEnabled": true, "isReady": true, @@ -2327,168 +2193,100 @@ "active": { "type": "boolean", "value": false - }, - "demand": { - "type": "string", - "value": "heating" - }, - "temperature": { - "type": "number", - "unit": "celsius", - "value": 16 } }, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.reducedHeating" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.frostprotection" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.2.operating.modes.heatingCooling", + "feature": "heating.circuits.1.operating.programs.frostprotection", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.modes.heatingCooling" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.frostprotection" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.3.operating.programs.summerEco", + "feature": "heating.circuits.2.operating.programs.frostprotection", "gatewayId": "################", - "isEnabled": true, + "isEnabled": false, "isReady": true, - "properties": { - "active": { - "type": "boolean", - "value": false - } - }, - "timestamp": "2023-01-09T13:42:26.788Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.summerEco" + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.frostprotection" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.1.operating.programs.reducedEnergySaving", + "feature": "heating.circuits.3.operating.programs.frostprotection", "gatewayId": "################", - "isEnabled": true, + "isEnabled": false, "isReady": true, - "properties": { - "active": { - "type": "boolean", - "value": false - }, - "demand": { - "type": "string", - "value": "heating" - }, - "reason": { - "type": "string", - "value": "unknown" - } - }, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.reducedEnergySaving" + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.frostprotection" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.3.operating.programs.active", + "feature": "heating.circuits.0.operating.programs.normalCooling", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:25.192Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.active" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.normalCooling" }, { "apiVersion": 1, - "commands": { - "setHysteresis": { - "isExecutable": true, - "name": "setHysteresis", - "params": { - "hysteresis": { - "constraints": { - "max": 10, - "min": 1, - "stepping": 0.5 - }, - "required": true, - "type": "number" - } - }, - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.dhw.temperature.hysteresis/commands/setHysteresis" - }, - "setHysteresisSwitchOffValue": { - "isExecutable": true, - "name": "setHysteresisSwitchOffValue", - "params": { - "hysteresis": { - "constraints": { - "max": 2.5, - "min": 0, - "stepping": 0.5 - }, - "required": true, - "type": "number" - } - }, - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.dhw.temperature.hysteresis/commands/setHysteresisSwitchOffValue" - }, - "setHysteresisSwitchOnValue": { - "isExecutable": true, - "name": "setHysteresisSwitchOnValue", - "params": { - "hysteresis": { - "constraints": { - "max": 10, - "min": 1, - "stepping": 0.5 - }, - "required": true, - "type": "number" - } - }, - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.dhw.temperature.hysteresis/commands/setHysteresisSwitchOnValue" - } - }, + "commands": {}, "deviceId": "0", - "feature": "heating.dhw.temperature.hysteresis", + "feature": "heating.circuits.1.operating.programs.normalCooling", "gatewayId": "################", - "isEnabled": true, + "isEnabled": false, "isReady": true, - "properties": { - "switchOffValue": { - "type": "number", - "unit": "kelvin", - "value": 0 - }, - "switchOnValue": { - "type": "number", - "unit": "kelvin", - "value": 5 - }, - "value": { - "type": "number", - "unit": "kelvin", - "value": 5 - } - }, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.dhw.temperature.hysteresis" + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.normalCooling" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.3.operating.programs.reducedEnergySaving", + "feature": "heating.circuits.2.operating.programs.normalCooling", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.normalCooling" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.3.operating.programs.normalCooling", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.normalCooling" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.programs.normalCoolingEnergySaving", "gatewayId": "################", "isEnabled": true, "isReady": true, @@ -2499,594 +2297,428 @@ }, "demand": { "type": "string", - "value": "heating" + "value": "cooling" }, "reason": { "type": "string", - "value": "unknown" + "value": "eco" } }, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.reducedEnergySaving" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.normalCoolingEnergySaving" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.3.operating.modes.active", + "feature": "heating.circuits.1.operating.programs.normalCoolingEnergySaving", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:26.530Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.modes.active" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.normalCoolingEnergySaving" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.1.operating.programs.comfortCooling", + "feature": "heating.circuits.2.operating.programs.normalCoolingEnergySaving", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.comfortCooling" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.normalCoolingEnergySaving" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.2", + "feature": "heating.circuits.3.operating.programs.normalCoolingEnergySaving", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.2" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.normalCoolingEnergySaving" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.dhw.temperature.levels", + "feature": "heating.circuits.0.operating.programs.normalEnergySaving", "gatewayId": "################", "isEnabled": true, "isReady": true, "properties": { - "default": { - "type": "number", - "unit": "celsius", - "value": 50 - }, - "max": { - "type": "number", - "unit": "celsius", - "value": 10 + "active": { + "type": "boolean", + "value": false }, - "min": { - "type": "number", - "unit": "celsius", - "value": 10 - } - }, - "timestamp": "2023-01-09T13:42:26.738Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.dhw.temperature.levels" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.primaryCircuit.sensors.temperature.supply", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "status": { + "demand": { "type": "string", - "value": "connected" + "value": "heating" }, - "value": { - "type": "number", - "unit": "celsius", - "value": 5.9 + "reason": { + "type": "string", + "value": "eco" } }, - "timestamp": "2023-01-09T18:02:21.344Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.primaryCircuit.sensors.temperature.supply" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.normalEnergySaving" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.2.operating.programs.comfortEnergySaving", + "feature": "heating.circuits.1.operating.programs.normalEnergySaving", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.comfortEnergySaving" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.normalEnergySaving" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.2.operating.modes.dhwAndHeating", + "feature": "heating.circuits.2.operating.programs.normalEnergySaving", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.modes.dhwAndHeating" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.normalEnergySaving" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.2.operating.modes.dhwAndHeatingCooling", + "feature": "heating.circuits.3.operating.programs.normalEnergySaving", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.modes.dhwAndHeatingCooling" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.normalEnergySaving" }, { "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.1.operating.programs.reducedCooling", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.reducedCooling" - }, - { - "apiVersion": 1, - "commands": {}, + "commands": { + "activate": { + "isExecutable": false, + "name": "activate", + "params": { + "temperature": { + "constraints": { + "max": 37, + "min": 3, + "stepping": 1 + }, + "required": false, + "type": "number" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.normalHeating/commands/activate" + }, + "deactivate": { + "isExecutable": false, + "name": "deactivate", + "params": {}, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.normalHeating/commands/deactivate" + }, + "setTemperature": { + "isExecutable": true, + "name": "setTemperature", + "params": { + "targetTemperature": { + "constraints": { + "max": 37, + "min": 3, + "stepping": 1 + }, + "required": true, + "type": "number" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.normalHeating/commands/setTemperature" + } + }, "deviceId": "0", - "feature": "heating.circuits.0.circulation.pump", + "feature": "heating.circuits.0.operating.programs.normalHeating", "gatewayId": "################", "isEnabled": true, "isReady": true, "properties": { - "status": { + "active": { + "type": "boolean", + "value": false + }, + "demand": { "type": "string", - "value": "on" + "value": "heating" + }, + "temperature": { + "type": "number", + "unit": "celsius", + "value": 20 } }, - "timestamp": "2023-01-09T17:34:06.726Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.circulation.pump" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.normalHeating" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.0.operating.modes.dhwAndHeatingCooling", + "feature": "heating.circuits.1.operating.programs.normalHeating", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.modes.dhwAndHeatingCooling" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.normalHeating" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits", + "feature": "heating.circuits.2.operating.programs.normalHeating", "gatewayId": "################", - "isEnabled": true, + "isEnabled": false, "isReady": true, - "properties": { - "enabled": { - "type": "array", - "value": ["0"] - } - }, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits" + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.normalHeating" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.1.operating.programs.standby", + "feature": "heating.circuits.3.operating.programs.normalHeating", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.standby" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.normalHeating" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.boiler.sensors.temperature.commonSupply", + "feature": "heating.circuits.0.operating.programs.reducedCooling", "gatewayId": "################", - "isEnabled": true, + "isEnabled": false, "isReady": true, - "properties": { - "status": { - "type": "string", - "value": "connected" - }, - "value": { - "type": "number", - "unit": "celsius", - "value": 33.2 - } - }, - "timestamp": "2023-01-09T17:41:04.405Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.boiler.sensors.temperature.commonSupply" + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.reducedCooling" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.1.sensors.temperature.supply", + "feature": "heating.circuits.1.operating.programs.reducedCooling", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:26.772Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.1.sensors.temperature.supply" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.reducedCooling" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.dhw.temperature.hygiene", + "feature": "heating.circuits.2.operating.programs.reducedCooling", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.dhw.temperature.hygiene" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.reducedCooling" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.2.operating.modes.cooling", + "feature": "heating.circuits.3.operating.programs.reducedCooling", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.modes.cooling" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.reducedCooling" }, { "apiVersion": 1, - "commands": { - "setSchedule": { - "isExecutable": true, - "name": "setSchedule", - "params": { - "newSchedule": { - "constraints": { - "defaultMode": "reduced", - "maxEntries": 4, - "modes": ["normal", "comfort"], - "overlapAllowed": false, - "resolution": 10 - }, - "required": true, - "type": "Schedule" - } - }, - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.heating.schedule/commands/setSchedule" - } - }, + "commands": {}, "deviceId": "0", - "feature": "heating.circuits.0.heating.schedule", + "feature": "heating.circuits.0.operating.programs.reducedCoolingEnergySaving", "gatewayId": "################", "isEnabled": true, "isReady": true, "properties": { "active": { "type": "boolean", - "value": true + "value": false }, - "entries": { - "type": "Schedule", - "value": { - "fri": [ - { - "end": "10:00", - "mode": "comfort", - "position": 0, - "start": "04:50" - }, - { - "end": "15:00", - "mode": "normal", - "position": 1, - "start": "10:00" - }, - { - "end": "22:00", - "mode": "comfort", - "position": 2, - "start": "15:00" - } - ], - "mon": [ - { - "end": "10:00", - "mode": "comfort", - "position": 0, - "start": "04:50" - }, - { - "end": "15:00", - "mode": "normal", - "position": 1, - "start": "10:00" - }, - { - "end": "22:00", - "mode": "comfort", - "position": 2, - "start": "15:00" - } - ], - "sat": [ - { - "end": "10:00", - "mode": "comfort", - "position": 0, - "start": "06:00" - }, - { - "end": "15:00", - "mode": "normal", - "position": 1, - "start": "10:00" - }, - { - "end": "22:00", - "mode": "comfort", - "position": 2, - "start": "15:00" - } - ], - "sun": [ - { - "end": "10:00", - "mode": "comfort", - "position": 0, - "start": "06:00" - }, - { - "end": "15:00", - "mode": "normal", - "position": 1, - "start": "10:00" - }, - { - "end": "22:00", - "mode": "comfort", - "position": 2, - "start": "15:00" - } - ], - "thu": [ - { - "end": "10:00", - "mode": "comfort", - "position": 0, - "start": "04:50" - }, - { - "end": "15:00", - "mode": "normal", - "position": 1, - "start": "10:00" - }, - { - "end": "22:00", - "mode": "comfort", - "position": 2, - "start": "15:00" - } - ], - "tue": [ - { - "end": "10:00", - "mode": "comfort", - "position": 0, - "start": "04:50" - }, - { - "end": "15:00", - "mode": "normal", - "position": 1, - "start": "10:00" - }, - { - "end": "22:00", - "mode": "comfort", - "position": 2, - "start": "15:00" - } - ], - "wed": [ - { - "end": "10:00", - "mode": "comfort", - "position": 0, - "start": "04:50" - }, - { - "end": "15:00", - "mode": "normal", - "position": 1, - "start": "10:00" - }, - { - "end": "22:00", - "mode": "comfort", - "position": 2, - "start": "15:00" - } - ] - } + "demand": { + "type": "string", + "value": "cooling" + }, + "reason": { + "type": "string", + "value": "eco" } }, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.heating.schedule" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.reducedCoolingEnergySaving" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.0.operating.modes.dhwAndHeating", + "feature": "heating.circuits.1.operating.programs.reducedCoolingEnergySaving", "gatewayId": "################", - "isEnabled": true, + "isEnabled": false, "isReady": true, - "properties": { - "active": { - "type": "boolean", - "value": true - } - }, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.modes.dhwAndHeating" + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.reducedCoolingEnergySaving" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.3.sensors.temperature.supply", + "feature": "heating.circuits.2.operating.programs.reducedCoolingEnergySaving", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:26.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.3.sensors.temperature.supply" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.reducedCoolingEnergySaving" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.1.operating.programs.normalEnergySaving", + "feature": "heating.circuits.3.operating.programs.reducedCoolingEnergySaving", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.normalEnergySaving" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.reducedCoolingEnergySaving" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.3.operating.programs.normalHeating", + "feature": "heating.circuits.0.operating.programs.reducedEnergySaving", "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.normalHeating" - }, - { - "apiVersion": 1, - "commands": { - "setName": { - "isExecutable": true, - "name": "setName", - "params": { - "name": { - "constraints": { - "maxLength": 20, - "minLength": 1 - }, - "required": true, - "type": "string" - } - }, - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0/commands/setName" - } - }, - "deviceId": "0", - "feature": "heating.circuits.0", - "gatewayId": "################", - "isEnabled": true, + "isEnabled": true, "isReady": true, "properties": { "active": { "type": "boolean", - "value": true + "value": false }, - "name": { + "demand": { "type": "string", - "value": "" + "value": "heating" }, - "type": { + "reason": { "type": "string", - "value": "heatingCircuit" + "value": "unknown" } }, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.1.operating.programs.comfortCoolingEnergySaving", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.comfortCoolingEnergySaving" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.reducedEnergySaving" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.2.operating.modes.standby", + "feature": "heating.circuits.1.operating.programs.reducedEnergySaving", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.modes.standby" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.reducedEnergySaving" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.2.operating.programs.reducedCooling", + "feature": "heating.circuits.2.operating.programs.reducedEnergySaving", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.reducedCooling" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.reducedEnergySaving" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.0.operating.modes.heatingCooling", + "feature": "heating.circuits.3.operating.programs.reducedEnergySaving", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.modes.heatingCooling" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.reducedEnergySaving" }, { "apiVersion": 1, - "commands": {}, + "commands": { + "activate": { + "isExecutable": false, + "name": "activate", + "params": { + "temperature": { + "constraints": { + "max": 37, + "min": 3, + "stepping": 1 + }, + "required": false, + "type": "number" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.reducedHeating/commands/activate" + }, + "deactivate": { + "isExecutable": false, + "name": "deactivate", + "params": {}, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.reducedHeating/commands/deactivate" + }, + "setTemperature": { + "isExecutable": true, + "name": "setTemperature", + "params": { + "targetTemperature": { + "constraints": { + "max": 37, + "min": 3, + "stepping": 1 + }, + "required": true, + "type": "number" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.reducedHeating/commands/setTemperature" + } + }, "deviceId": "0", - "feature": "heating.circuits.0.operating.programs.fixed", + "feature": "heating.circuits.0.operating.programs.reducedHeating", "gatewayId": "################", "isEnabled": true, "isReady": true, @@ -3094,417 +2726,1058 @@ "active": { "type": "boolean", "value": false + }, + "demand": { + "type": "string", + "value": "heating" + }, + "temperature": { + "type": "number", + "unit": "celsius", + "value": 18 } }, - "timestamp": "2023-01-09T13:42:23.168Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.fixed" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.reducedHeating" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.3.operating.programs.reducedHeating", + "feature": "heating.circuits.1.operating.programs.reducedHeating", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.reducedHeating" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.3.zone.mode", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "active": { - "type": "boolean", - "value": false - } - }, - "timestamp": "2023-01-09T13:42:26.755Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.3.zone.mode" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.reducedHeating" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.2.frostprotection", + "feature": "heating.circuits.2.operating.programs.reducedHeating", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:26.744Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.2.frostprotection" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.reducedHeating" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.1.heating.curve", + "feature": "heating.circuits.3.operating.programs.reducedHeating", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.1.heating.curve" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.reducedHeating" }, { "apiVersion": 1, - "commands": { - "activate": { - "isExecutable": true, - "name": "activate", - "params": {}, - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.dhw.oneTimeCharge/commands/activate" - }, - "deactivate": { - "isExecutable": false, - "name": "deactivate", - "params": {}, - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.dhw.oneTimeCharge/commands/deactivate" - } - }, + "commands": {}, "deviceId": "0", - "feature": "heating.dhw.oneTimeCharge", + "feature": "heating.circuits.0.operating.programs.standby", "gatewayId": "################", "isEnabled": true, "isReady": true, "properties": { "active": { "type": "boolean", - "value": false + "value": true } }, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.dhw.oneTimeCharge" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.standby" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.0.operating.programs.comfortCooling", + "feature": "heating.circuits.1.operating.programs.standby", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.comfortCooling" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.standby" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.3.operating.programs.forcedLastFromSchedule", + "feature": "heating.circuits.2.operating.programs.standby", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.forcedLastFromSchedule" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.standby" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.2.operating.programs.fixed", + "feature": "heating.circuits.3.operating.programs.standby", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:23.170Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.fixed" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.standby" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.3.operating.programs.comfortHeating", + "feature": "heating.compressors", "gatewayId": "################", - "isEnabled": false, + "isEnabled": true, "isReady": true, - "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.comfortHeating" + "properties": { + "enabled": { + "type": "array", + "value": [ + "0" + ] + } + }, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.compressors" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.1.operating.programs.comfortEnergySaving", + "feature": "heating.compressors.0", "gatewayId": "################", - "isEnabled": false, + "isEnabled": true, "isReady": true, - "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.comfortEnergySaving" + "properties": { + "active": { + "type": "boolean", + "value": false + }, + "phase": { + "type": "string", + "value": "ready" + } + }, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.compressors.0" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.buffer.sensors.temperature.main", + "feature": "heating.compressors.0.statistics", "gatewayId": "################", "isEnabled": true, "isReady": true, "properties": { - "status": { - "type": "string", - "value": "connected" + "hours": { + "type": "number", + "unit": "hour", + "value": 3869 }, - "value": { + "starts": { "type": "number", - "unit": "celsius", - "value": 31.9 + "unit": "", + "value": 668 } }, - "timestamp": "2023-01-09T18:01:50.356Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.buffer.sensors.temperature.main" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.compressors.0.statistics" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.sensors.temperature.hydraulicSeparator", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2023-01-09T18:01:50.312Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.sensors.temperature.hydraulicSeparator" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.0.operating.programs.active", + "feature": "heating.device.variant", "gatewayId": "################", "isEnabled": true, "isReady": true, "properties": { "value": { "type": "string", - "value": "comfortHeating" + "value": "Vitocal250A" } }, - "timestamp": "2023-01-09T13:59:20.405Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.active" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.device.variant" }, { "apiVersion": 1, - "commands": {}, + "commands": { + "setMode": { + "isExecutable": true, + "name": "setMode", + "params": { + "mode": { + "constraints": { + "enum": [ + "efficientWithMinComfort", + "efficient", + "off" + ] + }, + "required": true, + "type": "string" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.operating.modes.active/commands/setMode" + } + }, "deviceId": "0", - "feature": "heating.circuits.1", + "feature": "heating.dhw.operating.modes.active", "gatewayId": "################", - "isEnabled": false, + "isEnabled": true, "isReady": true, - "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.1" + "properties": { + "value": { + "type": "string", + "value": "efficient" + } + }, + "timestamp": "2024-08-10T22:10:13.281Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.operating.modes.active" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.2.operating.programs.reducedCoolingEnergySaving", + "feature": "heating.dhw.operating.modes.balanced", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.reducedCoolingEnergySaving" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.operating.modes.balanced" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.1.temperature", + "feature": "heating.dhw.operating.modes.comfort", "gatewayId": "################", - "isEnabled": false, + "isEnabled": true, "isReady": true, - "properties": {}, - "timestamp": "2023-01-09T13:42:26.730Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.1.temperature" + "properties": { + "active": { + "type": "boolean", + "value": false + } + }, + "timestamp": "2024-08-10T22:10:13.281Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.operating.modes.comfort" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.3.operating.programs.comfortCoolingEnergySaving", + "feature": "heating.dhw.operating.modes.eco", "gatewayId": "################", - "isEnabled": false, + "isEnabled": true, "isReady": true, - "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.comfortCoolingEnergySaving" + "properties": { + "active": { + "type": "boolean", + "value": false + } + }, + "timestamp": "2024-08-10T22:10:13.281Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.operating.modes.eco" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.3.operating.modes.dhw", + "feature": "heating.dhw.operating.modes.efficient", "gatewayId": "################", - "isEnabled": false, + "isEnabled": true, "isReady": true, - "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.modes.dhw" + "properties": { + "active": { + "type": "boolean", + "value": true + } + }, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.operating.modes.efficient" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.boiler.serial", + "feature": "heating.dhw.operating.modes.efficientWithMinComfort", "gatewayId": "################", "isEnabled": true, "isReady": true, "properties": { - "value": { - "type": "string", - "value": "################" + "active": { + "type": "boolean", + "value": false } }, - "timestamp": "2023-01-09T13:42:26.823Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.boiler.serial" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.operating.modes.efficientWithMinComfort" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "device.serial", + "feature": "heating.dhw.operating.modes.off", "gatewayId": "################", "isEnabled": true, "isReady": true, "properties": { - "value": { - "type": "string", - "value": "################" + "active": { + "type": "boolean", + "value": false } }, - "timestamp": "2023-01-09T13:42:25.810Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/device.serial" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.operating.modes.off" }, { "apiVersion": 1, - "commands": {}, + "commands": { + "resetSchedule": { + "isExecutable": true, + "name": "resetSchedule", + "params": {}, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.pumps.circulation.schedule/commands/resetSchedule" + }, + "setSchedule": { + "isExecutable": true, + "name": "setSchedule", + "params": { + "newSchedule": { + "constraints": { + "defaultMode": "off", + "maxEntries": 4, + "modes": [ + "on" + ], + "overlapAllowed": false, + "resolution": 10 + }, + "required": true, + "type": "Schedule" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.pumps.circulation.schedule/commands/setSchedule" + } + }, "deviceId": "0", - "feature": "heating.circuits.2.operating.programs.normalHeating", + "feature": "heating.dhw.pumps.circulation.schedule", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": true + }, + "entries": { + "type": "Schedule", + "value": { + "fri": [ + { + "end": "09:00", + "mode": "on", + "position": 0, + "start": "05:30" + }, + { + "end": "13:00", + "mode": "on", + "position": 1, + "start": "12:00" + }, + { + "end": "20:00", + "mode": "on", + "position": 2, + "start": "18:00" + } + ], + "mon": [ + { + "end": "09:00", + "mode": "on", + "position": 0, + "start": "05:30" + }, + { + "end": "13:00", + "mode": "on", + "position": 1, + "start": "12:00" + }, + { + "end": "20:00", + "mode": "on", + "position": 2, + "start": "18:00" + } + ], + "sat": [ + { + "end": "09:00", + "mode": "on", + "position": 0, + "start": "05:30" + }, + { + "end": "13:00", + "mode": "on", + "position": 1, + "start": "12:00" + }, + { + "end": "20:00", + "mode": "on", + "position": 2, + "start": "18:00" + } + ], + "sun": [ + { + "end": "09:00", + "mode": "on", + "position": 0, + "start": "05:30" + }, + { + "end": "13:00", + "mode": "on", + "position": 1, + "start": "12:00" + }, + { + "end": "20:00", + "mode": "on", + "position": 2, + "start": "18:00" + } + ], + "thu": [ + { + "end": "09:00", + "mode": "on", + "position": 0, + "start": "05:30" + }, + { + "end": "13:00", + "mode": "on", + "position": 1, + "start": "12:00" + }, + { + "end": "20:00", + "mode": "on", + "position": 2, + "start": "18:00" + } + ], + "tue": [ + { + "end": "09:00", + "mode": "on", + "position": 0, + "start": "05:30" + }, + { + "end": "13:00", + "mode": "on", + "position": 1, + "start": "12:00" + }, + { + "end": "20:00", + "mode": "on", + "position": 2, + "start": "18:00" + } + ], + "wed": [ + { + "end": "09:00", + "mode": "on", + "position": 0, + "start": "05:30" + }, + { + "end": "13:00", + "mode": "on", + "position": 1, + "start": "12:00" + }, + { + "end": "20:00", + "mode": "on", + "position": 2, + "start": "18:00" + } + ] + } + } + }, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.pumps.circulation.schedule" + }, + { + "apiVersion": 1, + "commands": { + "resetSchedule": { + "isExecutable": true, + "name": "resetSchedule", + "params": {}, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.schedule/commands/resetSchedule" + }, + "setSchedule": { + "isExecutable": true, + "name": "setSchedule", + "params": { + "newSchedule": { + "constraints": { + "defaultMode": "off", + "maxEntries": 4, + "modes": [ + "on" + ], + "overlapAllowed": false, + "resolution": 10 + }, + "required": true, + "type": "Schedule" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.schedule/commands/setSchedule" + } + }, + "deviceId": "0", + "feature": "heating.dhw.schedule", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": true + }, + "entries": { + "type": "Schedule", + "value": { + "fri": [ + { + "end": "03:00", + "mode": "on", + "position": 0, + "start": "01:00" + }, + { + "end": "15:00", + "mode": "on", + "position": 1, + "start": "13:00" + } + ], + "mon": [ + { + "end": "03:00", + "mode": "on", + "position": 0, + "start": "01:00" + }, + { + "end": "15:00", + "mode": "on", + "position": 1, + "start": "13:00" + } + ], + "sat": [ + { + "end": "03:00", + "mode": "on", + "position": 0, + "start": "01:00" + }, + { + "end": "15:00", + "mode": "on", + "position": 1, + "start": "13:00" + } + ], + "sun": [ + { + "end": "03:00", + "mode": "on", + "position": 0, + "start": "01:00" + }, + { + "end": "15:00", + "mode": "on", + "position": 1, + "start": "13:00" + } + ], + "thu": [ + { + "end": "03:00", + "mode": "on", + "position": 0, + "start": "01:00" + }, + { + "end": "15:00", + "mode": "on", + "position": 1, + "start": "13:00" + } + ], + "tue": [ + { + "end": "03:00", + "mode": "on", + "position": 0, + "start": "01:00" + }, + { + "end": "15:00", + "mode": "on", + "position": 1, + "start": "13:00" + } + ], + "wed": [ + { + "end": "03:00", + "mode": "on", + "position": 0, + "start": "01:00" + }, + { + "end": "15:00", + "mode": "on", + "position": 1, + "start": "13:00" + } + ] + } + } + }, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.schedule" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.dhw.sensors.temperature.dhwCylinder.middle", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.normalHeating" + "timestamp": "2024-08-10T22:10:13.129Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.sensors.temperature.dhwCylinder.middle" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.1.sensors.temperature.room", + "feature": "heating.dhw.sensors.temperature.dhwCylinder.top", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:26.758Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.1.sensors.temperature.room" + "timestamp": "2024-08-11T08:14:30.091Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.sensors.temperature.dhwCylinder.top" }, { "apiVersion": 1, "commands": {}, + "deprecated": { + "info": "replaced by heating.dhw.sensors.temperature.dhwCylinder.middle", + "removalDate": "2024-09-15" + }, "deviceId": "0", - "feature": "heating.circuits.1.operating.programs.summerEco", + "feature": "heating.dhw.sensors.temperature.hotWaterStorage.middle", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-10T22:10:13.129Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.sensors.temperature.hotWaterStorage.middle" + }, + { + "apiVersion": 1, + "commands": {}, + "deprecated": { + "info": "replaced by heating.dhw.sensors.temperature.dhwCylinder.top", + "removalDate": "2024-09-15" + }, + "deviceId": "0", + "feature": "heating.dhw.sensors.temperature.hotWaterStorage.top", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-11T08:14:30.091Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.sensors.temperature.hotWaterStorage.top" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.dhw.temperature.hygiene", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.temperature.hygiene" + }, + { + "apiVersion": 1, + "commands": { + "setHysteresis": { + "isExecutable": true, + "name": "setHysteresis", + "params": { + "hysteresis": { + "constraints": { + "max": 10, + "min": 1, + "stepping": 0.5 + }, + "required": true, + "type": "number" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.temperature.hysteresis/commands/setHysteresis" + }, + "setHysteresisSwitchOffValue": { + "isExecutable": true, + "name": "setHysteresisSwitchOffValue", + "params": { + "hysteresis": { + "constraints": { + "max": 2.5, + "min": 0, + "stepping": 0.5 + }, + "required": true, + "type": "number" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.temperature.hysteresis/commands/setHysteresisSwitchOffValue" + }, + "setHysteresisSwitchOnValue": { + "isExecutable": true, + "name": "setHysteresisSwitchOnValue", + "params": { + "hysteresis": { + "constraints": { + "max": 10, + "min": 1, + "stepping": 0.5 + }, + "required": true, + "type": "number" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.temperature.hysteresis/commands/setHysteresisSwitchOnValue" + } + }, + "deviceId": "0", + "feature": "heating.dhw.temperature.hysteresis", "gatewayId": "################", "isEnabled": true, "isReady": true, "properties": { - "active": { - "type": "boolean", - "value": false + "switchOffValue": { + "type": "number", + "unit": "kelvin", + "value": 0 + }, + "switchOnValue": { + "type": "number", + "unit": "kelvin", + "value": 5 + }, + "value": { + "type": "number", + "unit": "kelvin", + "value": 5 } }, - "timestamp": "2023-01-09T13:42:26.784Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.summerEco" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.temperature.hysteresis" }, { "apiVersion": 1, "commands": { - "activate": { + "setTargetTemperature": { "isExecutable": true, - "name": "activate", - "params": {}, - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.forcedLastFromSchedule/commands/activate" - }, - "deactivate": { - "isExecutable": false, - "name": "deactivate", - "params": {}, - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.forcedLastFromSchedule/commands/deactivate" + "name": "setTargetTemperature", + "params": { + "temperature": { + "constraints": { + "efficientLowerBorder": 0, + "efficientUpperBorder": 55, + "max": 60, + "min": 10, + "stepping": 1 + }, + "required": true, + "type": "number" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.temperature.main/commands/setTargetTemperature" } }, "deviceId": "0", - "feature": "heating.circuits.0.operating.programs.forcedLastFromSchedule", + "feature": "heating.dhw.temperature.main", "gatewayId": "################", "isEnabled": true, "isReady": true, "properties": { - "active": { - "type": "boolean", - "value": false + "value": { + "type": "number", + "unit": "celsius", + "value": 53 } }, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.forcedLastFromSchedule" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.temperature.main" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.3.operating.modes.dhwAndHeating", + "feature": "heating.power.consumption.cooling", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.modes.dhwAndHeating" + "timestamp": "2024-08-10T22:10:13.129Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.power.consumption.cooling" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.3.heating.schedule", + "feature": "heating.power.consumption.dhw", "gatewayId": "################", - "isEnabled": false, + "isEnabled": true, "isReady": true, - "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.3.heating.schedule" + "properties": { + "day": { + "type": "array", + "unit": "kilowattHour", + "value": [ + 0, + 0, + 2.3, + 0, + 1.8, + 0, + 1.6, + 1.9 + ] + }, + "dayValueReadAt": { + "type": "string", + "value": "2024-08-10T22:10:10.001Z" + }, + "month": { + "type": "array", + "unit": "kilowattHour", + "value": [ + 11.4, + 45.7, + 59.5, + 99.9, + 118.8, + 171, + 181.5, + 243.5, + 193.8, + 164.7, + 115.6, + 43, + 40.1 + ] + }, + "monthValueReadAt": { + "type": "string", + "value": "2024-08-10T22:10:10.001Z" + }, + "week": { + "type": "array", + "unit": "kilowattHour", + "value": [ + 5.699999999999999, + 5.700000000000001, + 12.700000000000001, + 5, + 8.6, + 19.400000000000002 + ] + }, + "weekValueReadAt": { + "type": "string", + "value": "2024-08-10T22:10:10.001Z" + }, + "year": { + "type": "array", + "unit": "kilowattHour", + "value": [ + 931.3, + 557.2 + ] + }, + "yearValueReadAt": { + "type": "string", + "value": "2024-08-10T22:10:10.001Z" + } + }, + "timestamp": "2024-08-10T22:10:13.129Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.power.consumption.dhw" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.0.operating.programs.normalCooling", + "feature": "heating.power.consumption.heating", "gatewayId": "################", - "isEnabled": false, + "isEnabled": true, "isReady": true, - "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.normalCooling" + "properties": { + "day": { + "type": "array", + "unit": "kilowattHour", + "value": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "dayValueReadAt": { + "type": "string", + "value": "2024-08-10T22:10:10.001Z" + }, + "month": { + "type": "array", + "unit": "kilowattHour", + "value": [ + 0, + 0, + 0, + 0, + 264, + 420.8, + 482.7, + 1024.3, + 755.3, + 553.2, + 146.5, + 0, + 5.6000000000000005 + ] + }, + "monthValueReadAt": { + "type": "string", + "value": "2024-08-10T22:10:10.001Z" + }, + "week": { + "type": "array", + "unit": "kilowattHour", + "value": [ + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "weekValueReadAt": { + "type": "string", + "value": "2024-08-10T22:10:10.001Z" + }, + "year": { + "type": "array", + "unit": "kilowattHour", + "value": [ + 2191.7999999999997, + 1460.6 + ] + }, + "yearValueReadAt": { + "type": "string", + "value": "2024-08-10T22:10:10.001Z" + } + }, + "timestamp": "2024-08-10T22:10:13.281Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.power.consumption.heating" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.2.operating.modes.heating", + "feature": "heating.power.consumption.summary.dhw", "gatewayId": "################", - "isEnabled": false, + "isEnabled": true, "isReady": true, - "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.modes.heating" + "properties": { + "currentDay": { + "type": "number", + "unit": "kilowattHour", + "value": 0 + }, + "currentMonth": { + "type": "number", + "unit": "kilowattHour", + "value": 11.4 + }, + "currentYear": { + "type": "number", + "unit": "kilowattHour", + "value": 931.3 + }, + "lastMonth": { + "type": "number", + "unit": "kilowattHour", + "value": 45.7 + }, + "lastSevenDays": { + "type": "number", + "unit": "kilowattHour", + "value": 5.7 + }, + "lastYear": { + "type": "number", + "unit": "kilowattHour", + "value": 557.2 + } + }, + "timestamp": "2024-08-10T22:10:13.129Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.power.consumption.summary.dhw" }, { "apiVersion": 1, @@ -3518,48 +3791,201 @@ "currentDay": { "type": "number", "unit": "kilowattHour", - "value": 5.9 + "value": 0 }, "currentMonth": { "type": "number", "unit": "kilowattHour", - "value": 48 + "value": 0 }, "currentYear": { "type": "number", "unit": "kilowattHour", - "value": 48 + "value": 2191.7999999999997 }, "lastMonth": { "type": "number", "unit": "kilowattHour", - "value": 463.9 + "value": 0 }, "lastSevenDays": { "type": "number", "unit": "kilowattHour", - "value": 41.4 + "value": 0 }, "lastYear": { "type": "number", "unit": "kilowattHour", - "value": 882.1 + "value": 1460.6 } }, - "timestamp": "2023-01-09T17:53:15.000Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.power.consumption.summary.heating" + "timestamp": "2024-08-10T22:10:13.281Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.power.consumption.summary.heating" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.1.operating.modes.active", + "feature": "heating.power.consumption.total", "gatewayId": "################", - "isEnabled": false, + "isEnabled": true, "isReady": true, - "properties": {}, - "timestamp": "2023-01-09T13:42:26.485Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.modes.active" + "properties": { + "day": { + "type": "array", + "unit": "kilowattHour", + "value": [ + 0, + 0, + 2.3, + 0, + 1.8, + 0, + 1.6, + 1.9 + ] + }, + "dayValueReadAt": { + "type": "string", + "value": "2024-08-10T22:10:10.001Z" + }, + "month": { + "type": "array", + "unit": "kilowattHour", + "value": [ + 11.4, + 45.7, + 59.5, + 99.9, + 382.79999999999995, + 591.8, + 664.2, + 1267.8, + 949.0999999999999, + 717.9000000000001, + 262.1, + 43, + 45.7 + ] + }, + "monthValueReadAt": { + "type": "string", + "value": "2024-08-10T22:10:10.001Z" + }, + "week": { + "type": "array", + "unit": "kilowattHour", + "value": [ + 5.699999999999999, + 5.700000000000001, + 12.700000000000001, + 5, + 8.6, + 19.400000000000002 + ] + }, + "weekValueReadAt": { + "type": "string", + "value": "2024-08-10T22:10:10.001Z" + }, + "year": { + "type": "array", + "unit": "kilowattHour", + "value": [ + 3123.1, + 2017.8 + ] + }, + "yearValueReadAt": { + "type": "string", + "value": "2024-08-10T22:10:10.001Z" + } + }, + "timestamp": "2024-08-10T22:10:13.281Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.power.consumption.total" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.primaryCircuit.sensors.temperature.supply", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "status": { + "type": "string", + "value": "connected" + }, + "value": { + "type": "number", + "unit": "celsius", + "value": 38.5 + } + }, + "timestamp": "2024-08-11T08:14:35.810Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.primaryCircuit.sensors.temperature.supply" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.secondaryCircuit.sensors.temperature.supply", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "status": { + "type": "string", + "value": "connected" + }, + "value": { + "type": "number", + "unit": "celsius", + "value": 23.3 + } + }, + "timestamp": "2024-08-11T08:14:35.810Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.secondaryCircuit.sensors.temperature.supply" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.sensors.temperature.return", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "status": { + "type": "string", + "value": "connected" + }, + "value": { + "type": "number", + "unit": "celsius", + "value": 25.4 + } + }, + "timestamp": "2024-08-11T07:51:03.712Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.sensors.temperature.return" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.boiler.serial", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "value": { + "type": "string", + "value": "################" + } + }, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.boiler.serial" }, { "apiVersion": 1, @@ -3577,7 +4003,7 @@ "type": "string" } }, - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.name/commands/setName" + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.name/commands/setName" } }, "components": [], @@ -3592,8 +4018,8 @@ "value": "" } }, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.name" + "timestamp": "2024-07-11T09:31:19.160Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.name" }, { "apiVersion": 1, @@ -3605,8 +4031,8 @@ "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2022-09-28T14:59:28.718Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.1.name" + "timestamp": "2024-01-21T22:19:20.140Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.name" }, { "apiVersion": 1, @@ -3618,8 +4044,8 @@ "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2022-09-28T14:59:28.722Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.2.name" + "timestamp": "2024-01-21T22:19:20.140Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.name" }, { "apiVersion": 1, @@ -3631,8 +4057,8 @@ "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2022-09-28T14:59:28.723Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.3.name" + "timestamp": "2024-01-21T22:19:20.140Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.3.name" } ] } diff --git a/tests/test_TestForMissingProperties.py b/tests/test_TestForMissingProperties.py index 6a4d1fb4..00498f08 100644 --- a/tests/test_TestForMissingProperties.py +++ b/tests/test_TestForMissingProperties.py @@ -18,6 +18,8 @@ def test_missingProperties(self): # are added to the response files ignore = [ + 'heating.device.variant', # not yet used + 'heating.operating.programs.holidayAtHome', 'heating.operating.programs.holiday', 'heating.device.time.offset', @@ -63,9 +65,10 @@ def test_missingProperties(self): 'heating.dhw.sensors.temperature.hotWaterStorage.top', # deprecated, removed 2024-09-15 FIXME: remove once data point is removed and test data is updated 'heating.dhw.sensors.temperature.hotWaterStorage.bottom', # deprecated, removed 2024-09-15 FIXME: remove once data point is removed and test data is updated - # Ignored for now as both are not documented in https://documentation.viessmann.com/static/iot/data-points + # Ignored for now as they are not documented in https://documentation.viessmann.com/static/iot/data-points 'device.messages.errors.raw', 'device.productIdentification', + 'device.productMatrix', # gateway 'gateway.devices', # not used @@ -89,10 +92,7 @@ def test_unverifiedProperties(self): # properties which are not in any test response data ignore = [ - 'heating.dhw.sensors.temperature.dhwCylinder', #FIXME: remove once test data is updated - 'heating.dhw.sensors.temperature.dhwCylinder.top', #FIXME: remove once test data is updated 'heating.dhw.sensors.temperature.dhwCylinder.bottom', #FIXME: remove once test data is updated - 'heating.bufferCylinder.sensors.temperature.main', #FIXME: remove once test data is updated 'heating.bufferCylinder.sensors.temperature.top', #FIXME: remove once test data is updated ] diff --git a/tests/test_Vitocal250A.py b/tests/test_Vitocal250A.py index 544f63bd..e42e716e 100644 --- a/tests/test_Vitocal250A.py +++ b/tests/test_Vitocal250A.py @@ -10,40 +10,44 @@ def setUp(self): self.device = HeatPump(self.service) def test_getCompressorActive(self): - self.assertEqual(self.device.compressors[0].getActive(), True) + self.assertEqual(self.device.compressors[0].getActive(), False) def test_getCompressorHours(self): self.assertAlmostEqual( - self.device.compressors[0].getHours(), 1223) + self.device.compressors[0].getHours(), 3869) def test_getCompressorStarts(self): self.assertAlmostEqual( - self.device.compressors[0].getStarts(), 354) + self.device.compressors[0].getStarts(), 668) + + def test_getCompressorPhase(self): + self.assertEqual( + self.device.getCompressor(0).getPhase(), "ready") def test_getHeatingCurveSlope(self): self.assertAlmostEqual( - self.device.circuits[0].getHeatingCurveSlope(), 0.8) + self.device.circuits[0].getHeatingCurveSlope(), 0.6) def test_getHeatingCurveShift(self): self.assertAlmostEqual( - self.device.circuits[0].getHeatingCurveShift(), 0) + self.device.circuits[0].getHeatingCurveShift(), 6) def test_getReturnTemperature(self): - self.assertAlmostEqual(self.device.getReturnTemperature(), 31.6) + self.assertAlmostEqual(self.device.getReturnTemperature(), 25.4) def test_getSupplyTemperaturePrimaryCircuit(self): self.assertAlmostEqual( - self.device.getSupplyTemperaturePrimaryCircuit(), 5.9) + self.device.getSupplyTemperaturePrimaryCircuit(), 38.5) def test_getPrograms(self): - expected_programs = ['comfortCooling', 'comfortCoolingEnergySaving', 'comfortEnergySaving', 'comfortHeating', 'fixed', 'forcedLastFromSchedule', 'frostprotection', 'normalCooling', 'normalCoolingEnergySaving', 'normalEnergySaving', 'normalHeating', 'reducedCooling', 'reducedCoolingEnergySaving', 'reducedEnergySaving', 'reducedHeating', 'standby'] + expected_programs = ['comfortCooling', 'comfortCoolingEnergySaving', 'comfortEnergySaving', 'comfortHeating', 'eco', 'fixed', 'forcedLastFromSchedule', 'frostprotection', 'normalCooling', 'normalCoolingEnergySaving', 'normalEnergySaving', 'normalHeating', 'reducedCooling', 'reducedCoolingEnergySaving', 'reducedEnergySaving', 'reducedHeating', 'standby'] self.assertListEqual( - self.device.circuits[0].getPrograms(), expected_programs) + expected_programs, self.device.circuits[0].getPrograms()) def test_getModes(self): - expected_modes = ['standby', 'heating', 'dhw', 'dhwAndHeating'] + expected_modes = ['heating', 'standby'] self.assertListEqual( - self.device.circuits[0].getModes(), expected_modes) + expected_modes, self.device.circuits[0].getModes()) def test_getPowerConsumptionUnit(self): self.assertEqual( @@ -51,52 +55,39 @@ def test_getPowerConsumptionUnit(self): def test_getPowerConsumptionToday(self): self.assertEqual( - self.device.getPowerConsumptionToday(), 6.9) + self.device.getPowerConsumptionToday(), 0) def test_getPowerConsumptionDomesticHotWaterToday(self): self.assertAlmostEqual( - self.device.getPowerConsumptionDomesticHotWaterToday(), 1.0) + self.device.getPowerConsumptionDomesticHotWaterToday(), 0) + + def test_getPowerSummaryConsumptionHeatingUnit(self): + self.assertEqual( + self.device.getPowerSummaryConsumptionHeatingUnit(), "kilowattHour") def test_getPowerSummaryConsumptionHeatingCurrentDay(self): self.assertAlmostEqual( - self.device.getPowerSummaryConsumptionHeatingCurrentDay(), 5.9) + self.device.getPowerSummaryConsumptionHeatingCurrentDay(), 0) def test_getPowerSummaryConsumptionHeatingCurrentMonth(self): self.assertAlmostEqual( - self.device.getPowerSummaryConsumptionHeatingCurrentMonth(), 48) + self.device.getPowerSummaryConsumptionHeatingCurrentMonth(), 0) def test_getPowerSummaryConsumptionHeatingCurrentYear(self): self.assertAlmostEqual( - self.device.getPowerSummaryConsumptionHeatingCurrentYear(), 48) + self.device.getPowerSummaryConsumptionHeatingCurrentYear(), 2191.7999999999997) def test_getPowerSummaryConsumptionHeatingLastMonth(self): self.assertAlmostEqual( - self.device.getPowerSummaryConsumptionHeatingLastMonth(), 463.9) + self.device.getPowerSummaryConsumptionHeatingLastMonth(), 0) def test_getPowerSummaryConsumptionHeatingLastSevenDays(self): self.assertAlmostEqual( - self.device.getPowerSummaryConsumptionHeatingLastSevenDays(), 41.4) + self.device.getPowerSummaryConsumptionHeatingLastSevenDays(), 0) def test_getPowerSummaryConsumptionHeatingLastYear(self): self.assertAlmostEqual( - self.device.getPowerSummaryConsumptionHeatingLastYear(), 882.1) - - def test_getPowerSummaryConsumptionHeatingUnit(self): - self.assertEqual( - self.device.getPowerSummaryConsumptionHeatingUnit(), "kilowattHour") - - @unittest.skip("dump is not up to date, underlying data point was rernamed") - def test_getBufferMainTemperature(self): - self.assertAlmostEqual( - self.device.getBufferMainTemperature(), 31.9) - - def test_getOutsideTemperature(self): - self.assertEqual( - self.device.getOutsideTemperature(), 6.1) - - def test_getFrostProtectionActive(self): - self.assertEqual( - self.device.circuits[0].getFrostProtectionActive(), False) + self.device.getPowerSummaryConsumptionHeatingLastYear(), 1460.6) def test_getPowerSummaryConsumptionDomesticHotWaterUnit(self): self.assertEqual( @@ -104,28 +95,36 @@ def test_getPowerSummaryConsumptionDomesticHotWaterUnit(self): def test_getPowerSummaryConsumptionDomesticHotWaterCurrentDay(self): self.assertEqual( - self.device.getPowerSummaryConsumptionDomesticHotWaterCurrentDay(), 1.0) + self.device.getPowerSummaryConsumptionDomesticHotWaterCurrentDay(), 0) def test_getPowerSummaryConsumptionDomesticHotWaterCurrentMonth(self): self.assertEqual( - self.device.getPowerSummaryConsumptionDomesticHotWaterCurrentMonth(), 18.0) + self.device.getPowerSummaryConsumptionDomesticHotWaterCurrentMonth(), 11.4) def test_getPowerSummaryConsumptionDomesticHotWaterCurrentYear(self): self.assertEqual( - self.device.getPowerSummaryConsumptionDomesticHotWaterCurrentYear(), 18.0) + self.device.getPowerSummaryConsumptionDomesticHotWaterCurrentYear(), 931.3) def test_getPowerSummaryConsumptionDomesticHotWaterLastMonth(self): self.assertEqual( - self.device.getPowerSummaryConsumptionDomesticHotWaterLastMonth(), 74.8) + self.device.getPowerSummaryConsumptionDomesticHotWaterLastMonth(), 45.7) def test_getPowerSummaryConsumptionDomesticHotWaterLastSevenDays(self): self.assertEqual( - self.device.getPowerSummaryConsumptionDomesticHotWaterLastSevenDays(), 14.0) + self.device.getPowerSummaryConsumptionDomesticHotWaterLastSevenDays(), 5.7) def test_getPowerSummaryConsumptionDomesticHotWaterLastYear(self): self.assertEqual( - self.device.getPowerSummaryConsumptionDomesticHotWaterLastYear(), 177.7) + self.device.getPowerSummaryConsumptionDomesticHotWaterLastYear(), 557.2) - def test_getCompressorPhase(self): + def test_getBufferMainTemperature(self): + self.assertAlmostEqual( + self.device.getBufferMainTemperature(), 23.4) + + def test_getOutsideTemperature(self): self.assertEqual( - self.device.getCompressor(0).getPhase(), "ready") + self.device.getOutsideTemperature(), 22.4) + + def test_getFrostProtectionActive(self): + self.assertEqual( + self.device.circuits[0].getFrostProtectionActive(), False) From c53548366d28dbb010498879687ca301f05161fe Mon Sep 17 00:00:00 2001 From: Christopher Fenner <9592452+CFenner@users.noreply.github.com> Date: Fri, 16 Aug 2024 22:44:00 +0200 Subject: [PATCH 13/31] chore(renovate): add default label (#21) Update and rename renovate.json to .github/renovate.json --- renovate.json => .github/renovate.json | 1 + 1 file changed, 1 insertion(+) rename renovate.json => .github/renovate.json (79%) diff --git a/renovate.json b/.github/renovate.json similarity index 79% rename from renovate.json rename to .github/renovate.json index 5db72dd6..eee44534 100644 --- a/renovate.json +++ b/.github/renovate.json @@ -1,5 +1,6 @@ { "$schema": "https://docs.renovatebot.com/renovate-schema.json", + "labels": ["dependencies"], "extends": [ "config:recommended" ] From 38faf2e56956fe1e4973e6337d5cac066189b9d9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 16 Aug 2024 22:48:38 +0200 Subject: [PATCH 14/31] chore(deps): update dependency ruff to ^0.6.0 (#20) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- poetry.lock | 73 +++++++++++++++----------------------------------- pyproject.toml | 2 +- 2 files changed, 23 insertions(+), 52 deletions(-) diff --git a/poetry.lock b/poetry.lock index b92a46ab..d3d2a74e 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,10 +1,9 @@ -# This file is automatically @generated by Poetry and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. [[package]] name = "astroid" version = "3.2.4" description = "An abstract syntax tree for Python with inference support." -category = "dev" optional = false python-versions = ">=3.8.0" files = [ @@ -16,7 +15,6 @@ files = [ name = "authlib" version = "1.3.1" description = "The ultimate Python library in building OAuth and OpenID Connect servers and clients." -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -31,7 +29,6 @@ cryptography = "*" name = "certifi" version = "2024.7.4" description = "Python package for providing Mozilla's CA Bundle." -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -43,7 +40,6 @@ files = [ name = "cffi" version = "1.17.0" description = "Foreign Function Interface for Python calling C code." -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -123,7 +119,6 @@ pycparser = "*" name = "charset-normalizer" version = "3.3.2" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -category = "main" optional = false python-versions = ">=3.7.0" files = [ @@ -223,7 +218,6 @@ files = [ name = "codespell" version = "2.3.0" description = "Codespell" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -241,7 +235,6 @@ types = ["chardet (>=5.1.0)", "mypy", "pytest", "pytest-cov", "pytest-dependency name = "colorama" version = "0.4.6" description = "Cross-platform colored terminal text." -category = "dev" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" files = [ @@ -253,7 +246,6 @@ files = [ name = "coverage" version = "7.6.1" description = "Code coverage measurement for Python" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -338,7 +330,6 @@ toml = ["tomli"] name = "cryptography" version = "43.0.0" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -388,7 +379,6 @@ test-randomorder = ["pytest-randomly"] name = "dill" version = "0.3.8" description = "serialize all of Python" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -404,7 +394,6 @@ profile = ["gprof2dot (>=2022.7.29)"] name = "idna" version = "3.7" description = "Internationalized Domain Names in Applications (IDNA)" -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -416,7 +405,6 @@ files = [ name = "iniconfig" version = "2.0.0" description = "brain-dead simple config-ini parsing" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -428,7 +416,6 @@ files = [ name = "isort" version = "5.13.2" description = "A Python utility / library to sort Python imports." -category = "dev" optional = false python-versions = ">=3.8.0" files = [ @@ -443,7 +430,6 @@ colors = ["colorama (>=0.4.6)"] name = "mccabe" version = "0.7.0" description = "McCabe checker, plugin for flake8" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -455,7 +441,6 @@ files = [ name = "mypy" version = "1.11.1" description = "Optional static typing for Python" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -502,7 +487,6 @@ reports = ["lxml"] name = "mypy-extensions" version = "1.0.0" description = "Type system extensions for programs checked with the mypy type checker." -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -514,7 +498,6 @@ files = [ name = "packaging" version = "24.1" description = "Core utilities for Python packages" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -526,7 +509,6 @@ files = [ name = "platformdirs" version = "4.2.2" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -543,7 +525,6 @@ type = ["mypy (>=1.8)"] name = "pluggy" version = "1.5.0" description = "plugin and hook calling mechanisms for python" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -559,7 +540,6 @@ testing = ["pytest", "pytest-benchmark"] name = "pycparser" version = "2.22" description = "C parser in Python" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -571,7 +551,6 @@ files = [ name = "pylint" version = "3.2.6" description = "python code static checker" -category = "dev" optional = false python-versions = ">=3.8.0" files = [ @@ -583,8 +562,8 @@ files = [ astroid = ">=3.2.4,<=3.3.0-dev0" colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} dill = [ - {version = ">=0.3.6", markers = "python_version >= \"3.11\""}, {version = ">=0.3.7", markers = "python_version >= \"3.12\""}, + {version = ">=0.3.6", markers = "python_version >= \"3.11\" and python_version < \"3.12\""}, ] isort = ">=4.2.5,<5.13.0 || >5.13.0,<6" mccabe = ">=0.6,<0.8" @@ -599,7 +578,6 @@ testutils = ["gitpython (>3)"] name = "pytest" version = "8.3.2" description = "pytest: simple powerful testing with Python" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -620,7 +598,6 @@ dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments name = "pytest-cov" version = "5.0.0" description = "Pytest plugin for measuring coverage." -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -639,7 +616,6 @@ testing = ["fields", "hunter", "process-tests", "pytest-xdist", "virtualenv"] name = "requests" version = "2.32.3" description = "Python HTTP for Humans." -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -659,37 +635,35 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "ruff" -version = "0.5.7" +version = "0.6.0" description = "An extremely fast Python linter and code formatter, written in Rust." -category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.5.7-py3-none-linux_armv6l.whl", hash = "sha256:548992d342fc404ee2e15a242cdbea4f8e39a52f2e7752d0e4cbe88d2d2f416a"}, - {file = "ruff-0.5.7-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:00cc8872331055ee017c4f1071a8a31ca0809ccc0657da1d154a1d2abac5c0be"}, - {file = "ruff-0.5.7-py3-none-macosx_11_0_arm64.whl", hash = "sha256:eaf3d86a1fdac1aec8a3417a63587d93f906c678bb9ed0b796da7b59c1114a1e"}, - {file = "ruff-0.5.7-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a01c34400097b06cf8a6e61b35d6d456d5bd1ae6961542de18ec81eaf33b4cb8"}, - {file = "ruff-0.5.7-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fcc8054f1a717e2213500edaddcf1dbb0abad40d98e1bd9d0ad364f75c763eea"}, - {file = "ruff-0.5.7-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7f70284e73f36558ef51602254451e50dd6cc479f8b6f8413a95fcb5db4a55fc"}, - {file = "ruff-0.5.7-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:a78ad870ae3c460394fc95437d43deb5c04b5c29297815a2a1de028903f19692"}, - {file = "ruff-0.5.7-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9ccd078c66a8e419475174bfe60a69adb36ce04f8d4e91b006f1329d5cd44bcf"}, - {file = "ruff-0.5.7-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7e31c9bad4ebf8fdb77b59cae75814440731060a09a0e0077d559a556453acbb"}, - {file = "ruff-0.5.7-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d796327eed8e168164346b769dd9a27a70e0298d667b4ecee6877ce8095ec8e"}, - {file = "ruff-0.5.7-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:4a09ea2c3f7778cc635e7f6edf57d566a8ee8f485f3c4454db7771efb692c499"}, - {file = "ruff-0.5.7-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:a36d8dcf55b3a3bc353270d544fb170d75d2dff41eba5df57b4e0b67a95bb64e"}, - {file = "ruff-0.5.7-py3-none-musllinux_1_2_i686.whl", hash = "sha256:9369c218f789eefbd1b8d82a8cf25017b523ac47d96b2f531eba73770971c9e5"}, - {file = "ruff-0.5.7-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:b88ca3db7eb377eb24fb7c82840546fb7acef75af4a74bd36e9ceb37a890257e"}, - {file = "ruff-0.5.7-py3-none-win32.whl", hash = "sha256:33d61fc0e902198a3e55719f4be6b375b28f860b09c281e4bdbf783c0566576a"}, - {file = "ruff-0.5.7-py3-none-win_amd64.whl", hash = "sha256:083bbcbe6fadb93cd86709037acc510f86eed5a314203079df174c40bbbca6b3"}, - {file = "ruff-0.5.7-py3-none-win_arm64.whl", hash = "sha256:2dca26154ff9571995107221d0aeaad0e75a77b5a682d6236cf89a58c70b76f4"}, - {file = "ruff-0.5.7.tar.gz", hash = "sha256:8dfc0a458797f5d9fb622dd0efc52d796f23f0a1493a9527f4e49a550ae9a7e5"}, + {file = "ruff-0.6.0-py3-none-linux_armv6l.whl", hash = "sha256:92dcce923e5df265781e5fc76f9a1edad52201a7aafe56e586b90988d5239013"}, + {file = "ruff-0.6.0-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:31b90ff9dc79ed476c04e957ba7e2b95c3fceb76148f2079d0d68a908d2cfae7"}, + {file = "ruff-0.6.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:6d834a9ec9f8287dd6c3297058b3a265ed6b59233db22593379ee38ebc4b9768"}, + {file = "ruff-0.6.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2089267692696aba342179471831a085043f218706e642564812145df8b8d0d"}, + {file = "ruff-0.6.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:aa62b423ee4bbd8765f2c1dbe8f6aac203e0583993a91453dc0a449d465c84da"}, + {file = "ruff-0.6.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7344e1a964b16b1137ea361d6516ce4ee61a0403fa94252a1913ecc1311adcae"}, + {file = "ruff-0.6.0-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:487f3a35c3f33bf82be212ce15dc6278ea854e35573a3f809442f73bec8b2760"}, + {file = "ruff-0.6.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:75db409984077a793cf344d499165298a6f65449e905747ac65983b12e3e64b1"}, + {file = "ruff-0.6.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:84908bd603533ecf1db456d8fc2665d1f4335d722e84bc871d3bbd2d1116c272"}, + {file = "ruff-0.6.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f1749a0aef3ec41ed91a0e2127a6ae97d2e2853af16dbd4f3c00d7a3af726c5"}, + {file = "ruff-0.6.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:016fea751e2bcfbbd2f8cb19b97b37b3fd33148e4df45b526e87096f4e17354f"}, + {file = "ruff-0.6.0-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:6ae80f141b53b2e36e230017e64f5ea2def18fac14334ffceaae1b780d70c4f7"}, + {file = "ruff-0.6.0-py3-none-musllinux_1_2_i686.whl", hash = "sha256:eaaaf33ea4b3f63fd264d6a6f4a73fa224bbfda4b438ffea59a5340f4afa2bb5"}, + {file = "ruff-0.6.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:7667ddd1fc688150a7ca4137140867584c63309695a30016880caf20831503a0"}, + {file = "ruff-0.6.0-py3-none-win32.whl", hash = "sha256:ae48365aae60d40865a412356f8c6f2c0be1c928591168111eaf07eaefa6bea3"}, + {file = "ruff-0.6.0-py3-none-win_amd64.whl", hash = "sha256:774032b507c96f0c803c8237ce7d2ef3934df208a09c40fa809c2931f957fe5e"}, + {file = "ruff-0.6.0-py3-none-win_arm64.whl", hash = "sha256:a5366e8c3ae6b2dc32821749b532606c42e609a99b0ae1472cf601da931a048c"}, + {file = "ruff-0.6.0.tar.gz", hash = "sha256:272a81830f68f9bd19d49eaf7fa01a5545c5a2e86f32a9935bb0e4bb9a1db5b8"}, ] [[package]] name = "tomlkit" version = "0.13.2" description = "Style preserving TOML library" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -701,7 +675,6 @@ files = [ name = "types-requests" version = "2.32.0.20240712" description = "Typing stubs for requests" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -716,7 +689,6 @@ urllib3 = ">=2" name = "typing-extensions" version = "4.12.2" description = "Backported and Experimental Type Hints for Python 3.8+" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -728,7 +700,6 @@ files = [ name = "urllib3" version = "2.2.2" description = "HTTP library with thread-safe connection pooling, file post, and more." -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -745,4 +716,4 @@ zstd = ["zstandard (>=0.18.0)"] [metadata] lock-version = "2.0" python-versions = "^3.11" -content-hash = "72ec6614ba6dda4be1eb4f7b9446b47b702a1dd5626175cd2aefc858d8f7186d" +content-hash = "08e5fde481073a2081093dc38909ad5b2ec297030fa89d488383fe916ff2b1c4" diff --git a/pyproject.toml b/pyproject.toml index 7e0691a8..336181cd 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -46,7 +46,7 @@ mypy = "^1.11.1" pylint = "^3.2.6" pytest = "^8.3.2" pytest-cov = "^5.0.0" -ruff = "^0.5.7" +ruff = "^0.6.0" [tool.mypy] platform = "linux" From 08fa6cd01a014920241f008991f7bdb9f5618341 Mon Sep 17 00:00:00 2001 From: Christopher Fenner <9592452+CFenner@users.noreply.github.com> Date: Fri, 16 Aug 2024 22:49:11 +0200 Subject: [PATCH 15/31] feat: expose hysteresis value data points (#19) * update test data * add hysteresis getter * add setDomesticHotWaterHysteresis * move to heat pump * add test case * update --- PyViCare/PyViCareHeatPump.py | 46 +++++++++++++++++++++++++- tests/test_TestForMissingProperties.py | 1 - tests/test_Vitocal250A.py | 12 +++++++ 3 files changed, 57 insertions(+), 2 deletions(-) diff --git a/PyViCare/PyViCareHeatPump.py b/PyViCare/PyViCareHeatPump.py index 6f0cf3e4..c5776a81 100644 --- a/PyViCare/PyViCareHeatPump.py +++ b/PyViCare/PyViCareHeatPump.py @@ -3,7 +3,7 @@ from PyViCare.PyViCareHeatingDevice import (HeatingDevice, HeatingDeviceWithComponent) -from PyViCare.PyViCareUtils import PyViCareNotSupportedFeatureError, handleNotSupported +from PyViCare.PyViCareUtils import PyViCareNotSupportedFeatureError, handleAPICommandErrors, handleNotSupported class HeatPump(HeatingDevice): @@ -152,6 +152,50 @@ def activateVentilationProgram(self, program): """ return self.service.setProperty(f"ventilation.operating.programs.{program}", "activate", {}) + + @handleNotSupported + def getDomesticHotWaterHysteresis(self): + return self.service.getProperty("heating.dhw.temperature.hysteresis")["properties"]["value"]["value"] + + @handleNotSupported + def getDomesticHotWaterHysteresisMin(self): + return self.service.getProperty("heating.dhw.temperature.hysteresis")["commands"]["setHysteresis"]["params"]["hysteresis"]["constraints"]["min"] + + @handleNotSupported + def getDomesticHotWaterHysteresisMax(self): + return self.service.getProperty("heating.dhw.temperature.hysteresis")["commands"]["setHysteresis"]["params"]["hysteresis"]["constraints"]["max"] + + @handleNotSupported + def getDomesticHotWaterHysteresisStepping(self): + return self.service.getProperty("heating.dhw.temperature.hysteresis")["commands"]["setHysteresis"]["params"]["hysteresis"]["constraints"]["stepping"] + + @handleNotSupported + def getDomesticHotWaterHysteresisUnit(self): + return self.service.getProperty("heating.dhw.temperature.hysteresis")["properties"]["value"]["unit"] + + @handleAPICommandErrors + def setDomesticHotWaterHysteresis(self, temperature): + """ Set the hysteresis temperature for domestic host water + Parameters + ---------- + temperature : float + hysteresis temperature + + Returns + ------- + result: json + json representation of the answer + """ + return self.service.setProperty("heating.dhw.temperature.hysteresis", "setHysteresis", {'hysteresis': int(temperature)}) + + @handleNotSupported + def getDomesticHotWaterHysteresisSwitchOn(self): + return self.service.getProperty("heating.dhw.temperature.hysteresis")["properties"]["switchOnValue"]["value"] + + @handleNotSupported + def getDomesticHotWaterHysteresisSwitchOff(self): + return self.service.getProperty("heating.dhw.temperature.hysteresis")["properties"]["switchOffValue"]["value"] + class Compressor(HeatingDeviceWithComponent): @property diff --git a/tests/test_TestForMissingProperties.py b/tests/test_TestForMissingProperties.py index 00498f08..8e97edc1 100644 --- a/tests/test_TestForMissingProperties.py +++ b/tests/test_TestForMissingProperties.py @@ -32,7 +32,6 @@ def test_missingProperties(self): 'heating.power.consumption', 'heating.circuits.0.temperature.levels', # hint: command - 'heating.dhw.temperature.hysteresis', # hint: command 'heating.dhw.hygiene', 'heating.dhw.temperature', 'heating.burners', diff --git a/tests/test_Vitocal250A.py b/tests/test_Vitocal250A.py index e42e716e..9c46ebb0 100644 --- a/tests/test_Vitocal250A.py +++ b/tests/test_Vitocal250A.py @@ -128,3 +128,15 @@ def test_getOutsideTemperature(self): def test_getFrostProtectionActive(self): self.assertEqual( self.device.circuits[0].getFrostProtectionActive(), False) + + def test_getDomesticHotWaterHysteresis(self): + self.assertEqual( + self.device.getDomesticHotWaterHysteresis(), 5) + self.assertEqual( + self.device.getDomesticHotWaterHysteresisUnit(), 'kelvin') + self.assertEqual( + self.device.getDomesticHotWaterHysteresisMin(), 1) + self.assertEqual( + self.device.getDomesticHotWaterHysteresisMax(), 10) + self.assertEqual( + self.device.getDomesticHotWaterHysteresisStepping(), 0.5) From e2cbe19af5fb9b0df68e8b9c1f0940536efc7820 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 17 Aug 2024 14:19:28 +0200 Subject: [PATCH 16/31] chore(deps): update dependency ruff to v0.6.1 (#22) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- poetry.lock | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/poetry.lock b/poetry.lock index d3d2a74e..c139686f 100644 --- a/poetry.lock +++ b/poetry.lock @@ -635,29 +635,29 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "ruff" -version = "0.6.0" +version = "0.6.1" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.6.0-py3-none-linux_armv6l.whl", hash = "sha256:92dcce923e5df265781e5fc76f9a1edad52201a7aafe56e586b90988d5239013"}, - {file = "ruff-0.6.0-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:31b90ff9dc79ed476c04e957ba7e2b95c3fceb76148f2079d0d68a908d2cfae7"}, - {file = "ruff-0.6.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:6d834a9ec9f8287dd6c3297058b3a265ed6b59233db22593379ee38ebc4b9768"}, - {file = "ruff-0.6.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2089267692696aba342179471831a085043f218706e642564812145df8b8d0d"}, - {file = "ruff-0.6.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:aa62b423ee4bbd8765f2c1dbe8f6aac203e0583993a91453dc0a449d465c84da"}, - {file = "ruff-0.6.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7344e1a964b16b1137ea361d6516ce4ee61a0403fa94252a1913ecc1311adcae"}, - {file = "ruff-0.6.0-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:487f3a35c3f33bf82be212ce15dc6278ea854e35573a3f809442f73bec8b2760"}, - {file = "ruff-0.6.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:75db409984077a793cf344d499165298a6f65449e905747ac65983b12e3e64b1"}, - {file = "ruff-0.6.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:84908bd603533ecf1db456d8fc2665d1f4335d722e84bc871d3bbd2d1116c272"}, - {file = "ruff-0.6.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f1749a0aef3ec41ed91a0e2127a6ae97d2e2853af16dbd4f3c00d7a3af726c5"}, - {file = "ruff-0.6.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:016fea751e2bcfbbd2f8cb19b97b37b3fd33148e4df45b526e87096f4e17354f"}, - {file = "ruff-0.6.0-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:6ae80f141b53b2e36e230017e64f5ea2def18fac14334ffceaae1b780d70c4f7"}, - {file = "ruff-0.6.0-py3-none-musllinux_1_2_i686.whl", hash = "sha256:eaaaf33ea4b3f63fd264d6a6f4a73fa224bbfda4b438ffea59a5340f4afa2bb5"}, - {file = "ruff-0.6.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:7667ddd1fc688150a7ca4137140867584c63309695a30016880caf20831503a0"}, - {file = "ruff-0.6.0-py3-none-win32.whl", hash = "sha256:ae48365aae60d40865a412356f8c6f2c0be1c928591168111eaf07eaefa6bea3"}, - {file = "ruff-0.6.0-py3-none-win_amd64.whl", hash = "sha256:774032b507c96f0c803c8237ce7d2ef3934df208a09c40fa809c2931f957fe5e"}, - {file = "ruff-0.6.0-py3-none-win_arm64.whl", hash = "sha256:a5366e8c3ae6b2dc32821749b532606c42e609a99b0ae1472cf601da931a048c"}, - {file = "ruff-0.6.0.tar.gz", hash = "sha256:272a81830f68f9bd19d49eaf7fa01a5545c5a2e86f32a9935bb0e4bb9a1db5b8"}, + {file = "ruff-0.6.1-py3-none-linux_armv6l.whl", hash = "sha256:b4bb7de6a24169dc023f992718a9417380301b0c2da0fe85919f47264fb8add9"}, + {file = "ruff-0.6.1-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:45efaae53b360c81043e311cdec8a7696420b3d3e8935202c2846e7a97d4edae"}, + {file = "ruff-0.6.1-py3-none-macosx_11_0_arm64.whl", hash = "sha256:bc60c7d71b732c8fa73cf995efc0c836a2fd8b9810e115be8babb24ae87e0850"}, + {file = "ruff-0.6.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c7477c3b9da822e2db0b4e0b59e61b8a23e87886e727b327e7dcaf06213c5cf"}, + {file = "ruff-0.6.1-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3a0af7ab3f86e3dc9f157a928e08e26c4b40707d0612b01cd577cc84b8905cc9"}, + {file = "ruff-0.6.1-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:392688dbb50fecf1bf7126731c90c11a9df1c3a4cdc3f481b53e851da5634fa5"}, + {file = "ruff-0.6.1-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:5278d3e095ccc8c30430bcc9bc550f778790acc211865520f3041910a28d0024"}, + {file = "ruff-0.6.1-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fe6d5f65d6f276ee7a0fc50a0cecaccb362d30ef98a110f99cac1c7872df2f18"}, + {file = "ruff-0.6.1-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2e0dd11e2ae553ee5c92a81731d88a9883af8db7408db47fc81887c1f8b672e"}, + {file = "ruff-0.6.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d812615525a34ecfc07fd93f906ef5b93656be01dfae9a819e31caa6cfe758a1"}, + {file = "ruff-0.6.1-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:faaa4060f4064c3b7aaaa27328080c932fa142786f8142aff095b42b6a2eb631"}, + {file = "ruff-0.6.1-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:99d7ae0df47c62729d58765c593ea54c2546d5de213f2af2a19442d50a10cec9"}, + {file = "ruff-0.6.1-py3-none-musllinux_1_2_i686.whl", hash = "sha256:9eb18dfd7b613eec000e3738b3f0e4398bf0153cb80bfa3e351b3c1c2f6d7b15"}, + {file = "ruff-0.6.1-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:c62bc04c6723a81e25e71715aa59489f15034d69bf641df88cb38bdc32fd1dbb"}, + {file = "ruff-0.6.1-py3-none-win32.whl", hash = "sha256:9fb4c4e8b83f19c9477a8745e56d2eeef07a7ff50b68a6998f7d9e2e3887bdc4"}, + {file = "ruff-0.6.1-py3-none-win_amd64.whl", hash = "sha256:c2ebfc8f51ef4aca05dad4552bbcf6fe8d1f75b2f6af546cc47cc1c1ca916b5b"}, + {file = "ruff-0.6.1-py3-none-win_arm64.whl", hash = "sha256:3bc81074971b0ffad1bd0c52284b22411f02a11a012082a76ac6da153536e014"}, + {file = "ruff-0.6.1.tar.gz", hash = "sha256:af3ffd8c6563acb8848d33cd19a69b9bfe943667f0419ca083f8ebe4224a3436"}, ] [[package]] From b96243636cd3f6303d725952ba9df34477485513 Mon Sep 17 00:00:00 2001 From: Christopher Fenner <9592452+CFenner@users.noreply.github.com> Date: Sat, 17 Aug 2024 14:23:21 +0200 Subject: [PATCH 17/31] fix: downgrade dependency to be in line with HA (#23) * update test data * fix dependencies * update lock file --- poetry.lock | 35 ++++++++++++++++++++++++++++++++--- pyproject.toml | 6 +++--- 2 files changed, 35 insertions(+), 6 deletions(-) diff --git a/poetry.lock b/poetry.lock index c139686f..cbdefed9 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,9 +1,10 @@ -# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. +# This file is automatically @generated by Poetry and should not be changed by hand. [[package]] name = "astroid" version = "3.2.4" description = "An abstract syntax tree for Python with inference support." +category = "dev" optional = false python-versions = ">=3.8.0" files = [ @@ -15,6 +16,7 @@ files = [ name = "authlib" version = "1.3.1" description = "The ultimate Python library in building OAuth and OpenID Connect servers and clients." +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -29,6 +31,7 @@ cryptography = "*" name = "certifi" version = "2024.7.4" description = "Python package for providing Mozilla's CA Bundle." +category = "main" optional = false python-versions = ">=3.6" files = [ @@ -40,6 +43,7 @@ files = [ name = "cffi" version = "1.17.0" description = "Foreign Function Interface for Python calling C code." +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -119,6 +123,7 @@ pycparser = "*" name = "charset-normalizer" version = "3.3.2" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +category = "main" optional = false python-versions = ">=3.7.0" files = [ @@ -218,6 +223,7 @@ files = [ name = "codespell" version = "2.3.0" description = "Codespell" +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -235,6 +241,7 @@ types = ["chardet (>=5.1.0)", "mypy", "pytest", "pytest-cov", "pytest-dependency name = "colorama" version = "0.4.6" description = "Cross-platform colored terminal text." +category = "dev" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" files = [ @@ -246,6 +253,7 @@ files = [ name = "coverage" version = "7.6.1" description = "Code coverage measurement for Python" +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -330,6 +338,7 @@ toml = ["tomli"] name = "cryptography" version = "43.0.0" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -379,6 +388,7 @@ test-randomorder = ["pytest-randomly"] name = "dill" version = "0.3.8" description = "serialize all of Python" +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -394,6 +404,7 @@ profile = ["gprof2dot (>=2022.7.29)"] name = "idna" version = "3.7" description = "Internationalized Domain Names in Applications (IDNA)" +category = "main" optional = false python-versions = ">=3.5" files = [ @@ -405,6 +416,7 @@ files = [ name = "iniconfig" version = "2.0.0" description = "brain-dead simple config-ini parsing" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -416,6 +428,7 @@ files = [ name = "isort" version = "5.13.2" description = "A Python utility / library to sort Python imports." +category = "dev" optional = false python-versions = ">=3.8.0" files = [ @@ -430,6 +443,7 @@ colors = ["colorama (>=0.4.6)"] name = "mccabe" version = "0.7.0" description = "McCabe checker, plugin for flake8" +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -441,6 +455,7 @@ files = [ name = "mypy" version = "1.11.1" description = "Optional static typing for Python" +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -487,6 +502,7 @@ reports = ["lxml"] name = "mypy-extensions" version = "1.0.0" description = "Type system extensions for programs checked with the mypy type checker." +category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -498,6 +514,7 @@ files = [ name = "packaging" version = "24.1" description = "Core utilities for Python packages" +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -509,6 +526,7 @@ files = [ name = "platformdirs" version = "4.2.2" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -525,6 +543,7 @@ type = ["mypy (>=1.8)"] name = "pluggy" version = "1.5.0" description = "plugin and hook calling mechanisms for python" +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -540,6 +559,7 @@ testing = ["pytest", "pytest-benchmark"] name = "pycparser" version = "2.22" description = "C parser in Python" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -551,6 +571,7 @@ files = [ name = "pylint" version = "3.2.6" description = "python code static checker" +category = "dev" optional = false python-versions = ">=3.8.0" files = [ @@ -562,8 +583,8 @@ files = [ astroid = ">=3.2.4,<=3.3.0-dev0" colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} dill = [ + {version = ">=0.3.6", markers = "python_version >= \"3.11\""}, {version = ">=0.3.7", markers = "python_version >= \"3.12\""}, - {version = ">=0.3.6", markers = "python_version >= \"3.11\" and python_version < \"3.12\""}, ] isort = ">=4.2.5,<5.13.0 || >5.13.0,<6" mccabe = ">=0.6,<0.8" @@ -578,6 +599,7 @@ testutils = ["gitpython (>3)"] name = "pytest" version = "8.3.2" description = "pytest: simple powerful testing with Python" +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -598,6 +620,7 @@ dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments name = "pytest-cov" version = "5.0.0" description = "Pytest plugin for measuring coverage." +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -616,6 +639,7 @@ testing = ["fields", "hunter", "process-tests", "pytest-xdist", "virtualenv"] name = "requests" version = "2.32.3" description = "Python HTTP for Humans." +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -637,6 +661,7 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] name = "ruff" version = "0.6.1" description = "An extremely fast Python linter and code formatter, written in Rust." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -664,6 +689,7 @@ files = [ name = "tomlkit" version = "0.13.2" description = "Style preserving TOML library" +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -675,6 +701,7 @@ files = [ name = "types-requests" version = "2.32.0.20240712" description = "Typing stubs for requests" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -689,6 +716,7 @@ urllib3 = ">=2" name = "typing-extensions" version = "4.12.2" description = "Backported and Experimental Type Hints for Python 3.8+" +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -700,6 +728,7 @@ files = [ name = "urllib3" version = "2.2.2" description = "HTTP library with thread-safe connection pooling, file post, and more." +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -716,4 +745,4 @@ zstd = ["zstandard (>=0.18.0)"] [metadata] lock-version = "2.0" python-versions = "^3.11" -content-hash = "08e5fde481073a2081093dc38909ad5b2ec297030fa89d488383fe916ff2b1c4" +content-hash = "91b6c98c9f3239fd33805d31bb3575ba36f05442379301cb431673f0c33424a0" diff --git a/pyproject.toml b/pyproject.toml index 336181cd..48c1dcea 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -35,10 +35,10 @@ packages = [ Changelog = "https://github.com/CFenner/PyViCare/releases" [tool.poetry.dependencies] -authlib = "^1.2.0" python = "^3.11" -types-requests = "^2.32.0.20240712" -requests = "^2.32.3" +authlib = ">1.2.0" +types-requests = ">=2.31" +requests = ">=2.31.0" [tool.poetry.group.dev.dependencies] codespell = "^2.3.0" From 41db94145d4365fdcab9e117a3c885c3668c37fc Mon Sep 17 00:00:00 2001 From: Tobin Rosenau Date: Sat, 17 Aug 2024 18:00:59 +0200 Subject: [PATCH 18/31] feat: add Vitoconnect Opto 2 / Heatbox2 as gateway (#24) * add Vitoconnect Opto 2 / Heatbox2 as gateway * add AutoDetect test * update tests * Update PyViCareService.py remove empty lines * Fix Pylint issue with docstring * remove .pylintrc file --- PyViCare/PyViCareDeviceConfig.py | 3 +- PyViCare/PyViCareService.py | 8 +-- tests/response/VitoconnectOpto2.json | 97 ++++++++++++++++++++++++++++ tests/test_PyViCareDeviceConfig.py | 11 ++++ tests/test_VitoconnectOpto2.py | 18 ++++++ 5 files changed, 129 insertions(+), 8 deletions(-) create mode 100644 tests/response/VitoconnectOpto2.json create mode 100644 tests/test_VitoconnectOpto2.py diff --git a/PyViCare/PyViCareDeviceConfig.py b/PyViCare/PyViCareDeviceConfig.py index 8039d783..b0814a62 100644 --- a/PyViCare/PyViCareDeviceConfig.py +++ b/PyViCare/PyViCareDeviceConfig.py @@ -87,7 +87,8 @@ def asAutoDetectDevice(self): (self.asGateway, r"E3_TCU10_x07", ["type:gateway;TCU300"]), (self.asElectricalEnergySystem, r"E3_VitoCharge_03", ["type:ees"]), (self.asVentilation, r"E3_ViAir", ["type:ventilation"]), - (self.asGateway, r"Heatbox1", ["type:gateway;VitoconnectOpto1"]) + (self.asGateway, r"Heatbox1", ["type:gateway;VitoconnectOpto1"]), + (self.asGateway, r"Heatbox2", ["type:gateway;VitoconnectOpto2/OT2"]) ] for (creator_method, type_name, roles) in device_types: diff --git a/PyViCare/PyViCareService.py b/PyViCare/PyViCareService.py index 78a2348b..c311f1f0 100644 --- a/PyViCare/PyViCareService.py +++ b/PyViCare/PyViCareService.py @@ -8,7 +8,6 @@ logger = logging.getLogger('ViCare') logger.addHandler(logging.NullHandler()) - def readFeature(entities, property_name): feature = next( (f for f in entities if f["feature"] == property_name), None) @@ -18,22 +17,18 @@ def readFeature(entities, property_name): return feature - def hasRoles(requested_roles: List[str], existing_roles: List[str]) -> bool: return len(requested_roles) > 0 and set(requested_roles).issubset(set(existing_roles)) - def buildSetPropertyUrl(accessor, property_name, action): return f'/features/installations/{accessor.id}/gateways/{accessor.serial}/devices/{accessor.device_id}/features/{property_name}/commands/{action}' - class ViCareDeviceAccessor: def __init__(self, _id: int, serial: str, device_id: str) -> None: self.id = _id self.serial = serial self.device_id = device_id - class ViCareService: def __init__(self, oauth_manager: AbstractViCareOAuthManager, accessor: ViCareDeviceAccessor, roles: List[str]) -> None: self.oauth_manager = oauth_manager @@ -49,12 +44,11 @@ def buildGetPropertyUrl(self, property_name): return f'/features/installations/{self.accessor.id}/gateways/{self.accessor.serial}/features/{property_name}' return f'/features/installations/{self.accessor.id}/gateways/{self.accessor.serial}/devices/{self.accessor.device_id}/features/{property_name}' - def hasRoles(self, requested_roles) -> bool: return hasRoles(requested_roles, self.roles) def _isGateway(self) -> bool: - return self.hasRoles(["type:gateway;VitoconnectOpto1"]) or self.hasRoles(["type:gateway;TCU300"]) + return self.hasRoles(["type:gateway;VitoconnectOpto1"]) or self.hasRoles(["type:gateway;VitoconnectOpto2/OT2"]) or self.hasRoles(["type:gateway;TCU300"]) def setProperty(self, property_name: str, action: str, data: Any) -> Any: url = buildSetPropertyUrl( diff --git a/tests/response/VitoconnectOpto2.json b/tests/response/VitoconnectOpto2.json new file mode 100644 index 00000000..4255935f --- /dev/null +++ b/tests/response/VitoconnectOpto2.json @@ -0,0 +1,97 @@ +{ + "data": [ + { + "feature": "gateway.devices", + "gatewayId": "##############", + "timestamp": "2024-03-28T05:06:02.633Z", + "isEnabled": true, + "isReady": true, + "apiVersion": 1, + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/##############/features/gateway.devices", + "properties": { + "devices": { + "type": "DeviceList", + "value": [ + { + "id": "gateway", + "fingerprint": "###", + "modelId": "Heatbox2_SRC", + "modelVersion": "###", + "name": "Heatbox 2 SRC, Vitoconnect", + "type": "vitoconnect", + "roles": [ + "type:gateway;VitoconnectOpto2/OT2", + "type:hb2", + "type:legacy" + ], + "status": "online" + }, + { + "id": "0", + "fingerprint": "###", + "modelId": "VPlusHO1_40", + "modelVersion": "###", + "name": "VT 200 (HO1A / HO1B)", + "type": "heating", + "roles": [ + "type:boiler", + "type:legacy", + "type:product;VPlusHO1" + ], + "status": "online" + }, + { + "id": "RoomControl-1", + "fingerprint": "###", + "modelId": "Smart_RoomControl", + "modelVersion": "###", + "name": "Smart_RoomControl_49", + "type": "roomControl", + "roles": [ + "capability:monetization;FTDC", + "capability:monetization;OWD", + "capability:zigbeeCoordinator", + "type:legacy", + "type:virtual;smartRoomControl" + ], + "status": "online" + }, + { + "id": "zigbee-#####", + "fingerprint": "###", + "modelId": "Smart_Device_eTRV_generic_50", + "modelVersion": "ac746d50a111d3eb8fa54146c05971aa2bc5b5cc", + "name": "Smart_Device_eTRV_generic_50", + "type": "zigbee", + "roles": [ + "type:actuator", + "type:legacy", + "type:radiator", + "type:smartRoomDevice" + ], + "status": "online" + } + ] + } + }, + "commands": {} + }, + { + "feature": "gateway.wifi", + "gatewayId": "##############", + "timestamp": "2024-03-30T17:31:57.758Z", + "isEnabled": true, + "isReady": true, + "apiVersion": 1, + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/##############/features/gateway.wifi", + "properties": { + "strength": { + "type": "number", + "value": -41, + "unit": "" + } + }, + "commands": {} + } + ] +} \ No newline at end of file diff --git a/tests/test_PyViCareDeviceConfig.py b/tests/test_PyViCareDeviceConfig.py index 7acd5906..d4443049 100644 --- a/tests/test_PyViCareDeviceConfig.py +++ b/tests/test_PyViCareDeviceConfig.py @@ -72,6 +72,11 @@ def test_autoDetect_VitoconnectOpto1_asGateway(self): device_type = c.asAutoDetectDevice() self.assertEqual("Gateway", type(device_type).__name__) + def test_autoDetect_VitoconnectOpto2_asGateway(self): + c = PyViCareDeviceConfig(self.service, "0", "Heatbox2_SRC", "Online") + device_type = c.asAutoDetectDevice() + self.assertEqual("Gateway", type(device_type).__name__) + def test_autoDetect_TCU300_asGateway(self): c = PyViCareDeviceConfig(self.service, "0", "E3_TCU10_x07", "Online") device_type = c.asAutoDetectDevice() @@ -83,6 +88,12 @@ def test_autoDetect_RoleGateway_asGateway(self): device_type = c.asAutoDetectDevice() self.assertEqual("Gateway", type(device_type).__name__) + def test_autoDetect_RoleGateway_asGateway_vc_opto2(self): + self.service.hasRoles = has_roles(["type:gateway;VitoconnectOpto2/OT2"]) + c = PyViCareDeviceConfig(self.service, "0", "Unknown", "Online") + device_type = c.asAutoDetectDevice() + self.assertEqual("Gateway", type(device_type).__name__) + def test_autoDetect_RoleGateway_asGateway_TCU300(self): self.service.hasRoles = has_roles(["type:gateway;TCU300"]) c = PyViCareDeviceConfig(self.service, "0", "Unknown", "Online") diff --git a/tests/test_VitoconnectOpto2.py b/tests/test_VitoconnectOpto2.py new file mode 100644 index 00000000..c1ad8e9b --- /dev/null +++ b/tests/test_VitoconnectOpto2.py @@ -0,0 +1,18 @@ +import unittest + +from PyViCare.PyViCareGateway import Gateway +from tests.ViCareServiceMock import ViCareServiceMock + + +class VitoconnectOpto2(unittest.TestCase): + def setUp(self): + self.service = ViCareServiceMock('response/VitoconnectOpto2.json') + self.device = Gateway(self.service) + + def test_getSerial(self): + self.assertEqual( + self.device.getSerial(), "##############") + + def test_getWifiSignalStrength(self): + self.assertEqual( + self.device.getWifiSignalStrength(), -41) From 7c4e5c14191094fee1ea4bfcacfe025aa1a0fab7 Mon Sep 17 00:00:00 2001 From: Tobin Rosenau Date: Sun, 18 Aug 2024 17:59:55 +0200 Subject: [PATCH 19/31] chore(testdata): add test and response for Vitoladens 300-C (#26) * add test and response for Vitoladens 300-C * fix pylint error * add new DHW cylinder temp. sensor feature * fix pylint issue * fix pylint issues * update test response Vitoladens300-C_J3RA * add deprecation hint for temperature.hotWaterStorage * update test for Vitoladens 300-C * fix unittest for Vitoladens 300-c --- PyViCare/PyViCareHeatingDevice.py | 1 - tests/response/Vitoladens300-C_J3RA.json | 2079 ++++++++++++++++++++++ tests/test_Vitoladens300C.py | 28 + 3 files changed, 2107 insertions(+), 1 deletion(-) create mode 100644 tests/response/Vitoladens300-C_J3RA.json create mode 100644 tests/test_Vitoladens300C.py diff --git a/PyViCare/PyViCareHeatingDevice.py b/PyViCare/PyViCareHeatingDevice.py index b8a12bb1..ee344415 100644 --- a/PyViCare/PyViCareHeatingDevice.py +++ b/PyViCare/PyViCareHeatingDevice.py @@ -110,7 +110,6 @@ def getDomesticHotWaterDesiredTemperature(self): if mode == VICARE_DHW_TEMP2: return self.getDomesticHotWaterConfiguredTemperature2() return self.getDomesticHotWaterConfiguredTemperature() - return None @handleNotSupported diff --git a/tests/response/Vitoladens300-C_J3RA.json b/tests/response/Vitoladens300-C_J3RA.json new file mode 100644 index 00000000..95b261b1 --- /dev/null +++ b/tests/response/Vitoladens300-C_J3RA.json @@ -0,0 +1,2079 @@ +{ + "data": [ + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "device.messages.errors.raw", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "entries": { + "type": "array", + "value": [] + } + }, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/device.messages.errors.raw" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "device.serial", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "value": { + "type": "string", + "value": "################" + } + }, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/device.serial" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.boiler.sensors.temperature.commonSupply", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.boiler.sensors.temperature.commonSupply" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.boiler.sensors.temperature.main", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "status": { + "type": "string", + "value": "connected" + }, + "value": { + "type": "number", + "unit": "celsius", + "value": 26 + } + }, + "timestamp": "2024-08-18T14:38:00.110Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.boiler.sensors.temperature.main" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.boiler.serial", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "value": { + "type": "string", + "value": "################" + } + }, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.boiler.serial" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.boiler.temperature", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "value": { + "type": "number", + "unit": "celsius", + "value": 5 + } + }, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.boiler.temperature" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.burners", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "enabled": { + "type": "array", + "value": [ + "0" + ] + } + }, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.burners" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.burners.0.modulation", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "value": { + "type": "number", + "unit": "percent", + "value": 0 + } + }, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.burners.0.modulation" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.burners.0.statistics", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "hours": { + "type": "number", + "unit": "hour", + "value": 4272 + }, + "starts": { + "type": "number", + "unit": "", + "value": 29494 + } + }, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.burners.0.statistics" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.burners.0", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": false + } + }, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.burners.0" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "enabled": { + "type": "array", + "value": [ + "1" + ] + } + }, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.circulation.pump", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.circulation.pump" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.1.circulation.pump", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "status": { + "type": "string", + "value": "off" + } + }, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.circulation.pump" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.circulation.pump", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.circulation.pump" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.dhw.pumps.circulation.schedule", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.dhw.pumps.circulation.schedule" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.1.dhw.pumps.circulation.schedule", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.dhw.pumps.circulation.schedule" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.dhw.pumps.circulation.schedule", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.dhw.pumps.circulation.schedule" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.dhw.schedule", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.dhw.schedule" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.1.dhw.schedule", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.dhw.schedule" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.dhw.schedule", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.dhw.schedule" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.frostprotection", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.frostprotection" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.1.frostprotection", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "status": { + "type": "string", + "value": "off" + } + }, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.frostprotection" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.frostprotection", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.frostprotection" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.heating.curve", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.heating.curve" + }, + { + "apiVersion": 1, + "commands": { + "setCurve": { + "isExecutable": true, + "name": "setCurve", + "params": { + "shift": { + "constraints": { + "max": 40, + "min": -13, + "stepping": 1 + }, + "required": true, + "type": "number" + }, + "slope": { + "constraints": { + "max": 3.5, + "min": 0.2, + "stepping": 0.1 + }, + "required": true, + "type": "number" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.heating.curve/commands/setCurve" + } + }, + "deviceId": "0", + "feature": "heating.circuits.1.heating.curve", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "shift": { + "type": "number", + "unit": "", + "value": 7 + }, + "slope": { + "type": "number", + "unit": "", + "value": 0.5 + } + }, + "timestamp": "2024-08-18T08:16:04.656Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.heating.curve" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.heating.curve", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.heating.curve" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.heating.schedule", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.heating.schedule" + }, + { + "apiVersion": 1, + "commands": { + "resetSchedule": { + "isExecutable": false, + "name": "resetSchedule", + "params": {}, + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.heating.schedule/commands/resetSchedule" + }, + "setSchedule": { + "isExecutable": true, + "name": "setSchedule", + "params": { + "newSchedule": { + "constraints": { + "defaultMode": "reduced", + "maxEntries": 4, + "modes": [ + "normal" + ], + "overlapAllowed": true, + "resolution": 10 + }, + "required": true, + "type": "Schedule" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.heating.schedule/commands/setSchedule" + } + }, + "deviceId": "0", + "feature": "heating.circuits.1.heating.schedule", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": false + }, + "entries": { + "type": "Schedule", + "value": { + "fri": [ + { + "end": "23:00", + "mode": "normal", + "position": 0, + "start": "06:00" + } + ], + "mon": [ + { + "end": "23:00", + "mode": "normal", + "position": 0, + "start": "06:00" + } + ], + "sat": [ + { + "end": "23:00", + "mode": "normal", + "position": 0, + "start": "06:00" + } + ], + "sun": [ + { + "end": "23:00", + "mode": "normal", + "position": 0, + "start": "06:00" + } + ], + "thu": [ + { + "end": "23:00", + "mode": "normal", + "position": 0, + "start": "06:00" + } + ], + "tue": [ + { + "end": "23:00", + "mode": "normal", + "position": 0, + "start": "06:00" + } + ], + "wed": [ + { + "end": "23:00", + "mode": "normal", + "position": 0, + "start": "06:00" + } + ] + } + } + }, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.heating.schedule" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.heating.schedule", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.heating.schedule" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.modes.active", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.operating.modes.active" + }, + { + "apiVersion": 1, + "commands": { + "setMode": { + "isExecutable": true, + "name": "setMode", + "params": { + "mode": { + "constraints": { + "enum": [ + "dhw", + "dhwAndHeating", + "forcedNormal", + "forcedReduced", + "standby" + ] + }, + "required": true, + "type": "string" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.modes.active/commands/setMode" + } + }, + "deviceId": "0", + "feature": "heating.circuits.1.operating.modes.active", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "value": { + "type": "string", + "value": "dhw" + } + }, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.modes.active" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.operating.modes.active", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.operating.modes.active" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.modes.dhw", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.operating.modes.dhw" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.1.operating.modes.dhw", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": true + } + }, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.modes.dhw" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.operating.modes.dhw", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.operating.modes.dhw" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.modes.dhwAndHeating", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.operating.modes.dhwAndHeating" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.1.operating.modes.dhwAndHeating", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": false + } + }, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.modes.dhwAndHeating" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.operating.modes.dhwAndHeating", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.operating.modes.dhwAndHeating" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.modes.forcedNormal", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.operating.modes.forcedNormal" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.1.operating.modes.forcedNormal", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": false + } + }, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.modes.forcedNormal" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.operating.modes.forcedNormal", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.operating.modes.forcedNormal" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.modes.forcedReduced", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.operating.modes.forcedReduced" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.1.operating.modes.forcedReduced", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": false + } + }, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.modes.forcedReduced" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.operating.modes.forcedReduced", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.operating.modes.forcedReduced" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.modes.heating", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.operating.modes.heating" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.1.operating.modes.heating", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.modes.heating" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.operating.modes.heating", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.operating.modes.heating" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.modes.standby", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.operating.modes.standby" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.1.operating.modes.standby", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": false + } + }, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.modes.standby" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.operating.modes.standby", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.operating.modes.standby" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.programs.active", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.active" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.1.operating.programs.active", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "value": { + "type": "string", + "value": "standby" + } + }, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.active" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.operating.programs.active", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.active" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.programs.comfort", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.comfort" + }, + { + "apiVersion": 1, + "commands": { + "activate": { + "isExecutable": true, + "name": "activate", + "params": { + "temperature": { + "constraints": { + "max": 37, + "min": 4, + "stepping": 1 + }, + "required": false, + "type": "number" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.comfort/commands/activate" + }, + "deactivate": { + "isExecutable": true, + "name": "deactivate", + "params": {}, + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.comfort/commands/deactivate" + }, + "setTemperature": { + "isExecutable": true, + "name": "setTemperature", + "params": { + "targetTemperature": { + "constraints": { + "max": 37, + "min": 4, + "stepping": 1 + }, + "required": true, + "type": "number" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.comfort/commands/setTemperature" + } + }, + "deviceId": "0", + "feature": "heating.circuits.1.operating.programs.comfort", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": false + }, + "demand": { + "type": "string", + "value": "unknown" + }, + "temperature": { + "type": "number", + "unit": "celsius", + "value": 22 + } + }, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.comfort" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.operating.programs.comfort", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.comfort" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.programs.eco", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.eco" + }, + { + "apiVersion": 1, + "commands": { + "activate": { + "isExecutable": false, + "name": "activate", + "params": {}, + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.eco/commands/activate" + }, + "deactivate": { + "isExecutable": true, + "name": "deactivate", + "params": {}, + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.eco/commands/deactivate" + } + }, + "deviceId": "0", + "feature": "heating.circuits.1.operating.programs.eco", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": false + }, + "temperature": { + "type": "number", + "unit": "celsius", + "value": 22 + } + }, + "timestamp": "2024-08-18T14:57:40.687Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.eco" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.operating.programs.eco", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.eco" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.programs.external", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.external" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.1.operating.programs.external", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": false + }, + "temperature": { + "type": "number", + "unit": "", + "value": 0 + } + }, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.external" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.operating.programs.external", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.external" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.programs.holiday", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.holiday" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.1.operating.programs.holiday", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.holiday" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.operating.programs.holiday", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.holiday" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.programs.normal", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.normal" + }, + { + "apiVersion": 1, + "commands": { + "setTemperature": { + "isExecutable": true, + "name": "setTemperature", + "params": { + "targetTemperature": { + "constraints": { + "max": 37, + "min": 3, + "stepping": 1 + }, + "required": true, + "type": "number" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.normal/commands/setTemperature" + } + }, + "deviceId": "0", + "feature": "heating.circuits.1.operating.programs.normal", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": false + }, + "demand": { + "type": "string", + "value": "unknown" + }, + "temperature": { + "type": "number", + "unit": "celsius", + "value": 22 + } + }, + "timestamp": "2024-08-18T14:57:40.687Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.normal" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.operating.programs.normal", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.normal" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.programs.reduced", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.reduced" + }, + { + "apiVersion": 1, + "commands": { + "setTemperature": { + "isExecutable": true, + "name": "setTemperature", + "params": { + "targetTemperature": { + "constraints": { + "max": 37, + "min": 3, + "stepping": 1 + }, + "required": true, + "type": "number" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.reduced/commands/setTemperature" + } + }, + "deviceId": "0", + "feature": "heating.circuits.1.operating.programs.reduced", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": false + }, + "demand": { + "type": "string", + "value": "unknown" + }, + "temperature": { + "type": "number", + "unit": "celsius", + "value": 3 + } + }, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.reduced" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.operating.programs.reduced", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.reduced" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.programs.standby", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.standby" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.1.operating.programs.standby", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": true + } + }, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.standby" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.operating.programs.standby", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.standby" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.sensors.temperature.room", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.sensors.temperature.room" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.1.sensors.temperature.room", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.sensors.temperature.room" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.sensors.temperature.room", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.sensors.temperature.room" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.sensors.temperature.supply", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-18T14:38:11.964Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.sensors.temperature.supply" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.1.sensors.temperature.supply", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "status": { + "type": "string", + "value": "connected" + }, + "value": { + "type": "number", + "unit": "celsius", + "value": 24 + } + }, + "timestamp": "2024-08-18T08:36:37.933Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.sensors.temperature.supply" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.sensors.temperature.supply", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.sensors.temperature.supply" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0" + }, + { + "apiVersion": 1, + "commands": { + "setName": { + "isExecutable": false, + "name": "setName", + "params": { + "name": { + "constraints": { + "maxLength": 20, + "minLength": 1 + }, + "required": true, + "type": "string" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1/commands/setName" + } + }, + "deviceId": "0", + "feature": "heating.circuits.1", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": true + }, + "name": { + "type": "string", + "value": "" + }, + "type": { + "type": "string", + "value": "heatingCircuit" + } + }, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.controller.serial", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "value": { + "type": "string", + "value": "################" + } + }, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.controller.serial" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.dhw", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": true + }, + "status": { + "type": "string", + "value": "off" + } + }, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.dhw" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.dhw.charging", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": false + } + }, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.dhw.charging" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.dhw.pumps.circulation", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "status": { + "type": "string", + "value": "on" + } + }, + "timestamp": "2024-08-18T03:26:58.060Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.dhw.pumps.circulation" + }, + { + "apiVersion": 1, + "commands": { + "resetSchedule": { + "isExecutable": false, + "name": "resetSchedule", + "params": {}, + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.dhw.pumps.circulation.schedule/commands/resetSchedule" + }, + "setSchedule": { + "isExecutable": true, + "name": "setSchedule", + "params": { + "newSchedule": { + "constraints": { + "defaultMode": "off", + "maxEntries": 4, + "modes": [ + "on" + ], + "overlapAllowed": true, + "resolution": 10 + }, + "required": true, + "type": "Schedule" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.dhw.pumps.circulation.schedule/commands/setSchedule" + } + }, + "deviceId": "0", + "feature": "heating.dhw.pumps.circulation.schedule", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": true + }, + "entries": { + "type": "Schedule", + "value": { + "fri": [ + { + "end": "22:00", + "mode": "on", + "position": 0, + "start": "05:30" + } + ], + "mon": [ + { + "end": "22:00", + "mode": "on", + "position": 0, + "start": "05:30" + } + ], + "sat": [ + { + "end": "22:00", + "mode": "on", + "position": 0, + "start": "05:30" + } + ], + "sun": [ + { + "end": "22:00", + "mode": "on", + "position": 0, + "start": "05:30" + } + ], + "thu": [ + { + "end": "22:00", + "mode": "on", + "position": 0, + "start": "05:30" + } + ], + "tue": [ + { + "end": "22:00", + "mode": "on", + "position": 0, + "start": "05:30" + } + ], + "wed": [ + { + "end": "22:00", + "mode": "on", + "position": 0, + "start": "05:30" + } + ] + } + } + }, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.dhw.pumps.circulation.schedule" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.dhw.pumps.primary", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "status": { + "type": "string", + "value": "off" + } + }, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.dhw.pumps.primary" + }, + { + "apiVersion": 1, + "commands": { + "resetSchedule": { + "isExecutable": false, + "name": "resetSchedule", + "params": {}, + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.dhw.schedule/commands/resetSchedule" + }, + "setSchedule": { + "isExecutable": true, + "name": "setSchedule", + "params": { + "newSchedule": { + "constraints": { + "defaultMode": "off", + "maxEntries": 4, + "modes": [ + "on" + ], + "overlapAllowed": true, + "resolution": 10 + }, + "required": true, + "type": "Schedule" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.dhw.schedule/commands/setSchedule" + } + }, + "deviceId": "0", + "feature": "heating.dhw.schedule", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": true + }, + "entries": { + "type": "Schedule", + "value": { + "fri": [ + { + "end": "24:00", + "mode": "on", + "position": 0, + "start": "00:00" + } + ], + "mon": [ + { + "end": "24:00", + "mode": "on", + "position": 0, + "start": "00:00" + } + ], + "sat": [ + { + "end": "24:00", + "mode": "on", + "position": 0, + "start": "00:00" + } + ], + "sun": [ + { + "end": "24:00", + "mode": "on", + "position": 0, + "start": "00:00" + } + ], + "thu": [ + { + "end": "24:00", + "mode": "on", + "position": 0, + "start": "00:00" + } + ], + "tue": [ + { + "end": "24:00", + "mode": "on", + "position": 0, + "start": "00:00" + } + ], + "wed": [ + { + "end": "24:00", + "mode": "on", + "position": 0, + "start": "00:00" + } + ] + } + } + }, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.dhw.schedule" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.dhw.sensors.temperature.dhwCylinder", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "status": { + "type": "string", + "value": "connected" + }, + "value": { + "type": "number", + "unit": "celsius", + "value": 60.8 + } + }, + "timestamp": "2024-08-18T14:51:30.708Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.dhw.sensors.temperature.dhwCylinder" + }, + { + "apiVersion": 1, + "commands": {}, + "deprecated": { + "info": "replaced by heating.dhw.sensors.temperature.dhwCylinder", + "removalDate": "2024-09-15" + }, + "deviceId": "0", + "feature": "heating.dhw.sensors.temperature.hotWaterStorage", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "status": { + "type": "string", + "value": "connected" + }, + "value": { + "type": "number", + "unit": "celsius", + "value": 60.8 + } + }, + "timestamp": "2024-08-18T14:51:30.708Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.dhw.sensors.temperature.hotWaterStorage" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.dhw.sensors.temperature.outlet", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "status": { + "type": "string", + "value": "error" + } + }, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.dhw.sensors.temperature.outlet" + }, + { + "apiVersion": 1, + "commands": { + "setTargetTemperature": { + "isExecutable": true, + "name": "setTargetTemperature", + "params": { + "temperature": { + "constraints": { + "efficientLowerBorder": 10, + "efficientUpperBorder": 60, + "max": 60, + "min": 10, + "stepping": 1 + }, + "required": true, + "type": "number" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.dhw.temperature.main/commands/setTargetTemperature" + } + }, + "deviceId": "0", + "feature": "heating.dhw.temperature.main", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "value": { + "type": "number", + "unit": "celsius", + "value": 38 + } + }, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.dhw.temperature.main" + }, + { + "apiVersion": 1, + "commands": { + "changeEndDate": { + "isExecutable": false, + "name": "changeEndDate", + "params": { + "end": { + "constraints": { + "regEx": "^[\\d]{4}-[\\d]{2}-[\\d]{2}$", + "sameDayAllowed": false + }, + "required": true, + "type": "string" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.operating.programs.holiday/commands/changeEndDate" + }, + "schedule": { + "isExecutable": true, + "name": "schedule", + "params": { + "end": { + "constraints": { + "regEx": "^[\\d]{4}-[\\d]{2}-[\\d]{2}$", + "sameDayAllowed": false + }, + "required": true, + "type": "string" + }, + "start": { + "constraints": { + "regEx": "^[\\d]{4}-[\\d]{2}-[\\d]{2}$" + }, + "required": true, + "type": "string" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.operating.programs.holiday/commands/schedule" + }, + "unschedule": { + "isExecutable": true, + "name": "unschedule", + "params": {}, + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.operating.programs.holiday/commands/unschedule" + } + }, + "deviceId": "0", + "feature": "heating.operating.programs.holiday", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": false + }, + "end": { + "type": "string", + "value": "" + }, + "start": { + "type": "string", + "value": "" + } + }, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.operating.programs.holiday" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.sensors.temperature.outside", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "status": { + "type": "string", + "value": "connected" + }, + "value": { + "type": "number", + "unit": "celsius", + "value": 19 + } + }, + "timestamp": "2024-08-18T14:11:20.245Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.sensors.temperature.outside" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.solar", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.solar" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.solar.power.cumulativeProduced", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.solar.power.cumulativeProduced" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.solar.power.production", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.solar.power.production" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.solar.pumps.circuit", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.solar.pumps.circuit" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.solar.sensors.temperature.collector", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.solar.sensors.temperature.collector" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.solar.sensors.temperature.dhw", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.solar.sensors.temperature.dhw" + }, + { + "apiVersion": 1, + "commands": {}, + "components": [], + "deviceId": "0", + "feature": "heating.circuits.0.name", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-01-19T02:43:11.831Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.name" + }, + { + "apiVersion": 1, + "commands": { + "setName": { + "isExecutable": true, + "name": "setName", + "params": { + "name": { + "constraints": { + "maxLength": 20, + "minLength": 1 + }, + "required": true, + "type": "string" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.name/commands/setName" + } + }, + "components": [], + "deviceId": "0", + "feature": "heating.circuits.1.name", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "name": { + "type": "string", + "value": "Heizkreis 1" + } + }, + "timestamp": "2024-08-15T14:52:14.899Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.name" + }, + { + "apiVersion": 1, + "commands": {}, + "components": [], + "deviceId": "0", + "feature": "heating.circuits.2.name", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-01-19T02:43:11.831Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.name" + } + ] +} diff --git a/tests/test_Vitoladens300C.py b/tests/test_Vitoladens300C.py new file mode 100644 index 00000000..5270cc29 --- /dev/null +++ b/tests/test_Vitoladens300C.py @@ -0,0 +1,28 @@ +import unittest + +from PyViCare.PyViCareOilBoiler import OilBoiler +from tests.ViCareServiceMock import ViCareServiceMock + + +class Vitoladens300C(unittest.TestCase): + def setUp(self): + self.service = ViCareServiceMock('response/Vitoladens300-C_J3RA.json') + self.device = OilBoiler(self.service) + + def test_getActive(self): + self.assertEqual(self.device.burners[0].getActive(), False) + + def test_getBurnerStarts(self): + self.assertEqual(self.device.burners[0].getStarts(), 29494) + + def test_getBurnerHours(self): + self.assertEqual(self.device.burners[0].getHours(), 4272) + + def test_getBurnerModulation(self): + self.assertEqual(self.device.burners[0].getModulation(), 0) + + def test_getBoilerTemperature(self): + self.assertEqual(self.device.getBoilerTemperature(), 26) + + def test_getDomesticHotWaterStorageTemperature(self): + self.assertEqual(self.device.getDomesticHotWaterStorageTemperature(), 60.8) From 136e45d0980022f98904c13e6161b4eaee2ecb5c Mon Sep 17 00:00:00 2001 From: Christopher Fenner <9592452+CFenner@users.noreply.github.com> Date: Mon, 19 Aug 2024 10:27:38 +0200 Subject: [PATCH 20/31] feat: expose Hysteresis data points (#25) * update test data * add hysteresis getter * add setDomesticHotWaterHysteresis * move to heat pump * add test case * update * add switchOn switchOff temp setter * add test cases * add types * fix type in setter * add tes cases --- PyViCare/PyViCareHeatPump.py | 87 +++++++++++++++++++++++++++++------- tests/test_Vitocal250A.py | 54 +++++++++++++++++++++- 2 files changed, 122 insertions(+), 19 deletions(-) diff --git a/PyViCare/PyViCareHeatPump.py b/PyViCare/PyViCareHeatPump.py index c5776a81..29a28333 100644 --- a/PyViCare/PyViCareHeatPump.py +++ b/PyViCare/PyViCareHeatPump.py @@ -152,29 +152,28 @@ def activateVentilationProgram(self, program): """ return self.service.setProperty(f"ventilation.operating.programs.{program}", "activate", {}) - @handleNotSupported - def getDomesticHotWaterHysteresis(self): - return self.service.getProperty("heating.dhw.temperature.hysteresis")["properties"]["value"]["value"] + def getDomesticHotWaterHysteresisUnit(self) -> str: + return str(self.service.getProperty("heating.dhw.temperature.hysteresis")["properties"]["value"]["unit"]) @handleNotSupported - def getDomesticHotWaterHysteresisMin(self): - return self.service.getProperty("heating.dhw.temperature.hysteresis")["commands"]["setHysteresis"]["params"]["hysteresis"]["constraints"]["min"] + def getDomesticHotWaterHysteresis(self) -> float: + return float(self.service.getProperty("heating.dhw.temperature.hysteresis")["properties"]["value"]["value"]) @handleNotSupported - def getDomesticHotWaterHysteresisMax(self): - return self.service.getProperty("heating.dhw.temperature.hysteresis")["commands"]["setHysteresis"]["params"]["hysteresis"]["constraints"]["max"] + def getDomesticHotWaterHysteresisMin(self) -> float: + return float(self.service.getProperty("heating.dhw.temperature.hysteresis")["commands"]["setHysteresis"]["params"]["hysteresis"]["constraints"]["min"]) @handleNotSupported - def getDomesticHotWaterHysteresisStepping(self): - return self.service.getProperty("heating.dhw.temperature.hysteresis")["commands"]["setHysteresis"]["params"]["hysteresis"]["constraints"]["stepping"] + def getDomesticHotWaterHysteresisMax(self) -> float: + return float(self.service.getProperty("heating.dhw.temperature.hysteresis")["commands"]["setHysteresis"]["params"]["hysteresis"]["constraints"]["max"]) @handleNotSupported - def getDomesticHotWaterHysteresisUnit(self): - return self.service.getProperty("heating.dhw.temperature.hysteresis")["properties"]["value"]["unit"] + def getDomesticHotWaterHysteresisStepping(self) -> float: + return float(self.service.getProperty("heating.dhw.temperature.hysteresis")["commands"]["setHysteresis"]["params"]["hysteresis"]["constraints"]["stepping"]) @handleAPICommandErrors - def setDomesticHotWaterHysteresis(self, temperature): + def setDomesticHotWaterHysteresis(self, temperature: float) -> Any: """ Set the hysteresis temperature for domestic host water Parameters ---------- @@ -186,15 +185,69 @@ def setDomesticHotWaterHysteresis(self, temperature): result: json json representation of the answer """ - return self.service.setProperty("heating.dhw.temperature.hysteresis", "setHysteresis", {'hysteresis': int(temperature)}) + return self.service.setProperty("heating.dhw.temperature.hysteresis", "setHysteresis", {'hysteresis': temperature}) + + @handleNotSupported + def getDomesticHotWaterHysteresisSwitchOn(self) -> float: + return float(self.service.getProperty("heating.dhw.temperature.hysteresis")["properties"]["switchOnValue"]["value"]) + + @handleNotSupported + def getDomesticHotWaterHysteresisSwitchOnMin(self) -> float: + return float(self.service.getProperty("heating.dhw.temperature.hysteresis")["commands"]["setHysteresisSwitchOnValue"]["params"]["hysteresis"]["constraints"]["min"]) @handleNotSupported - def getDomesticHotWaterHysteresisSwitchOn(self): - return self.service.getProperty("heating.dhw.temperature.hysteresis")["properties"]["switchOnValue"]["value"] + def getDomesticHotWaterHysteresisSwitchOnMax(self) -> float: + return float(self.service.getProperty("heating.dhw.temperature.hysteresis")["commands"]["setHysteresisSwitchOnValue"]["params"]["hysteresis"]["constraints"]["max"]) + + @handleNotSupported + def getDomesticHotWaterHysteresisSwitchOnStepping(self) -> float: + return float(self.service.getProperty("heating.dhw.temperature.hysteresis")["commands"]["setHysteresisSwitchOnValue"]["params"]["hysteresis"]["constraints"]["stepping"]) + + @handleAPICommandErrors + def setDomesticHotWaterHysteresisSwitchOn(self, temperature: float) -> Any: + """ Set the hysteresis switch on temperature for domestic host water + Parameters + ---------- + temperature : float + hysteresis switch on temperature + + Returns + ------- + result: json + json representation of the answer + """ + return self.service.setProperty("heating.dhw.temperature.hysteresis", "setHysteresisSwitchOnValue", {'hysteresis': temperature}) @handleNotSupported - def getDomesticHotWaterHysteresisSwitchOff(self): - return self.service.getProperty("heating.dhw.temperature.hysteresis")["properties"]["switchOffValue"]["value"] + def getDomesticHotWaterHysteresisSwitchOff(self) -> float: + return float(self.service.getProperty("heating.dhw.temperature.hysteresis")["properties"]["switchOffValue"]["value"]) + + @handleNotSupported + def getDomesticHotWaterHysteresisSwitchOffMin(self) -> float: + return float(self.service.getProperty("heating.dhw.temperature.hysteresis")["commands"]["setHysteresisSwitchOffValue"]["params"]["hysteresis"]["constraints"]["min"]) + + @handleNotSupported + def getDomesticHotWaterHysteresisSwitchOffMax(self): + return float(self.service.getProperty("heating.dhw.temperature.hysteresis")["commands"]["setHysteresisSwitchOffValue"]["params"]["hysteresis"]["constraints"]["max"]) + + @handleNotSupported + def getDomesticHotWaterHysteresisSwitchOffStepping(self) -> float: + return float(self.service.getProperty("heating.dhw.temperature.hysteresis")["commands"]["setHysteresisSwitchOffValue"]["params"]["hysteresis"]["constraints"]["stepping"]) + + @handleAPICommandErrors + def setDomesticHotWaterHysteresisSwitchOff(self, temperature: float) -> Any: + """ Set the hysteresis switch off temperature for domestic host water + Parameters + ---------- + temperature : float + hysteresis switch off temperature + + Returns + ------- + result: json + json representation of the answer + """ + return self.service.setProperty("heating.dhw.temperature.hysteresis", "setHysteresisSwitchOffValue", {'hysteresis': temperature}) class Compressor(HeatingDeviceWithComponent): diff --git a/tests/test_Vitocal250A.py b/tests/test_Vitocal250A.py index 9c46ebb0..1d112a62 100644 --- a/tests/test_Vitocal250A.py +++ b/tests/test_Vitocal250A.py @@ -130,13 +130,63 @@ def test_getFrostProtectionActive(self): self.device.circuits[0].getFrostProtectionActive(), False) def test_getDomesticHotWaterHysteresis(self): - self.assertEqual( - self.device.getDomesticHotWaterHysteresis(), 5) self.assertEqual( self.device.getDomesticHotWaterHysteresisUnit(), 'kelvin') + self.assertEqual( + self.device.getDomesticHotWaterHysteresis(), 5) self.assertEqual( self.device.getDomesticHotWaterHysteresisMin(), 1) self.assertEqual( self.device.getDomesticHotWaterHysteresisMax(), 10) self.assertEqual( self.device.getDomesticHotWaterHysteresisStepping(), 0.5) + + def test_getDomesticHotWaterHysteresisSwitchOn(self): + self.assertEqual( + self.device.getDomesticHotWaterHysteresisSwitchOn(), 5) + self.assertEqual( + self.device.getDomesticHotWaterHysteresisSwitchOnMin(), 1) + self.assertEqual( + self.device.getDomesticHotWaterHysteresisSwitchOnMax(), 10) + self.assertEqual( + self.device.getDomesticHotWaterHysteresisSwitchOnStepping(), 0.5) + + def test_getDomesticHotWaterHysteresisSwitchOff(self): + self.assertEqual( + self.device.getDomesticHotWaterHysteresisSwitchOff(), 0) + self.assertEqual( + self.device.getDomesticHotWaterHysteresisSwitchOffMin(), 0) + self.assertEqual( + self.device.getDomesticHotWaterHysteresisSwitchOffMax(), 2.5) + self.assertEqual( + self.device.getDomesticHotWaterHysteresisSwitchOffStepping(), 0.5) + + def test_setDomesticHotWaterHysteresis(self): + self.device.setDomesticHotWaterHysteresis(5) + self.assertEqual(len(self.service.setPropertyData), 1) + self.assertEqual( + self.service.setPropertyData[0]['property_name'], 'heating.dhw.temperature.hysteresis') + self.assertEqual( + self.service.setPropertyData[0]['action'], 'setHysteresis') + self.assertEqual(self.service.setPropertyData[0]['data'], { + 'hysteresis': 5}) + + def test_setDomesticHotWaterHysteresisSwitchOn(self): + self.device.setDomesticHotWaterHysteresisSwitchOn(5) + self.assertEqual(len(self.service.setPropertyData), 1) + self.assertEqual( + self.service.setPropertyData[0]['property_name'], 'heating.dhw.temperature.hysteresis') + self.assertEqual( + self.service.setPropertyData[0]['action'], 'setHysteresisSwitchOnValue') + self.assertEqual(self.service.setPropertyData[0]['data'], { + 'hysteresis': 5}) + + def test_setDomesticHotWaterHysteresisSwitchOff(self): + self.device.setDomesticHotWaterHysteresisSwitchOff(5) + self.assertEqual(len(self.service.setPropertyData), 1) + self.assertEqual( + self.service.setPropertyData[0]['property_name'], 'heating.dhw.temperature.hysteresis') + self.assertEqual( + self.service.setPropertyData[0]['action'], 'setHysteresisSwitchOffValue') + self.assertEqual(self.service.setPropertyData[0]['data'], { + 'hysteresis': 5}) From ddf7dc32da555f86952b9363d42a79b0b0b3e802 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 1 Sep 2024 17:56:27 +0200 Subject: [PATCH 21/31] chore(deps): update actions/setup-python action to v5.2.0 (#33) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/lint.yml | 6 +++--- .github/workflows/release.yml | 2 +- .github/workflows/test.yml | 2 +- .github/workflows/type.yml | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index c125bc15..aebf4a6d 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -20,7 +20,7 @@ jobs: run: pipx install poetry - name: πŸ— Set up Python ${{ env.DEFAULT_PYTHON }} id: python - uses: actions/setup-python@v5.1.1 + uses: actions/setup-python@v5.2.0 with: python-version: ${{ env.DEFAULT_PYTHON }} cache: "poetry" @@ -42,7 +42,7 @@ jobs: run: pipx install poetry - name: πŸ— Set up Python ${{ env.DEFAULT_PYTHON }} id: python - uses: actions/setup-python@v5.1.1 + uses: actions/setup-python@v5.2.0 with: python-version: ${{ env.DEFAULT_PYTHON }} cache: "poetry" @@ -66,7 +66,7 @@ jobs: run: pipx install poetry - name: πŸ— Set up Python ${{ env.DEFAULT_PYTHON }} id: python - uses: actions/setup-python@v5.1.1 + uses: actions/setup-python@v5.2.0 with: python-version: ${{ env.DEFAULT_PYTHON }} cache: "poetry" diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index c7f2b878..07fbad01 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -26,7 +26,7 @@ jobs: run: pipx install poetry - name: πŸ— Set up Python ${{ env.DEFAULT_PYTHON }} id: python - uses: actions/setup-python@v5.1.1 + uses: actions/setup-python@v5.2.0 with: python-version: ${{ env.DEFAULT_PYTHON }} cache: "poetry" diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 2f16ad06..b9939112 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -25,7 +25,7 @@ jobs: run: pipx install poetry - name: πŸ— Set up Python ${{ matrix.python }} id: python - uses: actions/setup-python@v5.1.1 + uses: actions/setup-python@v5.2.0 with: python-version: ${{ matrix.python }} cache: "poetry" diff --git a/.github/workflows/type.yml b/.github/workflows/type.yml index e985dff2..05127745 100644 --- a/.github/workflows/type.yml +++ b/.github/workflows/type.yml @@ -22,7 +22,7 @@ jobs: run: pipx install poetry - name: πŸ— Set up Python ${{ env.DEFAULT_PYTHON }} id: python - uses: actions/setup-python@v5.1.1 + uses: actions/setup-python@v5.2.0 with: python-version: ${{ env.DEFAULT_PYTHON }} cache: "poetry" From 9f27137ba999c01354c09042493a2e4660596fea Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 1 Sep 2024 17:56:38 +0200 Subject: [PATCH 22/31] chore(deps): update pypa/gh-action-pypi-publish action to v1.10.0 (#36) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 07fbad01..4a2abe7f 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -45,7 +45,7 @@ jobs: - name: πŸ— Build package run: poetry build --no-interaction - name: πŸš€ Publish to PyPi - uses: pypa/gh-action-pypi-publish@v1.9.0 + uses: pypa/gh-action-pypi-publish@v1.10.0 with: verbose: true print-hash: true From b86ed308f1db96e713132a9729603f6dc0a279b2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 1 Sep 2024 17:56:55 +0200 Subject: [PATCH 23/31] chore(deps): update actions/upload-artifact action to v4.4.0 (#34) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index b9939112..040b33c6 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -38,7 +38,7 @@ jobs: - name: πŸš€ Run pytest run: poetry run pytest --cov src tests - name: ⬆️ Upload coverage artifact - uses: actions/upload-artifact@v4.3.6 + uses: actions/upload-artifact@v4.4.0 with: name: coverage-${{ matrix.python }} path: .coverage From 15d697e279c0d71e8503b4f38b15b94e778219d6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 1 Sep 2024 17:57:09 +0200 Subject: [PATCH 24/31] chore(deps): update dependency pylint to v3.2.7 (#35) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- poetry.lock | 39 +++++---------------------------------- 1 file changed, 5 insertions(+), 34 deletions(-) diff --git a/poetry.lock b/poetry.lock index cbdefed9..e8b0fd1c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,10 +1,9 @@ -# This file is automatically @generated by Poetry and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. [[package]] name = "astroid" version = "3.2.4" description = "An abstract syntax tree for Python with inference support." -category = "dev" optional = false python-versions = ">=3.8.0" files = [ @@ -16,7 +15,6 @@ files = [ name = "authlib" version = "1.3.1" description = "The ultimate Python library in building OAuth and OpenID Connect servers and clients." -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -31,7 +29,6 @@ cryptography = "*" name = "certifi" version = "2024.7.4" description = "Python package for providing Mozilla's CA Bundle." -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -43,7 +40,6 @@ files = [ name = "cffi" version = "1.17.0" description = "Foreign Function Interface for Python calling C code." -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -123,7 +119,6 @@ pycparser = "*" name = "charset-normalizer" version = "3.3.2" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -category = "main" optional = false python-versions = ">=3.7.0" files = [ @@ -223,7 +218,6 @@ files = [ name = "codespell" version = "2.3.0" description = "Codespell" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -241,7 +235,6 @@ types = ["chardet (>=5.1.0)", "mypy", "pytest", "pytest-cov", "pytest-dependency name = "colorama" version = "0.4.6" description = "Cross-platform colored terminal text." -category = "dev" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" files = [ @@ -253,7 +246,6 @@ files = [ name = "coverage" version = "7.6.1" description = "Code coverage measurement for Python" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -338,7 +330,6 @@ toml = ["tomli"] name = "cryptography" version = "43.0.0" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -388,7 +379,6 @@ test-randomorder = ["pytest-randomly"] name = "dill" version = "0.3.8" description = "serialize all of Python" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -404,7 +394,6 @@ profile = ["gprof2dot (>=2022.7.29)"] name = "idna" version = "3.7" description = "Internationalized Domain Names in Applications (IDNA)" -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -416,7 +405,6 @@ files = [ name = "iniconfig" version = "2.0.0" description = "brain-dead simple config-ini parsing" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -428,7 +416,6 @@ files = [ name = "isort" version = "5.13.2" description = "A Python utility / library to sort Python imports." -category = "dev" optional = false python-versions = ">=3.8.0" files = [ @@ -443,7 +430,6 @@ colors = ["colorama (>=0.4.6)"] name = "mccabe" version = "0.7.0" description = "McCabe checker, plugin for flake8" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -455,7 +441,6 @@ files = [ name = "mypy" version = "1.11.1" description = "Optional static typing for Python" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -502,7 +487,6 @@ reports = ["lxml"] name = "mypy-extensions" version = "1.0.0" description = "Type system extensions for programs checked with the mypy type checker." -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -514,7 +498,6 @@ files = [ name = "packaging" version = "24.1" description = "Core utilities for Python packages" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -526,7 +509,6 @@ files = [ name = "platformdirs" version = "4.2.2" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -543,7 +525,6 @@ type = ["mypy (>=1.8)"] name = "pluggy" version = "1.5.0" description = "plugin and hook calling mechanisms for python" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -559,7 +540,6 @@ testing = ["pytest", "pytest-benchmark"] name = "pycparser" version = "2.22" description = "C parser in Python" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -569,22 +549,21 @@ files = [ [[package]] name = "pylint" -version = "3.2.6" +version = "3.2.7" description = "python code static checker" -category = "dev" optional = false python-versions = ">=3.8.0" files = [ - {file = "pylint-3.2.6-py3-none-any.whl", hash = "sha256:03c8e3baa1d9fb995b12c1dbe00aa6c4bcef210c2a2634374aedeb22fb4a8f8f"}, - {file = "pylint-3.2.6.tar.gz", hash = "sha256:a5d01678349454806cff6d886fb072294f56a58c4761278c97fb557d708e1eb3"}, + {file = "pylint-3.2.7-py3-none-any.whl", hash = "sha256:02f4aedeac91be69fb3b4bea997ce580a4ac68ce58b89eaefeaf06749df73f4b"}, + {file = "pylint-3.2.7.tar.gz", hash = "sha256:1b7a721b575eaeaa7d39db076b6e7743c993ea44f57979127c517c6c572c803e"}, ] [package.dependencies] astroid = ">=3.2.4,<=3.3.0-dev0" colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} dill = [ - {version = ">=0.3.6", markers = "python_version >= \"3.11\""}, {version = ">=0.3.7", markers = "python_version >= \"3.12\""}, + {version = ">=0.3.6", markers = "python_version >= \"3.11\" and python_version < \"3.12\""}, ] isort = ">=4.2.5,<5.13.0 || >5.13.0,<6" mccabe = ">=0.6,<0.8" @@ -599,7 +578,6 @@ testutils = ["gitpython (>3)"] name = "pytest" version = "8.3.2" description = "pytest: simple powerful testing with Python" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -620,7 +598,6 @@ dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments name = "pytest-cov" version = "5.0.0" description = "Pytest plugin for measuring coverage." -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -639,7 +616,6 @@ testing = ["fields", "hunter", "process-tests", "pytest-xdist", "virtualenv"] name = "requests" version = "2.32.3" description = "Python HTTP for Humans." -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -661,7 +637,6 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] name = "ruff" version = "0.6.1" description = "An extremely fast Python linter and code formatter, written in Rust." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -689,7 +664,6 @@ files = [ name = "tomlkit" version = "0.13.2" description = "Style preserving TOML library" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -701,7 +675,6 @@ files = [ name = "types-requests" version = "2.32.0.20240712" description = "Typing stubs for requests" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -716,7 +689,6 @@ urllib3 = ">=2" name = "typing-extensions" version = "4.12.2" description = "Backported and Experimental Type Hints for Python 3.8+" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -728,7 +700,6 @@ files = [ name = "urllib3" version = "2.2.2" description = "HTTP library with thread-safe connection pooling, file post, and more." -category = "main" optional = false python-versions = ">=3.8" files = [ From a6d559a67ee42a1ea6e8e21df7d288b84251a9d8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 1 Sep 2024 17:57:25 +0200 Subject: [PATCH 25/31] chore(deps): update dependency mypy to v1.11.2 (#29) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- poetry.lock | 56 ++++++++++++++++++++++++++--------------------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/poetry.lock b/poetry.lock index e8b0fd1c..56d15859 100644 --- a/poetry.lock +++ b/poetry.lock @@ -439,38 +439,38 @@ files = [ [[package]] name = "mypy" -version = "1.11.1" +version = "1.11.2" description = "Optional static typing for Python" optional = false python-versions = ">=3.8" files = [ - {file = "mypy-1.11.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a32fc80b63de4b5b3e65f4be82b4cfa362a46702672aa6a0f443b4689af7008c"}, - {file = "mypy-1.11.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c1952f5ea8a5a959b05ed5f16452fddadbaae48b5d39235ab4c3fc444d5fd411"}, - {file = "mypy-1.11.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e1e30dc3bfa4e157e53c1d17a0dad20f89dc433393e7702b813c10e200843b03"}, - {file = "mypy-1.11.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2c63350af88f43a66d3dfeeeb8d77af34a4f07d760b9eb3a8697f0386c7590b4"}, - {file = "mypy-1.11.1-cp310-cp310-win_amd64.whl", hash = "sha256:a831671bad47186603872a3abc19634f3011d7f83b083762c942442d51c58d58"}, - {file = "mypy-1.11.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7b6343d338390bb946d449677726edf60102a1c96079b4f002dedff375953fc5"}, - {file = "mypy-1.11.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e4fe9f4e5e521b458d8feb52547f4bade7ef8c93238dfb5bbc790d9ff2d770ca"}, - {file = "mypy-1.11.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:886c9dbecc87b9516eff294541bf7f3655722bf22bb898ee06985cd7269898de"}, - {file = "mypy-1.11.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fca4a60e1dd9fd0193ae0067eaeeb962f2d79e0d9f0f66223a0682f26ffcc809"}, - {file = "mypy-1.11.1-cp311-cp311-win_amd64.whl", hash = "sha256:0bd53faf56de9643336aeea1c925012837432b5faf1701ccca7fde70166ccf72"}, - {file = "mypy-1.11.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f39918a50f74dc5969807dcfaecafa804fa7f90c9d60506835036cc1bc891dc8"}, - {file = "mypy-1.11.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0bc71d1fb27a428139dd78621953effe0d208aed9857cb08d002280b0422003a"}, - {file = "mypy-1.11.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b868d3bcff720dd7217c383474008ddabaf048fad8d78ed948bb4b624870a417"}, - {file = "mypy-1.11.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a707ec1527ffcdd1c784d0924bf5cb15cd7f22683b919668a04d2b9c34549d2e"}, - {file = "mypy-1.11.1-cp312-cp312-win_amd64.whl", hash = "sha256:64f4a90e3ea07f590c5bcf9029035cf0efeae5ba8be511a8caada1a4893f5525"}, - {file = "mypy-1.11.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:749fd3213916f1751fff995fccf20c6195cae941dc968f3aaadf9bb4e430e5a2"}, - {file = "mypy-1.11.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b639dce63a0b19085213ec5fdd8cffd1d81988f47a2dec7100e93564f3e8fb3b"}, - {file = "mypy-1.11.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4c956b49c5d865394d62941b109728c5c596a415e9c5b2be663dd26a1ff07bc0"}, - {file = "mypy-1.11.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:45df906e8b6804ef4b666af29a87ad9f5921aad091c79cc38e12198e220beabd"}, - {file = "mypy-1.11.1-cp38-cp38-win_amd64.whl", hash = "sha256:d44be7551689d9d47b7abc27c71257adfdb53f03880841a5db15ddb22dc63edb"}, - {file = "mypy-1.11.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2684d3f693073ab89d76da8e3921883019ea8a3ec20fa5d8ecca6a2db4c54bbe"}, - {file = "mypy-1.11.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:79c07eb282cb457473add5052b63925e5cc97dfab9812ee65a7c7ab5e3cb551c"}, - {file = "mypy-1.11.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:11965c2f571ded6239977b14deebd3f4c3abd9a92398712d6da3a772974fad69"}, - {file = "mypy-1.11.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a2b43895a0f8154df6519706d9bca8280cda52d3d9d1514b2d9c3e26792a0b74"}, - {file = "mypy-1.11.1-cp39-cp39-win_amd64.whl", hash = "sha256:1a81cf05975fd61aec5ae16501a091cfb9f605dc3e3c878c0da32f250b74760b"}, - {file = "mypy-1.11.1-py3-none-any.whl", hash = "sha256:0624bdb940255d2dd24e829d99a13cfeb72e4e9031f9492148f410ed30bcab54"}, - {file = "mypy-1.11.1.tar.gz", hash = "sha256:f404a0b069709f18bbdb702eb3dcfe51910602995de00bd39cea3050b5772d08"}, + {file = "mypy-1.11.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d42a6dd818ffce7be66cce644f1dff482f1d97c53ca70908dff0b9ddc120b77a"}, + {file = "mypy-1.11.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:801780c56d1cdb896eacd5619a83e427ce436d86a3bdf9112527f24a66618fef"}, + {file = "mypy-1.11.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:41ea707d036a5307ac674ea172875f40c9d55c5394f888b168033177fce47383"}, + {file = "mypy-1.11.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6e658bd2d20565ea86da7d91331b0eed6d2eee22dc031579e6297f3e12c758c8"}, + {file = "mypy-1.11.2-cp310-cp310-win_amd64.whl", hash = "sha256:478db5f5036817fe45adb7332d927daa62417159d49783041338921dcf646fc7"}, + {file = "mypy-1.11.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:75746e06d5fa1e91bfd5432448d00d34593b52e7e91a187d981d08d1f33d4385"}, + {file = "mypy-1.11.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a976775ab2256aadc6add633d44f100a2517d2388906ec4f13231fafbb0eccca"}, + {file = "mypy-1.11.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cd953f221ac1379050a8a646585a29574488974f79d8082cedef62744f0a0104"}, + {file = "mypy-1.11.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:57555a7715c0a34421013144a33d280e73c08df70f3a18a552938587ce9274f4"}, + {file = "mypy-1.11.2-cp311-cp311-win_amd64.whl", hash = "sha256:36383a4fcbad95f2657642a07ba22ff797de26277158f1cc7bd234821468b1b6"}, + {file = "mypy-1.11.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e8960dbbbf36906c5c0b7f4fbf2f0c7ffb20f4898e6a879fcf56a41a08b0d318"}, + {file = "mypy-1.11.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:06d26c277962f3fb50e13044674aa10553981ae514288cb7d0a738f495550b36"}, + {file = "mypy-1.11.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6e7184632d89d677973a14d00ae4d03214c8bc301ceefcdaf5c474866814c987"}, + {file = "mypy-1.11.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3a66169b92452f72117e2da3a576087025449018afc2d8e9bfe5ffab865709ca"}, + {file = "mypy-1.11.2-cp312-cp312-win_amd64.whl", hash = "sha256:969ea3ef09617aff826885a22ece0ddef69d95852cdad2f60c8bb06bf1f71f70"}, + {file = "mypy-1.11.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:37c7fa6121c1cdfcaac97ce3d3b5588e847aa79b580c1e922bb5d5d2902df19b"}, + {file = "mypy-1.11.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4a8a53bc3ffbd161b5b2a4fff2f0f1e23a33b0168f1c0778ec70e1a3d66deb86"}, + {file = "mypy-1.11.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2ff93107f01968ed834f4256bc1fc4475e2fecf6c661260066a985b52741ddce"}, + {file = "mypy-1.11.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:edb91dded4df17eae4537668b23f0ff6baf3707683734b6a818d5b9d0c0c31a1"}, + {file = "mypy-1.11.2-cp38-cp38-win_amd64.whl", hash = "sha256:ee23de8530d99b6db0573c4ef4bd8f39a2a6f9b60655bf7a1357e585a3486f2b"}, + {file = "mypy-1.11.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:801ca29f43d5acce85f8e999b1e431fb479cb02d0e11deb7d2abb56bdaf24fd6"}, + {file = "mypy-1.11.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:af8d155170fcf87a2afb55b35dc1a0ac21df4431e7d96717621962e4b9192e70"}, + {file = "mypy-1.11.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f7821776e5c4286b6a13138cc935e2e9b6fde05e081bdebf5cdb2bb97c9df81d"}, + {file = "mypy-1.11.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:539c570477a96a4e6fb718b8d5c3e0c0eba1f485df13f86d2970c91f0673148d"}, + {file = "mypy-1.11.2-cp39-cp39-win_amd64.whl", hash = "sha256:3f14cd3d386ac4d05c5a39a51b84387403dadbd936e17cb35882134d4f8f0d24"}, + {file = "mypy-1.11.2-py3-none-any.whl", hash = "sha256:b499bc07dbdcd3de92b0a8b29fdf592c111276f6a12fe29c30f6c417dd546d12"}, + {file = "mypy-1.11.2.tar.gz", hash = "sha256:7f9993ad3e0ffdc95c2a14b66dee63729f021968bff8ad911867579c65d13a79"}, ] [package.dependencies] From fd756764847d48c9a49695eaa766c96c06e9a889 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 1 Sep 2024 17:59:11 +0200 Subject: [PATCH 26/31] chore(deps): update dependency ruff to v0.6.3 (#28) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- poetry.lock | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/poetry.lock b/poetry.lock index 56d15859..6da42b68 100644 --- a/poetry.lock +++ b/poetry.lock @@ -635,29 +635,29 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "ruff" -version = "0.6.1" +version = "0.6.3" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.6.1-py3-none-linux_armv6l.whl", hash = "sha256:b4bb7de6a24169dc023f992718a9417380301b0c2da0fe85919f47264fb8add9"}, - {file = "ruff-0.6.1-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:45efaae53b360c81043e311cdec8a7696420b3d3e8935202c2846e7a97d4edae"}, - {file = "ruff-0.6.1-py3-none-macosx_11_0_arm64.whl", hash = "sha256:bc60c7d71b732c8fa73cf995efc0c836a2fd8b9810e115be8babb24ae87e0850"}, - {file = "ruff-0.6.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c7477c3b9da822e2db0b4e0b59e61b8a23e87886e727b327e7dcaf06213c5cf"}, - {file = "ruff-0.6.1-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3a0af7ab3f86e3dc9f157a928e08e26c4b40707d0612b01cd577cc84b8905cc9"}, - {file = "ruff-0.6.1-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:392688dbb50fecf1bf7126731c90c11a9df1c3a4cdc3f481b53e851da5634fa5"}, - {file = "ruff-0.6.1-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:5278d3e095ccc8c30430bcc9bc550f778790acc211865520f3041910a28d0024"}, - {file = "ruff-0.6.1-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fe6d5f65d6f276ee7a0fc50a0cecaccb362d30ef98a110f99cac1c7872df2f18"}, - {file = "ruff-0.6.1-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2e0dd11e2ae553ee5c92a81731d88a9883af8db7408db47fc81887c1f8b672e"}, - {file = "ruff-0.6.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d812615525a34ecfc07fd93f906ef5b93656be01dfae9a819e31caa6cfe758a1"}, - {file = "ruff-0.6.1-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:faaa4060f4064c3b7aaaa27328080c932fa142786f8142aff095b42b6a2eb631"}, - {file = "ruff-0.6.1-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:99d7ae0df47c62729d58765c593ea54c2546d5de213f2af2a19442d50a10cec9"}, - {file = "ruff-0.6.1-py3-none-musllinux_1_2_i686.whl", hash = "sha256:9eb18dfd7b613eec000e3738b3f0e4398bf0153cb80bfa3e351b3c1c2f6d7b15"}, - {file = "ruff-0.6.1-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:c62bc04c6723a81e25e71715aa59489f15034d69bf641df88cb38bdc32fd1dbb"}, - {file = "ruff-0.6.1-py3-none-win32.whl", hash = "sha256:9fb4c4e8b83f19c9477a8745e56d2eeef07a7ff50b68a6998f7d9e2e3887bdc4"}, - {file = "ruff-0.6.1-py3-none-win_amd64.whl", hash = "sha256:c2ebfc8f51ef4aca05dad4552bbcf6fe8d1f75b2f6af546cc47cc1c1ca916b5b"}, - {file = "ruff-0.6.1-py3-none-win_arm64.whl", hash = "sha256:3bc81074971b0ffad1bd0c52284b22411f02a11a012082a76ac6da153536e014"}, - {file = "ruff-0.6.1.tar.gz", hash = "sha256:af3ffd8c6563acb8848d33cd19a69b9bfe943667f0419ca083f8ebe4224a3436"}, + {file = "ruff-0.6.3-py3-none-linux_armv6l.whl", hash = "sha256:97f58fda4e309382ad30ede7f30e2791d70dd29ea17f41970119f55bdb7a45c3"}, + {file = "ruff-0.6.3-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:3b061e49b5cf3a297b4d1c27ac5587954ccb4ff601160d3d6b2f70b1622194dc"}, + {file = "ruff-0.6.3-py3-none-macosx_11_0_arm64.whl", hash = "sha256:34e2824a13bb8c668c71c1760a6ac7d795ccbd8d38ff4a0d8471fdb15de910b1"}, + {file = "ruff-0.6.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bddfbb8d63c460f4b4128b6a506e7052bad4d6f3ff607ebbb41b0aa19c2770d1"}, + {file = "ruff-0.6.3-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ced3eeb44df75353e08ab3b6a9e113b5f3f996bea48d4f7c027bc528ba87b672"}, + {file = "ruff-0.6.3-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:47021dff5445d549be954eb275156dfd7c37222acc1e8014311badcb9b4ec8c1"}, + {file = "ruff-0.6.3-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:7d7bd20dc07cebd68cc8bc7b3f5ada6d637f42d947c85264f94b0d1cd9d87384"}, + {file = "ruff-0.6.3-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:500f166d03fc6d0e61c8e40a3ff853fa8a43d938f5d14c183c612df1b0d6c58a"}, + {file = "ruff-0.6.3-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:42844ff678f9b976366b262fa2d1d1a3fe76f6e145bd92c84e27d172e3c34500"}, + {file = "ruff-0.6.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70452a10eb2d66549de8e75f89ae82462159855e983ddff91bc0bce6511d0470"}, + {file = "ruff-0.6.3-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:65a533235ed55f767d1fc62193a21cbf9e3329cf26d427b800fdeacfb77d296f"}, + {file = "ruff-0.6.3-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:d2e2c23cef30dc3cbe9cc5d04f2899e7f5e478c40d2e0a633513ad081f7361b5"}, + {file = "ruff-0.6.3-py3-none-musllinux_1_2_i686.whl", hash = "sha256:d8a136aa7d228975a6aee3dd8bea9b28e2b43e9444aa678fb62aeb1956ff2351"}, + {file = "ruff-0.6.3-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:f92fe93bc72e262b7b3f2bba9879897e2d58a989b4714ba6a5a7273e842ad2f8"}, + {file = "ruff-0.6.3-py3-none-win32.whl", hash = "sha256:7a62d3b5b0d7f9143d94893f8ba43aa5a5c51a0ffc4a401aa97a81ed76930521"}, + {file = "ruff-0.6.3-py3-none-win_amd64.whl", hash = "sha256:746af39356fee2b89aada06c7376e1aa274a23493d7016059c3a72e3b296befb"}, + {file = "ruff-0.6.3-py3-none-win_arm64.whl", hash = "sha256:14a9528a8b70ccc7a847637c29e56fd1f9183a9db743bbc5b8e0c4ad60592a82"}, + {file = "ruff-0.6.3.tar.gz", hash = "sha256:183b99e9edd1ef63be34a3b51fee0a9f4ab95add123dbf89a71f7b1f0c991983"}, ] [[package]] From cd7b4c5d4f0a5d269690f21feda440edba4afb59 Mon Sep 17 00:00:00 2001 From: Christopher Fenner <9592452+CFenner@users.noreply.github.com> Date: Sun, 1 Sep 2024 21:56:20 +0200 Subject: [PATCH 27/31] chore(testdata): Update Vitoair FS300E data (#31) * Update and rename VitoairFs300E.json to VitoAirFS300E.json * Update test_VitoairFs300E.py * Rename VitoAirFS300E.json to VitoairFS300E.json * Update test_VitoairFs300E.py * ignore new data points * fix test case * rename * rename --- tests/response/VitoairFs300E.json | 1479 ++++++++++++++---------- tests/test_TestForMissingProperties.py | 8 + tests/test_VitoairFs300E.py | 2 +- 3 files changed, 877 insertions(+), 612 deletions(-) diff --git a/tests/response/VitoairFs300E.json b/tests/response/VitoairFs300E.json index 767ff19a..f906ce83 100644 --- a/tests/response/VitoairFs300E.json +++ b/tests/response/VitoairFs300E.json @@ -1,631 +1,888 @@ + { - "data": [ - { - "apiVersion": 1, - "commands": { - "activate": { - "isExecutable": true, - "name": "activate", - "params": { - "timeout": { - "constraints": { - "max": 1440, - "min": 1, - "stepping": 1 - }, - "required": false, - "type": "number" - } - }, - "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.operating.programs.silent/commands/activate" - }, - "deactivate": { - "isExecutable": true, - "name": "deactivate", - "params": {}, - "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.operating.programs.silent/commands/deactivate" - }, - "setDefaultRuntime": { - "isExecutable": true, - "name": "setDefaultRuntime", - "params": { - "defaultRuntime": { - "constraints": { - "max": 1440, - "min": 1, - "stepping": 1 - }, - "required": true, - "type": "number" - } - }, - "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.operating.programs.silent/commands/setDefaultRuntime" - }, - "setTimeout": { - "isExecutable": true, - "name": "setTimeout", - "params": { - "timeout": { - "constraints": { - "max": 1440, - "min": 1, - "stepping": 1 - }, - "required": true, - "type": "number" - } - }, - "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.operating.programs.silent/commands/setTimeout" - } - }, - "deviceId": "0", - "feature": "ventilation.operating.programs.silent", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "active": { - "type": "boolean", - "value": false - }, - "defaultRuntime": { - "type": "number", - "unit": "minutes", - "value": 30 - }, - "isActiveWritable": { - "type": "boolean", - "value": true - } - }, - "timestamp": "2023-12-21T19:13:41.877Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.operating.programs.silent" + "data": [ + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "device.productIdentification", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "product": { + "type": "object", + "value": { + "busAddress": 1, + "busType": "CanExternal", + "productFamily": "B_00028_VA330", + "viessmannIdentificationNumber": "################" + } + } + }, + "timestamp": "2024-08-29T00:05:42.082Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/device.productIdentification" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "device.messages.errors.raw", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "entries": { + "type": "array", + "value": [] + } + }, + "timestamp": "2024-08-29T00:05:42.082Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/device.messages.errors.raw" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "device.serial", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "value": { + "type": "string", + "value": "################" + } + }, + "timestamp": "2024-08-29T00:05:42.082Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/device.serial" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "ventilation", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": true + } + }, + "timestamp": "2024-08-29T00:05:42.082Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "ventilation.levels.levelFour", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "volumeFlow": { + "type": "number", + "unit": "cubicMeter/hour", + "value": 260 + } + }, + "timestamp": "2024-08-29T00:05:42.082Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.levels.levelFour" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "ventilation.levels.levelOne", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "volumeFlow": { + "type": "number", + "unit": "cubicMeter/hour", + "value": 60 + } + }, + "timestamp": "2024-08-29T00:05:42.082Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.levels.levelOne" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "ventilation.levels.levelThree", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "volumeFlow": { + "type": "number", + "unit": "cubicMeter/hour", + "value": 200 + } + }, + "timestamp": "2024-08-29T00:05:42.082Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.levels.levelThree" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "ventilation.levels.levelTwo", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "volumeFlow": { + "type": "number", + "unit": "cubicMeter/hour", + "value": 140 + } + }, + "timestamp": "2024-08-29T00:05:42.082Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.levels.levelTwo" + }, + { + "apiVersion": 1, + "commands": { + "setMode": { + "isExecutable": true, + "name": "setMode", + "params": { + "mode": { + "constraints": { + "enum": [ + "permanent", + "ventilation", + "sensorOverride", + "sensorDriven" + ] + }, + "required": true, + "type": "string" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.operating.modes.active/commands/setMode" }, - { - "apiVersion": 1, - "commands": { - "activate": { - "isExecutable": true, - "name": "activate", - "params": { - "timeout": { - "constraints": { - "max": 1440, - "min": 1, - "stepping": 1 - }, - "required": false, - "type": "number" - } - }, - "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.operating.programs.forcedLevelFour/commands/activate" - }, - "deactivate": { - "isExecutable": true, - "name": "deactivate", - "params": {}, - "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.operating.programs.forcedLevelFour/commands/deactivate" - }, - "setDefaultRuntime": { - "isExecutable": true, - "name": "setDefaultRuntime", - "params": { - "defaultRuntime": { - "constraints": { - "max": 1440, - "min": 1, - "stepping": 1 - }, - "required": true, - "type": "number" - } - }, - "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.operating.programs.forcedLevelFour/commands/setDefaultRuntime" - }, - "setTimeout": { - "isExecutable": true, - "name": "setTimeout", - "params": { - "timeout": { - "constraints": { - "max": 1440, - "min": 1, - "stepping": 1 - }, - "required": true, - "type": "number" - } - }, - "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.operating.programs.forcedLevelFour/commands/setTimeout" - } - }, - "deviceId": "0", - "feature": "ventilation.operating.programs.forcedLevelFour", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "active": { - "type": "boolean", - "value": false - }, - "defaultRuntime": { - "type": "number", - "unit": "minutes", - "value": 30 - }, - "isActiveWritable": { - "type": "boolean", - "value": true - } - }, - "timestamp": "2023-12-21T19:13:17.296Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.operating.programs.forcedLevelFour" + "setModeContinuousSensorOverride": { + "isExecutable": true, + "name": "setModeContinuousSensorOverride", + "params": {}, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.operating.modes.active/commands/setModeContinuousSensorOverride" + } + }, + "deviceId": "0", + "feature": "ventilation.operating.modes.active", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "value": { + "type": "string", + "value": "permanent" + } + }, + "timestamp": "2024-08-29T00:05:42.082Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.operating.modes.active" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "ventilation.operating.modes.filterChange", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": false + } + }, + "timestamp": "2024-08-29T00:05:42.082Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.operating.modes.filterChange" + }, + { + "apiVersion": 1, + "commands": { + "setLevel": { + "isExecutable": true, + "name": "setLevel", + "params": { + "level": { + "constraints": { + "enum": [ + "levelOne", + "levelTwo", + "levelThree", + "levelFour" + ] + }, + "required": true, + "type": "string" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.operating.modes.permanent/commands/setLevel" + } + }, + "deviceId": "0", + "feature": "ventilation.operating.modes.permanent", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": true + } + }, + "timestamp": "2024-08-29T10:32:31.635Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.operating.modes.permanent" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "ventilation.operating.modes.sensorDriven", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": false + } + }, + "timestamp": "2024-08-29T00:05:42.082Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.operating.modes.sensorDriven" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "ventilation.operating.modes.sensorOverride", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": false + } + }, + "timestamp": "2024-08-29T00:05:42.082Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.operating.modes.sensorOverride" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "ventilation.operating.modes.ventilation", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": false + } + }, + "timestamp": "2024-08-29T00:05:42.082Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.operating.modes.ventilation" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "ventilation.operating.programs.active", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "value": { + "type": "string", + "value": "levelOne" + } + }, + "timestamp": "2024-08-29T10:32:31.635Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.operating.programs.active" + }, + { + "apiVersion": 1, + "commands": { + "activate": { + "isDeprecated": true, + "isExecutable": true, + "name": "activate", + "params": { + "timeout": { + "constraints": { + "max": 1440, + "min": 1, + "stepping": 1 + }, + "required": false, + "type": "number" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.operating.programs.forcedLevelFour/commands/activate" }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "ventilation.operating.modes.sensorDriven", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "active": { - "type": "boolean", - "value": false - } - }, - "timestamp": "2023-12-23T02:38:31.051Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.operating.modes.sensorDriven" + "deactivate": { + "isDeprecated": true, + "isExecutable": true, + "name": "deactivate", + "params": {}, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.operating.programs.forcedLevelFour/commands/deactivate" }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "ventilation", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "active": { - "type": "boolean", - "value": true - } - }, - "timestamp": "2023-12-23T02:38:31.051Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation" + "setDefaultRuntime": { + "isDeprecated": true, + "isExecutable": true, + "name": "setDefaultRuntime", + "params": { + "defaultRuntime": { + "constraints": { + "max": 1440, + "min": 1, + "stepping": 1 + }, + "required": true, + "type": "number" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.operating.programs.forcedLevelFour/commands/setDefaultRuntime" }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "ventilation.operating.modes.sensorOverride", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "active": { - "type": "boolean", - "value": false - } - }, - "timestamp": "2023-12-23T02:38:31.051Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.operating.modes.sensorOverride" + "setTimeout": { + "isDeprecated": true, + "isExecutable": true, + "name": "setTimeout", + "params": { + "timeout": { + "constraints": { + "max": 1440, + "min": 1, + "stepping": 1 + }, + "required": true, + "type": "number" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.operating.programs.forcedLevelFour/commands/setTimeout" + } + }, + "deprecated": { + "info": "none", + "removalDate": "2024-09-15" + }, + "deviceId": "0", + "feature": "ventilation.operating.programs.forcedLevelFour", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": false }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "ventilation.operating.programs.active", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "value": { - "type": "string", - "value": "levelThree" - } - }, - "timestamp": "2023-12-23T02:38:31.051Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.operating.programs.active" + "defaultRuntime": { + "type": "number", + "unit": "minutes", + "value": 30 }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "device.productIdentification", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "product": { - "type": "object", - "value": { - "busAddress": 1, - "busType": "CanExternal", - "productFamily": "B_00028_VA330", - "viessmannIdentificationNumber": "################" - } - } - }, - "timestamp": "2023-12-23T02:38:31.050Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/device.productIdentification" + "isActiveWritable": { + "type": "boolean", + "value": true + } + }, + "timestamp": "2024-08-29T00:05:42.082Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.operating.programs.forcedLevelFour" + }, + { + "apiVersion": 1, + "commands": {}, + "deprecated": { + "info": "none", + "removalDate": "2024-09-15" + }, + "deviceId": "0", + "feature": "ventilation.operating.programs.levelFour", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": false }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "device.messages.errors.raw", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "entries": { - "type": "array", - "value": [] - } - }, - "timestamp": "2023-12-23T02:38:31.050Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/device.messages.errors.raw" + "volumeFlow": { + "type": "number", + "unit": "cubicMeter/hour", + "value": 260 + } + }, + "timestamp": "2024-08-29T00:05:42.082Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.operating.programs.levelFour" + }, + { + "apiVersion": 1, + "commands": {}, + "deprecated": { + "info": "none", + "removalDate": "2024-09-15" + }, + "deviceId": "0", + "feature": "ventilation.operating.programs.levelOne", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": true }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "ventilation.operating.programs.standby", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "active": { - "type": "boolean", - "value": false - }, - "volumeFlow": { - "type": "number", - "unit": "cubicMeter/hour", - "value": 0 - } - }, - "timestamp": "2023-12-23T02:38:31.051Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.operating.programs.standby" + "volumeFlow": { + "type": "number", + "unit": "cubicMeter/hour", + "value": 60 + } + }, + "timestamp": "2024-08-29T10:32:31.635Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.operating.programs.levelOne" + }, + { + "apiVersion": 1, + "commands": {}, + "deprecated": { + "info": "none", + "removalDate": "2024-09-15" + }, + "deviceId": "0", + "feature": "ventilation.operating.programs.levelThree", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": false }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "ventilation.operating.modes.ventilation", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "active": { - "type": "boolean", - "value": false - } - }, - "timestamp": "2023-12-23T02:38:31.051Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.operating.modes.ventilation" + "volumeFlow": { + "type": "number", + "unit": "cubicMeter/hour", + "value": 200 + } + }, + "timestamp": "2024-08-29T00:05:42.082Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.operating.programs.levelThree" + }, + { + "apiVersion": 1, + "commands": {}, + "deprecated": { + "info": "none", + "removalDate": "2024-09-15" + }, + "deviceId": "0", + "feature": "ventilation.operating.programs.levelTwo", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": false + }, + "volumeFlow": { + "type": "number", + "unit": "cubicMeter/hour", + "value": 140 + } + }, + "timestamp": "2024-08-29T10:32:31.635Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.operating.programs.levelTwo" + }, + { + "apiVersion": 1, + "commands": { + "activate": { + "isDeprecated": true, + "isExecutable": true, + "name": "activate", + "params": { + "timeout": { + "constraints": { + "max": 1440, + "min": 1, + "stepping": 1 + }, + "required": false, + "type": "number" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.operating.programs.silent/commands/activate" + }, + "deactivate": { + "isDeprecated": true, + "isExecutable": true, + "name": "deactivate", + "params": {}, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.operating.programs.silent/commands/deactivate" + }, + "setDefaultRuntime": { + "isDeprecated": true, + "isExecutable": true, + "name": "setDefaultRuntime", + "params": { + "defaultRuntime": { + "constraints": { + "max": 1440, + "min": 1, + "stepping": 1 + }, + "required": true, + "type": "number" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.operating.programs.silent/commands/setDefaultRuntime" + }, + "setTimeout": { + "isDeprecated": true, + "isExecutable": true, + "name": "setTimeout", + "params": { + "timeout": { + "constraints": { + "max": 1440, + "min": 1, + "stepping": 1 + }, + "required": true, + "type": "number" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.operating.programs.silent/commands/setTimeout" + } + }, + "deprecated": { + "info": "none", + "removalDate": "2024-09-15" + }, + "deviceId": "0", + "feature": "ventilation.operating.programs.silent", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": false + }, + "defaultRuntime": { + "type": "number", + "unit": "minutes", + "value": 30 + }, + "isActiveWritable": { + "type": "boolean", + "value": true + } + }, + "timestamp": "2024-08-29T00:05:42.082Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.operating.programs.silent" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "ventilation.operating.programs.standby", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": false }, - { - "apiVersion": 1, - "commands": { - "setMode": { - "isExecutable": true, - "name": "setMode", - "params": { - "mode": { - "constraints": { - "enum": [ - "permanent", - "ventilation", - "sensorOverride", - "sensorDriven" - ] - }, - "required": true, - "type": "string" - } - }, - "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.operating.modes.active/commands/setMode" - }, - "setModeContinuousSensorOverride": { - "isExecutable": "true", - "name": "setModeContinuousSensorOverride", - "params": {}, - "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.operating.modes.active/commands/setModeContinuousSensorOverride" - } - }, - "deviceId": "0", - "feature": "ventilation.operating.modes.active", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "value": { - "type": "string", - "value": "permanent" - } - }, - "timestamp": "2023-12-12T10:27:42.631Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.operating.modes.active" + "volumeFlow": { + "type": "number", + "unit": "cubicMeter/hour", + "value": 0 + } + }, + "timestamp": "2024-08-29T00:05:42.082Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.operating.programs.standby" + }, + { + "apiVersion": 1, + "commands": { + "activate": { + "isExecutable": true, + "name": "activate", + "params": { + "timeout": { + "constraints": { + "max": 1440, + "min": 1, + "stepping": 1 + }, + "required": false, + "type": "number" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.quickmodes.forcedLevelFour/commands/activate" + }, + "deactivate": { + "isExecutable": true, + "name": "deactivate", + "params": {}, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.quickmodes.forcedLevelFour/commands/deactivate" + }, + "setDefaultRuntime": { + "isExecutable": true, + "name": "setDefaultRuntime", + "params": { + "defaultRuntime": { + "constraints": { + "max": 1440, + "min": 1, + "stepping": 1 + }, + "required": true, + "type": "number" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.quickmodes.forcedLevelFour/commands/setDefaultRuntime" + }, + "setTimeout": { + "isExecutable": true, + "name": "setTimeout", + "params": { + "timeout": { + "constraints": { + "max": 1440, + "min": 1, + "stepping": 1 + }, + "required": true, + "type": "number" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.quickmodes.forcedLevelFour/commands/setTimeout" + } + }, + "deviceId": "0", + "feature": "ventilation.quickmodes.forcedLevelFour", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": false }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "ventilation.operating.programs.levelOne", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "active": { - "type": "boolean", - "value": false - }, - "volumeFlow": { - "type": "number", - "unit": "cubicMeter/hour", - "value": 50 - } - }, - "timestamp": "2023-12-23T02:38:31.051Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.operating.programs.levelOne" + "defaultRuntime": { + "type": "number", + "unit": "minutes", + "value": 30 }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.boiler.serial", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "value": { - "type": "string", - "value": "################" - } - }, - "timestamp": "2023-12-23T02:38:31.052Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.boiler.serial" + "isActiveWritable": { + "type": "boolean", + "value": true + } + }, + "timestamp": "2024-08-29T00:05:42.082Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.quickmodes.forcedLevelFour" + }, + { + "apiVersion": 1, + "commands": { + "activate": { + "isExecutable": true, + "name": "activate", + "params": { + "timeout": { + "constraints": { + "max": 1440, + "min": 1, + "stepping": 1 + }, + "required": false, + "type": "number" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.quickmodes.silent/commands/activate" }, - { - "apiVersion": 1, - "commands": { - "setSchedule": { - "isExecutable": true, - "name": "setSchedule", - "params": { - "newSchedule": { - "constraints": { - "defaultMode": "levelOne", - "maxEntries": 4, - "modes": [ - "levelTwo", - "levelThree" - ], - "overlapAllowed": false, - "resolution": 10 - }, - "required": true, - "type": "Schedule" - } - }, - "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.schedule/commands/setSchedule" - } - }, - "deviceId": "0", - "feature": "ventilation.schedule", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "active": { - "type": "boolean", - "value": false - }, - "entries": { - "type": "Schedule", - "value": { - "fri": [ - { - "end": "22:00", - "mode": "levelTwo", - "position": 0, - "start": "06:00" - } - ], - "mon": [ - { - "end": "22:00", - "mode": "levelTwo", - "position": 0, - "start": "06:00" - } - ], - "sat": [ - { - "end": "22:00", - "mode": "levelTwo", - "position": 0, - "start": "06:00" - } - ], - "sun": [ - { - "end": "22:00", - "mode": "levelTwo", - "position": 0, - "start": "06:00" - } - ], - "thu": [ - { - "end": "22:00", - "mode": "levelTwo", - "position": 0, - "start": "06:00" - } - ], - "tue": [ - { - "end": "22:00", - "mode": "levelTwo", - "position": 0, - "start": "06:00" - } - ], - "wed": [ - { - "end": "22:00", - "mode": "levelTwo", - "position": 0, - "start": "06:00" - } - ] - } - } - }, - "timestamp": "2023-12-12T10:27:42.631Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.schedule" + "deactivate": { + "isExecutable": true, + "name": "deactivate", + "params": {}, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.quickmodes.silent/commands/deactivate" }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "ventilation.operating.programs.levelThree", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "active": { - "type": "boolean", - "value": true - }, - "volumeFlow": { - "type": "number", - "unit": "cubicMeter/hour", - "value": 165 - } - }, - "timestamp": "2023-12-23T02:38:31.051Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.operating.programs.levelThree" + "setDefaultRuntime": { + "isExecutable": true, + "name": "setDefaultRuntime", + "params": { + "defaultRuntime": { + "constraints": { + "max": 1440, + "min": 1, + "stepping": 1 + }, + "required": true, + "type": "number" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.quickmodes.silent/commands/setDefaultRuntime" }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "ventilation.operating.programs.levelFour", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "active": { - "type": "boolean", - "value": false - }, - "volumeFlow": { - "type": "number", - "unit": "cubicMeter/hour", - "value": 214 - } - }, - "timestamp": "2023-12-23T02:38:31.051Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.operating.programs.levelFour" + "setTimeout": { + "isExecutable": true, + "name": "setTimeout", + "params": { + "timeout": { + "constraints": { + "max": 1440, + "min": 1, + "stepping": 1 + }, + "required": true, + "type": "number" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.quickmodes.silent/commands/setTimeout" + } + }, + "deviceId": "0", + "feature": "ventilation.quickmodes.silent", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": false }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "device.serial", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "value": { - "type": "string", - "value": "################" - } - }, - "timestamp": "2023-12-23T02:38:31.051Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/device.serial" + "defaultRuntime": { + "type": "number", + "unit": "minutes", + "value": 30 }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "ventilation.operating.programs.levelTwo", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "active": { - "type": "boolean", - "value": false - }, - "volumeFlow": { - "type": "number", - "unit": "cubicMeter/hour", - "value": 115 - } - }, - "timestamp": "2023-12-23T02:38:31.051Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.operating.programs.levelTwo" + "isActiveWritable": { + "type": "boolean", + "value": true + } + }, + "timestamp": "2024-08-29T00:05:42.082Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.quickmodes.silent" + }, + { + "apiVersion": 1, + "commands": { + "resetSchedule": { + "isExecutable": false, + "name": "resetSchedule", + "params": {}, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.schedule/commands/resetSchedule" }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "ventilation.operating.modes.filterChange", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "active": { - "type": "boolean", - "value": false - } - }, - "timestamp": "2023-12-23T02:38:31.051Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.operating.modes.filterChange" + "setSchedule": { + "isExecutable": true, + "name": "setSchedule", + "params": { + "newSchedule": { + "constraints": { + "defaultMode": "levelOne", + "maxEntries": 4, + "modes": [ + "levelTwo", + "levelThree", + "levelFour" + ], + "overlapAllowed": false, + "resolution": 10 + }, + "required": true, + "type": "Schedule" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.schedule/commands/setSchedule" + } + }, + "deviceId": "0", + "feature": "ventilation.schedule", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": true }, - { - "apiVersion": 1, - "commands": { - "setLevel": { - "isExecutable": true, - "name": "setLevel", - "params": { - "level": { - "constraints": { - "enum": [ - "levelOne", - "levelTwo", - "levelThree", - "levelFour" - ] - }, - "required": true, - "type": "string" - } - }, - "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.operating.modes.permanent/commands/setLevel" - } - }, - "deviceId": "0", - "feature": "ventilation.operating.modes.permanent", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "active": { - "type": "boolean", - "value": true - } - }, - "timestamp": "2023-12-12T10:27:42.630Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.operating.modes.permanent" - } - ] -} \ No newline at end of file + "entries": { + "type": "Schedule", + "value": { + "fri": [ + { + "end": "22:00", + "mode": "levelTwo", + "position": 0, + "start": "06:00" + } + ], + "mon": [ + { + "end": "22:00", + "mode": "levelTwo", + "position": 0, + "start": "06:00" + } + ], + "sat": [ + { + "end": "22:00", + "mode": "levelTwo", + "position": 0, + "start": "06:00" + } + ], + "sun": [ + { + "end": "22:00", + "mode": "levelTwo", + "position": 0, + "start": "06:00" + } + ], + "thu": [ + { + "end": "22:00", + "mode": "levelTwo", + "position": 0, + "start": "06:00" + } + ], + "tue": [ + { + "end": "22:00", + "mode": "levelTwo", + "position": 0, + "start": "06:00" + } + ], + "wed": [ + { + "end": "22:00", + "mode": "levelTwo", + "position": 0, + "start": "06:00" + } + ] + } + } + }, + "timestamp": "2024-08-29T00:05:42.082Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.schedule" + } + ] +} diff --git a/tests/test_TestForMissingProperties.py b/tests/test_TestForMissingProperties.py index 8e97edc1..5d2d74ee 100644 --- a/tests/test_TestForMissingProperties.py +++ b/tests/test_TestForMissingProperties.py @@ -71,6 +71,14 @@ def test_missingProperties(self): # gateway 'gateway.devices', # not used + + # ventilation - not yet used + 'ventilation.levels.levelOne', + 'ventilation.levels.levelTwo', + 'ventilation.levels.levelThree', + 'ventilation.levels.levelFour', + 'ventilation.quickmodes.forcedLevelFour', + 'ventilation.quickmodes.silent', ] all_features = self.read_all_features() diff --git a/tests/test_VitoairFs300E.py b/tests/test_VitoairFs300E.py index 1dcfcbbf..36683f07 100644 --- a/tests/test_VitoairFs300E.py +++ b/tests/test_VitoairFs300E.py @@ -13,7 +13,7 @@ def test_getActiveMode(self): self.assertEqual(self.device.getActiveMode(), "permanent") def test_getActiveProgram(self): - self.assertEqual(self.device.getActiveProgram(), "levelThree") + self.assertEqual(self.device.getActiveProgram(), "levelOne") def test_getAvailableModes(self): expected_modes = ['permanent', 'ventilation', 'sensorOverride', 'sensorDriven'] From b9a08bd98c886c3408125949d091489da88766e7 Mon Sep 17 00:00:00 2001 From: Christopher Fenner <9592452+CFenner@users.noreply.github.com> Date: Mon, 2 Sep 2024 09:57:07 +0200 Subject: [PATCH 28/31] chore(renovate): use maintenance label for dev dependencies (#37) Update renovate.json --- .github/renovate.json | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/.github/renovate.json b/.github/renovate.json index eee44534..28a7f7c5 100644 --- a/.github/renovate.json +++ b/.github/renovate.json @@ -1,7 +1,17 @@ { "$schema": "https://docs.renovatebot.com/renovate-schema.json", - "labels": ["dependencies"], "extends": [ "config:recommended" + ], + "labels": ["dependencies"], + "packageRules": [ + { + "matchDepTypes": [ + "devDependencies" + ], + "labels": [ + "maintenance" + ] + } ] } From 10504bd2035a6e092a257ec3ee8ccaf75a97d8a0 Mon Sep 17 00:00:00 2001 From: Christopher Fenner <9592452+CFenner@users.noreply.github.com> Date: Mon, 2 Sep 2024 09:57:35 +0200 Subject: [PATCH 29/31] chore(testdata): Update Vitocal 300G testdata (#32) * Update Vitocal300G.json * adjust test cases * ignore undocumented data points --- tests/response/Vitocal300G.json | 3627 +++++++++++++----------- tests/test_TestForMissingProperties.py | 13 +- tests/test_Vitocal300G.py | 35 +- 3 files changed, 2024 insertions(+), 1651 deletions(-) diff --git a/tests/response/Vitocal300G.json b/tests/response/Vitocal300G.json index 1ffa7aa3..1f1dc473 100644 --- a/tests/response/Vitocal300G.json +++ b/tests/response/Vitocal300G.json @@ -2,2580 +2,2959 @@ "data": [ { "apiVersion": 1, - "isEnabled": true, - "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.737Z", - "properties": {}, "commands": {}, - "components": [ - "boiler", - "circuits", - "compressors", - "device", - "dhw", - "sensors", - "operating", - "solar" - ] - }, - { - "apiVersion": 1, - "isEnabled": true, - "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.boiler", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.boiler", "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.737Z", - "properties": {}, - "commands": {}, - "components": ["sensors", "serial"] - }, - { - "apiVersion": 1, + "feature": "device.messages.errors.raw", + "gatewayId": "################", "isEnabled": true, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.boiler.sensors", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.boiler.sensors", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.737Z", - "properties": {}, - "commands": {}, - "components": [] + "properties": { + "entries": { + "type": "array", + "value": [] + } + }, + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/device.messages.errors.raw" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "device.serial", + "gatewayId": "################", "isEnabled": true, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.boiler.serial", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.boiler.serial", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.737Z", "properties": { - "value": { "type": "string", "value": "zzzzzzzzzzzzzzzz" } + "value": { + "type": "string", + "value": "################" + } }, - "commands": {}, - "components": [] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/device.serial" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.boiler.sensors.temperature.commonSupply", + "gatewayId": "################", "isEnabled": true, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.boiler.sensors.temperature.commonSupply", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.boiler.sensors.temperature.commonSupply", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.737Z", - "properties": { "status": { "type": "string", "value": "notConnected" } }, - "commands": {}, - "components": [] + "properties": { + "status": { + "type": "string", + "value": "notConnected" + } + }, + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.boiler.sensors.temperature.commonSupply" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.boiler.serial", + "gatewayId": "################", "isEnabled": true, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.737Z", - "properties": { "enabled": { "type": "array", "value": ["0"] } }, - "commands": {}, - "components": ["0", "1", "2"] + "properties": { + "value": { + "type": "string", + "value": "################" + } + }, + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.boiler.serial" }, { "apiVersion": 1, + "commands": {}, + "deprecated": { + "info": "replaced by heating.bufferCylinder.sensors.temperature.main", + "removalDate": "2024-09-15" + }, + "deviceId": "0", + "feature": "heating.buffer.sensors.temperature.main", + "gatewayId": "################", "isEnabled": true, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.0", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.0", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.737Z", "properties": { - "active": { "type": "boolean", "value": true }, - "name": { "type": "string", "value": "" } - }, - "commands": { - "setName": { - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.0/commands/setName", - "name": "setName", - "isExecutable": true, - "params": { - "name": { - "required": true, - "type": "string", - "constraints": { "minLength": 1, "maxLength": 20 } - } - } + "status": { + "type": "string", + "value": "connected" + }, + "value": { + "type": "number", + "unit": "celsius", + "value": 35.6 } }, - "components": [ - "circulation", - "frostprotection", - "heating", - "operating", - "sensors" - ] + "timestamp": "2024-08-29T10:32:51.687Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.buffer.sensors.temperature.main" }, { "apiVersion": 1, - "isEnabled": false, - "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.1", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.1", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.737Z", - "properties": {}, "commands": {}, - "components": [ - "circulation", - "frostprotection", - "heating", - "operating", - "sensors" - ] - }, - { - "apiVersion": 1, - "isEnabled": false, - "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.2", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.2", + "deprecated": { + "info": "replaced by heating.bufferCylinder.sensors.temperature.top", + "removalDate": "2024-09-15" + }, "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.737Z", - "properties": {}, - "commands": {}, - "components": [ - "circulation", - "frostprotection", - "heating", - "operating", - "sensors" - ] - }, - { - "apiVersion": 1, + "feature": "heating.buffer.sensors.temperature.top", + "gatewayId": "################", "isEnabled": true, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.0.circulation", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.0.circulation", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.737Z", - "properties": {}, - "commands": {}, - "components": ["pump"] + "properties": { + "status": { + "type": "string", + "value": "connected" + }, + "value": { + "type": "number", + "unit": "celsius", + "value": 35.6 + } + }, + "timestamp": "2024-08-29T10:32:51.687Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.buffer.sensors.temperature.top" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.bufferCylinder.sensors.temperature.main", + "gatewayId": "################", "isEnabled": true, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.1.circulation", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.1.circulation", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.737Z", - "properties": {}, - "commands": {}, - "components": ["pump"] + "properties": { + "status": { + "type": "string", + "value": "connected" + }, + "value": { + "type": "number", + "unit": "celsius", + "value": 35.6 + } + }, + "timestamp": "2024-08-29T10:32:51.687Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.bufferCylinder.sensors.temperature.main" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.bufferCylinder.sensors.temperature.top", + "gatewayId": "################", "isEnabled": true, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.2.circulation", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.2.circulation", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.737Z", - "properties": {}, - "commands": {}, - "components": ["pump"] + "properties": { + "status": { + "type": "string", + "value": "connected" + }, + "value": { + "type": "number", + "unit": "celsius", + "value": 35.6 + } + }, + "timestamp": "2024-08-29T10:32:51.687Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.bufferCylinder.sensors.temperature.top" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits", + "gatewayId": "################", "isEnabled": true, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.0.circulation.pump", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.0.circulation.pump", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.737Z", - "properties": { "status": { "type": "string", "value": "off" } }, - "commands": {}, - "components": [] + "properties": { + "enabled": { + "type": "array", + "value": [ + "1" + ] + } + }, + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits" }, { "apiVersion": 1, - "isEnabled": false, - "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.1.circulation.pump", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.1.circulation.pump", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.737Z", - "properties": {}, "commands": {}, - "components": [] - }, - { - "apiVersion": 1, + "deviceId": "0", + "feature": "heating.circuits.0.circulation.pump", + "gatewayId": "################", "isEnabled": false, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.2.circulation.pump", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.2.circulation.pump", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.737Z", "properties": {}, - "commands": {}, - "components": [] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.circulation.pump" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.1.circulation.pump", + "gatewayId": "################", "isEnabled": true, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.0.frostprotection", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.0.frostprotection", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.737Z", - "properties": { "status": { "type": "string", "value": "off" } }, - "commands": {}, - "components": [] + "properties": { + "status": { + "type": "string", + "value": "off" + } + }, + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.circulation.pump" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.circulation.pump", + "gatewayId": "################", "isEnabled": false, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.1.frostprotection", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.1.frostprotection", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.737Z", "properties": {}, - "commands": {}, - "components": [] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.circulation.pump" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.frostprotection", + "gatewayId": "################", "isEnabled": false, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.2.frostprotection", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.2.frostprotection", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.737Z", "properties": {}, - "commands": {}, - "components": [] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.frostprotection" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.1.frostprotection", + "gatewayId": "################", "isEnabled": true, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.0.heating", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.0.heating", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.737Z", - "properties": {}, - "commands": {}, - "components": ["curve", "schedule"] + "properties": { + "status": { + "type": "string", + "value": "off" + } + }, + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.frostprotection" }, { "apiVersion": 1, - "isEnabled": true, - "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.1.heating", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.1.heating", + "commands": {}, "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.737Z", + "feature": "heating.circuits.2.frostprotection", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, "properties": {}, - "commands": {}, - "components": ["curve", "schedule"] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.frostprotection" }, { "apiVersion": 1, - "isEnabled": true, - "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.2.heating", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.2.heating", + "commands": {}, "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.737Z", + "feature": "heating.circuits.0.heating.curve", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, "properties": {}, - "commands": {}, - "components": ["curve", "schedule"] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.heating.curve" }, { "apiVersion": 1, - "isEnabled": true, - "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.0.heating.curve", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.0.heating.curve", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.737Z", - "properties": { - "shift": { "type": "number", "value": -5 }, - "slope": { "type": "number", "value": 0.8 } - }, "commands": { "setCurve": { - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.0.heating.curve/commands/setCurve", - "name": "setCurve", "isExecutable": true, + "name": "setCurve", "params": { - "slope": { + "shift": { + "constraints": { + "max": 40, + "min": -15, + "stepping": 1 + }, "required": true, - "type": "number", - "constraints": { "min": 0, "max": 3.5, "stepping": 0.1 } + "type": "number" }, - "shift": { + "slope": { + "constraints": { + "max": 3.5, + "min": 0, + "stepping": 0.1 + }, "required": true, - "type": "number", - "constraints": { "min": -15, "max": 40, "stepping": 1 } + "type": "number" } - } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.heating.curve/commands/setCurve" + } + }, + "deviceId": "0", + "feature": "heating.circuits.1.heating.curve", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "shift": { + "type": "number", + "unit": "", + "value": 0 + }, + "slope": { + "type": "number", + "unit": "", + "value": 0.4 } }, - "components": [] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.heating.curve" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.heating.curve", + "gatewayId": "################", "isEnabled": false, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.1.heating.curve", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.1.heating.curve", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.737Z", "properties": {}, - "commands": {}, - "components": [] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.heating.curve" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.heating.schedule", + "gatewayId": "################", "isEnabled": false, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.2.heating.curve", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.2.heating.curve", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.737Z", "properties": {}, - "commands": {}, - "components": [] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.heating.schedule" }, { "apiVersion": 1, + "commands": { + "resetSchedule": { + "isExecutable": false, + "name": "resetSchedule", + "params": {}, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.heating.schedule/commands/resetSchedule" + }, + "setSchedule": { + "isExecutable": true, + "name": "setSchedule", + "params": { + "newSchedule": { + "constraints": { + "defaultMode": "standby", + "maxEntries": 8, + "modes": [ + "reduced", + "normal", + "fixed" + ], + "overlapAllowed": true, + "resolution": 10 + }, + "required": true, + "type": "Schedule" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.heating.schedule/commands/setSchedule" + } + }, + "deviceId": "0", + "feature": "heating.circuits.1.heating.schedule", + "gatewayId": "################", "isEnabled": true, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.0.heating.schedule", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.0.heating.schedule", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.737Z", "properties": { - "active": { "type": "boolean", "value": false }, + "active": { + "type": "boolean", + "value": true + }, "entries": { "type": "Schedule", "value": { - "mon": [ + "fri": [ { - "start": "00:00", "end": "24:00", "mode": "normal", - "position": 0 + "position": 0, + "start": "00:00" } ], - "tue": [ + "mon": [ { - "start": "00:00", "end": "24:00", "mode": "normal", - "position": 0 + "position": 0, + "start": "00:00" } ], - "wed": [ + "sat": [ { - "start": "00:00", "end": "24:00", "mode": "normal", - "position": 0 + "position": 0, + "start": "00:00" } ], - "thu": [ + "sun": [ { - "start": "00:00", "end": "24:00", "mode": "normal", - "position": 0 + "position": 0, + "start": "00:00" } ], - "fri": [ + "thu": [ { - "start": "00:00", "end": "24:00", "mode": "normal", - "position": 0 + "position": 0, + "start": "00:00" } ], - "sat": [ + "tue": [ { - "start": "00:00", "end": "24:00", "mode": "normal", - "position": 0 + "position": 0, + "start": "00:00" } ], - "sun": [ + "wed": [ { - "start": "00:00", "end": "24:00", "mode": "normal", - "position": 0 + "position": 0, + "start": "00:00" } ] } - }, - "overlapAllowed": { "type": "boolean", "value": true } - }, - "commands": { - "setSchedule": { - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.0.heating.schedule/commands/setSchedule", - "name": "setSchedule", - "isExecutable": true, - "params": { - "newSchedule": { - "required": true, - "type": "Schedule", - "constraints": { - "maxEntries": 8, - "resolution": 10, - "modes": ["reduced", "normal", "fixed"], - "defaultMode": "standby" - } - } - } } }, - "components": [] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.heating.schedule" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.heating.schedule", + "gatewayId": "################", "isEnabled": false, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.1.heating.schedule", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.1.heating.schedule", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.737Z", "properties": {}, - "commands": {}, - "components": [] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.heating.schedule" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.modes.active", + "gatewayId": "################", "isEnabled": false, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.2.heating.schedule", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.2.heating.schedule", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.737Z", "properties": {}, - "commands": {}, - "components": [] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.modes.active" }, { "apiVersion": 1, + "commands": { + "setMode": { + "isExecutable": true, + "name": "setMode", + "params": { + "mode": { + "constraints": { + "enum": [ + "dhw", + "dhwAndHeating", + "standby" + ] + }, + "required": true, + "type": "string" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.modes.active/commands/setMode" + } + }, + "deviceId": "0", + "feature": "heating.circuits.1.operating.modes.active", + "gatewayId": "################", "isEnabled": true, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.0.operating", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.0.operating", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.737Z", - "properties": {}, - "commands": {}, - "components": ["modes", "programs"] + "properties": { + "value": { + "type": "string", + "value": "dhwAndHeating" + } + }, + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.modes.active" }, { "apiVersion": 1, - "isEnabled": true, - "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.1.operating", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.1.operating", + "commands": {}, "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.737Z", + "feature": "heating.circuits.2.operating.modes.active", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, "properties": {}, - "commands": {}, - "components": ["modes", "programs"] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.modes.active" }, { "apiVersion": 1, - "isEnabled": true, - "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.2.operating", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.2.operating", + "commands": {}, "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.737Z", + "feature": "heating.circuits.0.operating.modes.cooling", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, "properties": {}, - "commands": {}, - "components": ["modes", "programs"] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.modes.cooling" }, { "apiVersion": 1, - "isEnabled": true, - "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.0.operating.modes", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.0.operating.modes", + "commands": {}, "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.737Z", + "feature": "heating.circuits.1.operating.modes.cooling", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, "properties": {}, - "commands": {}, - "components": [ - "active", - "dhw", - "heating", - "cooling", - "heatingCooling", - "dhwAndHeating", - "dhwAndHeatingCooling", - "standby", - "normalStandby" - ] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.modes.cooling" }, { "apiVersion": 1, - "isEnabled": true, - "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.1.operating.modes", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.1.operating.modes", + "commands": {}, "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.737Z", + "feature": "heating.circuits.2.operating.modes.cooling", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, "properties": {}, - "commands": {}, - "components": [ - "active", - "dhw", - "heating", - "cooling", - "heatingCooling", - "dhwAndHeating", - "dhwAndHeatingCooling", - "standby", - "normalStandby" - ] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.modes.cooling" }, { "apiVersion": 1, - "isEnabled": true, - "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.2.operating.modes", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.2.operating.modes", + "commands": {}, "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.737Z", + "feature": "heating.circuits.0.operating.modes.dhw", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, "properties": {}, - "commands": {}, - "components": [ - "active", - "dhw", - "heating", - "cooling", - "heatingCooling", - "dhwAndHeating", - "dhwAndHeatingCooling", - "standby", - "normalStandby" - ] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.modes.dhw" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.1.operating.modes.dhw", + "gatewayId": "################", "isEnabled": true, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.0.operating.modes.active", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.0.operating.modes.active", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.737Z", - "properties": { "value": { "type": "string", "value": "dhw" } }, - "commands": { - "setMode": { - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.0.operating.modes.active/commands/setMode", - "name": "setMode", - "isExecutable": true, - "params": { - "mode": { - "required": true, - "type": "string", - "constraints": { - "enum": [ - "dhw", - "dhwAndHeating", - "forcedNormal", - "forcedReduced", - "standby", - "normalStandby" - ] - } - } - } + "properties": { + "active": { + "type": "boolean", + "value": false } }, - "components": [] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.modes.dhw" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.operating.modes.dhw", + "gatewayId": "################", "isEnabled": false, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.1.operating.modes.active", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.1.operating.modes.active", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.744Z", "properties": {}, - "commands": {}, - "components": [] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.modes.dhw" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.modes.dhwAndHeating", + "gatewayId": "################", "isEnabled": false, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.2.operating.modes.active", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.2.operating.modes.active", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.744Z", "properties": {}, - "commands": {}, - "components": [] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.modes.dhwAndHeating" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.1.operating.modes.dhwAndHeating", + "gatewayId": "################", "isEnabled": true, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.0.operating.modes.dhw", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.0.operating.modes.dhw", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.744Z", - "properties": { "active": { "type": "boolean", "value": true } }, - "commands": {}, - "components": [] + "properties": { + "active": { + "type": "boolean", + "value": true + } + }, + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.modes.dhwAndHeating" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.operating.modes.dhwAndHeating", + "gatewayId": "################", "isEnabled": false, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.1.operating.modes.dhw", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.1.operating.modes.dhw", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.748Z", "properties": {}, - "commands": {}, - "components": [] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.modes.dhwAndHeating" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.modes.dhwAndHeatingCooling", + "gatewayId": "################", "isEnabled": false, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.2.operating.modes.dhw", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.2.operating.modes.dhw", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.748Z", "properties": {}, - "commands": {}, - "components": [] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.modes.dhwAndHeatingCooling" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.1.operating.modes.dhwAndHeatingCooling", + "gatewayId": "################", "isEnabled": false, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.0.operating.modes.heating", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.0.operating.modes.heating", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.748Z", "properties": {}, - "commands": {}, - "components": [] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.modes.dhwAndHeatingCooling" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.operating.modes.dhwAndHeatingCooling", + "gatewayId": "################", "isEnabled": false, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.1.operating.modes.heating", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.1.operating.modes.heating", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.748Z", "properties": {}, - "commands": {}, - "components": [] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.modes.dhwAndHeatingCooling" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.modes.forcedNormal", + "gatewayId": "################", "isEnabled": false, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.2.operating.modes.heating", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.2.operating.modes.heating", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.748Z", "properties": {}, - "commands": {}, - "components": [] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.modes.forcedNormal" }, { "apiVersion": 1, - "isEnabled": false, - "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.0.operating.modes.cooling", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.0.operating.modes.cooling", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.748Z", - "properties": {}, "commands": {}, - "components": [] + "deviceId": "0", + "feature": "heating.circuits.1.operating.modes.forcedNormal", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": false + } + }, + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.modes.forcedNormal" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.operating.modes.forcedNormal", + "gatewayId": "################", "isEnabled": false, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.1.operating.modes.cooling", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.1.operating.modes.cooling", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.748Z", "properties": {}, - "commands": {}, - "components": [] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.modes.forcedNormal" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.modes.forcedReduced", + "gatewayId": "################", "isEnabled": false, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.2.operating.modes.cooling", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.2.operating.modes.cooling", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.748Z", "properties": {}, - "commands": {}, - "components": [] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.modes.forcedReduced" }, { "apiVersion": 1, - "isEnabled": false, - "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.0.operating.modes.heatingCooling", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.0.operating.modes.heatingCooling", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.748Z", - "properties": {}, "commands": {}, - "components": [] + "deviceId": "0", + "feature": "heating.circuits.1.operating.modes.forcedReduced", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": false + } + }, + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.modes.forcedReduced" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.operating.modes.forcedReduced", + "gatewayId": "################", "isEnabled": false, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.1.operating.modes.heatingCooling", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.1.operating.modes.heatingCooling", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.748Z", "properties": {}, - "commands": {}, - "components": [] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.modes.forcedReduced" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.modes.heating", + "gatewayId": "################", "isEnabled": false, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.2.operating.modes.heatingCooling", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.2.operating.modes.heatingCooling", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.748Z", "properties": {}, - "commands": {}, - "components": [] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.modes.heating" }, { "apiVersion": 1, - "isEnabled": true, - "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.0.operating.modes.dhwAndHeating", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.0.operating.modes.dhwAndHeating", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.748Z", - "properties": { "active": { "type": "boolean", "value": false } }, "commands": {}, - "components": [] + "deviceId": "0", + "feature": "heating.circuits.1.operating.modes.heating", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.modes.heating" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.operating.modes.heating", + "gatewayId": "################", "isEnabled": false, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.1.operating.modes.dhwAndHeating", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.1.operating.modes.dhwAndHeating", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.752Z", "properties": {}, - "commands": {}, - "components": [] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.modes.heating" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.modes.heatingCooling", + "gatewayId": "################", "isEnabled": false, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.2.operating.modes.dhwAndHeating", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.2.operating.modes.dhwAndHeating", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.752Z", "properties": {}, - "commands": {}, - "components": [] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.modes.heatingCooling" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.1.operating.modes.heatingCooling", + "gatewayId": "################", "isEnabled": false, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.0.operating.modes.dhwAndHeatingCooling", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.0.operating.modes.dhwAndHeatingCooling", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.752Z", "properties": {}, - "commands": {}, - "components": [] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.modes.heatingCooling" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.operating.modes.heatingCooling", + "gatewayId": "################", "isEnabled": false, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.1.operating.modes.dhwAndHeatingCooling", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.1.operating.modes.dhwAndHeatingCooling", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.752Z", "properties": {}, - "commands": {}, - "components": [] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.modes.heatingCooling" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.modes.normalStandby", + "gatewayId": "################", "isEnabled": false, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.2.operating.modes.dhwAndHeatingCooling", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.2.operating.modes.dhwAndHeatingCooling", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.752Z", "properties": {}, - "commands": {}, - "components": [] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.modes.normalStandby" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.1.operating.modes.normalStandby", + "gatewayId": "################", "isEnabled": true, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.0.operating.modes.standby", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.0.operating.modes.standby", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.752Z", - "properties": { "active": { "type": "boolean", "value": false } }, - "commands": {}, - "components": [] + "properties": { + "active": { + "type": "boolean", + "value": false + } + }, + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.modes.normalStandby" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.operating.modes.normalStandby", + "gatewayId": "################", "isEnabled": false, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.1.operating.modes.standby", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.1.operating.modes.standby", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.752Z", "properties": {}, - "commands": {}, - "components": [] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.modes.normalStandby" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.modes.standby", + "gatewayId": "################", "isEnabled": false, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.2.operating.modes.standby", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.2.operating.modes.standby", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.752Z", "properties": {}, - "commands": {}, - "components": [] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.modes.standby" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.1.operating.modes.standby", + "gatewayId": "################", "isEnabled": true, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.0.operating.modes.normalStandby", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.0.operating.modes.normalStandby", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.752Z", - "properties": { "active": { "type": "boolean", "value": false } }, - "commands": {}, - "components": [] + "properties": { + "active": { + "type": "boolean", + "value": false + } + }, + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.modes.standby" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.operating.modes.standby", + "gatewayId": "################", "isEnabled": false, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.1.operating.modes.normalStandby", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.1.operating.modes.normalStandby", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.752Z", "properties": {}, - "commands": {}, - "components": [] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.modes.standby" }, { "apiVersion": 1, - "isEnabled": false, - "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.2.operating.modes.normalStandby", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.2.operating.modes.normalStandby", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.752Z", - "properties": {}, "commands": {}, - "components": [] - }, - { - "apiVersion": 1, - "isEnabled": true, - "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.0.operating.programs", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.0.operating.programs", "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.752Z", - "properties": {}, - "commands": {}, - "components": [ - "active", - "comfort", - "eco", - "fixed", - "holiday", - "normal", - "reduced", - "standby" - ] - }, - { - "apiVersion": 1, - "isEnabled": true, + "feature": "heating.circuits.0.operating.programs.active", + "gatewayId": "################", + "isEnabled": false, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.1.operating.programs", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.1.operating.programs", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.752Z", "properties": {}, - "commands": {}, - "components": [ - "active", - "comfort", - "eco", - "fixed", - "holiday", - "normal", - "reduced", - "standby" - ] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.active" }, { "apiVersion": 1, - "isEnabled": true, - "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.2.operating.programs", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.2.operating.programs", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.752Z", - "properties": {}, "commands": {}, - "components": [ - "active", - "comfort", - "eco", - "fixed", - "holiday", - "normal", - "reduced", - "standby" - ] - }, - { - "apiVersion": 1, + "deviceId": "0", + "feature": "heating.circuits.1.operating.programs.active", + "gatewayId": "################", "isEnabled": true, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.0.operating.programs.active", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.0.operating.programs.active", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.752Z", - "properties": { "value": { "type": "string", "value": "standby" } }, - "commands": {}, - "components": [] + "properties": { + "value": { + "type": "string", + "value": "normal" + } + }, + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.active" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.operating.programs.active", + "gatewayId": "################", "isEnabled": false, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.1.operating.programs.active", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.1.operating.programs.active", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.756Z", "properties": {}, - "commands": {}, - "components": [] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.active" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.programs.comfort", + "gatewayId": "################", "isEnabled": false, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.2.operating.programs.active", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.2.operating.programs.active", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.756Z", "properties": {}, - "commands": {}, - "components": [] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.comfort" }, { "apiVersion": 1, - "isEnabled": true, - "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.0.operating.programs.comfort", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.0.operating.programs.comfort", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.756Z", - "properties": { - "active": { "type": "boolean", "value": false }, - "temperature": { "type": "number", "value": 20 } - }, "commands": { + "activate": { + "isExecutable": true, + "name": "activate", + "params": { + "temperature": { + "constraints": { + "max": 30, + "min": 10, + "stepping": 1 + }, + "required": false, + "type": "number" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.comfort/commands/activate" + }, + "deactivate": { + "isExecutable": true, + "name": "deactivate", + "params": {}, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.comfort/commands/deactivate" + }, "setTemperature": { - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.0.operating.programs.comfort/commands/setTemperature", - "name": "setTemperature", "isExecutable": true, + "name": "setTemperature", "params": { "targetTemperature": { + "constraints": { + "max": 30, + "min": 10, + "stepping": 1 + }, "required": true, - "type": "number", - "constraints": { "min": 10, "max": 30, "stepping": 1 } + "type": "number" } - } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.comfort/commands/setTemperature" + } + }, + "deviceId": "0", + "feature": "heating.circuits.1.operating.programs.comfort", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": false }, - "activate": { - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.0.operating.programs.comfort/commands/activate", - "name": "activate", - "isExecutable": true, - "params": {} + "demand": { + "type": "string", + "value": "unknown" }, - "deactivate": { - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.0.operating.programs.comfort/commands/deactivate", - "name": "deactivate", - "isExecutable": false, - "params": {} + "temperature": { + "type": "number", + "unit": "celsius", + "value": 20 } }, - "components": [] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.comfort" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.operating.programs.comfort", + "gatewayId": "################", "isEnabled": false, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.1.operating.programs.comfort", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.1.operating.programs.comfort", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.756Z", "properties": {}, - "commands": {}, - "components": [] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.comfort" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.programs.eco", + "gatewayId": "################", "isEnabled": false, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.2.operating.programs.comfort", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.2.operating.programs.comfort", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.756Z", "properties": {}, - "commands": {}, - "components": [] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.eco" }, { "apiVersion": 1, - "isEnabled": true, - "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.0.operating.programs.eco", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.0.operating.programs.eco", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.756Z", - "properties": { - "active": { "type": "boolean", "value": false }, - "temperature": { "type": "number", "value": 20 } - }, "commands": { "activate": { - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.0.operating.programs.eco/commands/activate", + "isExecutable": true, "name": "activate", - "isExecutable": false, - "params": {} + "params": {}, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.eco/commands/activate" }, "deactivate": { - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.0.operating.programs.eco/commands/deactivate", + "isExecutable": true, "name": "deactivate", - "isExecutable": false, - "params": {} + "params": {}, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.eco/commands/deactivate" + } + }, + "deviceId": "0", + "feature": "heating.circuits.1.operating.programs.eco", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": false + }, + "temperature": { + "type": "number", + "unit": "celsius", + "value": 20 } }, - "components": [] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.eco" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.operating.programs.eco", + "gatewayId": "################", "isEnabled": false, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.1.operating.programs.eco", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.1.operating.programs.eco", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.759Z", "properties": {}, - "commands": {}, - "components": [] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.eco" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.programs.fixed", + "gatewayId": "################", "isEnabled": false, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.2.operating.programs.eco", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.2.operating.programs.eco", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.759Z", "properties": {}, - "commands": {}, - "components": [] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.fixed" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.1.operating.programs.fixed", + "gatewayId": "################", "isEnabled": true, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.0.operating.programs.fixed", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.0.operating.programs.fixed", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.759Z", - "properties": { "active": { "type": "boolean", "value": false } }, - "commands": {}, - "components": [] + "properties": { + "active": { + "type": "boolean", + "value": false + } + }, + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.fixed" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.operating.programs.fixed", + "gatewayId": "################", "isEnabled": false, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.1.operating.programs.fixed", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.1.operating.programs.fixed", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.759Z", "properties": {}, - "commands": {}, - "components": [] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.fixed" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.programs.normal", + "gatewayId": "################", "isEnabled": false, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.2.operating.programs.fixed", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.2.operating.programs.fixed", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.759Z", "properties": {}, - "commands": {}, - "components": [] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.normal" }, { "apiVersion": 1, + "commands": { + "setTemperature": { + "isExecutable": true, + "name": "setTemperature", + "params": { + "targetTemperature": { + "constraints": { + "max": 30, + "min": 10, + "stepping": 1 + }, + "required": true, + "type": "number" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.normal/commands/setTemperature" + } + }, + "deviceId": "0", + "feature": "heating.circuits.1.operating.programs.normal", + "gatewayId": "################", "isEnabled": true, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.0.operating.programs.holiday", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.0.operating.programs.holiday", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.759Z", "properties": { - "active": { "type": "boolean", "value": false }, - "start": { "type": "string", "value": "" }, - "end": { "type": "string", "value": "" } - }, - "commands": { - "changeEndDate": { - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.0.operating.programs.holiday/commands/changeEndDate", - "name": "changeEndDate", - "isExecutable": false, - "params": { - "end": { "required": true, "type": "string", "constraints": {} } - } + "active": { + "type": "boolean", + "value": true }, - "schedule": { - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.0.operating.programs.holiday/commands/schedule", - "name": "schedule", - "isExecutable": true, - "params": { - "start": { "required": true, "type": "string", "constraints": {} }, - "end": { "required": true, "type": "string", "constraints": {} } - } + "demand": { + "type": "string", + "value": "unknown" }, - "unschedule": { - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.0.operating.programs.holiday/commands/unschedule", - "name": "unschedule", - "isExecutable": true, - "params": {} + "temperature": { + "type": "number", + "unit": "celsius", + "value": 20 } }, - "components": [] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.normal" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.operating.programs.normal", + "gatewayId": "################", "isEnabled": false, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.1.operating.programs.holiday", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.1.operating.programs.holiday", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.759Z", "properties": {}, - "commands": {}, - "components": [] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.normal" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.programs.reduced", + "gatewayId": "################", "isEnabled": false, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.2.operating.programs.holiday", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.2.operating.programs.holiday", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.759Z", "properties": {}, - "commands": {}, - "components": [] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.reduced" }, { "apiVersion": 1, - "isEnabled": true, - "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.0.operating.programs.normal", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.0.operating.programs.normal", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.759Z", - "properties": { - "active": { "type": "boolean", "value": false }, - "temperature": { "type": "number", "value": 20 } - }, "commands": { "setTemperature": { - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.0.operating.programs.normal/commands/setTemperature", - "name": "setTemperature", "isExecutable": true, + "name": "setTemperature", "params": { "targetTemperature": { + "constraints": { + "max": 30, + "min": 10, + "stepping": 1 + }, "required": true, - "type": "number", - "constraints": { "min": 10, "max": 30, "stepping": 1 } + "type": "number" } - } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.reduced/commands/setTemperature" } }, - "components": [] + "deviceId": "0", + "feature": "heating.circuits.1.operating.programs.reduced", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": false + }, + "demand": { + "type": "string", + "value": "unknown" + }, + "temperature": { + "type": "number", + "unit": "celsius", + "value": 16 + } + }, + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.reduced" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.operating.programs.reduced", + "gatewayId": "################", "isEnabled": false, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.1.operating.programs.normal", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.1.operating.programs.normal", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.759Z", "properties": {}, - "commands": {}, - "components": [] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.reduced" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.programs.standby", + "gatewayId": "################", "isEnabled": false, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.2.operating.programs.normal", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.2.operating.programs.normal", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.759Z", "properties": {}, - "commands": {}, - "components": [] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.standby" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.1.operating.programs.standby", + "gatewayId": "################", "isEnabled": true, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.0.operating.programs.reduced", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.0.operating.programs.reduced", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.759Z", "properties": { - "active": { "type": "boolean", "value": false }, - "temperature": { "type": "number", "value": 16 } - }, - "commands": { - "setTemperature": { - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.0.operating.programs.reduced/commands/setTemperature", - "name": "setTemperature", - "isExecutable": true, - "params": { - "targetTemperature": { - "required": true, - "type": "number", - "constraints": { "min": 10, "max": 30, "stepping": 1 } - } - } + "active": { + "type": "boolean", + "value": false } }, - "components": [] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.standby" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.operating.programs.standby", + "gatewayId": "################", "isEnabled": false, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.1.operating.programs.reduced", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.1.operating.programs.reduced", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.759Z", "properties": {}, - "commands": {}, - "components": [] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.standby" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.sensors.temperature.room", + "gatewayId": "################", "isEnabled": false, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.2.operating.programs.reduced", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.2.operating.programs.reduced", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.759Z", "properties": {}, - "commands": {}, - "components": [] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.sensors.temperature.room" }, { "apiVersion": 1, - "isEnabled": true, - "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.0.operating.programs.standby", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.0.operating.programs.standby", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.759Z", - "properties": { "active": { "type": "boolean", "value": true } }, "commands": {}, - "components": [] + "deviceId": "0", + "feature": "heating.circuits.1.sensors.temperature.room", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.sensors.temperature.room" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.sensors.temperature.room", + "gatewayId": "################", "isEnabled": false, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.1.operating.programs.standby", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.1.operating.programs.standby", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.759Z", "properties": {}, - "commands": {}, - "components": [] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.sensors.temperature.room" }, { "apiVersion": 1, - "isEnabled": false, - "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.2.operating.programs.standby", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.2.operating.programs.standby", + "commands": {}, "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.759Z", + "feature": "heating.circuits.0.sensors.temperature.supply", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, "properties": {}, - "commands": {}, - "components": [] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.sensors.temperature.supply" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.1.sensors.temperature.supply", + "gatewayId": "################", "isEnabled": true, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.0.sensors", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.0.sensors", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.759Z", - "properties": {}, - "commands": {}, - "components": ["temperature"] + "properties": { + "status": { + "type": "string", + "value": "connected" + }, + "value": { + "type": "number", + "unit": "celsius", + "value": 26.6 + } + }, + "timestamp": "2024-08-29T09:56:51.490Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.sensors.temperature.supply" }, { "apiVersion": 1, - "isEnabled": true, - "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.1.sensors", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.1.sensors", + "commands": {}, "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.759Z", + "feature": "heating.circuits.2.sensors.temperature.supply", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, "properties": {}, - "commands": {}, - "components": ["temperature"] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.sensors.temperature.supply" }, { "apiVersion": 1, - "isEnabled": true, - "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.2.sensors", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.2.sensors", + "commands": {}, "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.759Z", + "feature": "heating.circuits.0.temperature", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, "properties": {}, - "commands": {}, - "components": ["temperature"] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.temperature" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.1.temperature", + "gatewayId": "################", "isEnabled": true, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.0.sensors.temperature", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.0.sensors.temperature", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.759Z", - "properties": {}, - "commands": {}, - "components": ["room", "supply"] + "properties": { + "value": { + "type": "number", + "unit": "celsius", + "value": 0 + } + }, + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.temperature" }, { "apiVersion": 1, - "isEnabled": true, - "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.1.sensors.temperature", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.1.sensors.temperature", + "commands": {}, "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.759Z", + "feature": "heating.circuits.2.temperature", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, "properties": {}, - "commands": {}, - "components": ["room", "supply"] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.temperature" }, { "apiVersion": 1, - "isEnabled": true, - "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.2.sensors.temperature", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.2.sensors.temperature", + "commands": {}, "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.759Z", + "feature": "heating.circuits.0.temperature.levels", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, "properties": {}, - "commands": {}, - "components": ["room", "supply"] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.temperature.levels" }, { "apiVersion": 1, - "isEnabled": false, - "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.0.sensors.temperature.room", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.0.sensors.temperature.room", + "commands": { + "setLevels": { + "isExecutable": true, + "name": "setLevels", + "params": { + "maxTemperature": { + "constraints": { + "max": 70, + "min": 10, + "stepping": 1 + }, + "required": true, + "type": "number" + }, + "minTemperature": { + "constraints": { + "max": 30, + "min": 1, + "stepping": 1 + }, + "required": true, + "type": "number" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.temperature.levels/commands/setLevels" + }, + "setMax": { + "isExecutable": true, + "name": "setMax", + "params": { + "temperature": { + "constraints": { + "max": 70, + "min": 10, + "stepping": 1 + }, + "required": true, + "type": "number" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.temperature.levels/commands/setMax" + }, + "setMin": { + "isExecutable": true, + "name": "setMin", + "params": { + "temperature": { + "constraints": { + "max": 30, + "min": 1, + "stepping": 1 + }, + "required": true, + "type": "number" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.temperature.levels/commands/setMin" + } + }, "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.759Z", - "properties": {}, - "commands": {}, - "components": [] + "feature": "heating.circuits.1.temperature.levels", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "max": { + "type": "number", + "unit": "celsius", + "value": 40 + }, + "min": { + "type": "number", + "unit": "celsius", + "value": 15 + } + }, + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.temperature.levels" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.temperature.levels", + "gatewayId": "################", "isEnabled": false, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.1.sensors.temperature.room", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.1.sensors.temperature.room", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.759Z", "properties": {}, - "commands": {}, - "components": [] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.temperature.levels" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0", + "gatewayId": "################", "isEnabled": false, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.2.sensors.temperature.room", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.2.sensors.temperature.room", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.759Z", "properties": {}, - "commands": {}, - "components": [] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0" }, { "apiVersion": 1, + "commands": { + "setName": { + "isExecutable": true, + "name": "setName", + "params": { + "name": { + "constraints": { + "maxLength": 20, + "minLength": 1 + }, + "required": true, + "type": "string" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1/commands/setName" + } + }, + "deviceId": "0", + "feature": "heating.circuits.1", + "gatewayId": "################", "isEnabled": true, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.0.sensors.temperature.supply", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.0.sensors.temperature.supply", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.759Z", "properties": { - "status": { "type": "string", "value": "connected" }, - "value": { "type": "number", "value": 18.6 } + "active": { + "type": "boolean", + "value": true + }, + "name": { + "type": "string", + "value": "" + }, + "type": { + "type": "string", + "value": "heatingCircuit" + } }, - "commands": {}, - "components": [] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1" }, { "apiVersion": 1, - "isEnabled": false, - "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.1.sensors.temperature.supply", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.1.sensors.temperature.supply", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.759Z", - "properties": {}, "commands": {}, - "components": [] - }, - { - "apiVersion": 1, + "deviceId": "0", + "feature": "heating.circuits.2", + "gatewayId": "################", "isEnabled": false, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.circuits.2.sensors.temperature.supply", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.circuits.2.sensors.temperature.supply", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.759Z", "properties": {}, - "commands": {}, - "components": [] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2" }, { "apiVersion": 1, - "isEnabled": true, - "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.compressors", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.compressors", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.759Z", - "properties": { "enabled": { "type": "array", "value": ["0"] } }, "commands": {}, - "components": ["0"] - }, - { - "apiVersion": 1, + "deviceId": "0", + "feature": "heating.compressors", + "gatewayId": "################", "isEnabled": true, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.compressors.0", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.compressors.0", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.759Z", - "properties": { "active": { "type": "boolean", "value": false } }, - "commands": {}, - "components": ["statistics"] + "properties": { + "enabled": { + "type": "array", + "value": [ + "0" + ] + } + }, + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.compressors" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.compressors.0.statistics", + "gatewayId": "################", "isEnabled": true, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.compressors.0.statistics", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.compressors.0.statistics", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.759Z", "properties": { - "hours": { "type": "number", "value": 1762.41 }, - "starts": { "type": "number", "value": 3012 }, - "hoursLoadClassOne": { "type": "number", "value": 30 }, - "hoursLoadClassTwo": { "type": "number", "value": 703 }, - "hoursLoadClassThree": { "type": "number", "value": 878 }, - "hoursLoadClassFour": { "type": "number", "value": 117 }, - "hoursLoadClassFive": { "type": "number", "value": 20 } + "hours": { + "type": "number", + "unit": "hour", + "value": 384.3 + }, + "starts": { + "type": "number", + "unit": "", + "value": 436 + } }, - "commands": {}, - "components": [] + "timestamp": "2024-08-29T05:38:37.687Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.compressors.0.statistics" }, { "apiVersion": 1, - "isEnabled": true, - "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.configuration.multiFamilyHouse", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.configuration.multiFamilyHouse", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.764Z", - "properties": { "active": { "type": "boolean", "value": false } }, "commands": {}, - "components": [] + "deviceId": "0", + "feature": "heating.compressors.1.statistics", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.compressors.1.statistics" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.compressors.0", + "gatewayId": "################", "isEnabled": true, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.controller.serial", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.controller.serial", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.764Z", "properties": { - "value": { "type": "string", "value": "wwwwwwwwwwwwwwww" } + "active": { + "type": "boolean", + "value": false + }, + "phase": { + "type": "string", + "value": "off" + } }, - "commands": {}, - "components": [] + "timestamp": "2024-08-29T05:54:00.220Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.compressors.0" }, { "apiVersion": 1, - "isEnabled": true, - "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.device", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.device", + "commands": {}, "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.764Z", + "feature": "heating.compressors.1", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, "properties": {}, - "commands": {}, - "components": ["time"] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.compressors.1" }, { "apiVersion": 1, - "isEnabled": true, - "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.device.time", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.device.time", + "commands": {}, + "deprecated": { + "info": "replaced by heating.dhw.configuration.temperature.dhwCylinder.max", + "removalDate": "2024-09-15" + }, "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.764Z", + "feature": "heating.configuration.dhw.temperature.dhwCylinder.max", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, "properties": {}, - "commands": {}, - "components": ["offset"] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.configuration.dhw.temperature.dhwCylinder.max" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.controller.serial", + "gatewayId": "################", "isEnabled": true, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.device.time.offset", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.device.time.offset", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.764Z", - "properties": { "value": { "type": "number", "value": 117 } }, - "commands": {}, - "components": [] + "properties": { + "value": { + "type": "string", + "value": "\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd" + } + }, + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.controller.serial" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.dhw", + "gatewayId": "################", "isEnabled": true, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.dhw", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.dhw", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.764Z", - "properties": { "active": { "type": "boolean", "value": true } }, - "commands": {}, - "components": [ - "charging", - "oneTimeCharge", - "schedule", - "sensors", - "temperature" - ] + "properties": { + "active": { + "type": "boolean", + "value": true + }, + "status": { + "type": "string", + "value": "on" + } + }, + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.dhw.charging", + "gatewayId": "################", "isEnabled": true, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.dhw.charging", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.dhw.charging", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.764Z", - "properties": { "active": { "type": "boolean", "value": false } }, - "commands": {}, - "components": [] + "properties": { + "active": { + "type": "boolean", + "value": false + } + }, + "timestamp": "2024-08-29T05:44:06.005Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.charging" }, { "apiVersion": 1, - "isEnabled": true, - "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.dhw.oneTimeCharge", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.dhw.oneTimeCharge", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.764Z", - "properties": { "active": { "type": "boolean", "value": false } }, "commands": { "activate": { - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.dhw.oneTimeCharge/commands/activate", - "name": "activate", "isExecutable": true, - "params": {} + "name": "activate", + "params": {}, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.oneTimeCharge/commands/activate" }, "deactivate": { - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.dhw.oneTimeCharge/commands/deactivate", + "isExecutable": true, "name": "deactivate", - "isExecutable": false, - "params": {} + "params": {}, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.oneTimeCharge/commands/deactivate" } }, - "components": [] - }, - { - "apiVersion": 1, + "deviceId": "0", + "feature": "heating.dhw.oneTimeCharge", + "gatewayId": "################", "isEnabled": true, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.dhw.pumps.circulation", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.dhw.pumps.circulation", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.764Z", - "properties": { "status": { "type": "string", "value": "off" } }, - "commands": {}, - "components": ["schedule"] + "properties": { + "active": { + "type": "boolean", + "value": false + } + }, + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.oneTimeCharge" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.dhw.pumps.circulation", + "gatewayId": "################", "isEnabled": true, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.dhw.pumps.circulation.schedule", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.dhw.pumps.circulation.schedule", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.764Z", "properties": { - "active": { "type": "boolean", "value": true }, - "entries": { - "type": "Schedule", - "value": { - "mon": [], - "tue": [], - "wed": [], - "thu": [], - "fri": [], - "sat": [], - "sun": [] - } + "status": { + "type": "string", + "value": "on" } }, + "timestamp": "2024-08-29T05:44:06.005Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.pumps.circulation" + }, + { + "apiVersion": 1, "commands": { + "resetSchedule": { + "isExecutable": false, + "name": "resetSchedule", + "params": {}, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.pumps.circulation.schedule/commands/resetSchedule" + }, "setSchedule": { - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.dhw.pumps.circulation.schedule/commands/setSchedule", - "name": "setSchedule", "isExecutable": true, + "name": "setSchedule", "params": { "newSchedule": { - "required": true, - "type": "Schedule", "constraints": { + "defaultMode": "off", "maxEntries": 8, - "resolution": 10, - "modes": ["5/25-cycles", "5/10-cycles", "on"], - "defaultMode": "off" - } + "modes": [ + "5/25-cycles", + "5/10-cycles", + "on" + ], + "overlapAllowed": true, + "resolution": 10 + }, + "required": true, + "type": "Schedule" } - } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.pumps.circulation.schedule/commands/setSchedule" } }, - "components": [] - }, - { - "apiVersion": 1, + "deviceId": "0", + "feature": "heating.dhw.pumps.circulation.schedule", + "gatewayId": "################", "isEnabled": true, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.dhw.pumps.primary", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.dhw.pumps.primary", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.764Z", - "properties": { "status": { "type": "string", "value": "off" } }, - "commands": {}, - "components": [] - }, - { - "apiVersion": 1, - "isEnabled": true, - "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.dhw.schedule", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.dhw.schedule", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.764Z", "properties": { - "active": { "type": "boolean", "value": true }, + "active": { + "type": "boolean", + "value": true + }, "entries": { "type": "Schedule", "value": { - "mon": [], - "tue": [], - "wed": [], - "thu": [], - "fri": [], - "sat": [], + "fri": [ + { + "end": "22:30", + "mode": "on", + "position": 0, + "start": "05:30" + } + ], + "mon": [ + { + "end": "22:30", + "mode": "on", + "position": 0, + "start": "05:30" + } + ], + "sat": [ + { + "end": "22:30", + "mode": "on", + "position": 0, + "start": "05:30" + } + ], "sun": [ { - "start": "15:30", - "end": "16:30", - "mode": "temp-2", - "position": 0 + "end": "22:30", + "mode": "on", + "position": 0, + "start": "05:30" + } + ], + "thu": [ + { + "end": "22:30", + "mode": "on", + "position": 0, + "start": "05:30" + } + ], + "tue": [ + { + "end": "22:30", + "mode": "on", + "position": 0, + "start": "05:30" + } + ], + "wed": [ + { + "end": "22:30", + "mode": "on", + "position": 0, + "start": "05:30" } ] } } }, + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.pumps.circulation.schedule" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.dhw.pumps.primary", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "status": { + "type": "string", + "value": "off" + } + }, + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.pumps.primary" + }, + { + "apiVersion": 1, "commands": { + "resetSchedule": { + "isExecutable": false, + "name": "resetSchedule", + "params": {}, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.schedule/commands/resetSchedule" + }, "setSchedule": { - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.dhw.schedule/commands/setSchedule", - "name": "setSchedule", "isExecutable": true, + "name": "setSchedule", "params": { "newSchedule": { - "required": true, - "type": "Schedule", "constraints": { + "defaultMode": "off", "maxEntries": 8, - "resolution": 10, - "modes": ["top", "normal", "temp-2"], - "defaultMode": "off" - } + "modes": [ + "top", + "normal", + "temp-2" + ], + "overlapAllowed": true, + "resolution": 10 + }, + "required": true, + "type": "Schedule" } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.schedule/commands/setSchedule" + } + }, + "deviceId": "0", + "feature": "heating.dhw.schedule", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": true + }, + "entries": { + "type": "Schedule", + "value": { + "fri": [ + { + "end": "24:00", + "mode": "top", + "position": 0, + "start": "00:00" + } + ], + "mon": [ + { + "end": "24:00", + "mode": "top", + "position": 0, + "start": "00:00" + } + ], + "sat": [ + { + "end": "24:00", + "mode": "top", + "position": 0, + "start": "00:00" + } + ], + "sun": [ + { + "end": "24:00", + "mode": "top", + "position": 0, + "start": "00:00" + } + ], + "thu": [ + { + "end": "24:00", + "mode": "top", + "position": 0, + "start": "00:00" + } + ], + "tue": [ + { + "end": "24:00", + "mode": "top", + "position": 0, + "start": "00:00" + } + ], + "wed": [ + { + "end": "24:00", + "mode": "top", + "position": 0, + "start": "00:00" + } + ] } } }, - "components": [] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.schedule" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.dhw.sensors.temperature.dhwCylinder", + "gatewayId": "################", "isEnabled": true, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.dhw.sensors", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.dhw.sensors", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.764Z", - "properties": {}, - "commands": {}, - "components": [] + "properties": { + "status": { + "type": "string", + "value": "connected" + }, + "value": { + "type": "number", + "unit": "celsius", + "value": 48.1 + } + }, + "timestamp": "2024-08-29T10:35:28.964Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.sensors.temperature.dhwCylinder" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.dhw.sensors.temperature.dhwCylinder.bottom", + "gatewayId": "################", "isEnabled": true, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.dhw.sensors.temperature.hotWaterStorage", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.dhw.sensors.temperature.hotWaterStorage", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.764Z", "properties": { - "status": { "type": "string", "value": "connected" }, - "value": { "type": "number", "value": 36.4 } + "status": { + "type": "string", + "value": "notConnected" + } }, - "commands": {}, - "components": ["top", "bottom"] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.sensors.temperature.dhwCylinder.bottom" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.dhw.sensors.temperature.dhwCylinder.top", + "gatewayId": "################", "isEnabled": true, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.dhw.sensors.temperature.hotWaterStorage.top", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.dhw.sensors.temperature.hotWaterStorage.top", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.764Z", "properties": { - "status": { "type": "string", "value": "connected" }, - "value": { "type": "number", "value": 36.4 } + "status": { + "type": "string", + "value": "connected" + }, + "value": { + "type": "number", + "unit": "celsius", + "value": 48.1 + } }, - "commands": {}, - "components": [] + "timestamp": "2024-08-29T10:35:28.964Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.sensors.temperature.dhwCylinder.top" }, { "apiVersion": 1, + "commands": {}, + "deprecated": { + "info": "replaced by heating.dhw.sensors.temperature.dhwCylinder", + "removalDate": "2024-09-15" + }, + "deviceId": "0", + "feature": "heating.dhw.sensors.temperature.hotWaterStorage", + "gatewayId": "################", "isEnabled": true, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.dhw.sensors.temperature.hotWaterStorage.bottom", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.dhw.sensors.temperature.hotWaterStorage.bottom", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.764Z", - "properties": { "status": { "type": "string", "value": "notConnected" } }, - "commands": {}, - "components": [] + "properties": { + "status": { + "type": "string", + "value": "connected" + }, + "value": { + "type": "number", + "unit": "celsius", + "value": 48.1 + } + }, + "timestamp": "2024-08-29T10:35:28.964Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.sensors.temperature.hotWaterStorage" }, { "apiVersion": 1, + "commands": {}, + "deprecated": { + "info": "replaced by heating.dhw.sensors.temperature.dhwCylinder.bottom", + "removalDate": "2024-09-15" + }, + "deviceId": "0", + "feature": "heating.dhw.sensors.temperature.hotWaterStorage.bottom", + "gatewayId": "################", "isEnabled": true, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.dhw.sensors.temperature.outlet", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.dhw.sensors.temperature.outlet", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.768Z", - "properties": { "status": { "type": "string", "value": "notConnected" } }, - "commands": {}, - "components": [] + "properties": { + "status": { + "type": "string", + "value": "notConnected" + } + }, + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.sensors.temperature.hotWaterStorage.bottom" }, { "apiVersion": 1, + "commands": {}, + "deprecated": { + "info": "replaced by heating.dhw.sensors.temperature.dhwCylinder.top", + "removalDate": "2024-09-15" + }, + "deviceId": "0", + "feature": "heating.dhw.sensors.temperature.hotWaterStorage.top", + "gatewayId": "################", "isEnabled": true, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.dhw.temperature", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.dhw.temperature", + "properties": { + "status": { + "type": "string", + "value": "connected" + }, + "value": { + "type": "number", + "unit": "celsius", + "value": 48.1 + } + }, + "timestamp": "2024-08-29T10:35:28.964Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.sensors.temperature.hotWaterStorage.top" + }, + { + "apiVersion": 1, + "commands": {}, "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.768Z", - "properties": { "value": { "type": "number", "value": 45 } }, + "feature": "heating.dhw.sensors.temperature.outlet", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "status": { + "type": "string", + "value": "notConnected" + } + }, + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.sensors.temperature.outlet" + }, + { + "apiVersion": 1, "commands": { - "setTargetTemperature": { - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.dhw.temperature/commands/setTargetTemperature", - "name": "setTargetTemperature", + "setHysteresis": { "isExecutable": true, + "name": "setHysteresis", "params": { - "temperature": { + "hysteresis": { + "constraints": { + "max": 10, + "min": 1, + "stepping": 0.5 + }, "required": true, - "type": "number", - "constraints": { "min": 10, "max": 60, "stepping": 1 } + "type": "number" } - } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.temperature.hysteresis/commands/setHysteresis" + }, + "setHysteresisSwitchOffValue": { + "isExecutable": false, + "name": "setHysteresisSwitchOffValue", + "params": { + "hysteresis": { + "constraints": { + "max": 10, + "min": 1, + "stepping": 0.5 + }, + "required": true, + "type": "number" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.temperature.hysteresis/commands/setHysteresisSwitchOffValue" + }, + "setHysteresisSwitchOnValue": { + "isExecutable": true, + "name": "setHysteresisSwitchOnValue", + "params": { + "hysteresis": { + "constraints": { + "max": 10, + "min": 1, + "stepping": 0.5 + }, + "required": true, + "type": "number" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.temperature.hysteresis/commands/setHysteresisSwitchOnValue" + } + }, + "deviceId": "0", + "feature": "heating.dhw.temperature.hysteresis", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "switchOffValue": { + "type": "number", + "unit": "kelvin", + "value": 5 + }, + "switchOnValue": { + "type": "number", + "unit": "kelvin", + "value": 5 + }, + "value": { + "type": "number", + "unit": "kelvin", + "value": 5 } }, - "components": ["main", "temp2", "hysteresis"] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.temperature.hysteresis" }, { "apiVersion": 1, - "isEnabled": true, - "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.dhw.temperature.main", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.dhw.temperature.main", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.768Z", - "properties": { "value": { "type": "number", "value": 45 } }, "commands": { "setTargetTemperature": { - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.dhw.temperature.main/commands/setTargetTemperature", - "name": "setTargetTemperature", "isExecutable": true, + "name": "setTargetTemperature", "params": { "temperature": { + "constraints": { + "efficientLowerBorder": 10, + "efficientUpperBorder": 60, + "max": 60, + "min": 10, + "stepping": 1 + }, "required": true, - "type": "number", - "constraints": { "min": 10, "max": 60, "stepping": 1 } + "type": "number" } - } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.temperature.main/commands/setTargetTemperature" + } + }, + "deviceId": "0", + "feature": "heating.dhw.temperature.main", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "value": { + "type": "number", + "unit": "celsius", + "value": 50 } }, - "components": [] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.temperature.main" }, { "apiVersion": 1, - "isEnabled": true, - "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.dhw.temperature.temp2", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.dhw.temperature.temp2", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.768Z", - "properties": { "value": { "type": "number", "value": 45 } }, "commands": { "setTargetTemperature": { - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.dhw.temperature.temp2/commands/setTargetTemperature", - "name": "setTargetTemperature", "isExecutable": true, + "name": "setTargetTemperature", "params": { "temperature": { + "constraints": { + "max": 60, + "min": 10, + "stepping": 1 + }, "required": true, - "type": "number", - "constraints": { "min": 10, "max": 60, "stepping": 1 } + "type": "number" } - } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.temperature.temp2/commands/setTargetTemperature" + } + }, + "deviceId": "0", + "feature": "heating.dhw.temperature.temp2", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "value": { + "type": "number", + "unit": "celsius", + "value": 50 } }, - "components": [] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.temperature.temp2" }, { "apiVersion": 1, - "isEnabled": true, - "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.dhw.temperature.hysteresis", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.dhw.temperature.hysteresis", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.768Z", - "properties": { "value": { "type": "number", "value": 7 } }, "commands": { - "setHysteresis": { - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.dhw.temperature.hysteresis/commands/setHysteresis", - "name": "setHysteresis", + "changeEndDate": { + "isExecutable": false, + "name": "changeEndDate", + "params": { + "end": { + "constraints": { + "regEx": "^[\\d]{4}-[\\d]{2}-[\\d]{2}$", + "sameDayAllowed": false + }, + "required": true, + "type": "string" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.operating.programs.holiday/commands/changeEndDate" + }, + "schedule": { "isExecutable": true, + "name": "schedule", "params": { - "hysteresis": { + "end": { + "constraints": { + "regEx": "^[\\d]{4}-[\\d]{2}-[\\d]{2}$", + "sameDayAllowed": false + }, + "required": true, + "type": "string" + }, + "start": { + "constraints": { + "regEx": "^[\\d]{4}-[\\d]{2}-[\\d]{2}$" + }, "required": true, - "type": "number", - "constraints": { "min": 1, "max": 10, "stepping": 0.5 } + "type": "string" } - } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.operating.programs.holiday/commands/schedule" + }, + "unschedule": { + "isExecutable": true, + "name": "unschedule", + "params": {}, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.operating.programs.holiday/commands/unschedule" } }, - "components": [] - }, - { - "apiVersion": 1, - "isEnabled": true, - "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.sensors", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.sensors", "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.768Z", - "properties": {}, - "commands": {}, - "components": ["temperature"] - }, - { - "apiVersion": 1, + "feature": "heating.operating.programs.holiday", + "gatewayId": "################", "isEnabled": true, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.sensors.temperature", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.sensors.temperature", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.768Z", - "properties": {}, - "commands": {}, - "components": ["outside", "return"] + "properties": { + "active": { + "type": "boolean", + "value": false + }, + "end": { + "type": "string", + "value": "" + }, + "start": { + "type": "string", + "value": "" + } + }, + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.operating.programs.holiday" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.primaryCircuit.sensors.temperature.return", + "gatewayId": "################", "isEnabled": true, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.sensors.temperature.outside", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.sensors.temperature.outside", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.768Z", "properties": { - "status": { "type": "string", "value": "connected" }, - "value": { "type": "number", "value": 16.2 } + "status": { + "type": "string", + "value": "connected" + }, + "value": { + "type": "number", + "unit": "celsius", + "value": 28 + } }, - "commands": {}, - "components": [] + "timestamp": "2024-08-29T10:38:14.920Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.primaryCircuit.sensors.temperature.return" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.primaryCircuit.sensors.temperature.supply", + "gatewayId": "################", "isEnabled": true, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.sensors.temperature.return", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.sensors.temperature.return", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.768Z", "properties": { - "status": { "type": "string", "value": "connected" }, - "value": { "type": "number", "value": 18.9 } + "status": { + "type": "string", + "value": "connected" + }, + "value": { + "type": "number", + "unit": "celsius", + "value": 28.8 + } }, - "commands": {}, - "components": [] + "timestamp": "2024-08-29T10:40:53.694Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.primaryCircuit.sensors.temperature.supply" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.secondaryCircuit.sensors.temperature.supply", + "gatewayId": "################", "isEnabled": true, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.primaryCircuit.sensors.temperature.supply", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.primaryCircuit.sensors.temperature.supply", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.768Z", "properties": { - "status": { "type": "string", "value": "connected" }, - "value": { "type": "number", "value": 18.2 }, - "unit": { "type": "string", "value": "celsius" } + "status": { + "type": "string", + "value": "connected" + }, + "value": { + "type": "number", + "unit": "celsius", + "value": 28.9 + } }, - "commands": {}, - "components": [] + "timestamp": "2024-08-29T10:38:18.760Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.secondaryCircuit.sensors.temperature.supply" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.sensors.temperature.outside", + "gatewayId": "################", "isEnabled": true, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.primaryCircuit.sensors.temperature.return", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.primaryCircuit.sensors.temperature.return", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.768Z", "properties": { - "status": { "type": "string", "value": "connected" }, - "value": { "type": "number", "value": 18.4 }, - "unit": { "type": "string", "value": "celsius" } + "status": { + "type": "string", + "value": "connected" + }, + "value": { + "type": "number", + "unit": "celsius", + "value": 28.1 + } }, - "commands": {}, - "components": [] + "timestamp": "2024-08-29T10:40:44.480Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.sensors.temperature.outside" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.sensors.temperature.return", + "gatewayId": "################", "isEnabled": true, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.secondaryCircuit.sensors.temperature.supply", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.secondaryCircuit.sensors.temperature.supply", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.768Z", "properties": { - "status": { "type": "string", "value": "connected" }, - "value": { "type": "number", "value": 18.6 }, - "unit": { "type": "string", "value": "celsius" } + "status": { + "type": "string", + "value": "connected" + }, + "value": { + "type": "number", + "unit": "celsius", + "value": 26.1 + } }, - "commands": {}, - "components": [] + "timestamp": "2024-08-29T09:29:53.498Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.sensors.temperature.return" }, { "apiVersion": 1, - "isEnabled": true, - "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.secondaryCircuit.sensors.temperature.return", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.secondaryCircuit.sensors.temperature.return", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.768Z", - "properties": { - "status": { "type": "string", "value": "connected" }, - "value": { "type": "number", "value": 18.9 }, - "unit": { "type": "string", "value": "celsius" } - }, "commands": {}, - "components": [] + "deviceId": "0", + "feature": "heating.solar", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.solar" }, { "apiVersion": 1, - "isEnabled": true, - "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.operating", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.operating", + "commands": {}, "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.768Z", + "feature": "heating.solar.power.cumulativeProduced", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, "properties": {}, - "commands": {}, - "components": ["programs"] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.solar.power.cumulativeProduced" }, { "apiVersion": 1, - "isEnabled": true, - "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.operating.programs", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.operating.programs", + "commands": {}, "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.768Z", + "feature": "heating.solar.power.production", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, "properties": {}, - "commands": {}, - "components": ["holiday"] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.solar.power.production" }, { "apiVersion": 1, - "isEnabled": true, - "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.operating.programs.holiday", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.operating.programs.holiday", + "commands": {}, "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.768Z", - "properties": { - "active": { "type": "boolean", "value": false }, - "start": { "type": "string", "value": "" }, - "end": { "type": "string", "value": "" } - }, - "commands": { - "changeEndDate": { - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.operating.programs.holiday/commands/changeEndDate", - "name": "changeEndDate", - "isExecutable": false, - "params": { - "end": { "required": true, "type": "string", "constraints": {} } - } - }, - "schedule": { - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.operating.programs.holiday/commands/schedule", - "name": "schedule", - "isExecutable": true, - "params": { - "start": { "required": true, "type": "string", "constraints": {} }, - "end": { "required": true, "type": "string", "constraints": {} } - } - }, - "unschedule": { - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.operating.programs.holiday/commands/unschedule", - "name": "unschedule", - "isExecutable": true, - "params": {} - } - }, - "components": [] + "feature": "heating.solar.pumps.circuit", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.solar.pumps.circuit" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.solar.sensors.temperature.collector", + "gatewayId": "################", "isEnabled": false, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.solar", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.solar", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.768Z", "properties": {}, - "commands": {}, - "components": ["sensors"] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.solar.sensors.temperature.collector" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.solar.sensors.temperature.dhw", + "gatewayId": "################", "isEnabled": false, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.solar.power.production", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.solar.power.production", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.768Z", "properties": {}, - "commands": {}, - "components": [] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.solar.sensors.temperature.dhw" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "ventilation", + "gatewayId": "################", "isEnabled": false, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.solar.pumps.circuit", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.solar.pumps.circuit", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.768Z", "properties": {}, - "commands": {}, - "components": [] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation" }, { "apiVersion": 1, - "isEnabled": true, - "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.solar.sensors", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.solar.sensors", + "commands": {}, "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.768Z", + "feature": "ventilation.levels.levelFour", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, "properties": {}, - "commands": {}, - "components": ["temperature"] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.levels.levelFour" }, { "apiVersion": 1, - "isEnabled": true, - "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.solar.sensors.temperature", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.solar.sensors.temperature", + "commands": {}, "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.768Z", + "feature": "ventilation.levels.levelOne", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, "properties": {}, - "commands": {}, - "components": ["dhw", "collector"] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.levels.levelOne" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "ventilation.levels.levelThree", + "gatewayId": "################", "isEnabled": false, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.solar.sensors.temperature.dhw", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.solar.sensors.temperature.dhw", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.768Z", "properties": {}, - "commands": {}, - "components": [] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.levels.levelThree" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "ventilation.levels.levelTwo", + "gatewayId": "################", "isEnabled": false, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "heating.solar.sensors.temperature.collector", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/heating.solar.sensors.temperature.collector", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.768Z", "properties": {}, - "commands": {}, - "components": [] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.levels.levelTwo" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "ventilation.operating.modes.active", + "gatewayId": "################", "isEnabled": false, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "ventilation", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/ventilation", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.768Z", "properties": {}, - "commands": {}, - "components": ["operating", "schedule"] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.operating.modes.active" }, { "apiVersion": 1, - "isEnabled": true, - "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "ventilation.operating", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/ventilation.operating", + "commands": {}, "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.768Z", + "feature": "ventilation.operating.modes.standard", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, "properties": {}, - "commands": {}, - "components": ["modes", "programs"] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.operating.modes.standard" }, { "apiVersion": 1, - "isEnabled": true, - "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "ventilation.operating.modes", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/ventilation.operating.modes", + "commands": {}, "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.768Z", + "feature": "ventilation.operating.modes.standby", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, "properties": {}, - "commands": {}, - "components": ["active", "standard", "standby", "ventilation"] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.operating.modes.standby" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "ventilation.operating.modes.ventilation", + "gatewayId": "################", "isEnabled": false, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "ventilation.operating.modes.active", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/ventilation.operating.modes.active", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.768Z", "properties": {}, - "commands": {}, - "components": [] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.operating.modes.ventilation" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "ventilation.operating.programs.active", + "gatewayId": "################", "isEnabled": false, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "ventilation.operating.modes.standard", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/ventilation.operating.modes.standard", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.768Z", "properties": {}, - "commands": {}, - "components": [] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.operating.programs.active" }, { "apiVersion": 1, + "commands": {}, + "deprecated": { + "info": "none", + "removalDate": "2024-09-15" + }, + "deviceId": "0", + "feature": "ventilation.operating.programs.comfort", + "gatewayId": "################", "isEnabled": false, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "ventilation.operating.modes.standby", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/ventilation.operating.modes.standby", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.768Z", "properties": {}, - "commands": {}, - "components": [] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.operating.programs.comfort" }, { "apiVersion": 1, + "commands": {}, + "deprecated": { + "info": "none", + "removalDate": "2024-09-15" + }, + "deviceId": "0", + "feature": "ventilation.operating.programs.eco", + "gatewayId": "################", "isEnabled": false, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "ventilation.operating.modes.ventilation", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/ventilation.operating.modes.ventilation", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.768Z", "properties": {}, - "commands": {}, - "components": [] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.operating.programs.eco" }, { "apiVersion": 1, - "isEnabled": true, - "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "ventilation.operating.programs", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/ventilation.operating.programs", + "commands": {}, + "deprecated": { + "info": "none", + "removalDate": "2024-09-15" + }, "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.768Z", + "feature": "ventilation.operating.programs.holiday", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, "properties": {}, - "commands": {}, - "components": [ - "active", - "basic", - "intensive", - "reduced", - "standard", - "standby" - ] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.operating.programs.holiday" }, { "apiVersion": 1, + "commands": {}, + "deprecated": { + "info": "none", + "removalDate": "2024-09-15" + }, + "deviceId": "0", + "feature": "ventilation.operating.programs.levelFour", + "gatewayId": "################", "isEnabled": false, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "ventilation.operating.programs.active", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/ventilation.operating.programs.active", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.768Z", "properties": {}, - "commands": {}, - "components": [] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.operating.programs.levelFour" }, { "apiVersion": 1, + "commands": {}, + "deprecated": { + "info": "none", + "removalDate": "2024-09-15" + }, + "deviceId": "0", + "feature": "ventilation.operating.programs.levelOne", + "gatewayId": "################", "isEnabled": false, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "ventilation.operating.programs.basic", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/ventilation.operating.programs.basic", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.768Z", "properties": {}, - "commands": {}, - "components": [] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.operating.programs.levelOne" }, { "apiVersion": 1, + "commands": {}, + "deprecated": { + "info": "none", + "removalDate": "2024-09-15" + }, + "deviceId": "0", + "feature": "ventilation.operating.programs.levelThree", + "gatewayId": "################", "isEnabled": false, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "ventilation.operating.programs.intensive", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/ventilation.operating.programs.intensive", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.768Z", "properties": {}, - "commands": {}, - "components": [] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.operating.programs.levelThree" }, { "apiVersion": 1, + "commands": {}, + "deprecated": { + "info": "none", + "removalDate": "2024-09-15" + }, + "deviceId": "0", + "feature": "ventilation.operating.programs.levelTwo", + "gatewayId": "################", "isEnabled": false, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "ventilation.operating.programs.reduced", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/ventilation.operating.programs.reduced", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.768Z", "properties": {}, - "commands": {}, - "components": [] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.operating.programs.levelTwo" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "ventilation.operating.programs.standby", + "gatewayId": "################", "isEnabled": false, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "ventilation.operating.programs.standard", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/ventilation.operating.programs.standard", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.768Z", "properties": {}, + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.operating.programs.standby" + }, + { + "apiVersion": 1, "commands": {}, - "components": [] + "deviceId": "0", + "feature": "ventilation.operating.state", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "demand": { + "type": "string", + "value": "ventilation" + }, + "level": { + "type": "string", + "value": "levelOne" + }, + "reason": { + "type": "string", + "value": "schedule" + } + }, + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.operating.state" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "ventilation.quickmodes.comfort", + "gatewayId": "################", "isEnabled": false, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "ventilation.operating.programs.standby", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/ventilation.operating.programs.standby", - "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.768Z", "properties": {}, - "commands": {}, - "components": [] + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.quickmodes.comfort" }, { "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "ventilation.quickmodes.eco", + "gatewayId": "################", "isEnabled": false, "isReady": true, - "gatewayId": "yyyyyyyyyyyyyyyy", - "feature": "ventilation.schedule", - "uri": "https://api.viessmann-platform.io/iot/v1/equipment/installations/xxxxxx/gateways/yyyyyyyyyyyyyyyy/devices/0/features/ventilation.schedule", + "properties": {}, + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.quickmodes.eco" + }, + { + "apiVersion": 1, + "commands": {}, "deviceId": "0", - "timestamp": "2021-08-06T08:09:47.768Z", + "feature": "ventilation.quickmodes.holiday", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, "properties": {}, + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.quickmodes.holiday" + }, + { + "apiVersion": 1, "commands": {}, - "components": [] + "deviceId": "0", + "feature": "ventilation.schedule", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-29T00:05:53.045Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/ventilation.schedule" + }, + { + "apiVersion": 1, + "commands": { + "setName": { + "isExecutable": true, + "name": "setName", + "params": { + "name": { + "constraints": { + "maxLength": 20, + "minLength": 1 + }, + "required": true, + "type": "string" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.name/commands/setName" + } + }, + "components": [], + "deviceId": "0", + "feature": "heating.circuits.1.name", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "name": { + "type": "string", + "value": "" + } + }, + "timestamp": "2024-08-27T21:05:43.929Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.name" } ] } diff --git a/tests/test_TestForMissingProperties.py b/tests/test_TestForMissingProperties.py index 5d2d74ee..e3bb8442 100644 --- a/tests/test_TestForMissingProperties.py +++ b/tests/test_TestForMissingProperties.py @@ -73,12 +73,13 @@ def test_missingProperties(self): 'gateway.devices', # not used # ventilation - not yet used - 'ventilation.levels.levelOne', - 'ventilation.levels.levelTwo', - 'ventilation.levels.levelThree', - 'ventilation.levels.levelFour', - 'ventilation.quickmodes.forcedLevelFour', - 'ventilation.quickmodes.silent', + 'ventilation.levels.levelOne', # not documented + 'ventilation.levels.levelTwo', # not documented + 'ventilation.levels.levelThree', # not documented + 'ventilation.levels.levelFour', # not documented + 'ventilation.quickmodes.forcedLevelFour', # not documented + 'ventilation.quickmodes.silent', # not documented + 'ventilation.operating.state', # not documented ] all_features = self.read_all_features() diff --git a/tests/test_Vitocal300G.py b/tests/test_Vitocal300G.py index 6c26c5e5..878f27c2 100644 --- a/tests/test_Vitocal300G.py +++ b/tests/test_Vitocal300G.py @@ -14,60 +14,53 @@ def test_getCompressorActive(self): def test_getCompressorHours(self): self.assertAlmostEqual( - self.device.compressors[0].getHours(), 1762.41) + self.device.compressors[0].getHours(), 384.3) def test_getCompressorStarts(self): self.assertAlmostEqual( - self.device.compressors[0].getStarts(), 3012) + self.device.compressors[0].getStarts(), 436) - def test_getCompressorHoursLoadClass1(self): + @unittest.skip("data point not present in the current test response") + def test_getCompressorHoursLoadClass(self): self.assertAlmostEqual( self.device.compressors[0].getHoursLoadClass1(), 30) - - def test_getCompressorHoursLoadClass2(self): self.assertAlmostEqual( self.device.compressors[0].getHoursLoadClass2(), 703) - - def test_getCompressorHoursLoadClass3(self): self.assertAlmostEqual( self.device.compressors[0].getHoursLoadClass3(), 878) - - def test_getCompressorHoursLoadClass4(self): self.assertAlmostEqual( self.device.compressors[0].getHoursLoadClass4(), 117) - - def test_getCompressorHoursLoadClass5(self): self.assertAlmostEqual( self.device.compressors[0].getHoursLoadClass5(), 20) def test_getHeatingCurveSlope(self): self.assertAlmostEqual( - self.device.circuits[0].getHeatingCurveSlope(), 0.8) + self.device.circuits[0].getHeatingCurveSlope(), 0.4) def test_getHeatingCurveShift(self): self.assertAlmostEqual( - self.device.circuits[0].getHeatingCurveShift(), -5) + self.device.circuits[0].getHeatingCurveShift(), 0) def test_getReturnTemperature(self): - self.assertAlmostEqual(self.device.getReturnTemperature(), 18.9) + self.assertAlmostEqual(self.device.getReturnTemperature(), 26.1) def test_getReturnTemperaturePrimaryCircuit(self): - self.assertAlmostEqual(self.device.getReturnTemperaturePrimaryCircuit(), 18.4) + self.assertAlmostEqual(self.device.getReturnTemperaturePrimaryCircuit(), 28) def test_getSupplyTemperaturePrimaryCircuit(self): self.assertAlmostEqual( - self.device.getSupplyTemperaturePrimaryCircuit(), 18.2) + self.device.getSupplyTemperaturePrimaryCircuit(), 28.8) def test_getPrograms(self): - expected_programs = ['comfort', 'eco', 'fixed', 'holiday', 'normal', 'reduced', 'standby'] + expected_programs = ['comfort', 'eco', 'fixed', 'normal', 'reduced', 'standby'] self.assertListEqual( - self.device.circuits[0].getPrograms(), expected_programs) + expected_programs, self.device.circuits[0].getPrograms()) def test_getModes(self): - expected_modes = ['dhw', 'dhwAndHeating', 'forcedNormal', 'forcedReduced', 'standby', 'normalStandby'] + expected_modes = ['dhw', 'dhwAndHeating', 'standby'] self.assertListEqual( - self.device.circuits[0].getModes(), expected_modes) + expected_modes, self.device.circuits[0].getModes()) def test_getDomesticHotWaterCirculationPumpActive(self): self.assertEqual( - self.device.getDomesticHotWaterCirculationPumpActive(), False) + self.device.getDomesticHotWaterCirculationPumpActive(), True) From f165bd7ad3398551e9f5a115a5862f4ab6fa4924 Mon Sep 17 00:00:00 2001 From: Christopher Fenner <9592452+CFenner@users.noreply.github.com> Date: Mon, 2 Sep 2024 19:18:17 +0200 Subject: [PATCH 30/31] chore(test): add test case for new deprecated data points (#39) add test case for deprecated properties --- tests/test_TestForMissingProperties.py | 43 ++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/tests/test_TestForMissingProperties.py b/tests/test_TestForMissingProperties.py index e3bb8442..f4ae94e8 100644 --- a/tests/test_TestForMissingProperties.py +++ b/tests/test_TestForMissingProperties.py @@ -13,6 +13,46 @@ def __init__(self, filename, path): class TestForMissingProperties(unittest.TestCase): + + def test_deprecatedProperties(self): + # with this test we want to check if properties are marked as deprecated in the response files + + mitigated = [ + 'heating.buffer.sensors.temperature.main', + 'heating.buffer.sensors.temperature.top', + 'heating.configuration.dhw.temperature.dhwCylinder.max', + 'heating.dhw.sensors.temperature.hotWaterStorage', + 'heating.dhw.sensors.temperature.hotWaterStorage.top', + 'heating.dhw.sensors.temperature.hotWaterStorage.middle', + 'heating.dhw.sensors.temperature.hotWaterStorage.bottom', + 'heating.circuits.0.operating.programs.summerEco', + ] + # the usage of these data points need to be fixed + todo = [ + 'ventilation.operating.programs.eco', + 'ventilation.operating.programs.comfort', + 'ventilation.operating.programs.holiday', + 'ventilation.operating.programs.levelOne', + 'ventilation.operating.programs.levelTwo', + 'ventilation.operating.programs.levelThree', + 'ventilation.operating.programs.levelFour', + 'ventilation.operating.programs.forcedLevelFour', + 'ventilation.operating.programs.silent', + ] + + all_features = self.read_all_features() + + deprecated_features = {} + for feature in all_features: + if len(deprecated_features) < 3 and "deprecated" in all_features[feature]: + deprecated_features[feature] = all_features[feature]["deprecated"] + + # self.assertDictEqual({}, deprecated_features) + for feature in deprecated_features: + if feature not in todo and feature not in mitigated: + self.fail(f"{feature} is deprecated ({deprecated_features[feature]})") + + def test_missingProperties(self): # with this test we want to check if new properties # are added to the response files @@ -173,6 +213,9 @@ def read_all_features(self): if name not in all_features: all_features[name] = {'files': []} + if "deprecated" in feature: + all_features[name]['deprecated'] = feature["deprecated"]["info"] + if feature['isEnabled'] and feature['properties'] != {}: all_features[name]['files'].append(response) return all_features From d9cfa3a0f7f2e12fcba45e04e44db528dc00eb6a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 20 Mar 2025 12:34:49 +0000 Subject: [PATCH 31/31] chore(deps): update dependency pylint to v3.3.6 --- poetry.lock | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/poetry.lock b/poetry.lock index 6da42b68..536db0d0 100644 --- a/poetry.lock +++ b/poetry.lock @@ -2,13 +2,13 @@ [[package]] name = "astroid" -version = "3.2.4" +version = "3.3.9" description = "An abstract syntax tree for Python with inference support." optional = false -python-versions = ">=3.8.0" +python-versions = ">=3.9.0" files = [ - {file = "astroid-3.2.4-py3-none-any.whl", hash = "sha256:413658a61eeca6202a59231abb473f932038fbcbf1666587f66d482083413a25"}, - {file = "astroid-3.2.4.tar.gz", hash = "sha256:0e14202810b30da1b735827f78f5157be2bbd4a7a59b7707ca0bfc2fb4c0063a"}, + {file = "astroid-3.3.9-py3-none-any.whl", hash = "sha256:d05bfd0acba96a7bd43e222828b7d9bc1e138aaeb0649707908d3702a9831248"}, + {file = "astroid-3.3.9.tar.gz", hash = "sha256:622cc8e3048684aa42c820d9d218978021c3c3d174fb03a9f0d615921744f550"}, ] [[package]] @@ -549,25 +549,25 @@ files = [ [[package]] name = "pylint" -version = "3.2.7" +version = "3.3.6" description = "python code static checker" optional = false -python-versions = ">=3.8.0" +python-versions = ">=3.9.0" files = [ - {file = "pylint-3.2.7-py3-none-any.whl", hash = "sha256:02f4aedeac91be69fb3b4bea997ce580a4ac68ce58b89eaefeaf06749df73f4b"}, - {file = "pylint-3.2.7.tar.gz", hash = "sha256:1b7a721b575eaeaa7d39db076b6e7743c993ea44f57979127c517c6c572c803e"}, + {file = "pylint-3.3.6-py3-none-any.whl", hash = "sha256:8b7c2d3e86ae3f94fb27703d521dd0b9b6b378775991f504d7c3a6275aa0a6a6"}, + {file = "pylint-3.3.6.tar.gz", hash = "sha256:b634a041aac33706d56a0d217e6587228c66427e20ec21a019bc4cdee48c040a"}, ] [package.dependencies] -astroid = ">=3.2.4,<=3.3.0-dev0" +astroid = ">=3.3.8,<=3.4.0.dev0" colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} dill = [ {version = ">=0.3.7", markers = "python_version >= \"3.12\""}, {version = ">=0.3.6", markers = "python_version >= \"3.11\" and python_version < \"3.12\""}, ] -isort = ">=4.2.5,<5.13.0 || >5.13.0,<6" +isort = ">=4.2.5,<5.13 || >5.13,<7" mccabe = ">=0.6,<0.8" -platformdirs = ">=2.2.0" +platformdirs = ">=2.2" tomlkit = ">=0.10.1" [package.extras]