aiohomematic 2025.9.6__tar.gz → 2025.9.8__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.6 → aiohomematic-2025.9.8}/PKG-INFO +1 -1
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/caches/visibility.py +2 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/const.py +1 -1
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/model/device.py +12 -1
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic.egg-info/PKG-INFO +1 -1
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/tests/test_central_pydevccu.py +5 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/tests/test_light.py +2 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/tests/test_switch.py +1 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/LICENSE +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/README.md +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/__init__.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/async_support.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/caches/__init__.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/caches/dynamic.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/caches/persistent.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/central/__init__.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/central/decorators.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/central/xml_rpc_server.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/client/__init__.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/client/_rpc_errors.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/client/json_rpc.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/client/xml_rpc.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/context.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/converter.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/decorators.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/exceptions.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/hmcli.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/model/__init__.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/model/calculated/__init__.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/model/calculated/climate.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/model/calculated/data_point.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/model/calculated/operating_voltage_level.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/model/calculated/support.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/model/custom/__init__.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/model/custom/climate.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/model/custom/const.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/model/custom/cover.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/model/custom/data_point.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/model/custom/definition.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/model/custom/light.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/model/custom/lock.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/model/custom/siren.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/model/custom/support.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/model/custom/switch.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/model/custom/valve.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/model/data_point.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/model/event.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/model/generic/__init__.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/model/generic/action.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/model/generic/binary_sensor.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/model/generic/button.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/model/generic/data_point.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/model/generic/number.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/model/generic/select.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/model/generic/sensor.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/model/generic/switch.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/model/generic/text.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/model/hub/__init__.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/model/hub/binary_sensor.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/model/hub/button.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/model/hub/data_point.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/model/hub/number.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/model/hub/select.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/model/hub/sensor.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/model/hub/switch.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/model/hub/text.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/model/support.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/model/update.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/property_decorators.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/py.typed +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/rega_scripts/fetch_all_device_data.fn +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/rega_scripts/get_program_descriptions.fn +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/rega_scripts/get_serial.fn +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/rega_scripts/get_system_variable_descriptions.fn +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/rega_scripts/set_program_state.fn +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/rega_scripts/set_system_variable.fn +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/support.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/validator.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic.egg-info/SOURCES.txt +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic.egg-info/dependency_links.txt +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic.egg-info/requires.txt +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic.egg-info/top_level.txt +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic_support/__init__.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic_support/client_local.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/pyproject.toml +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/setup.cfg +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/tests/test_action.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/tests/test_binary_sensor.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/tests/test_button.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/tests/test_calculated_support.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/tests/test_central.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/tests/test_climate.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/tests/test_cover.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/tests/test_decorator.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/tests/test_device.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/tests/test_entity.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/tests/test_event.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/tests/test_json_rpc.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/tests/test_lock.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/tests/test_number.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/tests/test_select.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/tests/test_sensor.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/tests/test_siren.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/tests/test_support.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/tests/test_text.py +0 -0
- {aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/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.8
|
|
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>
|
|
@@ -171,6 +171,8 @@ _IGNORED_PARAMETERS: Final[frozenset[TParameterName]] = frozenset(
|
|
|
171
171
|
"CLEAR_ERROR",
|
|
172
172
|
"CLEAR_WINDOW_OPEN_SYMBOL",
|
|
173
173
|
"CLOCK",
|
|
174
|
+
"CMD_RETL", # CuXD
|
|
175
|
+
"CMD_RETS", # CuXD
|
|
174
176
|
"CONTROL_DIFFERENTIAL_TEMPERATURE",
|
|
175
177
|
"DATE_TIME_UNKNOWN",
|
|
176
178
|
"DECISION_VALUE",
|
|
@@ -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.8"
|
|
23
23
|
|
|
24
24
|
# Detect test speedup mode via environment
|
|
25
25
|
_TEST_SPEEDUP: Final = (
|
|
@@ -307,7 +307,18 @@ class Device(LogContextMixin, PayloadMixin):
|
|
|
307
307
|
@property
|
|
308
308
|
def has_sub_devices(self) -> bool:
|
|
309
309
|
"""Return if device has multiple sub device channels."""
|
|
310
|
-
|
|
310
|
+
# If there is only one channel group, no sub devices are needed
|
|
311
|
+
if len(self._group_channels) <= 1:
|
|
312
|
+
return False
|
|
313
|
+
count = 0
|
|
314
|
+
# If there are multiple channel groups with more than one channel, there are sub devices
|
|
315
|
+
for gcs in self._group_channels.values():
|
|
316
|
+
if len(gcs) > 1:
|
|
317
|
+
count += 1
|
|
318
|
+
if count > 1:
|
|
319
|
+
return True
|
|
320
|
+
|
|
321
|
+
return False
|
|
311
322
|
|
|
312
323
|
@property
|
|
313
324
|
def id(self) -> str:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: aiohomematic
|
|
3
|
-
Version: 2025.9.
|
|
3
|
+
Version: 2025.9.8
|
|
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>
|
|
@@ -55,6 +55,11 @@ async def test_central_full(central_unit_full) -> None: # noqa: C901
|
|
|
55
55
|
|
|
56
56
|
data = {}
|
|
57
57
|
for device in central_unit_full.devices:
|
|
58
|
+
if device.model in ("HmIP-BSM", "HmIP-BDT", "HmIP-PSM", "HmIP-FSM", "HmIP-WSM", "HmIP-SMO230-A"):
|
|
59
|
+
assert device.has_sub_devices is False
|
|
60
|
+
if device.model in ("HmIP-DRSI4", "HmIP-DRDI3", "HmIP-BSL"):
|
|
61
|
+
assert device.has_sub_devices is True
|
|
62
|
+
|
|
58
63
|
if device.model not in data:
|
|
59
64
|
data[device.model] = {}
|
|
60
65
|
for dp in device.generic_data_points:
|
|
@@ -639,6 +639,7 @@ async def test_ceipfixedcolorlightwired(
|
|
|
639
639
|
light: CustomDpIpFixedColorLight = cast(
|
|
640
640
|
CustomDpIpFixedColorLight, helper.get_prepared_custom_data_point(central, "VCU4704397", 8)
|
|
641
641
|
)
|
|
642
|
+
assert light.channel.device.has_sub_devices is False
|
|
642
643
|
assert light.usage == DataPointUsage.CDP_PRIMARY
|
|
643
644
|
assert light.color_temp_kelvin is None
|
|
644
645
|
assert light.hs_color == (0.0, 0.0)
|
|
@@ -927,6 +928,7 @@ async def test_ceiprgbwlight(
|
|
|
927
928
|
light: CustomDpIpRGBWLight = cast(
|
|
928
929
|
CustomDpIpRGBWLight, helper.get_prepared_custom_data_point(central, "VCU5629873", 1)
|
|
929
930
|
)
|
|
931
|
+
assert light.channel.device.has_sub_devices is False
|
|
930
932
|
assert light.usage == DataPointUsage.CDP_PRIMARY
|
|
931
933
|
assert light.color_temp_kelvin is None
|
|
932
934
|
assert light.hs_color is None
|
|
@@ -45,6 +45,7 @@ async def test_ceswitch(
|
|
|
45
45
|
switch: CustomDpSwitch = cast(CustomDpSwitch, helper.get_prepared_custom_data_point(central, "VCU2128127", 4))
|
|
46
46
|
assert switch.usage == DataPointUsage.CDP_PRIMARY
|
|
47
47
|
assert switch.service_method_names == ("turn_off", "turn_on")
|
|
48
|
+
assert switch.channel.device.has_sub_devices is False
|
|
48
49
|
|
|
49
50
|
await switch.turn_off()
|
|
50
51
|
assert switch.value is False
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/rega_scripts/fetch_all_device_data.fn
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/rega_scripts/set_program_state.fn
RENAMED
|
File without changes
|
{aiohomematic-2025.9.6 → aiohomematic-2025.9.8}/aiohomematic/rega_scripts/set_system_variable.fn
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|