aiohomematic 2025.8.7__py3-none-any.whl → 2025.8.9__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/caches/dynamic.py +8 -12
- aiohomematic/caches/persistent.py +27 -22
- aiohomematic/caches/visibility.py +275 -252
- aiohomematic/central/__init__.py +26 -31
- aiohomematic/const.py +103 -76
- aiohomematic/model/calculated/__init__.py +3 -3
- aiohomematic/model/calculated/data_point.py +5 -1
- aiohomematic/model/custom/data_point.py +4 -0
- aiohomematic/model/data_point.py +16 -3
- aiohomematic/model/device.py +35 -64
- aiohomematic/model/hub/__init__.py +5 -9
- aiohomematic/model/hub/data_point.py +4 -0
- aiohomematic/model/update.py +4 -0
- aiohomematic/rega_scripts/fetch_all_device_data.fn +48 -31
- aiohomematic/support.py +15 -2
- {aiohomematic-2025.8.7.dist-info → aiohomematic-2025.8.9.dist-info}/METADATA +1 -1
- {aiohomematic-2025.8.7.dist-info → aiohomematic-2025.8.9.dist-info}/RECORD +20 -20
- {aiohomematic-2025.8.7.dist-info → aiohomematic-2025.8.9.dist-info}/WHEEL +0 -0
- {aiohomematic-2025.8.7.dist-info → aiohomematic-2025.8.9.dist-info}/licenses/LICENSE +0 -0
- {aiohomematic-2025.8.7.dist-info → aiohomematic-2025.8.9.dist-info}/top_level.txt +0 -0
aiohomematic/model/device.py
CHANGED
|
@@ -671,10 +671,11 @@ class Device(PayloadMixin):
|
|
|
671
671
|
"""Provide some useful information."""
|
|
672
672
|
return (
|
|
673
673
|
f"address: {self._address}, "
|
|
674
|
-
f"model: {
|
|
674
|
+
f"model: {self._model}, "
|
|
675
675
|
f"name: {self._name}, "
|
|
676
|
-
f"
|
|
677
|
-
f"
|
|
676
|
+
f"generic dps: {len(self.generic_data_points)}, "
|
|
677
|
+
f"calculated dps: {len(self.calculated_data_points)}, "
|
|
678
|
+
f"custom dps: {len(self.custom_data_points)}, "
|
|
678
679
|
f"events: {len(self.generic_events)}"
|
|
679
680
|
)
|
|
680
681
|
|
|
@@ -1077,8 +1078,9 @@ class Channel(PayloadMixin):
|
|
|
1077
1078
|
return (
|
|
1078
1079
|
f"address: {self._address}, "
|
|
1079
1080
|
f"type: {self._type_name}, "
|
|
1080
|
-
f"
|
|
1081
|
-
f"
|
|
1081
|
+
f"generic dps: {len(self._generic_data_points)}, "
|
|
1082
|
+
f"calculated dps: {len(self._calculated_data_points)}, "
|
|
1083
|
+
f"custom dp: {self._custom_data_point is not None}, "
|
|
1082
1084
|
f"events: {len(self._generic_events)}"
|
|
1083
1085
|
)
|
|
1084
1086
|
|
|
@@ -1146,121 +1148,90 @@ class _ValueCache:
|
|
|
1146
1148
|
|
|
1147
1149
|
async def get_value(
|
|
1148
1150
|
self,
|
|
1149
|
-
|
|
1150
|
-
paramset_key: ParamsetKey,
|
|
1151
|
-
parameter: str,
|
|
1151
|
+
dpk: DataPointKey,
|
|
1152
1152
|
call_source: CallSource,
|
|
1153
1153
|
direct_call: bool = False,
|
|
1154
1154
|
) -> Any:
|
|
1155
1155
|
"""Load data."""
|
|
1156
|
+
|
|
1156
1157
|
async with self._sema_get_or_load_value:
|
|
1157
|
-
if (
|
|
1158
|
-
direct_call is False
|
|
1159
|
-
and (
|
|
1160
|
-
cached_value := self._get_value_from_cache(
|
|
1161
|
-
channel_address=channel_address,
|
|
1162
|
-
paramset_key=paramset_key,
|
|
1163
|
-
parameter=parameter,
|
|
1164
|
-
)
|
|
1165
|
-
)
|
|
1166
|
-
!= NO_CACHE_ENTRY
|
|
1167
|
-
):
|
|
1158
|
+
if direct_call is False and (cached_value := self._get_value_from_cache(dpk=dpk)) != NO_CACHE_ENTRY:
|
|
1168
1159
|
return NO_CACHE_ENTRY if cached_value == self._NO_VALUE_CACHE_ENTRY else cached_value
|
|
1169
1160
|
|
|
1170
|
-
value_dict: dict[str, Any] = {parameter: self._NO_VALUE_CACHE_ENTRY}
|
|
1161
|
+
value_dict: dict[str, Any] = {dpk.parameter: self._NO_VALUE_CACHE_ENTRY}
|
|
1171
1162
|
try:
|
|
1172
|
-
value_dict = await self._get_values_for_cache(
|
|
1173
|
-
channel_address=channel_address,
|
|
1174
|
-
paramset_key=paramset_key,
|
|
1175
|
-
parameter=parameter,
|
|
1176
|
-
)
|
|
1163
|
+
value_dict = await self._get_values_for_cache(dpk=dpk)
|
|
1177
1164
|
except BaseHomematicException as bhexc:
|
|
1178
1165
|
_LOGGER.debug(
|
|
1179
1166
|
"GET_OR_LOAD_VALUE: Failed to get data for %s, %s, %s, %s: %s",
|
|
1180
1167
|
self._device.model,
|
|
1181
|
-
channel_address,
|
|
1182
|
-
parameter,
|
|
1168
|
+
dpk.channel_address,
|
|
1169
|
+
dpk.parameter,
|
|
1183
1170
|
call_source,
|
|
1184
1171
|
extract_exc_args(exc=bhexc),
|
|
1185
1172
|
)
|
|
1186
1173
|
for d_parameter, d_value in value_dict.items():
|
|
1187
1174
|
self._add_entry_to_device_cache(
|
|
1188
|
-
|
|
1189
|
-
|
|
1190
|
-
|
|
1175
|
+
dpk=DataPointKey(
|
|
1176
|
+
interface_id=dpk.interface_id,
|
|
1177
|
+
channel_address=dpk.channel_address,
|
|
1178
|
+
paramset_key=dpk.paramset_key,
|
|
1179
|
+
parameter=d_parameter,
|
|
1180
|
+
),
|
|
1191
1181
|
value=d_value,
|
|
1192
1182
|
)
|
|
1193
1183
|
return (
|
|
1194
1184
|
NO_CACHE_ENTRY
|
|
1195
|
-
if (value := value_dict.get(parameter)) and value == self._NO_VALUE_CACHE_ENTRY
|
|
1185
|
+
if (value := value_dict.get(dpk.parameter)) and value == self._NO_VALUE_CACHE_ENTRY
|
|
1196
1186
|
else value
|
|
1197
1187
|
)
|
|
1198
1188
|
|
|
1199
|
-
async def _get_values_for_cache(
|
|
1200
|
-
self, channel_address: str, paramset_key: ParamsetKey, parameter: str
|
|
1201
|
-
) -> dict[str, Any]:
|
|
1189
|
+
async def _get_values_for_cache(self, dpk: DataPointKey) -> dict[str, Any]:
|
|
1202
1190
|
"""Return a value from CCU to store in cache."""
|
|
1203
1191
|
if not self._device.available:
|
|
1204
1192
|
_LOGGER.debug(
|
|
1205
1193
|
"GET_VALUES_FOR_CACHE failed: device %s (%s) is not available", self._device.name, self._device.address
|
|
1206
1194
|
)
|
|
1207
1195
|
return {}
|
|
1208
|
-
if paramset_key == ParamsetKey.VALUES:
|
|
1196
|
+
if dpk.paramset_key == ParamsetKey.VALUES:
|
|
1209
1197
|
return {
|
|
1210
|
-
parameter: await self._device.client.get_value(
|
|
1211
|
-
channel_address=channel_address,
|
|
1212
|
-
paramset_key=paramset_key,
|
|
1213
|
-
parameter=parameter,
|
|
1198
|
+
dpk.parameter: await self._device.client.get_value(
|
|
1199
|
+
channel_address=dpk.channel_address,
|
|
1200
|
+
paramset_key=dpk.paramset_key,
|
|
1201
|
+
parameter=dpk.parameter,
|
|
1214
1202
|
call_source=CallSource.HM_INIT,
|
|
1215
1203
|
)
|
|
1216
1204
|
}
|
|
1217
1205
|
return await self._device.client.get_paramset(
|
|
1218
|
-
address=channel_address, paramset_key=paramset_key, call_source=CallSource.HM_INIT
|
|
1206
|
+
address=dpk.channel_address, paramset_key=dpk.paramset_key, call_source=CallSource.HM_INIT
|
|
1219
1207
|
)
|
|
1220
1208
|
|
|
1221
|
-
def _add_entry_to_device_cache(
|
|
1222
|
-
self, channel_address: str, paramset_key: ParamsetKey, parameter: str, value: Any
|
|
1223
|
-
) -> None:
|
|
1209
|
+
def _add_entry_to_device_cache(self, dpk: DataPointKey, value: Any) -> None:
|
|
1224
1210
|
"""Add value to cache."""
|
|
1225
|
-
key = DataPointKey(
|
|
1226
|
-
interface_id=self._device.interface_id,
|
|
1227
|
-
channel_address=channel_address,
|
|
1228
|
-
paramset_key=paramset_key,
|
|
1229
|
-
parameter=parameter,
|
|
1230
|
-
)
|
|
1231
1211
|
# write value to cache even if an exception has occurred
|
|
1232
1212
|
# to avoid repetitive calls to CCU within max_age
|
|
1233
|
-
self._device_cache[
|
|
1213
|
+
self._device_cache[dpk] = CacheEntry(value=value, refresh_at=datetime.now())
|
|
1234
1214
|
|
|
1235
1215
|
def _get_value_from_cache(
|
|
1236
1216
|
self,
|
|
1237
|
-
|
|
1238
|
-
paramset_key: ParamsetKey,
|
|
1239
|
-
parameter: str,
|
|
1217
|
+
dpk: DataPointKey,
|
|
1240
1218
|
) -> Any:
|
|
1241
1219
|
"""Load data from caches."""
|
|
1242
1220
|
# Try to get data from central cache
|
|
1243
1221
|
if (
|
|
1244
|
-
paramset_key == ParamsetKey.VALUES
|
|
1222
|
+
dpk.paramset_key == ParamsetKey.VALUES
|
|
1245
1223
|
and (
|
|
1246
1224
|
global_value := self._device.central.data_cache.get_data(
|
|
1247
1225
|
interface=self._device.interface,
|
|
1248
|
-
channel_address=channel_address,
|
|
1249
|
-
parameter=parameter,
|
|
1226
|
+
channel_address=dpk.channel_address,
|
|
1227
|
+
parameter=dpk.parameter,
|
|
1250
1228
|
)
|
|
1251
1229
|
)
|
|
1252
1230
|
!= NO_CACHE_ENTRY
|
|
1253
1231
|
):
|
|
1254
1232
|
return global_value
|
|
1255
1233
|
|
|
1256
|
-
|
|
1257
|
-
key = DataPointKey(
|
|
1258
|
-
interface_id=self._device.interface_id,
|
|
1259
|
-
channel_address=channel_address,
|
|
1260
|
-
paramset_key=paramset_key,
|
|
1261
|
-
parameter=parameter,
|
|
1262
|
-
)
|
|
1263
|
-
if (cache_entry := self._device_cache.get(key, CacheEntry.empty())) and cache_entry.is_valid:
|
|
1234
|
+
if (cache_entry := self._device_cache.get(dpk, CacheEntry.empty())) and cache_entry.is_valid:
|
|
1264
1235
|
return cache_entry.value
|
|
1265
1236
|
return NO_CACHE_ENTRY
|
|
1266
1237
|
|
|
@@ -289,21 +289,17 @@ class Hub:
|
|
|
289
289
|
|
|
290
290
|
def _identify_missing_program_ids(self, programs: tuple[ProgramData, ...]) -> set[str]:
|
|
291
291
|
"""Identify missing programs."""
|
|
292
|
-
return {
|
|
293
|
-
program_dp.pid
|
|
294
|
-
for program_dp in self._central.program_data_points
|
|
295
|
-
if program_dp.pid not in [x.pid for x in programs]
|
|
296
|
-
}
|
|
292
|
+
return {dp.pid for dp in self._central.program_data_points if dp.pid not in [x.pid for x in programs]}
|
|
297
293
|
|
|
298
294
|
def _identify_missing_variable_ids(self, variables: tuple[SystemVariableData, ...]) -> set[str]:
|
|
299
295
|
"""Identify missing variables."""
|
|
300
296
|
variable_ids: dict[str, bool] = {x.vid: x.extended_sysvar for x in variables}
|
|
301
297
|
missing_variable_ids: list[str] = []
|
|
302
|
-
for
|
|
303
|
-
if
|
|
298
|
+
for dp in self._central.sysvar_data_points:
|
|
299
|
+
if dp.data_type == SysvarType.STRING:
|
|
304
300
|
continue
|
|
305
|
-
if (vid :=
|
|
306
|
-
vid not in variable_ids or (
|
|
301
|
+
if (vid := dp.vid) is not None and (
|
|
302
|
+
vid not in variable_ids or (dp.is_extended is not variable_ids.get(vid))
|
|
307
303
|
):
|
|
308
304
|
missing_variable_ids.append(vid)
|
|
309
305
|
return set(missing_variable_ids)
|
|
@@ -107,6 +107,10 @@ class GenericHubDataPoint(CallbackDataPoint, PayloadMixin):
|
|
|
107
107
|
"""Return, if the state is uncertain."""
|
|
108
108
|
return self._state_uncertain
|
|
109
109
|
|
|
110
|
+
def _get_signature(self) -> str:
|
|
111
|
+
"""Return the signature of the data_point."""
|
|
112
|
+
return f"{self._category}/{self.name}"
|
|
113
|
+
|
|
110
114
|
|
|
111
115
|
class GenericSysvarDataPoint(GenericHubDataPoint):
|
|
112
116
|
"""Class for a HomeMatic system variable."""
|
aiohomematic/model/update.py
CHANGED
|
@@ -96,6 +96,10 @@ class DpUpdate(CallbackDataPoint, PayloadMixin):
|
|
|
96
96
|
return self._device.available_firmware
|
|
97
97
|
return self._device.firmware
|
|
98
98
|
|
|
99
|
+
def _get_signature(self) -> str:
|
|
100
|
+
"""Return the signature of the data_point."""
|
|
101
|
+
return f"{self._category}/{self._device.model}"
|
|
102
|
+
|
|
99
103
|
def _get_path_data(self) -> DataPointPathData:
|
|
100
104
|
"""Return the path data of the data_point."""
|
|
101
105
|
return DataPointPathData(
|
|
@@ -18,7 +18,6 @@ string sUse_Interface = "##interface##";
|
|
|
18
18
|
string sDevId;
|
|
19
19
|
string sChnId;
|
|
20
20
|
string sDPId;
|
|
21
|
-
string sDPId;
|
|
22
21
|
var vDPValue;
|
|
23
22
|
boolean bDPFirst = true;
|
|
24
23
|
object oInterface = interfaces.Get(sUse_Interface);
|
|
@@ -28,41 +27,59 @@ if (oInterface) {
|
|
|
28
27
|
integer iInterface_ID = interfaces.Get(sUse_Interface).ID();
|
|
29
28
|
string sAllDevices = dom.GetObject(ID_DEVICES).EnumUsedIDs();
|
|
30
29
|
foreach (sDevId, sAllDevices) {
|
|
31
|
-
|
|
30
|
+
object oDevice = dom.GetObject(sDevId);
|
|
32
31
|
if ((oDevice) && (oDevice.ReadyConfig()) && (oDevice.Interface() == iInterface_ID)) {
|
|
33
32
|
foreach (sChnId, oDevice.Channels()) {
|
|
34
33
|
object oChannel = dom.GetObject(sChnId);
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
if (
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
Write('"');
|
|
50
|
-
WriteURL(oDP.Value());
|
|
51
|
-
Write('"');
|
|
52
|
-
} else {
|
|
53
|
-
vDPValue = oDP.Value();
|
|
54
|
-
if (sValueType == 2) {
|
|
55
|
-
if (vDPValue) {
|
|
56
|
-
Write("true");
|
|
34
|
+
if (oChannel) {
|
|
35
|
+
var oDPs = oChannel.DPs();
|
|
36
|
+
if (oDPs) {
|
|
37
|
+
foreach(sDPId, oDPs.EnumUsedIDs()) {
|
|
38
|
+
object oDP = dom.GetObject(sDPId);
|
|
39
|
+
if (oDP && oDP.Timestamp()) {
|
|
40
|
+
if (oDP.TypeName() != "VARDP") {
|
|
41
|
+
integer sValueType = oDP.ValueType();
|
|
42
|
+
boolean bHasValue = false;
|
|
43
|
+
string sValue;
|
|
44
|
+
string sID = oDP.Name().UriEncode();
|
|
45
|
+
if (sValueType == 20) {
|
|
46
|
+
sValue = oDP.Value().UriEncode();
|
|
47
|
+
bHasValue = true;
|
|
57
48
|
} else {
|
|
58
|
-
|
|
49
|
+
vDPValue = oDP.Value();
|
|
50
|
+
if (sValueType == 2) {
|
|
51
|
+
if (vDPValue) {
|
|
52
|
+
sValue = "true";
|
|
53
|
+
} else {
|
|
54
|
+
sValue = "false";
|
|
55
|
+
}
|
|
56
|
+
bHasValue = true;
|
|
57
|
+
} else {
|
|
58
|
+
if (vDPValue == "") {
|
|
59
|
+
sValue = "0";
|
|
60
|
+
} else {
|
|
61
|
+
sValue = vDPValue;
|
|
62
|
+
}
|
|
63
|
+
bHasValue = true;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
if (bHasValue) {
|
|
67
|
+
if (bDPFirst) {
|
|
68
|
+
bDPFirst = false;
|
|
69
|
+
} else {
|
|
70
|
+
WriteLine(',');
|
|
71
|
+
}
|
|
72
|
+
Write('"');
|
|
73
|
+
Write(sID);
|
|
74
|
+
Write('":');
|
|
75
|
+
if (sValueType == 20) {
|
|
76
|
+
Write('"');
|
|
77
|
+
Write(sValue);
|
|
78
|
+
Write('"');
|
|
79
|
+
} else {
|
|
80
|
+
Write(sValue);
|
|
81
|
+
}
|
|
59
82
|
}
|
|
60
|
-
} else {
|
|
61
|
-
if (vDPValue == "") {
|
|
62
|
-
Write("0");
|
|
63
|
-
} else {
|
|
64
|
-
Write(vDPValue);
|
|
65
|
-
}
|
|
66
83
|
}
|
|
67
84
|
}
|
|
68
85
|
}
|
aiohomematic/support.py
CHANGED
|
@@ -18,6 +18,8 @@ import ssl
|
|
|
18
18
|
import sys
|
|
19
19
|
from typing import Any, Final, cast
|
|
20
20
|
|
|
21
|
+
import orjson
|
|
22
|
+
|
|
21
23
|
from aiohomematic import client as hmcl
|
|
22
24
|
from aiohomematic.const import (
|
|
23
25
|
ADDRESS_SEPARATOR,
|
|
@@ -430,9 +432,20 @@ def debug_enabled() -> bool:
|
|
|
430
432
|
|
|
431
433
|
|
|
432
434
|
def hash_sha256(value: Any) -> str:
|
|
433
|
-
"""
|
|
435
|
+
"""
|
|
436
|
+
Hash a value with sha256.
|
|
437
|
+
|
|
438
|
+
Uses orjson to serialize the value with sorted keys for a fast and stable
|
|
439
|
+
representation. Falls back to the repr-based approach if
|
|
440
|
+
serialization fails (e.g., unsupported types).
|
|
441
|
+
"""
|
|
434
442
|
hasher = hashlib.sha256()
|
|
435
|
-
|
|
443
|
+
try:
|
|
444
|
+
data = orjson.dumps(value, option=orjson.OPT_SORT_KEYS | orjson.OPT_NON_STR_KEYS)
|
|
445
|
+
except Exception:
|
|
446
|
+
# Fallback: convert to a hashable representation and use repr()
|
|
447
|
+
data = repr(_make_value_hashable(value)).encode()
|
|
448
|
+
hasher.update(data)
|
|
436
449
|
return base64.b64encode(hasher.digest()).decode()
|
|
437
450
|
|
|
438
451
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: aiohomematic
|
|
3
|
-
Version: 2025.8.
|
|
3
|
+
Version: 2025.8.9
|
|
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,41 +1,41 @@
|
|
|
1
1
|
aiohomematic/__init__.py,sha256=VoLXfPmEFWVOFseEusar-BcfKhQ8pBthrA7M6_QkWg8,1741
|
|
2
2
|
aiohomematic/async_support.py,sha256=8KzftPu9CHRpxxXU8ElExYYadN9P6rSkMvLK5Ci2Xlo,5476
|
|
3
|
-
aiohomematic/const.py,sha256=
|
|
3
|
+
aiohomematic/const.py,sha256=Bb4WaY4ISZutoJ9P7JJbXJ7BHaXqdRepkNiW35ER-i8,24234
|
|
4
4
|
aiohomematic/context.py,sha256=4CNoLd4PQ8MsLED_3D-Gcxo4h2UNlyQNd7QUE_0uvBA,253
|
|
5
5
|
aiohomematic/converter.py,sha256=eZ3iQPCfYZwqxQgUy4q6aMne_Bay-27f1HQuMRdabZ4,2922
|
|
6
6
|
aiohomematic/decorators.py,sha256=YD7zX9jBN-F-NdfKGNn0STqR6cndpoBCMuXaBvgvam4,7088
|
|
7
7
|
aiohomematic/exceptions.py,sha256=uMmbR-rWmCnseqmOPSHZ826YZ10uJrxG1c0w7VCYPZ0,4579
|
|
8
8
|
aiohomematic/hmcli.py,sha256=9oeXjCy50hkjMj7t1c9Cw0bz-LnXzjheKQBQDyGQQRk,4582
|
|
9
9
|
aiohomematic/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10
|
-
aiohomematic/support.py,sha256=
|
|
10
|
+
aiohomematic/support.py,sha256=MTRICfoUDT54plMObB4joogwAzdJCcGo-0QHkmlP40g,16170
|
|
11
11
|
aiohomematic/validator.py,sha256=Xxcmf2MzjIvzsDAfJsPR-cSN8S06sub-V3TCn6ronAs,1765
|
|
12
12
|
aiohomematic/caches/__init__.py,sha256=Uco9Y5fVmIPm_iRoLPWJnJNYfs9PY6VL-Jmj_3cT3yE,391
|
|
13
|
-
aiohomematic/caches/dynamic.py,sha256=
|
|
14
|
-
aiohomematic/caches/persistent.py,sha256=
|
|
15
|
-
aiohomematic/caches/visibility.py,sha256=
|
|
16
|
-
aiohomematic/central/__init__.py,sha256=
|
|
13
|
+
aiohomematic/caches/dynamic.py,sha256=rvqsLhImFy6J5a_ZJc705-_tDKyboZQNXNE2BlOrTGY,21460
|
|
14
|
+
aiohomematic/caches/persistent.py,sha256=ccdxTZztNRrDFTrlQTG6ad0g-NeJqgmZbyw5QhABa3s,19853
|
|
15
|
+
aiohomematic/caches/visibility.py,sha256=SBTVN3qxxh7m-d06BKtpHDCH8CWWsxDr5LC5vB3-JLo,31402
|
|
16
|
+
aiohomematic/central/__init__.py,sha256=LlTTbM0y8VNUAT5z-R2L1Jo6NVdlWynWXH1h7E2XUAA,84329
|
|
17
17
|
aiohomematic/central/decorators.py,sha256=Lgc9SzvugZ45h_1anPjBNgzTjQ8BgDHnquE1PD48-XY,4899
|
|
18
18
|
aiohomematic/central/xml_rpc_server.py,sha256=xwcb57ow7YEUS4By0HSBwzRSEY8kC9nZ-7hl4M-EWqI,9957
|
|
19
19
|
aiohomematic/client/__init__.py,sha256=n2rNU3L1Xr453xsTCTM2mh5N1alp0yftAIienziB6ak,69753
|
|
20
20
|
aiohomematic/client/json_rpc.py,sha256=HGgCXcp1uCfDkBdHlMNV8OD5O2PfWFRYNmiX5Pv1FO8,46463
|
|
21
21
|
aiohomematic/client/xml_rpc.py,sha256=pUFdJZBtirNyNNyHbeMDOEh2mFkxQf_zrvjd56n1Lv4,8161
|
|
22
22
|
aiohomematic/model/__init__.py,sha256=AbrppmY8X5rJkBV3c7Ggndk16Qvl-1S0uUWJqqxmXUE,5380
|
|
23
|
-
aiohomematic/model/data_point.py,sha256=
|
|
23
|
+
aiohomematic/model/data_point.py,sha256=Vykptu14k7q3uD3yRdQXj7g18DN5iBC2pT-8m0lsDzY,40110
|
|
24
24
|
aiohomematic/model/decorators.py,sha256=sIxYsoyIE9aqbbrAnuFSvebLhNZC_DaMlEOBe6T_fRA,6718
|
|
25
|
-
aiohomematic/model/device.py,sha256=
|
|
25
|
+
aiohomematic/model/device.py,sha256=1F0yhv7_DL1VnJrODV-oRGkZ-zaX7b5KB6PtXKVwhp8,51912
|
|
26
26
|
aiohomematic/model/event.py,sha256=4dVuW3IBXkXcYhJUBtV8ax8dq4krtomA0wxbvXPuNCc,6935
|
|
27
27
|
aiohomematic/model/support.py,sha256=fXaGvD6ywaOmDihIAHjn-z3AuIn0Q3Wiq7EqcxUV6uc,19630
|
|
28
|
-
aiohomematic/model/update.py,sha256=
|
|
29
|
-
aiohomematic/model/calculated/__init__.py,sha256=
|
|
28
|
+
aiohomematic/model/update.py,sha256=7fTkDwjX3J8R0sK3GhQku1poyJodRqxv_ZCihyZvHig,5028
|
|
29
|
+
aiohomematic/model/calculated/__init__.py,sha256=vvBAPphiZPnc-ZTIRJ0M4VsDPdxVqQWCA56p8AhAKIM,2731
|
|
30
30
|
aiohomematic/model/calculated/climate.py,sha256=yu3mFBAO6Cb_r68v197uXseOl9P1jz7Dz0tUaCY-6FE,8436
|
|
31
|
-
aiohomematic/model/calculated/data_point.py,sha256
|
|
31
|
+
aiohomematic/model/calculated/data_point.py,sha256=EVXclyuPqIWtyglk3NvCEB67nfW6P9CZumblSTSQe5M,11414
|
|
32
32
|
aiohomematic/model/calculated/operating_voltage_level.py,sha256=F09jW2rFtjxrsR25xkN-uZxJAdw_dcDr8hv-xvTiBCs,13932
|
|
33
33
|
aiohomematic/model/calculated/support.py,sha256=ht_KSFUT2Dze9wjw_o0Gp2-PGo4on0W0CZujhCWzwIk,6019
|
|
34
34
|
aiohomematic/model/custom/__init__.py,sha256=6-jN7l6DPIUSCANw15SwNQFyL8aXxn8Me8m8fNHkWKc,5987
|
|
35
35
|
aiohomematic/model/custom/climate.py,sha256=Sd3KofB1G085bKK1JKB7k4uaySD3W4SKbw-Fg9FH0PU,53930
|
|
36
36
|
aiohomematic/model/custom/const.py,sha256=ifJgooQqo43qEqfPQTIcyY7IcUeFvM0-y4WvP-_HgXM,4882
|
|
37
37
|
aiohomematic/model/custom/cover.py,sha256=aU8sSdKnGuiPBAO73GtmOMcYLoU7VmFldBxDf601dII,27474
|
|
38
|
-
aiohomematic/model/custom/data_point.py,sha256=
|
|
38
|
+
aiohomematic/model/custom/data_point.py,sha256=moms_MQiX4DYGDhDGVF-epIA_OiB9t4WvjPpWx1R7P4,14030
|
|
39
39
|
aiohomematic/model/custom/definition.py,sha256=VQ8dROZSAVu-CarYc2jN_KrlvGI1kjhwUqD0ZR1qTUA,35402
|
|
40
40
|
aiohomematic/model/custom/light.py,sha256=IGT98GlqRftNzZpFP8NR_aQG_EQHyr191O5xkcpVaz4,43843
|
|
41
41
|
aiohomematic/model/custom/lock.py,sha256=6_xOeUFfVRJh_BjTY6RVLaCVmIozQo-uUMrbDqASt8g,11858
|
|
@@ -53,25 +53,25 @@ aiohomematic/model/generic/select.py,sha256=-DUuavyD7-CicNZboA_kAV4kBN6w7mtoP_5S
|
|
|
53
53
|
aiohomematic/model/generic/sensor.py,sha256=dMjI0RSKIl6xI1VnTPFJe5HCUdfOKtfAXHLtX0Hwoiw,2171
|
|
54
54
|
aiohomematic/model/generic/switch.py,sha256=bzJKvLmGN7yBoWSTZCjiXRnq2sBduKvRVGohBGrjKSE,1757
|
|
55
55
|
aiohomematic/model/generic/text.py,sha256=ig-ilSa6CFlf65Sopg-E5jC9rK0Ma1vs2nzBxdprIpQ,772
|
|
56
|
-
aiohomematic/model/hub/__init__.py,sha256=
|
|
56
|
+
aiohomematic/model/hub/__init__.py,sha256=yTX2dLRMdVxyMMpbhDCf5ge6LisWWFUctWcusQsi3zE,13414
|
|
57
57
|
aiohomematic/model/hub/binary_sensor.py,sha256=MG75YRZAkLOCs8ZVj2kr-EFgUte4v6dV_C3vdqZ-4jU,670
|
|
58
58
|
aiohomematic/model/hub/button.py,sha256=3NWWQDjsQ4aIi3WGOVTWNi8Ry2shsvmqdgLNF6SvOGg,810
|
|
59
|
-
aiohomematic/model/hub/data_point.py,sha256=
|
|
59
|
+
aiohomematic/model/hub/data_point.py,sha256=64fU-X9jaDx3ZHpzY1KfrFLbigNXus2muPMA6j4KLCw,10566
|
|
60
60
|
aiohomematic/model/hub/number.py,sha256=auwUxR2J5rF_ZKSKSDo4XSiZUcXJ0uYUiCJO94_vmQM,1145
|
|
61
61
|
aiohomematic/model/hub/select.py,sha256=UTng9oNf7y-x-2wMnd7UL8rZ0goyH8GsfQhz8MJrw8o,1579
|
|
62
62
|
aiohomematic/model/hub/sensor.py,sha256=q_QWbkt2rycHeJJ5hlBGJJg0-Rfum8vrLA8BoZZyGq4,1110
|
|
63
63
|
aiohomematic/model/hub/switch.py,sha256=W5iGOgL4A8BWFw5_rEYcfxyRVCnXIYy5tYt5sbpShCg,1312
|
|
64
64
|
aiohomematic/model/hub/text.py,sha256=LGgFQNHgXreCIzMe3j21KFiOjliLv5a0xJrnUb1_P9k,908
|
|
65
|
-
aiohomematic/rega_scripts/fetch_all_device_data.fn,sha256=
|
|
65
|
+
aiohomematic/rega_scripts/fetch_all_device_data.fn,sha256=7uxhHoelAOsH6yYr1n1M1XwIRgDmItiHnWIMhDYEimk,4373
|
|
66
66
|
aiohomematic/rega_scripts/get_program_descriptions.fn,sha256=pGmj377MkqbZi6j-UBKQAsXTphwh1kDwDKqXij8zUBE,835
|
|
67
67
|
aiohomematic/rega_scripts/get_serial.fn,sha256=t1oeo-sB_EuVeiY24PLcxFSkdQVgEWGXzpemJQZFybY,1079
|
|
68
68
|
aiohomematic/rega_scripts/get_system_variable_descriptions.fn,sha256=UKXvC0_5lSApdQ2atJc0E5Stj5Zt3lqh0EcliokYu2c,849
|
|
69
69
|
aiohomematic/rega_scripts/set_program_state.fn,sha256=0bnv7lUj8FMjDZBz325tDVP61m04cHjVj4kIOnUUgpY,279
|
|
70
70
|
aiohomematic/rega_scripts/set_system_variable.fn,sha256=sTmr7vkPTPnPkor5cnLKlDvfsYRbGO1iq2z_2pMXq5E,383
|
|
71
|
-
aiohomematic-2025.8.
|
|
71
|
+
aiohomematic-2025.8.9.dist-info/licenses/LICENSE,sha256=cKEF-xEwJKQt28HpA6ppSzyqUJ6QF9g5OLacWMCuz8s,1078
|
|
72
72
|
aiohomematic_support/__init__.py,sha256=_0YtF4lTdC_k6-zrM2IefI0u0LMr_WA61gXAyeGLgbY,66
|
|
73
73
|
aiohomematic_support/client_local.py,sha256=cvkO3tcxSJKy5ZLVdeqDbvSmeottxqZJNI4ccdxIVD4,12524
|
|
74
|
-
aiohomematic-2025.8.
|
|
75
|
-
aiohomematic-2025.8.
|
|
76
|
-
aiohomematic-2025.8.
|
|
77
|
-
aiohomematic-2025.8.
|
|
74
|
+
aiohomematic-2025.8.9.dist-info/METADATA,sha256=OWbH-zT7kqxp3hOk74OZ-TcyV8m_hLqzpCuvajxlCwg,3249
|
|
75
|
+
aiohomematic-2025.8.9.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
76
|
+
aiohomematic-2025.8.9.dist-info/top_level.txt,sha256=5TDRlUWQPThIUwQjOj--aUo4UA-ow4m0sNhnoCBi5n8,34
|
|
77
|
+
aiohomematic-2025.8.9.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|