PyPlumIO 0.5.53__tar.gz → 0.5.54__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pyplumio-0.5.53 → pyplumio-0.5.54}/.pre-commit-config.yaml +2 -2
- {pyplumio-0.5.53 → pyplumio-0.5.54}/PKG-INFO +9 -9
- {pyplumio-0.5.53 → pyplumio-0.5.54}/PyPlumIO.egg-info/PKG-INFO +9 -9
- {pyplumio-0.5.53 → pyplumio-0.5.54}/PyPlumIO.egg-info/requires.txt +8 -8
- {pyplumio-0.5.53 → pyplumio-0.5.54}/pyplumio/_version.py +16 -3
- {pyplumio-0.5.53 → pyplumio-0.5.54}/pyplumio/devices/__init__.py +2 -1
- {pyplumio-0.5.53 → pyplumio-0.5.54}/pyplumio/devices/ecomax.py +1 -1
- {pyplumio-0.5.53 → pyplumio-0.5.54}/pyplumio/filters.py +2 -1
- {pyplumio-0.5.53 → pyplumio-0.5.54}/pyproject.toml +8 -8
- pyplumio-0.5.54/requirements_test.txt +13 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/tests/devices/test_ecomax.py +2 -2
- pyplumio-0.5.53/requirements_test.txt +0 -13
- {pyplumio-0.5.53 → pyplumio-0.5.54}/.gitattributes +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/.github/CODE_OF_CONDUCT.md +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/.github/dependabot.yml +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/.github/workflows/ci.yml +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/.github/workflows/codeql.yml +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/.github/workflows/deploy.yml +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/.github/workflows/documentation.yml +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/.gitignore +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/.qlty/qlty.toml +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/.vscode/settings.json +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/LICENSE +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/MANIFEST.in +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/PyPlumIO.egg-info/SOURCES.txt +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/PyPlumIO.egg-info/dependency_links.txt +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/PyPlumIO.egg-info/top_level.txt +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/README.md +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/docs/Makefile +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/docs/make.bat +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/docs/source/callbacks.rst +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/docs/source/conf.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/docs/source/connecting.rst +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/docs/source/frames.rst +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/docs/source/index.rst +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/docs/source/mixers_thermostats.rst +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/docs/source/protocol.rst +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/docs/source/reading.rst +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/docs/source/schedules.rst +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/docs/source/writing.rst +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/images/ecomax.png +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/images/rs485.png +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/pyplumio/__init__.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/pyplumio/__main__.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/pyplumio/connection.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/pyplumio/const.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/pyplumio/data_types.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/pyplumio/devices/ecoster.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/pyplumio/devices/mixer.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/pyplumio/devices/thermostat.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/pyplumio/exceptions.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/pyplumio/frames/__init__.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/pyplumio/frames/messages.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/pyplumio/frames/requests.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/pyplumio/frames/responses.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/pyplumio/helpers/__init__.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/pyplumio/helpers/async_cache.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/pyplumio/helpers/event_manager.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/pyplumio/helpers/factory.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/pyplumio/helpers/task_manager.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/pyplumio/parameters/__init__.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/pyplumio/parameters/custom/__init__.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/pyplumio/parameters/custom/ecomax_860d3_hb.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/pyplumio/parameters/ecomax.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/pyplumio/parameters/mixer.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/pyplumio/parameters/thermostat.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/pyplumio/protocol.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/pyplumio/py.typed +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/pyplumio/stream.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/pyplumio/structures/__init__.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/pyplumio/structures/alerts.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/pyplumio/structures/boiler_load.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/pyplumio/structures/boiler_power.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/pyplumio/structures/ecomax_parameters.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/pyplumio/structures/fan_power.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/pyplumio/structures/frame_versions.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/pyplumio/structures/fuel_consumption.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/pyplumio/structures/fuel_level.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/pyplumio/structures/lambda_sensor.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/pyplumio/structures/mixer_parameters.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/pyplumio/structures/mixer_sensors.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/pyplumio/structures/modules.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/pyplumio/structures/network_info.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/pyplumio/structures/output_flags.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/pyplumio/structures/outputs.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/pyplumio/structures/pending_alerts.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/pyplumio/structures/product_info.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/pyplumio/structures/program_version.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/pyplumio/structures/regulator_data.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/pyplumio/structures/regulator_data_schema.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/pyplumio/structures/schedules.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/pyplumio/structures/statuses.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/pyplumio/structures/temperatures.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/pyplumio/structures/thermostat_parameters.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/pyplumio/structures/thermostat_sensors.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/pyplumio/utils.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/requirements.txt +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/requirements_docs.txt +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/setup.cfg +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/tests/__init__.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/tests/conftest.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/tests/devices/__init__.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/tests/devices/test_ecoster.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/tests/devices/test_init.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/tests/devices/test_mixer.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/tests/devices/test_thermostat.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/tests/frames/test_init.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/tests/frames/test_messages.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/tests/frames/test_requests.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/tests/frames/test_responses.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/tests/helpers/__init__.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/tests/helpers/test_async_cache.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/tests/helpers/test_event_manager.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/tests/helpers/test_factory.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/tests/helpers/test_task_manager.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/tests/helpers/test_uid.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/tests/parameters/__init__.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/tests/parameters/custom/__init__.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/tests/parameters/custom/test_ecomax_860d3_hb.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/tests/parameters/custom/test_init.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/tests/parameters/test_ecomax.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/tests/parameters/test_init.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/tests/parameters/test_mixers.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/tests/parameters/test_thermostats.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/tests/ruff.toml +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/tests/structures/__init__.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/tests/structures/test_alerts.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/tests/structures/test_boiler_load.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/tests/structures/test_boiler_power.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/tests/structures/test_ecomax_parameters.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/tests/structures/test_fan_power.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/tests/structures/test_frame_versions.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/tests/structures/test_fuel_consumption.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/tests/structures/test_fuel_level.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/tests/structures/test_lambda_sensor.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/tests/structures/test_mixer_parameters.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/tests/structures/test_product_info.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/tests/structures/test_schedules.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/tests/test_connection.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/tests/test_data_types.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/tests/test_filters.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/tests/test_init.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/tests/test_main.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/tests/test_protocol.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/tests/test_stream.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/tests/test_utils.py +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/tests/testdata/messages/regulator_data.json +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/tests/testdata/messages/sensor_data.json +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/tests/testdata/parameters/ecomax_860d3_hb.json +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/tests/testdata/requests/alerts.json +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/tests/testdata/requests/ecomax_control.json +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/tests/testdata/requests/ecomax_parameters.json +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/tests/testdata/requests/mixer_parameters.json +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/tests/testdata/requests/set_ecomax_parameter.json +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/tests/testdata/requests/set_mixer_parameter.json +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/tests/testdata/requests/set_schedule.json +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/tests/testdata/requests/set_thermostat_parameter.json +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/tests/testdata/requests/thermostat_parameters.json +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/tests/testdata/responses/alerts.json +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/tests/testdata/responses/device_available.json +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/tests/testdata/responses/ecomax_parameters.json +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/tests/testdata/responses/mixer_parameters.json +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/tests/testdata/responses/password.json +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/tests/testdata/responses/program_version.json +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/tests/testdata/responses/regulator_data_schema.json +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/tests/testdata/responses/schedules.json +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/tests/testdata/responses/thermostat_parameters.json +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/tests/testdata/responses/uid.json +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/tests/testdata/unknown/unknown_ecomax_parameter.json +0 -0
- {pyplumio-0.5.53 → pyplumio-0.5.54}/tests/testdata/unknown/unknown_mixer_parameter.json +0 -0
@@ -3,7 +3,7 @@
|
|
3
3
|
# See https://pre-commit.com/hooks.html for more hooks
|
4
4
|
repos:
|
5
5
|
- repo: https://github.com/astral-sh/ruff-pre-commit
|
6
|
-
rev: v0.
|
6
|
+
rev: v0.12.11
|
7
7
|
hooks:
|
8
8
|
- id: ruff
|
9
9
|
args:
|
@@ -13,6 +13,6 @@ repos:
|
|
13
13
|
hooks:
|
14
14
|
- id: codespell
|
15
15
|
- repo: https://github.com/pre-commit/mirrors-mypy
|
16
|
-
rev: v1.
|
16
|
+
rev: v1.17.1
|
17
17
|
hooks:
|
18
18
|
- id: mypy
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: PyPlumIO
|
3
|
-
Version: 0.5.
|
3
|
+
Version: 0.5.54
|
4
4
|
Summary: PyPlumIO is a native ecoNET library for Plum ecoMAX controllers.
|
5
5
|
Author-email: Denis Paavilainen <denpa@denpa.pro>
|
6
6
|
License: MIT License
|
@@ -28,23 +28,23 @@ Requires-Dist: pyserial-asyncio==0.6
|
|
28
28
|
Requires-Dist: typing-extensions<5.0,>=4.14.0
|
29
29
|
Provides-Extra: test
|
30
30
|
Requires-Dist: codespell==2.4.1; extra == "test"
|
31
|
-
Requires-Dist: coverage==7.
|
32
|
-
Requires-Dist: freezegun==1.5.
|
33
|
-
Requires-Dist: mypy==1.
|
31
|
+
Requires-Dist: coverage==7.10.5; extra == "test"
|
32
|
+
Requires-Dist: freezegun==1.5.5; extra == "test"
|
33
|
+
Requires-Dist: mypy==1.17.1; extra == "test"
|
34
34
|
Requires-Dist: numpy<3.0.0,>=2.0.0; extra == "test"
|
35
35
|
Requires-Dist: pyserial-asyncio-fast==0.16; extra == "test"
|
36
36
|
Requires-Dist: pytest==8.4.1; extra == "test"
|
37
|
-
Requires-Dist: pytest-asyncio==1.
|
38
|
-
Requires-Dist: ruff==0.12.
|
39
|
-
Requires-Dist: tox==4.
|
40
|
-
Requires-Dist: types-pyserial==3.5.0.
|
37
|
+
Requires-Dist: pytest-asyncio==1.1.0; extra == "test"
|
38
|
+
Requires-Dist: ruff==0.12.10; extra == "test"
|
39
|
+
Requires-Dist: tox==4.28.4; extra == "test"
|
40
|
+
Requires-Dist: types-pyserial==3.5.0.20250822; extra == "test"
|
41
41
|
Provides-Extra: docs
|
42
42
|
Requires-Dist: sphinx==8.1.3; extra == "docs"
|
43
43
|
Requires-Dist: sphinx_rtd_theme==3.0.2; extra == "docs"
|
44
44
|
Requires-Dist: readthedocs-sphinx-search==0.3.2; extra == "docs"
|
45
45
|
Provides-Extra: dev
|
46
46
|
Requires-Dist: pyplumio[docs,test]; extra == "dev"
|
47
|
-
Requires-Dist: pre-commit==4.
|
47
|
+
Requires-Dist: pre-commit==4.3.0; extra == "dev"
|
48
48
|
Requires-Dist: tomli==2.2.1; extra == "dev"
|
49
49
|
Dynamic: license-file
|
50
50
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: PyPlumIO
|
3
|
-
Version: 0.5.
|
3
|
+
Version: 0.5.54
|
4
4
|
Summary: PyPlumIO is a native ecoNET library for Plum ecoMAX controllers.
|
5
5
|
Author-email: Denis Paavilainen <denpa@denpa.pro>
|
6
6
|
License: MIT License
|
@@ -28,23 +28,23 @@ Requires-Dist: pyserial-asyncio==0.6
|
|
28
28
|
Requires-Dist: typing-extensions<5.0,>=4.14.0
|
29
29
|
Provides-Extra: test
|
30
30
|
Requires-Dist: codespell==2.4.1; extra == "test"
|
31
|
-
Requires-Dist: coverage==7.
|
32
|
-
Requires-Dist: freezegun==1.5.
|
33
|
-
Requires-Dist: mypy==1.
|
31
|
+
Requires-Dist: coverage==7.10.5; extra == "test"
|
32
|
+
Requires-Dist: freezegun==1.5.5; extra == "test"
|
33
|
+
Requires-Dist: mypy==1.17.1; extra == "test"
|
34
34
|
Requires-Dist: numpy<3.0.0,>=2.0.0; extra == "test"
|
35
35
|
Requires-Dist: pyserial-asyncio-fast==0.16; extra == "test"
|
36
36
|
Requires-Dist: pytest==8.4.1; extra == "test"
|
37
|
-
Requires-Dist: pytest-asyncio==1.
|
38
|
-
Requires-Dist: ruff==0.12.
|
39
|
-
Requires-Dist: tox==4.
|
40
|
-
Requires-Dist: types-pyserial==3.5.0.
|
37
|
+
Requires-Dist: pytest-asyncio==1.1.0; extra == "test"
|
38
|
+
Requires-Dist: ruff==0.12.10; extra == "test"
|
39
|
+
Requires-Dist: tox==4.28.4; extra == "test"
|
40
|
+
Requires-Dist: types-pyserial==3.5.0.20250822; extra == "test"
|
41
41
|
Provides-Extra: docs
|
42
42
|
Requires-Dist: sphinx==8.1.3; extra == "docs"
|
43
43
|
Requires-Dist: sphinx_rtd_theme==3.0.2; extra == "docs"
|
44
44
|
Requires-Dist: readthedocs-sphinx-search==0.3.2; extra == "docs"
|
45
45
|
Provides-Extra: dev
|
46
46
|
Requires-Dist: pyplumio[docs,test]; extra == "dev"
|
47
|
-
Requires-Dist: pre-commit==4.
|
47
|
+
Requires-Dist: pre-commit==4.3.0; extra == "dev"
|
48
48
|
Requires-Dist: tomli==2.2.1; extra == "dev"
|
49
49
|
Dynamic: license-file
|
50
50
|
|
@@ -4,7 +4,7 @@ typing-extensions<5.0,>=4.14.0
|
|
4
4
|
|
5
5
|
[dev]
|
6
6
|
pyplumio[docs,test]
|
7
|
-
pre-commit==4.
|
7
|
+
pre-commit==4.3.0
|
8
8
|
tomli==2.2.1
|
9
9
|
|
10
10
|
[docs]
|
@@ -14,13 +14,13 @@ readthedocs-sphinx-search==0.3.2
|
|
14
14
|
|
15
15
|
[test]
|
16
16
|
codespell==2.4.1
|
17
|
-
coverage==7.
|
18
|
-
freezegun==1.5.
|
19
|
-
mypy==1.
|
17
|
+
coverage==7.10.5
|
18
|
+
freezegun==1.5.5
|
19
|
+
mypy==1.17.1
|
20
20
|
numpy<3.0.0,>=2.0.0
|
21
21
|
pyserial-asyncio-fast==0.16
|
22
22
|
pytest==8.4.1
|
23
|
-
pytest-asyncio==1.
|
24
|
-
ruff==0.12.
|
25
|
-
tox==4.
|
26
|
-
types-pyserial==3.5.0.
|
23
|
+
pytest-asyncio==1.1.0
|
24
|
+
ruff==0.12.10
|
25
|
+
tox==4.28.4
|
26
|
+
types-pyserial==3.5.0.20250822
|
@@ -1,7 +1,14 @@
|
|
1
1
|
# file generated by setuptools-scm
|
2
2
|
# don't change, don't track in version control
|
3
3
|
|
4
|
-
__all__ = [
|
4
|
+
__all__ = [
|
5
|
+
"__version__",
|
6
|
+
"__version_tuple__",
|
7
|
+
"version",
|
8
|
+
"version_tuple",
|
9
|
+
"__commit_id__",
|
10
|
+
"commit_id",
|
11
|
+
]
|
5
12
|
|
6
13
|
TYPE_CHECKING = False
|
7
14
|
if TYPE_CHECKING:
|
@@ -9,13 +16,19 @@ if TYPE_CHECKING:
|
|
9
16
|
from typing import Union
|
10
17
|
|
11
18
|
VERSION_TUPLE = Tuple[Union[int, str], ...]
|
19
|
+
COMMIT_ID = Union[str, None]
|
12
20
|
else:
|
13
21
|
VERSION_TUPLE = object
|
22
|
+
COMMIT_ID = object
|
14
23
|
|
15
24
|
version: str
|
16
25
|
__version__: str
|
17
26
|
__version_tuple__: VERSION_TUPLE
|
18
27
|
version_tuple: VERSION_TUPLE
|
28
|
+
commit_id: COMMIT_ID
|
29
|
+
__commit_id__: COMMIT_ID
|
19
30
|
|
20
|
-
__version__ = version = '0.5.
|
21
|
-
__version_tuple__ = version_tuple = (0, 5,
|
31
|
+
__version__ = version = '0.5.54'
|
32
|
+
__version_tuple__ = version_tuple = (0, 5, 54)
|
33
|
+
|
34
|
+
__commit_id__ = commit_id = 'g7b7ef864f'
|
@@ -195,6 +195,7 @@ class PhysicalDevice(Device, ABC):
|
|
195
195
|
"""
|
196
196
|
_LOGGER.info("Requesting '%s' with %s", name, repr(frame_type))
|
197
197
|
request = await Request.create(frame_type, recipient=self.address)
|
198
|
+
initial_retries = retries
|
198
199
|
while retries > 0:
|
199
200
|
try:
|
200
201
|
self.queue.put_nowait(request)
|
@@ -204,7 +205,7 @@ class PhysicalDevice(Device, ABC):
|
|
204
205
|
|
205
206
|
raise RequestError(
|
206
207
|
f"Failed to request '{name}' with frame type '{frame_type}' after "
|
207
|
-
f"{
|
208
|
+
f"{initial_retries} retries.",
|
208
209
|
frame_type=frame_type,
|
209
210
|
)
|
210
211
|
|
@@ -236,7 +236,7 @@ class EcoMAX(PhysicalDevice):
|
|
236
236
|
async def on_event_setup(self, setup: bool) -> None:
|
237
237
|
"""Request frames required to set up an ecoMAX entry."""
|
238
238
|
_LOGGER.debug("Setting up device entry")
|
239
|
-
await self.wait_for(ATTR_SENSORS)
|
239
|
+
await self.wait_for(ATTR_SENSORS, timeout=30.0)
|
240
240
|
results = await asyncio.gather(
|
241
241
|
*(
|
242
242
|
self.request(description.provides, description.frame_type)
|
@@ -186,9 +186,10 @@ class _Aggregate(Filter):
|
|
186
186
|
self._values.append(new_value)
|
187
187
|
time_since_call = current_time - self._last_call_time
|
188
188
|
if time_since_call >= self._timeout or len(self._values) >= self._sample_size:
|
189
|
-
|
189
|
+
sum_of_values = (
|
190
190
|
np.sum(self._values) if numpy_installed else sum(self._values)
|
191
191
|
)
|
192
|
+
result = await self._callback(float(sum_of_values))
|
192
193
|
self._last_call_time = current_time
|
193
194
|
self._values = []
|
194
195
|
return result
|
@@ -38,16 +38,16 @@ dynamic = ["version"]
|
|
38
38
|
[project.optional-dependencies]
|
39
39
|
test = [
|
40
40
|
"codespell==2.4.1",
|
41
|
-
"coverage==7.
|
42
|
-
"freezegun==1.5.
|
43
|
-
"mypy==1.
|
41
|
+
"coverage==7.10.5",
|
42
|
+
"freezegun==1.5.5",
|
43
|
+
"mypy==1.17.1",
|
44
44
|
"numpy<3.0.0,>=2.0.0",
|
45
45
|
"pyserial-asyncio-fast==0.16",
|
46
46
|
"pytest==8.4.1",
|
47
|
-
"pytest-asyncio==1.
|
48
|
-
"ruff==0.12.
|
49
|
-
"tox==4.
|
50
|
-
"types-pyserial==3.5.0.
|
47
|
+
"pytest-asyncio==1.1.0",
|
48
|
+
"ruff==0.12.10",
|
49
|
+
"tox==4.28.4",
|
50
|
+
"types-pyserial==3.5.0.20250822"
|
51
51
|
]
|
52
52
|
docs = [
|
53
53
|
"sphinx==8.1.3",
|
@@ -56,7 +56,7 @@ docs = [
|
|
56
56
|
]
|
57
57
|
dev = [
|
58
58
|
"pyplumio[test,docs]",
|
59
|
-
"pre-commit==4.
|
59
|
+
"pre-commit==4.3.0",
|
60
60
|
"tomli==2.2.1"
|
61
61
|
]
|
62
62
|
|
@@ -0,0 +1,13 @@
|
|
1
|
+
codespell==2.4.1
|
2
|
+
coverage==7.10.5
|
3
|
+
freezegun==1.5.5
|
4
|
+
mypy==1.17.1
|
5
|
+
numpy<3.0.0,>=2.0.0
|
6
|
+
pre-commit==4.3.0
|
7
|
+
pyserial-asyncio-fast==0.16
|
8
|
+
pytest-asyncio==1.1.0
|
9
|
+
pytest==8.4.1
|
10
|
+
ruff==0.12.10
|
11
|
+
tomli==2.2.1
|
12
|
+
tox==4.28.4
|
13
|
+
types-pyserial==3.5.0.20250822
|
@@ -206,7 +206,7 @@ async def test_ecomax_setup(mock_wait_for, mock_request, ecomax: EcoMAX) -> None
|
|
206
206
|
await ecomax.wait_until_done()
|
207
207
|
assert ATTR_FRAME_ERRORS not in ecomax.data
|
208
208
|
assert mock_request.await_count == len(REQUIRED)
|
209
|
-
mock_wait_for.assert_awaited_once_with(ATTR_SENSORS)
|
209
|
+
mock_wait_for.assert_awaited_once_with(ATTR_SENSORS, timeout=30.0)
|
210
210
|
|
211
211
|
|
212
212
|
@patch(
|
@@ -220,7 +220,7 @@ async def test_ecomax_setup_errors(mock_wait_for, mock_request, ecomax: EcoMAX)
|
|
220
220
|
await ecomax.wait_until_done()
|
221
221
|
assert FrameType.REQUEST_ALERTS in ecomax.get_nowait(ATTR_FRAME_ERRORS, [])
|
222
222
|
assert mock_request.await_count == len(REQUIRED)
|
223
|
-
mock_wait_for.assert_awaited_once_with(ATTR_SENSORS)
|
223
|
+
mock_wait_for.assert_awaited_once_with(ATTR_SENSORS, timeout=30.0)
|
224
224
|
|
225
225
|
|
226
226
|
@patch("asyncio.Queue.put")
|
@@ -1,13 +0,0 @@
|
|
1
|
-
codespell==2.4.1
|
2
|
-
coverage==7.9.1
|
3
|
-
freezegun==1.5.2
|
4
|
-
mypy==1.16.1
|
5
|
-
numpy<3.0.0,>=2.0.0
|
6
|
-
pre-commit==4.2.0
|
7
|
-
pyserial-asyncio-fast==0.16
|
8
|
-
pytest-asyncio==1.0.0
|
9
|
-
pytest==8.4.1
|
10
|
-
ruff==0.12.1
|
11
|
-
tomli==2.2.1
|
12
|
-
tox==4.27.0
|
13
|
-
types-pyserial==3.5.0.20250326
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|