aiohomematic 2025.10.2__py3-none-any.whl → 2025.10.3__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.
Potentially problematic release.
This version of aiohomematic might be problematic. Click here for more details.
- aiohomematic/async_support.py +1 -1
- aiohomematic/central/__init__.py +1 -1
- aiohomematic/central/xml_rpc_server.py +6 -1
- aiohomematic/const.py +1 -1
- aiohomematic/model/custom/siren.py +2 -0
- aiohomematic/model/data_point.py +1 -0
- aiohomematic/model/generic/data_point.py +1 -1
- aiohomematic/model/support.py +2 -2
- aiohomematic/property_decorators.py +2 -0
- {aiohomematic-2025.10.2.dist-info → aiohomematic-2025.10.3.dist-info}/METADATA +1 -1
- {aiohomematic-2025.10.2.dist-info → aiohomematic-2025.10.3.dist-info}/RECORD +15 -15
- aiohomematic_support/client_local.py +7 -2
- {aiohomematic-2025.10.2.dist-info → aiohomematic-2025.10.3.dist-info}/WHEEL +0 -0
- {aiohomematic-2025.10.2.dist-info → aiohomematic-2025.10.3.dist-info}/licenses/LICENSE +0 -0
- {aiohomematic-2025.10.2.dist-info → aiohomematic-2025.10.3.dist-info}/top_level.txt +0 -0
aiohomematic/async_support.py
CHANGED
|
@@ -85,7 +85,7 @@ class Looper:
|
|
|
85
85
|
)
|
|
86
86
|
return
|
|
87
87
|
|
|
88
|
-
def _async_create_task[R](self, target: Coroutine[Any, Any, R], name: str) -> asyncio.Task[R]:
|
|
88
|
+
def _async_create_task[R](self, target: Coroutine[Any, Any, R], name: str) -> asyncio.Task[R]: # kwonly: disable
|
|
89
89
|
"""Create a task from within the event_loop. This method must be run in the event_loop."""
|
|
90
90
|
task = self._loop.create_task(target, name=name)
|
|
91
91
|
self._tasks.add(task)
|
aiohomematic/central/__init__.py
CHANGED
|
@@ -1640,7 +1640,7 @@ class _Scheduler(threading.Thread):
|
|
|
1640
1640
|
),
|
|
1641
1641
|
]
|
|
1642
1642
|
|
|
1643
|
-
def _backend_system_callback(self, system_event: BackendSystemEvent, **kwargs: Any) -> None:
|
|
1643
|
+
def _backend_system_callback(self, *, system_event: BackendSystemEvent, **kwargs: Any) -> None:
|
|
1644
1644
|
"""Handle event of new device creation, to delay the start of the sysvar scan."""
|
|
1645
1645
|
if system_event == BackendSystemEvent.DEVICES_CREATED:
|
|
1646
1646
|
self._devices_created = True
|
|
@@ -27,6 +27,9 @@ _LOGGER: Final = logging.getLogger(__name__)
|
|
|
27
27
|
class RPCFunctions:
|
|
28
28
|
"""The XML-RPC functions the backend will expect."""
|
|
29
29
|
|
|
30
|
+
# Disable kw-only linter for this class since XML-RPC signatures are positional by protocol
|
|
31
|
+
__kwonly_check__ = False
|
|
32
|
+
|
|
30
33
|
def __init__(self, *, xml_rpc_server: XmlRpcServer) -> None:
|
|
31
34
|
"""Init RPCFunctions."""
|
|
32
35
|
self._xml_rpc_server: Final = xml_rpc_server
|
|
@@ -161,6 +164,8 @@ class AioHomematicXMLRPCServer(SimpleXMLRPCServer):
|
|
|
161
164
|
system_listMethods(self, interface_id: str.
|
|
162
165
|
"""
|
|
163
166
|
|
|
167
|
+
__kwonly_check__ = False
|
|
168
|
+
|
|
164
169
|
def system_listMethods(self, interface_id: str | None = None, /) -> list[str]:
|
|
165
170
|
"""Return a list of the methods supported by the server."""
|
|
166
171
|
return SimpleXMLRPCServer.system_listMethods(self)
|
|
@@ -198,7 +203,7 @@ class XmlRpcServer(threading.Thread):
|
|
|
198
203
|
self._simple_xml_rpc_server.register_instance(RPCFunctions(xml_rpc_server=self), allow_dotted_names=True)
|
|
199
204
|
self._centrals: Final[dict[str, hmcu.CentralUnit]] = {}
|
|
200
205
|
|
|
201
|
-
def __new__(cls, ip_addr: str, port: int) -> XmlRpcServer: # noqa: PYI034
|
|
206
|
+
def __new__(cls, ip_addr: str, port: int) -> XmlRpcServer: # noqa: PYI034 # kwonly: disable
|
|
202
207
|
"""Create new XmlRPC server."""
|
|
203
208
|
if (xml_rpc := cls._instances.get((ip_addr, port))) is None:
|
|
204
209
|
_LOGGER.debug("Creating XmlRpc server")
|
aiohomematic/const.py
CHANGED
|
@@ -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.10.
|
|
22
|
+
VERSION: Final = "2025.10.3"
|
|
23
23
|
|
|
24
24
|
# Detect test speedup mode via environment
|
|
25
25
|
_TEST_SPEEDUP: Final = (
|
|
@@ -79,6 +79,7 @@ class BaseCustomDpSiren(CustomDataPoint):
|
|
|
79
79
|
@bind_collector()
|
|
80
80
|
async def turn_on(
|
|
81
81
|
self,
|
|
82
|
+
*,
|
|
82
83
|
collector: CallParameterCollector | None = None,
|
|
83
84
|
**kwargs: Unpack[SirenOnArgs],
|
|
84
85
|
) -> None:
|
|
@@ -143,6 +144,7 @@ class CustomDpIpSiren(BaseCustomDpSiren):
|
|
|
143
144
|
@bind_collector()
|
|
144
145
|
async def turn_on(
|
|
145
146
|
self,
|
|
147
|
+
*,
|
|
146
148
|
collector: CallParameterCollector | None = None,
|
|
147
149
|
**kwargs: Unpack[SirenOnArgs],
|
|
148
150
|
) -> None:
|
aiohomematic/model/data_point.py
CHANGED
|
@@ -111,7 +111,7 @@ class GenericDataPoint[ParameterT: GenericParameterType, InputParameterT: Generi
|
|
|
111
111
|
converted_value = self._convert_value(value=prepared_value)
|
|
112
112
|
# if collector is set, then add value to collector
|
|
113
113
|
if collector:
|
|
114
|
-
collector.add_data_point(self, value=converted_value, collector_order=collector_order)
|
|
114
|
+
collector.add_data_point(data_point=self, value=converted_value, collector_order=collector_order)
|
|
115
115
|
return set()
|
|
116
116
|
|
|
117
117
|
# if collector is not set, then send value directly
|
aiohomematic/model/support.py
CHANGED
|
@@ -87,7 +87,7 @@ class ChannelNameData:
|
|
|
87
87
|
return ChannelNameData(device_name="", channel_name="")
|
|
88
88
|
|
|
89
89
|
@staticmethod
|
|
90
|
-
def _get_channel_name(device_name: str, channel_name: str) -> str:
|
|
90
|
+
def _get_channel_name(*, device_name: str, channel_name: str) -> str:
|
|
91
91
|
"""Return the channel_name of the data_point only name."""
|
|
92
92
|
if device_name and channel_name and channel_name.startswith(device_name):
|
|
93
93
|
c_name = channel_name.replace(device_name, "").strip()
|
|
@@ -121,7 +121,7 @@ class DataPointNameData(ChannelNameData):
|
|
|
121
121
|
return DataPointNameData(device_name="", channel_name="")
|
|
122
122
|
|
|
123
123
|
@staticmethod
|
|
124
|
-
def _get_channel_parameter_name(channel_name: str, parameter_name: str | None) -> str:
|
|
124
|
+
def _get_channel_parameter_name(*, channel_name: str, parameter_name: str | None) -> str:
|
|
125
125
|
"""Return the channel parameter name of the data_point."""
|
|
126
126
|
if channel_name and parameter_name:
|
|
127
127
|
return f"{channel_name} {parameter_name}".strip()
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: aiohomematic
|
|
3
|
-
Version: 2025.10.
|
|
3
|
+
Version: 2025.10.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>
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
aiohomematic/__init__.py,sha256=ngULK_anZQwwUUCVcberBdVjguYfboiuG9VoueKy9fA,2283
|
|
2
|
-
aiohomematic/async_support.py,sha256=
|
|
3
|
-
aiohomematic/const.py,sha256=
|
|
2
|
+
aiohomematic/async_support.py,sha256=EEzOwI3LAWjl16Q2QgtTLS7P9ktodBvs8Cw3ZKsjyxw,6153
|
|
3
|
+
aiohomematic/const.py,sha256=mJmfDFhm3NFQP4qkRlb63d89qi-pDidoHUq0RYYOM6I,25565
|
|
4
4
|
aiohomematic/context.py,sha256=M7gkA7KFT0dp35gzGz2dzKVXu1PP0sAnepgLlmjyRS4,451
|
|
5
5
|
aiohomematic/converter.py,sha256=gaNHe-WEiBStZMuuRz9iGn3Mo_CGz1bjgLtlYBJJAko,3624
|
|
6
6
|
aiohomematic/decorators.py,sha256=oHEFSJoJVd-h9RYb6NLTJ60erkpRHPYv7EEipKn1a9Q,10636
|
|
7
7
|
aiohomematic/exceptions.py,sha256=8Uu3rADawhYlAz6y4J52aJ-wKok8Z7YbUYUwWeGMKhs,5028
|
|
8
8
|
aiohomematic/hmcli.py,sha256=qNstNDX6q8t3mJFCGlXlmRVobGabntrPtFi3kchf1Eg,4933
|
|
9
|
-
aiohomematic/property_decorators.py,sha256=
|
|
9
|
+
aiohomematic/property_decorators.py,sha256=tAsmcSDnLsUiWlD1KUEe5fvYoIGpk5syYB0DrGuN4QU,16231
|
|
10
10
|
aiohomematic/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
11
11
|
aiohomematic/support.py,sha256=w05YlO1IrelF2a1zKkUGWyr5E-nDJ-knh0LQqOHpR34,20514
|
|
12
12
|
aiohomematic/validator.py,sha256=HUikmo-SFksehFBAdZmBv4ajy0XkjgvXvcCfbexnzZo,3563
|
|
@@ -14,18 +14,18 @@ aiohomematic/caches/__init__.py,sha256=_gI30tbsWgPRaHvP6cRxOQr6n9bYZzU-jp1WbHhWg
|
|
|
14
14
|
aiohomematic/caches/dynamic.py,sha256=vyQsjBc2uGoNCCrWPMGmNBlUQ9GYvgVuupA9bhqH5hI,21466
|
|
15
15
|
aiohomematic/caches/persistent.py,sha256=2bgASru4zbrFEd8rOn2YcReeHPiPJE8hMgMUPAbGh68,20117
|
|
16
16
|
aiohomematic/caches/visibility.py,sha256=SThfEO3LKbIIERD4Novyj4ZZUkcYrBuvYdNQfPO29JQ,31676
|
|
17
|
-
aiohomematic/central/__init__.py,sha256=
|
|
17
|
+
aiohomematic/central/__init__.py,sha256=nXbA9IYHSn-Gm59U_T9gqMeKwQxmliv3jdrkXnMtpXs,86940
|
|
18
18
|
aiohomematic/central/decorators.py,sha256=v0gCa5QEQPNEvGy0O2YIOhoJy7OKiJZJWtK64OQm7y4,6918
|
|
19
|
-
aiohomematic/central/xml_rpc_server.py,sha256=
|
|
19
|
+
aiohomematic/central/xml_rpc_server.py,sha256=1Vr8BXakLSo-RC967IlRI9LPUCl4iXp2y-AXSZuDyPc,10777
|
|
20
20
|
aiohomematic/client/__init__.py,sha256=XWHg8VTtiahu7jfHwq4yOVXOxUy8nw80JF9uyY7QNJI,70457
|
|
21
21
|
aiohomematic/client/_rpc_errors.py,sha256=-NPtGvkQPJ4V2clDxv1tKy09M9JZm61pUCeki9DDh6s,2984
|
|
22
22
|
aiohomematic/client/json_rpc.py,sha256=k5euUJkDzIQXdOX5JJxkua_7AUUTFspK8rTGnVKoCf8,49568
|
|
23
23
|
aiohomematic/client/xml_rpc.py,sha256=9PEOWoTG0EMUAMyqiInF4iA_AduHv_hhjJW3YhYjYqU,9614
|
|
24
24
|
aiohomematic/model/__init__.py,sha256=KO7gas_eEzm67tODKqWTs0617CSGeKKjOWOlDbhRo_Q,5458
|
|
25
|
-
aiohomematic/model/data_point.py,sha256=
|
|
25
|
+
aiohomematic/model/data_point.py,sha256=Ml8AOQ1RcRezTYWiGBlIXwcTLolQMX5Cyb-O7GtNDm4,41586
|
|
26
26
|
aiohomematic/model/device.py,sha256=15z5G2X3jSJaj-yz7jX_tnirzipRIGBJPymObY3Dmjk,52942
|
|
27
27
|
aiohomematic/model/event.py,sha256=82H8M_QNMCCC29mP3R16alJyKWS3Hb3aqY_aFMSqCvo,6874
|
|
28
|
-
aiohomematic/model/support.py,sha256=
|
|
28
|
+
aiohomematic/model/support.py,sha256=l5E9Oon20nkGWOSEmbYtqQbpbh6-H4rIk8xtEtk5Fcg,19657
|
|
29
29
|
aiohomematic/model/update.py,sha256=5F39xNz9B2GKJ8TvJHPMC-Wu97HfkiiMawjnHEYMnoA,5156
|
|
30
30
|
aiohomematic/model/calculated/__init__.py,sha256=UGLePgKDH8JpLqjhPBgvBzjggI34omcaCPsc6tcM8Xs,2811
|
|
31
31
|
aiohomematic/model/calculated/climate.py,sha256=GXBsC5tnrC_BvnFBkJ9KUqE7uVcGD1KTU_6-OleF5H4,8545
|
|
@@ -40,7 +40,7 @@ aiohomematic/model/custom/data_point.py,sha256=l2pTz7Fu5jGCstXHK1cWCFfBWIJeKmtt3
|
|
|
40
40
|
aiohomematic/model/custom/definition.py,sha256=9kSdqVOHQs65Q2Op5QknNQv5lLmZkZlGCUUCRGicOaw,35662
|
|
41
41
|
aiohomematic/model/custom/light.py,sha256=2UxQOoupwTpQ-5iwY51gL_B815sgDXNW-HG-QhAFb9E,44448
|
|
42
42
|
aiohomematic/model/custom/lock.py,sha256=ndzZ0hp7FBohw7T_qR0jPobwlcwxus9M1DuDu_7vfPw,11996
|
|
43
|
-
aiohomematic/model/custom/siren.py,sha256=
|
|
43
|
+
aiohomematic/model/custom/siren.py,sha256=DT8RoOCl7FqstgRSBK-RWRcY4T29LuEdnlhaWCB6ATk,9785
|
|
44
44
|
aiohomematic/model/custom/support.py,sha256=UvencsvCwgpm4iqRNRt5KRs560tyw1NhYP5ZaqmCT2k,1453
|
|
45
45
|
aiohomematic/model/custom/switch.py,sha256=VKknWPJOtSwIzV-Ag_8Zg1evtkyjKh768Be_quU_R54,6885
|
|
46
46
|
aiohomematic/model/custom/valve.py,sha256=u9RYzeJ8FNmpFO6amlLElXTQdAeqac5yo7NbZYS6Z9U,4242
|
|
@@ -48,7 +48,7 @@ aiohomematic/model/generic/__init__.py,sha256=-ho8m9gFlORBGNPn2i8c9i5-GVLLFvTlf5
|
|
|
48
48
|
aiohomematic/model/generic/action.py,sha256=niJPvTs43b9GiKomdBaBKwjOwtmNxR_YRhj5Fpje9NU,997
|
|
49
49
|
aiohomematic/model/generic/binary_sensor.py,sha256=U5GvfRYbhwe0jRmaedD4LVZ_24SyyPbVr74HEfZXoxE,887
|
|
50
50
|
aiohomematic/model/generic/button.py,sha256=6jZ49woI9gYJEx__PjguDNbc5vdE1P-YcLMZZFkYRCg,740
|
|
51
|
-
aiohomematic/model/generic/data_point.py,sha256=
|
|
51
|
+
aiohomematic/model/generic/data_point.py,sha256=2NvdU802JUo4NZh0v6oMI-pVtlNluSFse7ISMGqo70g,6084
|
|
52
52
|
aiohomematic/model/generic/number.py,sha256=nJgOkMZwNfPtzBrX2o5RAjBt-o8KrKuqtDa9LBj0Jw0,2678
|
|
53
53
|
aiohomematic/model/generic/select.py,sha256=vWfLUdQBjZLG-q-WZMxHk9Klawg_iNOEeSoVHrvG35I,1538
|
|
54
54
|
aiohomematic/model/generic/sensor.py,sha256=wCnQ8IoC8uPTN29R250pfJa4x6y9sh4c3vxQ4Km8Clg,2262
|
|
@@ -69,10 +69,10 @@ aiohomematic/rega_scripts/get_serial.fn,sha256=t1oeo-sB_EuVeiY24PLcxFSkdQVgEWGXz
|
|
|
69
69
|
aiohomematic/rega_scripts/get_system_variable_descriptions.fn,sha256=UKXvC0_5lSApdQ2atJc0E5Stj5Zt3lqh0EcliokYu2c,849
|
|
70
70
|
aiohomematic/rega_scripts/set_program_state.fn,sha256=0bnv7lUj8FMjDZBz325tDVP61m04cHjVj4kIOnUUgpY,279
|
|
71
71
|
aiohomematic/rega_scripts/set_system_variable.fn,sha256=sTmr7vkPTPnPkor5cnLKlDvfsYRbGO1iq2z_2pMXq5E,383
|
|
72
|
-
aiohomematic-2025.10.
|
|
72
|
+
aiohomematic-2025.10.3.dist-info/licenses/LICENSE,sha256=q-B0xpREuZuvKsmk3_iyVZqvZ-vJcWmzMZpeAd0RqtQ,1083
|
|
73
73
|
aiohomematic_support/__init__.py,sha256=_0YtF4lTdC_k6-zrM2IefI0u0LMr_WA61gXAyeGLgbY,66
|
|
74
|
-
aiohomematic_support/client_local.py,sha256=
|
|
75
|
-
aiohomematic-2025.10.
|
|
76
|
-
aiohomematic-2025.10.
|
|
77
|
-
aiohomematic-2025.10.
|
|
78
|
-
aiohomematic-2025.10.
|
|
74
|
+
aiohomematic_support/client_local.py,sha256=CGZ6N_JCQ12_u2h56M_WCZ5SbcOK4xBsPYjLH2eyqlo,12820
|
|
75
|
+
aiohomematic-2025.10.3.dist-info/METADATA,sha256=npEp8wqV-PrVJzhabx_yKlOicBz3Q7pnqrLf1nqqlLg,7603
|
|
76
|
+
aiohomematic-2025.10.3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
77
|
+
aiohomematic-2025.10.3.dist-info/top_level.txt,sha256=5TDRlUWQPThIUwQjOj--aUo4UA-ow4m0sNhnoCBi5n8,34
|
|
78
|
+
aiohomematic-2025.10.3.dist-info/RECORD,,
|
|
@@ -153,7 +153,7 @@ class ClientLocal(Client): # pragma: no cover
|
|
|
153
153
|
|
|
154
154
|
@inspector(re_raise=False)
|
|
155
155
|
async def get_all_system_variables(
|
|
156
|
-
self, markers: tuple[DescriptionMarker | str, ...]
|
|
156
|
+
self, *, markers: tuple[DescriptionMarker | str, ...]
|
|
157
157
|
) -> tuple[SystemVariableData, ...]:
|
|
158
158
|
"""Get all system variables from the backend."""
|
|
159
159
|
return ()
|
|
@@ -203,6 +203,7 @@ class ClientLocal(Client): # pragma: no cover
|
|
|
203
203
|
@inspector(log_level=logging.NOTSET)
|
|
204
204
|
async def get_value(
|
|
205
205
|
self,
|
|
206
|
+
*,
|
|
206
207
|
channel_address: str,
|
|
207
208
|
paramset_key: ParamsetKey,
|
|
208
209
|
parameter: str,
|
|
@@ -214,6 +215,7 @@ class ClientLocal(Client): # pragma: no cover
|
|
|
214
215
|
@inspector(re_raise=False, no_raise_return=set())
|
|
215
216
|
async def set_value(
|
|
216
217
|
self,
|
|
218
|
+
*,
|
|
217
219
|
channel_address: str,
|
|
218
220
|
paramset_key: ParamsetKey,
|
|
219
221
|
parameter: str,
|
|
@@ -236,6 +238,7 @@ class ClientLocal(Client): # pragma: no cover
|
|
|
236
238
|
@inspector
|
|
237
239
|
async def get_paramset(
|
|
238
240
|
self,
|
|
241
|
+
*,
|
|
239
242
|
address: str,
|
|
240
243
|
paramset_key: ParamsetKey | str,
|
|
241
244
|
call_source: CallSource = CallSource.MANUAL_OR_SCHEDULED,
|
|
@@ -249,7 +252,7 @@ class ClientLocal(Client): # pragma: no cover
|
|
|
249
252
|
return {}
|
|
250
253
|
|
|
251
254
|
async def _get_paramset_description(
|
|
252
|
-
self, address: str, paramset_key: ParamsetKey
|
|
255
|
+
self, *, address: str, paramset_key: ParamsetKey
|
|
253
256
|
) -> dict[str, ParameterData] | None:
|
|
254
257
|
"""Get paramset description from the backend."""
|
|
255
258
|
if not self._local_resources:
|
|
@@ -277,6 +280,7 @@ class ClientLocal(Client): # pragma: no cover
|
|
|
277
280
|
@inspector(measure_performance=True)
|
|
278
281
|
async def put_paramset(
|
|
279
282
|
self,
|
|
283
|
+
*,
|
|
280
284
|
channel_address: str,
|
|
281
285
|
paramset_key_or_link_address: ParamsetKey | str,
|
|
282
286
|
values: Any,
|
|
@@ -312,6 +316,7 @@ class ClientLocal(Client): # pragma: no cover
|
|
|
312
316
|
|
|
313
317
|
async def _load_all_json_files(
|
|
314
318
|
self,
|
|
319
|
+
*,
|
|
315
320
|
anchor: str,
|
|
316
321
|
resource: str,
|
|
317
322
|
include_list: list[str] | None = None,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|