PyPlumIO 0.5.53__py3-none-any.whl → 0.5.55__py3-none-any.whl
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/_version.py +16 -3
- pyplumio/devices/__init__.py +2 -1
- pyplumio/devices/ecomax.py +14 -2
- pyplumio/filters.py +2 -1
- {pyplumio-0.5.53.dist-info → pyplumio-0.5.55.dist-info}/METADATA +9 -9
- {pyplumio-0.5.53.dist-info → pyplumio-0.5.55.dist-info}/RECORD +9 -9
- {pyplumio-0.5.53.dist-info → pyplumio-0.5.55.dist-info}/WHEEL +0 -0
- {pyplumio-0.5.53.dist-info → pyplumio-0.5.55.dist-info}/licenses/LICENSE +0 -0
- {pyplumio-0.5.53.dist-info → pyplumio-0.5.55.dist-info}/top_level.txt +0 -0
pyplumio/_version.py
CHANGED
@@ -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.55'
|
32
|
+
__version_tuple__ = version_tuple = (0, 5, 55)
|
33
|
+
|
34
|
+
__commit_id__ = commit_id = None
|
pyplumio/devices/__init__.py
CHANGED
@@ -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
|
|
pyplumio/devices/ecomax.py
CHANGED
@@ -139,6 +139,8 @@ REQUIRED: tuple[DataFrameDescription, ...] = (
|
|
139
139
|
|
140
140
|
REQUIRED_TYPES = [description.frame_type for description in REQUIRED]
|
141
141
|
|
142
|
+
SETUP_TIMEOUT: Final = 60.0
|
143
|
+
|
142
144
|
|
143
145
|
class EcoMAX(PhysicalDevice):
|
144
146
|
"""Represents an ecoMAX controller."""
|
@@ -233,10 +235,19 @@ class EcoMAX(PhysicalDevice):
|
|
233
235
|
await super().shutdown()
|
234
236
|
|
235
237
|
@event_listener
|
236
|
-
async def on_event_setup(self, setup: bool) ->
|
238
|
+
async def on_event_setup(self, setup: bool) -> bool:
|
237
239
|
"""Request frames required to set up an ecoMAX entry."""
|
238
240
|
_LOGGER.debug("Setting up device entry")
|
239
|
-
|
241
|
+
|
242
|
+
try:
|
243
|
+
await self.wait_for(ATTR_SENSORS, timeout=SETUP_TIMEOUT)
|
244
|
+
except asyncio.TimeoutError:
|
245
|
+
_LOGGER.error(
|
246
|
+
"Could not setup device entry; no response from device for %u seconds",
|
247
|
+
SETUP_TIMEOUT,
|
248
|
+
)
|
249
|
+
return False
|
250
|
+
|
240
251
|
results = await asyncio.gather(
|
241
252
|
*(
|
242
253
|
self.request(description.provides, description.frame_type)
|
@@ -253,6 +264,7 @@ class EcoMAX(PhysicalDevice):
|
|
253
264
|
self.dispatch_nowait(ATTR_FRAME_ERRORS, errors)
|
254
265
|
|
255
266
|
_LOGGER.debug("Device entry setup done")
|
267
|
+
return True
|
256
268
|
|
257
269
|
@event_listener
|
258
270
|
async def on_event_ecomax_parameters(
|
pyplumio/filters.py
CHANGED
@@ -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
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: PyPlumIO
|
3
|
-
Version: 0.5.
|
3
|
+
Version: 0.5.55
|
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,17 +1,17 @@
|
|
1
1
|
pyplumio/__init__.py,sha256=3H5SO4WFw5mBTFeEyD4w0H8-MsNo93NyOH3RyMN7IS0,3337
|
2
2
|
pyplumio/__main__.py,sha256=3IwHHSq-iay5FaeMc95klobe-xv82yydSKcBE7BFZ6M,500
|
3
|
-
pyplumio/_version.py,sha256=
|
3
|
+
pyplumio/_version.py,sha256=G1TzBNDMFivoxxcx0zhCWDpZU92nh3Fwl-CwzCVn15g,706
|
4
4
|
pyplumio/connection.py,sha256=u-iOzEUqoEEL4YLpLtzBWi5Qy8_RABgKD8DyXf-er-4,5892
|
5
5
|
pyplumio/const.py,sha256=eoq-WNJ8TO3YlP7dC7KkVQRKGjt9FbRZ6M__s29vb1U,5659
|
6
6
|
pyplumio/data_types.py,sha256=BTDxwErRo_odvFT5DNfIniNh8ZfyjRKEDaJmoEJqdEg,9426
|
7
7
|
pyplumio/exceptions.py,sha256=_B_0EgxDxd2XyYv3WpZM733q0cML5m6J-f55QOvYRpI,996
|
8
|
-
pyplumio/filters.py,sha256=
|
8
|
+
pyplumio/filters.py,sha256=QEtOptXym2Fb82cdPpS1dajkTpvYi3VuQaYoLl4CSQ4,15658
|
9
9
|
pyplumio/protocol.py,sha256=DWM-yJnm2EQPLvGzXNlkQ0IpKQn44e-WkNB_DqZAag8,8313
|
10
10
|
pyplumio/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
11
11
|
pyplumio/stream.py,sha256=zFMKZ_GxsSGcaBTJigVM1CK3uGjlEJXgcvKqus8MDzk,7740
|
12
12
|
pyplumio/utils.py,sha256=ktV8_Th2DiwQ0W6afOCau9kBJ8pOrqR-SM2Y2GRy-xE,1869
|
13
|
-
pyplumio/devices/__init__.py,sha256=
|
14
|
-
pyplumio/devices/ecomax.py,sha256=
|
13
|
+
pyplumio/devices/__init__.py,sha256=d0E5hTV7UPa8flq8TNlKf_jt4cOSbRigSE9jjDHrmDI,8302
|
14
|
+
pyplumio/devices/ecomax.py,sha256=1QasnLFgNCplSoDXXe5wUr8JQjr6ChSEGijamXtJZVM,16356
|
15
15
|
pyplumio/devices/ecoster.py,sha256=X46ky5XT8jHMFq9sBW0ve8ZI_tjItQDMt4moXsW-ogY,307
|
16
16
|
pyplumio/devices/mixer.py,sha256=7WdUVgwO4VXmaPNzh3ZWpKr2ooRXWemz2KFHAw35_Rk,2731
|
17
17
|
pyplumio/devices/thermostat.py,sha256=MHMKe45fQ7jKlhBVObJ7McbYQKuF6-LOKSHy-9VNsCU,2253
|
@@ -56,8 +56,8 @@ pyplumio/structures/statuses.py,sha256=1h-EUw1UtuS44E19cNOSavUgZeAxsLgX3iS0eVC8p
|
|
56
56
|
pyplumio/structures/temperatures.py,sha256=2VD3P_vwp9PEBkOn2-WhifOR8w-UYNq35aAxle0z2Vg,2831
|
57
57
|
pyplumio/structures/thermostat_parameters.py,sha256=st3x3HkjQm3hqBrn_fpvPDQu8fuc-Sx33ONB19ViQak,3007
|
58
58
|
pyplumio/structures/thermostat_sensors.py,sha256=rO9jTZWGQpThtJqVdbbv8sYMYHxJi4MfwZQza69L2zw,3399
|
59
|
-
pyplumio-0.5.
|
60
|
-
pyplumio-0.5.
|
61
|
-
pyplumio-0.5.
|
62
|
-
pyplumio-0.5.
|
63
|
-
pyplumio-0.5.
|
59
|
+
pyplumio-0.5.55.dist-info/licenses/LICENSE,sha256=m-UuZFjXJ22uPTGm9kSHS8bqjsf5T8k2wL9bJn1Y04o,1088
|
60
|
+
pyplumio-0.5.55.dist-info/METADATA,sha256=85fX-7JuFsPkNo-zO8RJrM-m82-c_V3eJHr6pMNblOk,5617
|
61
|
+
pyplumio-0.5.55.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
62
|
+
pyplumio-0.5.55.dist-info/top_level.txt,sha256=kNBz9UPPkPD9teDn3U_sEy5LjzwLm9KfADCXtBlbw8A,9
|
63
|
+
pyplumio-0.5.55.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|