PyPlumIO 0.5.44__tar.gz → 0.5.46__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.44 → pyplumio-0.5.46}/PKG-INFO +1 -1
- {pyplumio-0.5.44 → pyplumio-0.5.46}/PyPlumIO.egg-info/PKG-INFO +1 -1
- {pyplumio-0.5.44 → pyplumio-0.5.46}/pyplumio/_version.py +2 -2
- {pyplumio-0.5.44 → pyplumio-0.5.46}/pyplumio/devices/__init__.py +1 -1
- {pyplumio-0.5.44 → pyplumio-0.5.46}/pyplumio/devices/ecomax.py +3 -1
- {pyplumio-0.5.44 → pyplumio-0.5.46}/tests/test_devices.py +23 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/.gitattributes +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/.github/CODE_OF_CONDUCT.md +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/.github/dependabot.yml +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/.github/workflows/ci.yml +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/.github/workflows/codeql.yml +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/.github/workflows/deploy.yml +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/.github/workflows/documentation.yml +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/.gitignore +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/.pre-commit-config.yaml +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/.qlty/qlty.toml +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/.vscode/settings.json +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/LICENSE +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/MANIFEST.in +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/PyPlumIO.egg-info/SOURCES.txt +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/PyPlumIO.egg-info/dependency_links.txt +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/PyPlumIO.egg-info/requires.txt +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/PyPlumIO.egg-info/top_level.txt +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/README.md +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/docs/Makefile +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/docs/make.bat +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/docs/source/callbacks.rst +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/docs/source/conf.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/docs/source/connecting.rst +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/docs/source/frames.rst +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/docs/source/index.rst +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/docs/source/mixers_thermostats.rst +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/docs/source/protocol.rst +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/docs/source/reading.rst +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/docs/source/schedules.rst +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/docs/source/writing.rst +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/images/ecomax.png +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/images/rs485.png +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/pyplumio/__init__.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/pyplumio/__main__.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/pyplumio/connection.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/pyplumio/const.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/pyplumio/data_types.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/pyplumio/devices/ecoster.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/pyplumio/devices/mixer.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/pyplumio/devices/thermostat.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/pyplumio/exceptions.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/pyplumio/filters.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/pyplumio/frames/__init__.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/pyplumio/frames/messages.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/pyplumio/frames/requests.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/pyplumio/frames/responses.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/pyplumio/helpers/__init__.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/pyplumio/helpers/async_cache.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/pyplumio/helpers/event_manager.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/pyplumio/helpers/factory.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/pyplumio/helpers/schedule.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/pyplumio/helpers/task_manager.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/pyplumio/helpers/timeout.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/pyplumio/helpers/uid.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/pyplumio/parameters/__init__.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/pyplumio/parameters/ecomax.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/pyplumio/parameters/mixer.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/pyplumio/parameters/thermostat.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/pyplumio/protocol.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/pyplumio/py.typed +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/pyplumio/stream.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/pyplumio/structures/__init__.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/pyplumio/structures/alerts.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/pyplumio/structures/boiler_load.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/pyplumio/structures/boiler_power.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/pyplumio/structures/ecomax_parameters.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/pyplumio/structures/fan_power.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/pyplumio/structures/frame_versions.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/pyplumio/structures/fuel_consumption.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/pyplumio/structures/fuel_level.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/pyplumio/structures/lambda_sensor.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/pyplumio/structures/mixer_parameters.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/pyplumio/structures/mixer_sensors.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/pyplumio/structures/modules.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/pyplumio/structures/network_info.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/pyplumio/structures/output_flags.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/pyplumio/structures/outputs.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/pyplumio/structures/pending_alerts.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/pyplumio/structures/product_info.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/pyplumio/structures/program_version.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/pyplumio/structures/regulator_data.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/pyplumio/structures/regulator_data_schema.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/pyplumio/structures/schedules.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/pyplumio/structures/statuses.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/pyplumio/structures/temperatures.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/pyplumio/structures/thermostat_parameters.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/pyplumio/structures/thermostat_sensors.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/pyplumio/utils.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/pyproject.toml +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/requirements.txt +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/requirements_docs.txt +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/requirements_test.txt +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/setup.cfg +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/tests/__init__.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/tests/conftest.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/tests/frames/test_init.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/tests/frames/test_messages.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/tests/frames/test_requests.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/tests/frames/test_responses.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/tests/helpers/__init__.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/tests/helpers/test_async_cache.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/tests/helpers/test_event_manager.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/tests/helpers/test_factory.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/tests/helpers/test_schedule.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/tests/helpers/test_task_manager.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/tests/helpers/test_timeout.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/tests/helpers/test_uid.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/tests/parameters/__init__.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/tests/parameters/test_ecomax.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/tests/parameters/test_init.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/tests/parameters/test_mixers.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/tests/parameters/test_thermostats.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/tests/ruff.toml +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/tests/test_connection.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/tests/test_data_types.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/tests/test_filters.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/tests/test_init.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/tests/test_main.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/tests/test_protocol.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/tests/test_stream.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/tests/test_utils.py +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/tests/testdata/messages/regulator_data.json +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/tests/testdata/messages/sensor_data.json +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/tests/testdata/requests/alerts.json +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/tests/testdata/requests/ecomax_control.json +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/tests/testdata/requests/ecomax_parameters.json +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/tests/testdata/requests/mixer_parameters.json +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/tests/testdata/requests/set_ecomax_parameter.json +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/tests/testdata/requests/set_mixer_parameter.json +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/tests/testdata/requests/set_schedule.json +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/tests/testdata/requests/set_thermostat_parameter.json +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/tests/testdata/requests/thermostat_parameters.json +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/tests/testdata/responses/alerts.json +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/tests/testdata/responses/device_available.json +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/tests/testdata/responses/ecomax_parameters.json +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/tests/testdata/responses/mixer_parameters.json +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/tests/testdata/responses/password.json +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/tests/testdata/responses/program_version.json +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/tests/testdata/responses/regulator_data_schema.json +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/tests/testdata/responses/schedules.json +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/tests/testdata/responses/thermostat_parameters.json +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/tests/testdata/responses/uid.json +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/tests/testdata/unknown/unknown_ecomax_parameter.json +0 -0
- {pyplumio-0.5.44 → pyplumio-0.5.46}/tests/testdata/unknown/unknown_mixer_parameter.json +0 -0
@@ -141,7 +141,7 @@ class PhysicalDevice(Device, ABC):
|
|
141
141
|
@event_listener(filter=on_change)
|
142
142
|
async def on_event_frame_versions(self, versions: dict[int, int]) -> None:
|
143
143
|
"""Check frame versions and update outdated frames."""
|
144
|
-
_LOGGER.info("Received version table")
|
144
|
+
_LOGGER.info("Received frame version table")
|
145
145
|
for frame_type, version in versions.items():
|
146
146
|
if (
|
147
147
|
is_known_frame_type(frame_type)
|
@@ -12,6 +12,7 @@ from pyplumio.const import (
|
|
12
12
|
ATTR_FRAME_ERRORS,
|
13
13
|
ATTR_PASSWORD,
|
14
14
|
ATTR_SENSORS,
|
15
|
+
ATTR_SETUP,
|
15
16
|
STATE_OFF,
|
16
17
|
STATE_ON,
|
17
18
|
DeviceState,
|
@@ -192,7 +193,8 @@ class EcoMAX(PhysicalDevice):
|
|
192
193
|
self, frame_type: FrameType | int, version: int
|
193
194
|
) -> None:
|
194
195
|
"""Request frame version from the device."""
|
195
|
-
|
196
|
+
setup_done = self.get_nowait(ATTR_SETUP, False)
|
197
|
+
if setup_done or frame_type not in REQUIRED_TYPES:
|
196
198
|
await super()._request_frame_version(frame_type, version)
|
197
199
|
|
198
200
|
async def _set_ecomax_state(self, state: State) -> bool:
|
@@ -181,6 +181,29 @@ async def test_frame_versions_update(ecomax: EcoMAX) -> None:
|
|
181
181
|
]
|
182
182
|
)
|
183
183
|
|
184
|
+
# Test with frame types in required list (handled by setup).
|
185
|
+
mock_put_nowait.reset_mock()
|
186
|
+
test_data = load_json_test_data("messages/sensor_data.json")[0]
|
187
|
+
with patch("asyncio.Queue.put_nowait") as mock_put_nowait:
|
188
|
+
ecomax.handle_frame(SensorDataMessage(message=test_data["message"]))
|
189
|
+
await ecomax.wait_until_done()
|
190
|
+
|
191
|
+
mock_put_nowait.assert_not_called()
|
192
|
+
|
193
|
+
# Test with frame types in required list after setup done.
|
194
|
+
mock_put_nowait.reset_mock()
|
195
|
+
test_data = load_json_test_data("messages/sensor_data.json")[0]
|
196
|
+
message = SensorDataMessage(message=test_data["message"])
|
197
|
+
message.data[ATTR_FRAME_VERSIONS] = {FrameType.REQUEST_REGULATOR_DATA_SCHEMA: 86}
|
198
|
+
ecomax.data[ATTR_SETUP] = True
|
199
|
+
with patch("asyncio.Queue.put_nowait") as mock_put_nowait:
|
200
|
+
ecomax.handle_frame(message)
|
201
|
+
await ecomax.wait_until_done()
|
202
|
+
|
203
|
+
mock_put_nowait.assert_called_once_with(
|
204
|
+
RegulatorDataSchemaRequest(recipient=DeviceType.ECOMAX)
|
205
|
+
)
|
206
|
+
|
184
207
|
|
185
208
|
async def test_ecomax_data_callbacks(ecomax: EcoMAX) -> None:
|
186
209
|
"""Test callbacks dispatched on data frames."""
|
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
|