aiohomematic 2025.9.2__tar.gz → 2025.9.3__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.
Potentially problematic release.
This version of aiohomematic might be problematic. Click here for more details.
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/PKG-INFO +1 -1
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic/client/__init__.py +2 -2
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic/client/json_rpc.py +3 -3
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic/client/xml_rpc.py +3 -3
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic/const.py +1 -1
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic/model/calculated/data_point.py +2 -2
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic/model/data_point.py +9 -9
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic/model/device.py +5 -5
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic/model/generic/data_point.py +2 -2
- aiohomematic-2025.9.3/aiohomematic/property_decorators.py +511 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic/support.py +11 -10
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic.egg-info/PKG-INFO +1 -1
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/tests/test_central_pydevccu.py +9 -13
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/tests/test_decorator.py +7 -8
- aiohomematic-2025.9.2/aiohomematic/property_decorators.py +0 -327
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/LICENSE +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/README.md +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic/__init__.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic/async_support.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic/caches/__init__.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic/caches/dynamic.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic/caches/persistent.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic/caches/visibility.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic/central/__init__.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic/central/decorators.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic/central/xml_rpc_server.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic/client/_rpc_errors.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic/context.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic/converter.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic/decorators.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic/exceptions.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic/hmcli.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic/model/__init__.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic/model/calculated/__init__.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic/model/calculated/climate.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic/model/calculated/operating_voltage_level.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic/model/calculated/support.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic/model/custom/__init__.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic/model/custom/climate.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic/model/custom/const.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic/model/custom/cover.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic/model/custom/data_point.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic/model/custom/definition.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic/model/custom/light.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic/model/custom/lock.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic/model/custom/siren.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic/model/custom/support.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic/model/custom/switch.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic/model/custom/valve.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic/model/event.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic/model/generic/__init__.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic/model/generic/action.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic/model/generic/binary_sensor.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic/model/generic/button.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic/model/generic/number.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic/model/generic/select.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic/model/generic/sensor.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic/model/generic/switch.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic/model/generic/text.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic/model/hub/__init__.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic/model/hub/binary_sensor.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic/model/hub/button.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic/model/hub/data_point.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic/model/hub/number.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic/model/hub/select.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic/model/hub/sensor.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic/model/hub/switch.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic/model/hub/text.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic/model/support.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic/model/update.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic/py.typed +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic/rega_scripts/fetch_all_device_data.fn +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic/rega_scripts/get_program_descriptions.fn +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic/rega_scripts/get_serial.fn +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic/rega_scripts/get_system_variable_descriptions.fn +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic/rega_scripts/set_program_state.fn +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic/rega_scripts/set_system_variable.fn +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic/validator.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic.egg-info/SOURCES.txt +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic.egg-info/dependency_links.txt +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic.egg-info/requires.txt +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic.egg-info/top_level.txt +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic_support/__init__.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/aiohomematic_support/client_local.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/pyproject.toml +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/setup.cfg +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/tests/test_action.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/tests/test_binary_sensor.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/tests/test_button.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/tests/test_calculated_support.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/tests/test_central.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/tests/test_climate.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/tests/test_cover.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/tests/test_device.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/tests/test_entity.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/tests/test_event.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/tests/test_json_rpc.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/tests/test_light.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/tests/test_lock.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/tests/test_number.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/tests/test_select.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/tests/test_sensor.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/tests/test_siren.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/tests/test_support.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/tests/test_switch.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/tests/test_text.py +0 -0
- {aiohomematic-2025.9.2 → aiohomematic-2025.9.3}/tests/test_valve.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: aiohomematic
|
|
3
|
-
Version: 2025.9.
|
|
3
|
+
Version: 2025.9.3
|
|
4
4
|
Summary: Homematic interface for Home Assistant running on Python 3.
|
|
5
5
|
Home-page: https://github.com/sukramj/aiohomematic
|
|
6
6
|
Author-email: SukramJ <sukramj@icloud.com>, Daniel Perna <danielperna84@gmail.com>
|
|
@@ -93,7 +93,7 @@ from aiohomematic.decorators import inspector, measure_execution_time
|
|
|
93
93
|
from aiohomematic.exceptions import BaseHomematicException, ClientException, NoConnectionException
|
|
94
94
|
from aiohomematic.model.device import Device
|
|
95
95
|
from aiohomematic.model.support import convert_value
|
|
96
|
-
from aiohomematic.property_decorators import
|
|
96
|
+
from aiohomematic.property_decorators import hm_property
|
|
97
97
|
from aiohomematic.support import (
|
|
98
98
|
LogContextMixin,
|
|
99
99
|
build_xml_rpc_headers,
|
|
@@ -171,7 +171,7 @@ class Client(ABC, LogContextMixin):
|
|
|
171
171
|
"""Return the interface of the client."""
|
|
172
172
|
return self._config.interface
|
|
173
173
|
|
|
174
|
-
@
|
|
174
|
+
@hm_property(log_context=True)
|
|
175
175
|
def interface_id(self) -> str:
|
|
176
176
|
"""Return the interface id of the client."""
|
|
177
177
|
return self._config.interface_id
|
|
@@ -91,7 +91,7 @@ from aiohomematic.exceptions import (
|
|
|
91
91
|
UnsupportedException,
|
|
92
92
|
)
|
|
93
93
|
from aiohomematic.model.support import convert_value
|
|
94
|
-
from aiohomematic.property_decorators import
|
|
94
|
+
from aiohomematic.property_decorators import hm_property
|
|
95
95
|
from aiohomematic.support import (
|
|
96
96
|
LogContextMixin,
|
|
97
97
|
cleanup_text_from_html_tags,
|
|
@@ -217,12 +217,12 @@ class JsonRpcAioHttpClient(LogContextMixin):
|
|
|
217
217
|
"""If session exists, then it is activated."""
|
|
218
218
|
return self._session_id is not None
|
|
219
219
|
|
|
220
|
-
@
|
|
220
|
+
@hm_property(log_context=True)
|
|
221
221
|
def url(self) -> str | None:
|
|
222
222
|
"""Return url."""
|
|
223
223
|
return self._url
|
|
224
224
|
|
|
225
|
-
@
|
|
225
|
+
@hm_property(log_context=True)
|
|
226
226
|
def tls(self) -> bool:
|
|
227
227
|
"""Return tls."""
|
|
228
228
|
return self._tls
|
|
@@ -42,7 +42,7 @@ from aiohomematic.exceptions import (
|
|
|
42
42
|
NoConnectionException,
|
|
43
43
|
UnsupportedException,
|
|
44
44
|
)
|
|
45
|
-
from aiohomematic.property_decorators import
|
|
45
|
+
from aiohomematic.property_decorators import hm_property
|
|
46
46
|
from aiohomematic.support import LogContextMixin, extract_exc_args, get_tls_context, log_boundary_error
|
|
47
47
|
|
|
48
48
|
_LOGGER: Final = logging.getLogger(__name__)
|
|
@@ -121,7 +121,7 @@ class XmlRpcProxy(xmlrpc.client.ServerProxy, LogContextMixin):
|
|
|
121
121
|
supported_methods.append(_XmlRpcMethod.PING)
|
|
122
122
|
self._supported_methods = tuple(supported_methods)
|
|
123
123
|
|
|
124
|
-
@
|
|
124
|
+
@hm_property(log_context=True)
|
|
125
125
|
def interface_id(self) -> str:
|
|
126
126
|
"""Return the interface_id."""
|
|
127
127
|
return self._interface_id
|
|
@@ -131,7 +131,7 @@ class XmlRpcProxy(xmlrpc.client.ServerProxy, LogContextMixin):
|
|
|
131
131
|
"""Return the supported methods."""
|
|
132
132
|
return self._supported_methods
|
|
133
133
|
|
|
134
|
-
@
|
|
134
|
+
@hm_property(log_context=True)
|
|
135
135
|
def tls(self) -> bool:
|
|
136
136
|
"""Return tls."""
|
|
137
137
|
return self._tls
|
|
@@ -19,7 +19,7 @@ import sys
|
|
|
19
19
|
from types import MappingProxyType
|
|
20
20
|
from typing import Any, Final, NamedTuple, Required, TypeAlias, TypedDict
|
|
21
21
|
|
|
22
|
-
VERSION: Final = "2025.9.
|
|
22
|
+
VERSION: Final = "2025.9.3"
|
|
23
23
|
|
|
24
24
|
# Detect test speedup mode via environment
|
|
25
25
|
_TEST_SPEEDUP: Final = (
|
|
@@ -32,7 +32,7 @@ from aiohomematic.model.support import (
|
|
|
32
32
|
generate_unique_id,
|
|
33
33
|
get_data_point_name_data,
|
|
34
34
|
)
|
|
35
|
-
from aiohomematic.property_decorators import
|
|
35
|
+
from aiohomematic.property_decorators import cached_property, config_property, state_property
|
|
36
36
|
|
|
37
37
|
_LOGGER: Final = logging.getLogger(__name__)
|
|
38
38
|
|
|
@@ -147,7 +147,7 @@ class CalculatedDataPoint[ParameterT: GenericParameterType](BaseDataPoint):
|
|
|
147
147
|
"""Return default value."""
|
|
148
148
|
return self._default
|
|
149
149
|
|
|
150
|
-
@
|
|
150
|
+
@cached_property
|
|
151
151
|
def dpk(self) -> DataPointKey:
|
|
152
152
|
"""Return data_point key value."""
|
|
153
153
|
return DataPointKey(
|
|
@@ -73,7 +73,7 @@ from aiohomematic.model.support import (
|
|
|
73
73
|
convert_value,
|
|
74
74
|
generate_unique_id,
|
|
75
75
|
)
|
|
76
|
-
from aiohomematic.property_decorators import
|
|
76
|
+
from aiohomematic.property_decorators import cached_property, config_property, hm_property, state_property
|
|
77
77
|
from aiohomematic.support import LogContextMixin, PayloadMixin, extract_exc_args, log_boundary_error
|
|
78
78
|
|
|
79
79
|
__all__ = [
|
|
@@ -269,7 +269,7 @@ class CallbackDataPoint(ABC, LogContextMixin):
|
|
|
269
269
|
"""Return the data_point usage."""
|
|
270
270
|
return DataPointUsage.DATA_POINT
|
|
271
271
|
|
|
272
|
-
@
|
|
272
|
+
@cached_property
|
|
273
273
|
def enabled_default(self) -> bool:
|
|
274
274
|
"""Return, if data_point should be enabled based on usage attribute."""
|
|
275
275
|
return self.usage in (
|
|
@@ -295,12 +295,12 @@ class CallbackDataPoint(ABC, LogContextMixin):
|
|
|
295
295
|
return self._path_data.state_path
|
|
296
296
|
|
|
297
297
|
# @property
|
|
298
|
-
@
|
|
298
|
+
@cached_property
|
|
299
299
|
def service_methods(self) -> Mapping[str, Callable]:
|
|
300
300
|
"""Return all service methods."""
|
|
301
301
|
return get_service_calls(obj=self)
|
|
302
302
|
|
|
303
|
-
@
|
|
303
|
+
@cached_property
|
|
304
304
|
def service_method_names(self) -> tuple[str, ...]:
|
|
305
305
|
"""Return all service methods."""
|
|
306
306
|
return tuple(self.service_methods.keys())
|
|
@@ -447,7 +447,7 @@ class BaseDataPoint(CallbackDataPoint, PayloadMixin):
|
|
|
447
447
|
"""Return the availability of the device."""
|
|
448
448
|
return self._device.available
|
|
449
449
|
|
|
450
|
-
@
|
|
450
|
+
@hm_property(log_context=True)
|
|
451
451
|
def channel(self) -> hmd.Channel:
|
|
452
452
|
"""Return the channel the data_point."""
|
|
453
453
|
return self._channel
|
|
@@ -659,7 +659,7 @@ class BaseParameterDataPoint[
|
|
|
659
659
|
"""Return if the parameter is un ignored."""
|
|
660
660
|
return self._is_un_ignored
|
|
661
661
|
|
|
662
|
-
@
|
|
662
|
+
@cached_property
|
|
663
663
|
def dpk(self) -> DataPointKey:
|
|
664
664
|
"""Return data_point key value."""
|
|
665
665
|
return DataPointKey(
|
|
@@ -684,7 +684,7 @@ class BaseParameterDataPoint[
|
|
|
684
684
|
"""Return multiplier value."""
|
|
685
685
|
return self._multiplier
|
|
686
686
|
|
|
687
|
-
@
|
|
687
|
+
@hm_property(log_context=True)
|
|
688
688
|
def parameter(self) -> str:
|
|
689
689
|
"""Return parameter name."""
|
|
690
690
|
return self._parameter
|
|
@@ -699,7 +699,7 @@ class BaseParameterDataPoint[
|
|
|
699
699
|
"""Return raw unit value."""
|
|
700
700
|
return self._raw_unit
|
|
701
701
|
|
|
702
|
-
@
|
|
702
|
+
@cached_property
|
|
703
703
|
def requires_polling(self) -> bool:
|
|
704
704
|
"""Return whether the data_point requires polling."""
|
|
705
705
|
return not self._channel.device.client.supports_push_updates or (
|
|
@@ -785,7 +785,7 @@ class BaseParameterDataPoint[
|
|
|
785
785
|
"""Return the if data_point is visible in ccu."""
|
|
786
786
|
return self._visible
|
|
787
787
|
|
|
788
|
-
@
|
|
788
|
+
@cached_property
|
|
789
789
|
def _enabled_by_channel_operation_mode(self) -> bool | None:
|
|
790
790
|
"""Return, if the data_point/event must be enabled."""
|
|
791
791
|
if self._channel.type_name not in _CONFIGURABLE_CHANNEL:
|
|
@@ -80,7 +80,7 @@ from aiohomematic.model.support import (
|
|
|
80
80
|
get_device_name,
|
|
81
81
|
)
|
|
82
82
|
from aiohomematic.model.update import DpUpdate
|
|
83
|
-
from aiohomematic.property_decorators import
|
|
83
|
+
from aiohomematic.property_decorators import cached_property, hm_property, info_property, state_property
|
|
84
84
|
from aiohomematic.support import (
|
|
85
85
|
CacheEntry,
|
|
86
86
|
LogContextMixin,
|
|
@@ -327,7 +327,7 @@ class Device(LogContextMixin, PayloadMixin):
|
|
|
327
327
|
"""Return the interface of the device."""
|
|
328
328
|
return self._interface
|
|
329
329
|
|
|
330
|
-
@
|
|
330
|
+
@hm_property(log_context=True)
|
|
331
331
|
def interface_id(self) -> str:
|
|
332
332
|
"""Return the interface_id of the device."""
|
|
333
333
|
return self._interface_id
|
|
@@ -441,7 +441,7 @@ class Device(LogContextMixin, PayloadMixin):
|
|
|
441
441
|
for channel in self._channels.values():
|
|
442
442
|
await channel.remove_central_link()
|
|
443
443
|
|
|
444
|
-
@
|
|
444
|
+
@cached_property
|
|
445
445
|
def relevant_for_central_link_management(self) -> bool:
|
|
446
446
|
"""Return if channel is relevant for central link management."""
|
|
447
447
|
return (
|
|
@@ -762,7 +762,7 @@ class Channel(LogContextMixin, PayloadMixin):
|
|
|
762
762
|
"""Return the device description for the channel."""
|
|
763
763
|
return self._description
|
|
764
764
|
|
|
765
|
-
@
|
|
765
|
+
@hm_property(log_context=True)
|
|
766
766
|
def device(self) -> Device:
|
|
767
767
|
"""Return the device of the channel."""
|
|
768
768
|
return self._device
|
|
@@ -832,7 +832,7 @@ class Channel(LogContextMixin, PayloadMixin):
|
|
|
832
832
|
"""Return the name data of the channel."""
|
|
833
833
|
return self._name_data
|
|
834
834
|
|
|
835
|
-
@
|
|
835
|
+
@hm_property(log_context=True)
|
|
836
836
|
def no(self) -> int | None:
|
|
837
837
|
"""Return the channel_no of the channel."""
|
|
838
838
|
return self._no
|
|
@@ -21,7 +21,7 @@ from aiohomematic.decorators import inspector
|
|
|
21
21
|
from aiohomematic.exceptions import ValidationException
|
|
22
22
|
from aiohomematic.model import data_point as hme, device as hmd
|
|
23
23
|
from aiohomematic.model.support import DataPointNameData, GenericParameterType, get_data_point_name_data
|
|
24
|
-
from aiohomematic.property_decorators import
|
|
24
|
+
from aiohomematic.property_decorators import cached_property
|
|
25
25
|
|
|
26
26
|
_LOGGER: Final = logging.getLogger(__name__)
|
|
27
27
|
|
|
@@ -51,7 +51,7 @@ class GenericDataPoint[ParameterT: GenericParameterType, InputParameterT: Generi
|
|
|
51
51
|
parameter_data=parameter_data,
|
|
52
52
|
)
|
|
53
53
|
|
|
54
|
-
@
|
|
54
|
+
@cached_property
|
|
55
55
|
def usage(self) -> DataPointUsage:
|
|
56
56
|
"""Return the data_point usage."""
|
|
57
57
|
if self._is_forced_sensor or self._is_un_ignored:
|