aiohomematic 2025.10.25__py3-none-any.whl → 2025.11.0__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/central/__init__.py +4 -4
- aiohomematic/const.py +179 -36
- aiohomematic/model/calculated/data_point.py +4 -4
- aiohomematic/model/custom/climate.py +2 -1
- aiohomematic/model/custom/cover.py +1 -2
- aiohomematic/model/custom/data_point.py +13 -5
- aiohomematic/model/custom/definition.py +1 -2
- aiohomematic/model/custom/light.py +1 -2
- aiohomematic/model/custom/lock.py +1 -2
- aiohomematic/model/custom/siren.py +1 -2
- aiohomematic/model/custom/support.py +1 -2
- aiohomematic/model/custom/switch.py +1 -2
- aiohomematic/model/custom/valve.py +1 -2
- aiohomematic/model/data_point.py +0 -25
- aiohomematic/model/generic/__init__.py +2 -0
- aiohomematic/model/generic/data_point.py +1 -1
- aiohomematic/model/generic/dummy.py +147 -0
- aiohomematic/model/support.py +1 -1
- aiohomematic/store/persistent.py +5 -3
- {aiohomematic-2025.10.25.dist-info → aiohomematic-2025.11.0.dist-info}/METADATA +1 -1
- {aiohomematic-2025.10.25.dist-info → aiohomematic-2025.11.0.dist-info}/RECORD +25 -25
- aiohomematic/model/custom/const.py +0 -148
- {aiohomematic-2025.10.25.dist-info → aiohomematic-2025.11.0.dist-info}/WHEEL +0 -0
- {aiohomematic-2025.10.25.dist-info → aiohomematic-2025.11.0.dist-info}/entry_points.txt +0 -0
- {aiohomematic-2025.10.25.dist-info → aiohomematic-2025.11.0.dist-info}/licenses/LICENSE +0 -0
- {aiohomematic-2025.10.25.dist-info → aiohomematic-2025.11.0.dist-info}/top_level.txt +0 -0
aiohomematic/central/__init__.py
CHANGED
|
@@ -2168,7 +2168,7 @@ class CentralConnectionState:
|
|
|
2168
2168
|
return True
|
|
2169
2169
|
if isinstance(issuer, BaseRpcProxy) and iid not in self._rpc_proxy_issues:
|
|
2170
2170
|
self._rpc_proxy_issues.append(iid)
|
|
2171
|
-
_LOGGER.debug("add_issue: add issue [%s] for
|
|
2171
|
+
_LOGGER.debug("add_issue: add issue [%s] for RpcProxy", iid)
|
|
2172
2172
|
return True
|
|
2173
2173
|
return False
|
|
2174
2174
|
|
|
@@ -2178,9 +2178,9 @@ class CentralConnectionState:
|
|
|
2178
2178
|
self._json_issues.remove(iid)
|
|
2179
2179
|
_LOGGER.debug("remove_issue: removing issue [%s] for JsonRpcAioHttpClient", iid)
|
|
2180
2180
|
return True
|
|
2181
|
-
if isinstance(issuer, BaseRpcProxy) and
|
|
2181
|
+
if isinstance(issuer, BaseRpcProxy) and iid in self._rpc_proxy_issues:
|
|
2182
2182
|
self._rpc_proxy_issues.remove(iid)
|
|
2183
|
-
_LOGGER.debug("remove_issue: removing issue [%s] for
|
|
2183
|
+
_LOGGER.debug("remove_issue: removing issue [%s] for RpcProxy", iid)
|
|
2184
2184
|
return True
|
|
2185
2185
|
return False
|
|
2186
2186
|
|
|
@@ -2188,7 +2188,7 @@ class CentralConnectionState:
|
|
|
2188
2188
|
"""Add issue to collection."""
|
|
2189
2189
|
if isinstance(issuer, AioJsonRpcAioHttpClient):
|
|
2190
2190
|
return iid in self._json_issues
|
|
2191
|
-
if isinstance(issuer,
|
|
2191
|
+
if isinstance(issuer, BaseRpcProxy):
|
|
2192
2192
|
return iid in self._rpc_proxy_issues
|
|
2193
2193
|
|
|
2194
2194
|
def handle_exception_log(
|
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.
|
|
22
|
+
VERSION: Final = "2025.11.0"
|
|
23
23
|
|
|
24
24
|
# Detect test speedup mode via environment
|
|
25
25
|
_TEST_SPEEDUP: Final = (
|
|
@@ -191,6 +191,24 @@ class CalulatedParameter(StrEnum):
|
|
|
191
191
|
VAPOR_CONCENTRATION = "VAPOR_CONCENTRATION"
|
|
192
192
|
|
|
193
193
|
|
|
194
|
+
class CDPD(StrEnum):
|
|
195
|
+
"""Enum for custom data point definitions."""
|
|
196
|
+
|
|
197
|
+
ADDITIONAL_DPS = "additional_dps"
|
|
198
|
+
ALLOW_UNDEFINED_GENERIC_DPS = "allow_undefined_generic_dps"
|
|
199
|
+
DEFAULT_DPS = "default_dps"
|
|
200
|
+
DEVICE_DEFINITIONS = "device_definitions"
|
|
201
|
+
DEVICE_GROUP = "device_group"
|
|
202
|
+
FIELDS = "fields"
|
|
203
|
+
INCLUDE_DEFAULT_DPS = "include_default_dps"
|
|
204
|
+
PRIMARY_CHANNEL = "primary_channel"
|
|
205
|
+
REPEATABLE_FIELDS = "repeatable_fields"
|
|
206
|
+
SECONDARY_CHANNELS = "secondary_channels"
|
|
207
|
+
STATE_CHANNEL = "state_channel"
|
|
208
|
+
VISIBLE_FIELDS = "visible_fields"
|
|
209
|
+
VISIBLE_REPEATABLE_FIELDS = "visible_repeatable_fields"
|
|
210
|
+
|
|
211
|
+
|
|
194
212
|
class CentralUnitState(StrEnum):
|
|
195
213
|
"""Enum with central unit states."""
|
|
196
214
|
|
|
@@ -209,13 +227,6 @@ class CommandRxMode(StrEnum):
|
|
|
209
227
|
WAKEUP = "WAKEUP"
|
|
210
228
|
|
|
211
229
|
|
|
212
|
-
class InternalCustomID(StrEnum):
|
|
213
|
-
"""Enum for Homematic internal custom IDs."""
|
|
214
|
-
|
|
215
|
-
DEFAULT = "cid_default"
|
|
216
|
-
MANU_TEMP = "cid_manu_temp"
|
|
217
|
-
|
|
218
|
-
|
|
219
230
|
class DataOperationResult(Enum):
|
|
220
231
|
"""Enum with data operation results."""
|
|
221
232
|
|
|
@@ -256,6 +267,15 @@ class DataPointCategory(StrEnum):
|
|
|
256
267
|
VALVE = "valve"
|
|
257
268
|
|
|
258
269
|
|
|
270
|
+
class DataPointKey(NamedTuple):
|
|
271
|
+
"""Key for data points."""
|
|
272
|
+
|
|
273
|
+
interface_id: str
|
|
274
|
+
channel_address: str
|
|
275
|
+
paramset_key: ParamsetKey
|
|
276
|
+
parameter: str
|
|
277
|
+
|
|
278
|
+
|
|
259
279
|
class DataPointUsage(StrEnum):
|
|
260
280
|
"""Enum with usage information."""
|
|
261
281
|
|
|
@@ -292,6 +312,41 @@ class DeviceFirmwareState(StrEnum):
|
|
|
292
312
|
BACKGROUND_UPDATE_NOT_SUPPORTED = "BACKGROUND_UPDATE_NOT_SUPPORTED"
|
|
293
313
|
|
|
294
314
|
|
|
315
|
+
class DeviceProfile(StrEnum):
|
|
316
|
+
"""Enum for device profiles."""
|
|
317
|
+
|
|
318
|
+
IP_BUTTON_LOCK = "IPButtonLock"
|
|
319
|
+
IP_COVER = "IPCover"
|
|
320
|
+
IP_DIMMER = "IPDimmer"
|
|
321
|
+
IP_DRG_DALI = "IPDRGDALI"
|
|
322
|
+
IP_FIXED_COLOR_LIGHT = "IPFixedColorLight"
|
|
323
|
+
IP_GARAGE = "IPGarage"
|
|
324
|
+
IP_HDM = "IPHdm"
|
|
325
|
+
IP_IRRIGATION_VALVE = "IPIrrigationValve"
|
|
326
|
+
IP_LOCK = "IPLock"
|
|
327
|
+
IP_RGBW_LIGHT = "IPRGBW"
|
|
328
|
+
IP_SIMPLE_FIXED_COLOR_LIGHT = "IPSimpleFixedColorLight"
|
|
329
|
+
IP_SIMPLE_FIXED_COLOR_LIGHT_WIRED = "IPSimpleFixedColorLightWired"
|
|
330
|
+
IP_SIREN = "IPSiren"
|
|
331
|
+
IP_SIREN_SMOKE = "IPSirenSmoke"
|
|
332
|
+
IP_SWITCH = "IPSwitch"
|
|
333
|
+
IP_THERMOSTAT = "IPThermostat"
|
|
334
|
+
IP_THERMOSTAT_GROUP = "IPThermostatGroup"
|
|
335
|
+
RF_BUTTON_LOCK = "RFButtonLock"
|
|
336
|
+
RF_COVER = "RfCover"
|
|
337
|
+
RF_DIMMER = "RfDimmer"
|
|
338
|
+
RF_DIMMER_COLOR = "RfDimmer_Color"
|
|
339
|
+
RF_DIMMER_COLOR_FIXED = "RfDimmer_Color_Fixed"
|
|
340
|
+
RF_DIMMER_COLOR_TEMP = "RfDimmer_Color_Temp"
|
|
341
|
+
RF_DIMMER_WITH_VIRT_CHANNEL = "RfDimmerWithVirtChannel"
|
|
342
|
+
RF_LOCK = "RfLock"
|
|
343
|
+
RF_SIREN = "RfSiren"
|
|
344
|
+
RF_SWITCH = "RfSwitch"
|
|
345
|
+
RF_THERMOSTAT = "RfThermostat"
|
|
346
|
+
RF_THERMOSTAT_GROUP = "RfThermostatGroup"
|
|
347
|
+
SIMPLE_RF_THERMOSTAT = "SimpleRfThermostat"
|
|
348
|
+
|
|
349
|
+
|
|
295
350
|
class EventKey(StrEnum):
|
|
296
351
|
"""Enum with aiohomematic event keys."""
|
|
297
352
|
|
|
@@ -320,6 +375,94 @@ class EventType(StrEnum):
|
|
|
320
375
|
KEYPRESS = "homematic.keypress"
|
|
321
376
|
|
|
322
377
|
|
|
378
|
+
class Field(Enum):
|
|
379
|
+
"""Enum for fields."""
|
|
380
|
+
|
|
381
|
+
ACOUSTIC_ALARM_ACTIVE = "acoustic_alarm_active"
|
|
382
|
+
ACOUSTIC_ALARM_SELECTION = "acoustic_alarm_selection"
|
|
383
|
+
ACTIVE_PROFILE = "active_profile"
|
|
384
|
+
AUTO_MODE = "auto_mode"
|
|
385
|
+
BOOST_MODE = "boost_mode"
|
|
386
|
+
BUTTON_LOCK = "button_lock"
|
|
387
|
+
CHANNEL_COLOR = "channel_color"
|
|
388
|
+
COLOR = "color"
|
|
389
|
+
COLOR_BEHAVIOUR = "color_behaviour"
|
|
390
|
+
COLOR_LEVEL = "color_temp"
|
|
391
|
+
COLOR_TEMPERATURE = "color_temperature"
|
|
392
|
+
COMBINED_PARAMETER = "combined_parameter"
|
|
393
|
+
COMFORT_MODE = "comfort_mode"
|
|
394
|
+
CONCENTRATION = "concentration"
|
|
395
|
+
CONTROL_MODE = "control_mode"
|
|
396
|
+
CURRENT = "current"
|
|
397
|
+
DEVICE_OPERATION_MODE = "device_operation_mode"
|
|
398
|
+
DIRECTION = "direction"
|
|
399
|
+
DOOR_COMMAND = "door_command"
|
|
400
|
+
DOOR_STATE = "door_state"
|
|
401
|
+
DURATION = "duration"
|
|
402
|
+
DURATION_UNIT = "duration_unit"
|
|
403
|
+
DUTYCYCLE = "dutycycle"
|
|
404
|
+
DUTY_CYCLE = "duty_cycle"
|
|
405
|
+
EFFECT = "effect"
|
|
406
|
+
ENERGY_COUNTER = "energy_counter"
|
|
407
|
+
ERROR = "error"
|
|
408
|
+
FREQUENCY = "frequency"
|
|
409
|
+
GROUP_LEVEL = "group_level"
|
|
410
|
+
GROUP_LEVEL_2 = "group_level_2"
|
|
411
|
+
GROUP_STATE = "group_state"
|
|
412
|
+
HEATING_COOLING = "heating_cooling"
|
|
413
|
+
HEATING_VALVE_TYPE = "heating_valve_type"
|
|
414
|
+
HUE = "hue"
|
|
415
|
+
HUMIDITY = "humidity"
|
|
416
|
+
INHIBIT = "inhibit"
|
|
417
|
+
LEVEL = "level"
|
|
418
|
+
LEVEL_2 = "level_2"
|
|
419
|
+
LEVEL_COMBINED = "level_combined"
|
|
420
|
+
LOCK_STATE = "lock_state"
|
|
421
|
+
LOCK_TARGET_LEVEL = "lock_target_level"
|
|
422
|
+
LOWBAT = "lowbat"
|
|
423
|
+
LOWERING_MODE = "lowering_mode"
|
|
424
|
+
LOW_BAT = "low_bat"
|
|
425
|
+
LOW_BAT_LIMIT = "low_bat_limit"
|
|
426
|
+
MANU_MODE = "manu_mode"
|
|
427
|
+
MIN_MAX_VALUE_NOT_RELEVANT_FOR_MANU_MODE = "min_max_value_not_relevant_for_manu_mode"
|
|
428
|
+
ON_TIME_UNIT = "on_time_unit"
|
|
429
|
+
ON_TIME_VALUE = "on_time_value"
|
|
430
|
+
OPEN = "open"
|
|
431
|
+
OPERATING_VOLTAGE = "operating_voltage"
|
|
432
|
+
OPERATION_MODE = "channel_operation_mode"
|
|
433
|
+
OPTICAL_ALARM_ACTIVE = "optical_alarm_active"
|
|
434
|
+
OPTICAL_ALARM_SELECTION = "optical_alarm_selection"
|
|
435
|
+
OPTIMUM_START_STOP = "optimum_start_stop"
|
|
436
|
+
PARTY_MODE = "party_mode"
|
|
437
|
+
POWER = "power"
|
|
438
|
+
PROGRAM = "program"
|
|
439
|
+
RAMP_TIME_TO_OFF_UNIT = "ramp_time_to_off_unit"
|
|
440
|
+
RAMP_TIME_TO_OFF_VALUE = "ramp_time_to_off_value"
|
|
441
|
+
RAMP_TIME_UNIT = "ramp_time_unit"
|
|
442
|
+
RAMP_TIME_VALUE = "ramp_time_value"
|
|
443
|
+
RSSI_DEVICE = "rssi_device"
|
|
444
|
+
RSSI_PEER = "rssi_peer"
|
|
445
|
+
SABOTAGE = "sabotage"
|
|
446
|
+
SATURATION = "saturation"
|
|
447
|
+
SECTION = "section"
|
|
448
|
+
SETPOINT = "setpoint"
|
|
449
|
+
SET_POINT_MODE = "set_point_mode"
|
|
450
|
+
SMOKE_DETECTOR_ALARM_STATUS = "smoke_detector_alarm_status"
|
|
451
|
+
SMOKE_DETECTOR_COMMAND = "smoke_detector_command"
|
|
452
|
+
STATE = "state"
|
|
453
|
+
STOP = "stop"
|
|
454
|
+
SWITCH_MAIN = "switch_main"
|
|
455
|
+
SWITCH_V1 = "vswitch_1"
|
|
456
|
+
SWITCH_V2 = "vswitch_2"
|
|
457
|
+
TEMPERATURE = "temperature"
|
|
458
|
+
TEMPERATURE_MAXIMUM = "temperature_maximum"
|
|
459
|
+
TEMPERATURE_MINIMUM = "temperature_minimum"
|
|
460
|
+
TEMPERATURE_OFFSET = "temperature_offset"
|
|
461
|
+
VALVE_STATE = "valve_state"
|
|
462
|
+
VOLTAGE = "voltage"
|
|
463
|
+
WEEK_PROGRAM_POINTER = "week_program_pointer"
|
|
464
|
+
|
|
465
|
+
|
|
323
466
|
class Flag(IntEnum):
|
|
324
467
|
"""Enum with Homematic flags."""
|
|
325
468
|
|
|
@@ -338,6 +481,13 @@ class ForcedDeviceAvailability(StrEnum):
|
|
|
338
481
|
NOT_SET = "not_set"
|
|
339
482
|
|
|
340
483
|
|
|
484
|
+
class InternalCustomID(StrEnum):
|
|
485
|
+
"""Enum for Homematic internal custom IDs."""
|
|
486
|
+
|
|
487
|
+
DEFAULT = "cid_default"
|
|
488
|
+
MANU_TEMP = "cid_manu_temp"
|
|
489
|
+
|
|
490
|
+
|
|
341
491
|
class Manufacturer(StrEnum):
|
|
342
492
|
"""Enum with aiohomematic system events."""
|
|
343
493
|
|
|
@@ -491,6 +641,7 @@ class ParamsetKey(StrEnum):
|
|
|
491
641
|
"""Enum with paramset keys."""
|
|
492
642
|
|
|
493
643
|
CALCULATED = "CALCULATED"
|
|
644
|
+
DUMMY = "DUMMY"
|
|
494
645
|
LINK = "LINK"
|
|
495
646
|
MASTER = "MASTER"
|
|
496
647
|
SERVICE = "SERVICE"
|
|
@@ -547,6 +698,19 @@ class InterfaceEventType(StrEnum):
|
|
|
547
698
|
UNKNOWN_PONG = "unknown_pong"
|
|
548
699
|
|
|
549
700
|
|
|
701
|
+
class ParameterType(StrEnum):
|
|
702
|
+
"""Enum for Homematic parameter types."""
|
|
703
|
+
|
|
704
|
+
ACTION = "ACTION" # Usually buttons, send Boolean to trigger
|
|
705
|
+
BOOL = "BOOL"
|
|
706
|
+
DUMMY = "DUMMY"
|
|
707
|
+
ENUM = "ENUM"
|
|
708
|
+
FLOAT = "FLOAT"
|
|
709
|
+
INTEGER = "INTEGER"
|
|
710
|
+
STRING = "STRING"
|
|
711
|
+
EMPTY = ""
|
|
712
|
+
|
|
713
|
+
|
|
550
714
|
class ProxyInitState(Enum):
|
|
551
715
|
"""Enum with proxy handling results."""
|
|
552
716
|
|
|
@@ -557,6 +721,13 @@ class ProxyInitState(Enum):
|
|
|
557
721
|
DE_INIT_SKIPPED = 16
|
|
558
722
|
|
|
559
723
|
|
|
724
|
+
class RpcServerType(StrEnum):
|
|
725
|
+
"""Enum for Homematic rpc server types."""
|
|
726
|
+
|
|
727
|
+
XML_RPC = "xml_rpc"
|
|
728
|
+
NONE = "none"
|
|
729
|
+
|
|
730
|
+
|
|
560
731
|
class RxMode(IntEnum):
|
|
561
732
|
"""Enum for Homematic rx modes."""
|
|
562
733
|
|
|
@@ -590,25 +761,6 @@ class SysvarType(StrEnum):
|
|
|
590
761
|
STRING = "STRING"
|
|
591
762
|
|
|
592
763
|
|
|
593
|
-
class ParameterType(StrEnum):
|
|
594
|
-
"""Enum for Homematic parameter types."""
|
|
595
|
-
|
|
596
|
-
ACTION = "ACTION" # Usually buttons, send Boolean to trigger
|
|
597
|
-
BOOL = "BOOL"
|
|
598
|
-
ENUM = "ENUM"
|
|
599
|
-
FLOAT = "FLOAT"
|
|
600
|
-
INTEGER = "INTEGER"
|
|
601
|
-
STRING = "STRING"
|
|
602
|
-
EMPTY = ""
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
class RpcServerType(StrEnum):
|
|
606
|
-
"""Enum for Homematic rpc server types."""
|
|
607
|
-
|
|
608
|
-
XML_RPC = "xml_rpc"
|
|
609
|
-
NONE = "none"
|
|
610
|
-
|
|
611
|
-
|
|
612
764
|
CLICK_EVENTS: Final[frozenset[Parameter]] = frozenset(
|
|
613
765
|
{
|
|
614
766
|
Parameter.PRESS,
|
|
@@ -632,15 +784,6 @@ DATA_POINT_EVENTS: Final[frozenset[EventType]] = frozenset(
|
|
|
632
784
|
)
|
|
633
785
|
|
|
634
786
|
|
|
635
|
-
class DataPointKey(NamedTuple):
|
|
636
|
-
"""Key for data points."""
|
|
637
|
-
|
|
638
|
-
interface_id: str
|
|
639
|
-
channel_address: str
|
|
640
|
-
paramset_key: ParamsetKey
|
|
641
|
-
parameter: str
|
|
642
|
-
|
|
643
|
-
|
|
644
787
|
type DP_KEY_VALUE = tuple[DataPointKey, Any]
|
|
645
788
|
type SYSVAR_TYPE = bool | float | int | str | None
|
|
646
789
|
|
|
@@ -22,8 +22,8 @@ from aiohomematic.const import (
|
|
|
22
22
|
)
|
|
23
23
|
from aiohomematic.model import device as hmd
|
|
24
24
|
from aiohomematic.model.custom import definition as hmed
|
|
25
|
-
from aiohomematic.model.data_point import BaseDataPoint
|
|
26
|
-
from aiohomematic.model.generic import data_point as hmge
|
|
25
|
+
from aiohomematic.model.data_point import BaseDataPoint
|
|
26
|
+
from aiohomematic.model.generic import DpDummy, data_point as hmge
|
|
27
27
|
from aiohomematic.model.support import (
|
|
28
28
|
DataPointNameData,
|
|
29
29
|
DataPointPathData,
|
|
@@ -104,7 +104,7 @@ class CalculatedDataPoint[ParameterT: GenericParameterType](BaseDataPoint):
|
|
|
104
104
|
return cast(data_point_type, generic_data_point) # type: ignore[valid-type]
|
|
105
105
|
return cast(
|
|
106
106
|
data_point_type, # type:ignore[valid-type]
|
|
107
|
-
|
|
107
|
+
DpDummy(channel=self._channel, param_field=parameter),
|
|
108
108
|
)
|
|
109
109
|
|
|
110
110
|
def _add_device_data_point[DataPointT: hmge.GenericDataPoint](
|
|
@@ -126,7 +126,7 @@ class CalculatedDataPoint[ParameterT: GenericParameterType](BaseDataPoint):
|
|
|
126
126
|
return cast(data_point_type, generic_data_point) # type: ignore[valid-type]
|
|
127
127
|
return cast(
|
|
128
128
|
data_point_type, # type:ignore[valid-type]
|
|
129
|
-
|
|
129
|
+
DpDummy(channel=self._channel, param_field=parameter),
|
|
130
130
|
)
|
|
131
131
|
|
|
132
132
|
@property
|
|
@@ -15,6 +15,8 @@ from aiohomematic.const import (
|
|
|
15
15
|
SCHEDULER_PROFILE_PATTERN,
|
|
16
16
|
SCHEDULER_TIME_PATTERN,
|
|
17
17
|
DataPointCategory,
|
|
18
|
+
DeviceProfile,
|
|
19
|
+
Field,
|
|
18
20
|
InternalCustomID,
|
|
19
21
|
Parameter,
|
|
20
22
|
ParamsetKey,
|
|
@@ -24,7 +26,6 @@ from aiohomematic.decorators import inspector
|
|
|
24
26
|
from aiohomematic.exceptions import ClientException, ValidationException
|
|
25
27
|
from aiohomematic.model import device as hmd
|
|
26
28
|
from aiohomematic.model.custom import definition as hmed
|
|
27
|
-
from aiohomematic.model.custom.const import DeviceProfile, Field
|
|
28
29
|
from aiohomematic.model.custom.data_point import CustomDataPoint
|
|
29
30
|
from aiohomematic.model.custom.support import CustomConfig
|
|
30
31
|
from aiohomematic.model.data_point import CallParameterCollector, bind_collector
|
|
@@ -10,11 +10,10 @@ from enum import IntEnum, StrEnum
|
|
|
10
10
|
import logging
|
|
11
11
|
from typing import Any, Final
|
|
12
12
|
|
|
13
|
-
from aiohomematic.const import DataPointCategory, DataPointUsage, Parameter
|
|
13
|
+
from aiohomematic.const import DataPointCategory, DataPointUsage, DeviceProfile, Field, Parameter
|
|
14
14
|
from aiohomematic.converter import convert_hm_level_to_cpv
|
|
15
15
|
from aiohomematic.model import device as hmd
|
|
16
16
|
from aiohomematic.model.custom import definition as hmed
|
|
17
|
-
from aiohomematic.model.custom.const import DeviceProfile, Field
|
|
18
17
|
from aiohomematic.model.custom.data_point import CustomDataPoint
|
|
19
18
|
from aiohomematic.model.custom.support import CustomConfig, ExtendedConfig
|
|
20
19
|
from aiohomematic.model.data_point import CallParameterCollector, bind_collector
|
|
@@ -9,13 +9,21 @@ from datetime import datetime
|
|
|
9
9
|
import logging
|
|
10
10
|
from typing import Any, Final, cast
|
|
11
11
|
|
|
12
|
-
from aiohomematic.const import
|
|
12
|
+
from aiohomematic.const import (
|
|
13
|
+
CALLBACK_TYPE,
|
|
14
|
+
CDPD,
|
|
15
|
+
INIT_DATETIME,
|
|
16
|
+
CallSource,
|
|
17
|
+
DataPointKey,
|
|
18
|
+
DataPointUsage,
|
|
19
|
+
DeviceProfile,
|
|
20
|
+
Field,
|
|
21
|
+
)
|
|
13
22
|
from aiohomematic.model import device as hmd
|
|
14
23
|
from aiohomematic.model.custom import definition as hmed
|
|
15
|
-
from aiohomematic.model.custom.const import CDPD, DeviceProfile, Field
|
|
16
24
|
from aiohomematic.model.custom.support import CustomConfig
|
|
17
|
-
from aiohomematic.model.data_point import BaseDataPoint
|
|
18
|
-
from aiohomematic.model.generic import data_point as hmge
|
|
25
|
+
from aiohomematic.model.data_point import BaseDataPoint
|
|
26
|
+
from aiohomematic.model.generic import DpDummy, data_point as hmge
|
|
19
27
|
from aiohomematic.model.support import (
|
|
20
28
|
DataPointNameData,
|
|
21
29
|
DataPointPathData,
|
|
@@ -317,7 +325,7 @@ class CustomDataPoint(BaseDataPoint):
|
|
|
317
325
|
return cast(data_point_type, dp) # type: ignore[valid-type]
|
|
318
326
|
return cast(
|
|
319
327
|
data_point_type, # type:ignore[valid-type]
|
|
320
|
-
|
|
328
|
+
DpDummy(channel=self._channel, param_field=field),
|
|
321
329
|
)
|
|
322
330
|
|
|
323
331
|
def has_data_point_key(self, *, data_point_keys: set[DataPointKey]) -> bool:
|
|
@@ -12,10 +12,9 @@ from typing import Any, Final, cast
|
|
|
12
12
|
import voluptuous as vol
|
|
13
13
|
|
|
14
14
|
from aiohomematic import support as hms, validator as val
|
|
15
|
-
from aiohomematic.const import DataPointCategory, Parameter
|
|
15
|
+
from aiohomematic.const import CDPD, DataPointCategory, DeviceProfile, Field, Parameter
|
|
16
16
|
from aiohomematic.exceptions import AioHomematicException
|
|
17
17
|
from aiohomematic.model import device as hmd
|
|
18
|
-
from aiohomematic.model.custom.const import CDPD, DeviceProfile, Field
|
|
19
18
|
from aiohomematic.model.custom.support import CustomConfig
|
|
20
19
|
from aiohomematic.model.support import generate_unique_id
|
|
21
20
|
from aiohomematic.support import extract_exc_args
|
|
@@ -9,10 +9,9 @@ from enum import IntEnum, StrEnum
|
|
|
9
9
|
import math
|
|
10
10
|
from typing import Any, Final, TypedDict, Unpack
|
|
11
11
|
|
|
12
|
-
from aiohomematic.const import DataPointCategory, DataPointUsage, Parameter
|
|
12
|
+
from aiohomematic.const import DataPointCategory, DataPointUsage, DeviceProfile, Field, Parameter
|
|
13
13
|
from aiohomematic.model import device as hmd
|
|
14
14
|
from aiohomematic.model.custom import definition as hmed
|
|
15
|
-
from aiohomematic.model.custom.const import DeviceProfile, Field
|
|
16
15
|
from aiohomematic.model.custom.data_point import CustomDataPoint
|
|
17
16
|
from aiohomematic.model.custom.support import CustomConfig, ExtendedConfig
|
|
18
17
|
from aiohomematic.model.data_point import CallParameterCollector, bind_collector
|
|
@@ -8,10 +8,9 @@ from abc import abstractmethod
|
|
|
8
8
|
from collections.abc import Mapping
|
|
9
9
|
from enum import StrEnum
|
|
10
10
|
|
|
11
|
-
from aiohomematic.const import DataPointCategory, Parameter
|
|
11
|
+
from aiohomematic.const import DataPointCategory, DeviceProfile, Field, Parameter
|
|
12
12
|
from aiohomematic.model import device as hmd
|
|
13
13
|
from aiohomematic.model.custom import definition as hmed
|
|
14
|
-
from aiohomematic.model.custom.const import DeviceProfile, Field
|
|
15
14
|
from aiohomematic.model.custom.data_point import CustomDataPoint
|
|
16
15
|
from aiohomematic.model.custom.support import CustomConfig, ExtendedConfig
|
|
17
16
|
from aiohomematic.model.data_point import CallParameterCollector, bind_collector
|
|
@@ -9,11 +9,10 @@ from collections.abc import Mapping
|
|
|
9
9
|
from enum import StrEnum
|
|
10
10
|
from typing import Final, TypedDict, Unpack
|
|
11
11
|
|
|
12
|
-
from aiohomematic.const import DataPointCategory
|
|
12
|
+
from aiohomematic.const import DataPointCategory, DeviceProfile, Field
|
|
13
13
|
from aiohomematic.exceptions import ValidationException
|
|
14
14
|
from aiohomematic.model import device as hmd
|
|
15
15
|
from aiohomematic.model.custom import definition as hmed
|
|
16
|
-
from aiohomematic.model.custom.const import DeviceProfile, Field
|
|
17
16
|
from aiohomematic.model.custom.data_point import CustomDataPoint
|
|
18
17
|
from aiohomematic.model.custom.support import CustomConfig
|
|
19
18
|
from aiohomematic.model.data_point import CallParameterCollector, bind_collector
|
|
@@ -7,8 +7,7 @@ from __future__ import annotations
|
|
|
7
7
|
from collections.abc import Callable, Mapping
|
|
8
8
|
from dataclasses import dataclass
|
|
9
9
|
|
|
10
|
-
from aiohomematic.const import Parameter
|
|
11
|
-
from aiohomematic.model.custom.const import Field
|
|
10
|
+
from aiohomematic.const import Field, Parameter
|
|
12
11
|
|
|
13
12
|
|
|
14
13
|
@dataclass(frozen=True, kw_only=True, slots=True)
|
|
@@ -9,10 +9,9 @@ from enum import StrEnum
|
|
|
9
9
|
import logging
|
|
10
10
|
from typing import Any, Final
|
|
11
11
|
|
|
12
|
-
from aiohomematic.const import DataPointCategory, Parameter
|
|
12
|
+
from aiohomematic.const import DataPointCategory, DeviceProfile, Field, Parameter
|
|
13
13
|
from aiohomematic.model import device as hmd
|
|
14
14
|
from aiohomematic.model.custom import definition as hmed
|
|
15
|
-
from aiohomematic.model.custom.const import DeviceProfile, Field
|
|
16
15
|
from aiohomematic.model.custom.data_point import CustomDataPoint
|
|
17
16
|
from aiohomematic.model.custom.support import CustomConfig, ExtendedConfig
|
|
18
17
|
from aiohomematic.model.data_point import CallParameterCollector, bind_collector
|
|
@@ -9,10 +9,9 @@ from enum import StrEnum
|
|
|
9
9
|
import logging
|
|
10
10
|
from typing import Any, Final
|
|
11
11
|
|
|
12
|
-
from aiohomematic.const import DataPointCategory
|
|
12
|
+
from aiohomematic.const import DataPointCategory, DeviceProfile, Field
|
|
13
13
|
from aiohomematic.model import device as hmd
|
|
14
14
|
from aiohomematic.model.custom import definition as hmed
|
|
15
|
-
from aiohomematic.model.custom.const import DeviceProfile, Field
|
|
16
15
|
from aiohomematic.model.custom.data_point import CustomDataPoint
|
|
17
16
|
from aiohomematic.model.custom.support import CustomConfig
|
|
18
17
|
from aiohomematic.model.data_point import CallParameterCollector, bind_collector
|
aiohomematic/model/data_point.py
CHANGED
|
@@ -1121,28 +1121,3 @@ def bind_collector(
|
|
|
1121
1121
|
return bind_wrapper # type: ignore[return-value]
|
|
1122
1122
|
|
|
1123
1123
|
return bind_decorator
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
class NoneTypeDataPoint:
|
|
1127
|
-
"""DataPoint to return an empty value."""
|
|
1128
|
-
|
|
1129
|
-
default: Any = None
|
|
1130
|
-
hmtype: Any = None
|
|
1131
|
-
is_valid: bool = False
|
|
1132
|
-
max: Any = None
|
|
1133
|
-
min: Any = None
|
|
1134
|
-
unit: Any = None
|
|
1135
|
-
value: Any = None
|
|
1136
|
-
values: tuple[Any, ...] = ()
|
|
1137
|
-
visible: Any = None
|
|
1138
|
-
channel_operation_mode: str | None = None
|
|
1139
|
-
is_hmtype = False
|
|
1140
|
-
|
|
1141
|
-
async def send_value(
|
|
1142
|
-
self,
|
|
1143
|
-
*,
|
|
1144
|
-
value: Any,
|
|
1145
|
-
collector: CallParameterCollector | None = None,
|
|
1146
|
-
do_validate: bool = True,
|
|
1147
|
-
) -> None:
|
|
1148
|
-
"""Send value dummy method."""
|
|
@@ -69,6 +69,7 @@ from aiohomematic.model.generic.action import DpAction
|
|
|
69
69
|
from aiohomematic.model.generic.binary_sensor import DpBinarySensor
|
|
70
70
|
from aiohomematic.model.generic.button import DpButton
|
|
71
71
|
from aiohomematic.model.generic.data_point import GenericDataPoint
|
|
72
|
+
from aiohomematic.model.generic.dummy import DpDummy
|
|
72
73
|
from aiohomematic.model.generic.number import BaseDpNumber, DpFloat, DpInteger
|
|
73
74
|
from aiohomematic.model.generic.select import DpSelect
|
|
74
75
|
from aiohomematic.model.generic.sensor import DpSensor
|
|
@@ -81,6 +82,7 @@ __all__ = [
|
|
|
81
82
|
"DpAction",
|
|
82
83
|
"DpBinarySensor",
|
|
83
84
|
"DpButton",
|
|
85
|
+
"DpDummy",
|
|
84
86
|
"DpFloat",
|
|
85
87
|
"DpInteger",
|
|
86
88
|
"DpSelect",
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2021-2025
|
|
3
|
+
"""
|
|
4
|
+
Dummy generic data point (backend-detached placeholder).
|
|
5
|
+
|
|
6
|
+
This class derives from `GenericDataPoint` but overrides all methods that would
|
|
7
|
+
normally interact with the backend so it behaves like an inert data point that
|
|
8
|
+
uses safe default values only.
|
|
9
|
+
The DpDummy class is intended to be used as a placeholder for custom data
|
|
10
|
+
points that are not implemented in the backend.
|
|
11
|
+
|
|
12
|
+
Key properties:
|
|
13
|
+
- It never triggers backend I/O (no reads, no writes, no subscriptions).
|
|
14
|
+
- It always reports `usage = DataPointUsage.NO_CREATE` so it is not created as a
|
|
15
|
+
real entity.
|
|
16
|
+
- It is not readable or writable and does not require polling nor support
|
|
17
|
+
events.
|
|
18
|
+
- It exposes safe, static defaults for metadata and state.
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
from __future__ import annotations
|
|
22
|
+
|
|
23
|
+
from datetime import datetime
|
|
24
|
+
from typing import Any, cast
|
|
25
|
+
|
|
26
|
+
from aiohomematic.const import (
|
|
27
|
+
DP_KEY_VALUE,
|
|
28
|
+
INIT_DATETIME,
|
|
29
|
+
CallSource,
|
|
30
|
+
DataPointKey,
|
|
31
|
+
DataPointUsage,
|
|
32
|
+
Field,
|
|
33
|
+
ParameterData,
|
|
34
|
+
ParameterType,
|
|
35
|
+
ParamsetKey,
|
|
36
|
+
)
|
|
37
|
+
from aiohomematic.model import device as hmd
|
|
38
|
+
from aiohomematic.model.data_point import CallParameterCollector
|
|
39
|
+
from aiohomematic.model.generic.data_point import GenericDataPoint
|
|
40
|
+
from aiohomematic.model.support import DataPointNameData
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
class DpDummy(GenericDataPoint[Any, Any]):
|
|
44
|
+
"""
|
|
45
|
+
Backend-detached `GenericDataPoint` using only default values.
|
|
46
|
+
|
|
47
|
+
All backend-touching operations are overridden to be no-ops.
|
|
48
|
+
"""
|
|
49
|
+
|
|
50
|
+
__slots__ = ()
|
|
51
|
+
|
|
52
|
+
is_hmtype = False
|
|
53
|
+
|
|
54
|
+
def __init__(self, *, channel: hmd.Channel, param_field: str | Field) -> None:
|
|
55
|
+
"""
|
|
56
|
+
Initialize the dummy data point.
|
|
57
|
+
|
|
58
|
+
We still call `super().__init__` to get a valid object layout, but all
|
|
59
|
+
runtime behavior that would contact the backend is disabled via
|
|
60
|
+
overrides below.
|
|
61
|
+
"""
|
|
62
|
+
|
|
63
|
+
super().__init__(
|
|
64
|
+
channel=channel,
|
|
65
|
+
paramset_key=ParamsetKey.DUMMY,
|
|
66
|
+
parameter=f"DUMMY-{str(param_field)}",
|
|
67
|
+
parameter_data=ParameterData(
|
|
68
|
+
DEFAULT=None,
|
|
69
|
+
FLAGS=0,
|
|
70
|
+
ID="0",
|
|
71
|
+
MAX=None,
|
|
72
|
+
MIN=None,
|
|
73
|
+
OPERATIONS=0,
|
|
74
|
+
SPECIAL={},
|
|
75
|
+
TYPE=ParameterType.DUMMY,
|
|
76
|
+
UNIT="",
|
|
77
|
+
VALUE_LIST=(),
|
|
78
|
+
),
|
|
79
|
+
)
|
|
80
|
+
|
|
81
|
+
# --- Metadata and identity -------------------------------------------
|
|
82
|
+
@property
|
|
83
|
+
def usage(self) -> DataPointUsage:
|
|
84
|
+
"""Never create/ expose this data point as a real entity."""
|
|
85
|
+
return DataPointUsage.NO_CREATE
|
|
86
|
+
|
|
87
|
+
@property
|
|
88
|
+
def requires_polling(self) -> bool:
|
|
89
|
+
"""Never poll from this data point."""
|
|
90
|
+
return False
|
|
91
|
+
|
|
92
|
+
@property
|
|
93
|
+
def state_uncertain(self) -> bool:
|
|
94
|
+
"""Never report state uncertainty for this data point."""
|
|
95
|
+
return True
|
|
96
|
+
|
|
97
|
+
@property
|
|
98
|
+
def modified_at(self) -> datetime:
|
|
99
|
+
"""Never report modification timestamp for this data point."""
|
|
100
|
+
return INIT_DATETIME
|
|
101
|
+
|
|
102
|
+
@property
|
|
103
|
+
def refreshed_at(self) -> datetime:
|
|
104
|
+
"""Never report refresh timestamp for this data point."""
|
|
105
|
+
return INIT_DATETIME
|
|
106
|
+
|
|
107
|
+
@property
|
|
108
|
+
def dpk(self) -> DataPointKey:
|
|
109
|
+
"""Return a stable placeholder data point key."""
|
|
110
|
+
# Return a stable placeholder key so equality/set operations are safe.
|
|
111
|
+
return cast(DataPointKey, ("", "", ""))
|
|
112
|
+
|
|
113
|
+
@property
|
|
114
|
+
def value(self) -> Any:
|
|
115
|
+
"""Return the value of the data_point."""
|
|
116
|
+
return None
|
|
117
|
+
|
|
118
|
+
# Optional: provide a stable, recognizable name to aid debugging
|
|
119
|
+
def _get_data_point_name(self) -> DataPointNameData:
|
|
120
|
+
"""Return a stable, recognizable name to aid debugging."""
|
|
121
|
+
name = super()._get_data_point_name()
|
|
122
|
+
# Replace parameter part with a dummy marker without touching address
|
|
123
|
+
return DataPointNameData(
|
|
124
|
+
device_name=f"DUMMY_{name.name}",
|
|
125
|
+
channel_name=f"DUMMY_{name.full_name}",
|
|
126
|
+
parameter_name=f"DUMMY_{name.parameter_name}",
|
|
127
|
+
)
|
|
128
|
+
|
|
129
|
+
# --- Backend interactions (all no-ops) --------------------------------
|
|
130
|
+
async def event(self, *, value: Any, received_at: datetime) -> None:
|
|
131
|
+
"""Ignore backend events entirely."""
|
|
132
|
+
return
|
|
133
|
+
|
|
134
|
+
async def load_data_point_value(self, *, call_source: CallSource, direct_call: bool = False) -> None:
|
|
135
|
+
"""Do not read from backend; keep defaults as-is."""
|
|
136
|
+
return
|
|
137
|
+
|
|
138
|
+
async def send_value(
|
|
139
|
+
self,
|
|
140
|
+
*,
|
|
141
|
+
value: Any,
|
|
142
|
+
collector: CallParameterCollector | None = None,
|
|
143
|
+
collector_order: int = 50,
|
|
144
|
+
do_validate: bool = True,
|
|
145
|
+
) -> set[DP_KEY_VALUE]:
|
|
146
|
+
"""Do not write to backend; accept but perform no operation."""
|
|
147
|
+
return set()
|
aiohomematic/model/support.py
CHANGED
|
@@ -14,6 +14,7 @@ from typing import Any, Final
|
|
|
14
14
|
from aiohomematic import central as hmcu
|
|
15
15
|
from aiohomematic.const import (
|
|
16
16
|
ADDRESS_SEPARATOR,
|
|
17
|
+
CDPD,
|
|
17
18
|
PROGRAM_ADDRESS,
|
|
18
19
|
PROGRAM_SET_PATH_ROOT,
|
|
19
20
|
PROGRAM_STATE_PATH_ROOT,
|
|
@@ -32,7 +33,6 @@ from aiohomematic.const import (
|
|
|
32
33
|
ParameterType,
|
|
33
34
|
)
|
|
34
35
|
from aiohomematic.model import device as hmd
|
|
35
|
-
from aiohomematic.model.custom.const import CDPD
|
|
36
36
|
from aiohomematic.support import to_bool
|
|
37
37
|
|
|
38
38
|
__all__ = [
|
aiohomematic/store/persistent.py
CHANGED
|
@@ -49,6 +49,7 @@ import orjson
|
|
|
49
49
|
from slugify import slugify
|
|
50
50
|
|
|
51
51
|
from aiohomematic import central as hmcu
|
|
52
|
+
from aiohomematic.async_support import loop_check
|
|
52
53
|
from aiohomematic.const import (
|
|
53
54
|
ADDRESS_SEPARATOR,
|
|
54
55
|
FILE_DEVICES,
|
|
@@ -977,10 +978,11 @@ def _now() -> int:
|
|
|
977
978
|
return int(datetime.now(tz=UTC).timestamp())
|
|
978
979
|
|
|
979
980
|
|
|
980
|
-
|
|
981
|
+
@loop_check
|
|
982
|
+
def cleanup_files(*, central_name: str, storage_directory: str) -> None:
|
|
981
983
|
"""Clean up the used files."""
|
|
982
984
|
loop = asyncio.get_running_loop()
|
|
983
985
|
cache_dir = _get_file_path(storage_directory=storage_directory, sub_directory=SUB_DIRECTORY_CACHE)
|
|
984
|
-
loop.
|
|
986
|
+
loop.run_in_executor(None, delete_file, cache_dir, f"{central_name}*.json".lower())
|
|
985
987
|
session_dir = _get_file_path(storage_directory=storage_directory, sub_directory=SUB_DIRECTORY_SESSION)
|
|
986
|
-
loop.
|
|
988
|
+
loop.run_in_executor(None, delete_file, session_dir, f"{central_name}*.json".lower())
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: aiohomematic
|
|
3
|
-
Version: 2025.
|
|
3
|
+
Version: 2025.11.0
|
|
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,6 +1,6 @@
|
|
|
1
1
|
aiohomematic/__init__.py,sha256=Uo9CIoil0Arl3GwtgMZAwM8jhcgoBKcZEgj8cXYlswY,2258
|
|
2
2
|
aiohomematic/async_support.py,sha256=Fg6RLD7Irt1mTwXbLkfphJbfd7oU_Svhp23i3Bb4Q7k,8762
|
|
3
|
-
aiohomematic/const.py,sha256=
|
|
3
|
+
aiohomematic/const.py,sha256=6qiR3_-TOCSYez2gifBu0CeeEciol_7D4CmXj_5C0lc,32278
|
|
4
4
|
aiohomematic/context.py,sha256=hGE-iPcPt21dY-1MZar-Hyh9YaKL-VS42xjrulIVyRQ,429
|
|
5
5
|
aiohomematic/converter.py,sha256=FiHU71M5RZ7N5FXJYh2CN14s63-PM-SHdb0cJ_CLx54,3602
|
|
6
6
|
aiohomematic/decorators.py,sha256=cSW0aF3PzrW_qW6H0sjRNH9eqO8ysqhXZDgJ2OJTZM4,11038
|
|
@@ -10,7 +10,7 @@ aiohomematic/property_decorators.py,sha256=v8O_6hW5plpD1-Cmhbb-6t_RfAl8wD4TskWt7
|
|
|
10
10
|
aiohomematic/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
11
11
|
aiohomematic/support.py,sha256=F8jiuRgw3Dn7v2kPBvFTHFGI4nJzybd3eQIQEK4Y6XI,21056
|
|
12
12
|
aiohomematic/validator.py,sha256=qX5janicu4jLrAVzKoyWgXe1XU4EOjk5-QhNFL4awTQ,3541
|
|
13
|
-
aiohomematic/central/__init__.py,sha256=
|
|
13
|
+
aiohomematic/central/__init__.py,sha256=m3LqORD2BHr_SjhVd53Ge_DMKpJR_VYqNtFFw1oyxbA,96552
|
|
14
14
|
aiohomematic/central/decorators.py,sha256=ja0d5MujL-Kfv399XIPRgiUxeyf67HwNWAuD7nmFJzg,6902
|
|
15
15
|
aiohomematic/central/rpc_server.py,sha256=EhvBy8oMjBTR8MvH5QXo3lvlsCNJrvu6B85_CAg6sG8,10742
|
|
16
16
|
aiohomematic/client/__init__.py,sha256=TYeVOGNVsGSCoaL1v9z1F8Sfx-Aq7zzz-yComAnnh8E,74365
|
|
@@ -18,33 +18,33 @@ aiohomematic/client/_rpc_errors.py,sha256=IaYjX60mpBJ43gDCJjuUSVraamy5jXHTRjOnut
|
|
|
18
18
|
aiohomematic/client/json_rpc.py,sha256=82uVldmvNEB_F9BA_2oA55UmThRJRW2wRTPbcJiBvQg,51580
|
|
19
19
|
aiohomematic/client/rpc_proxy.py,sha256=Am-MTLCVtQDPm2AOjVy1Bb4uulwdV2J6172SQRjdbso,11844
|
|
20
20
|
aiohomematic/model/__init__.py,sha256=gUYa8ROWSbXjZTWUTmINZ1bbYAxGkVpA-onxaJN2Iso,5436
|
|
21
|
-
aiohomematic/model/data_point.py,sha256=
|
|
21
|
+
aiohomematic/model/data_point.py,sha256=oPS48r-saBHs1_gZ6XRAwTZv3Bes8Ad1FVapu8BLavM,41005
|
|
22
22
|
aiohomematic/model/device.py,sha256=gK-4truXJMNJcU6vCIW7xV2rYHsrRCLtyM89xS2-g5I,52884
|
|
23
23
|
aiohomematic/model/event.py,sha256=iyRW5569nttjGUa9iBeLHACviwVims2HiXrQFEz259M,6849
|
|
24
|
-
aiohomematic/model/support.py,sha256=
|
|
24
|
+
aiohomematic/model/support.py,sha256=vDQyVsiHy6Xhm_VXtqFQPm65A7qkDHSkzt-qoxDbu8I,19583
|
|
25
25
|
aiohomematic/model/update.py,sha256=R3uUA61m-UQNNGkRod3vES66AgkPKay_CPyyrd-nqVI,5140
|
|
26
26
|
aiohomematic/model/calculated/__init__.py,sha256=JNtxK4-XZeyR6MxfKVPdcF6ezQliQYTWEDoeOChumaE,2966
|
|
27
27
|
aiohomematic/model/calculated/climate.py,sha256=rm9b4rCrmsZAA5_dzP6YRtahdveI97581_EnC4utqpg,10499
|
|
28
|
-
aiohomematic/model/calculated/data_point.py,sha256=
|
|
28
|
+
aiohomematic/model/calculated/data_point.py,sha256=Pyo66uOkKVJ3aA5_TjDpiLJIVjAuUQx1o7Ot-YI8h0A,11564
|
|
29
29
|
aiohomematic/model/calculated/operating_voltage_level.py,sha256=99A8HvahVS4IxpgK1dsgQXHfeubU7JI2c0ObagbnSNQ,13505
|
|
30
30
|
aiohomematic/model/calculated/support.py,sha256=GBD35_OR3TEAWo5ADeH_gk2Ebw9pHOtOnOS7umCkXB0,7989
|
|
31
31
|
aiohomematic/model/custom/__init__.py,sha256=JxJXyr2CgKlj-jc1xQ14lbMT76vvswfLUecwj8RJCXA,6073
|
|
32
|
-
aiohomematic/model/custom/climate.py,sha256=
|
|
33
|
-
aiohomematic/model/custom/
|
|
34
|
-
aiohomematic/model/custom/
|
|
35
|
-
aiohomematic/model/custom/
|
|
36
|
-
aiohomematic/model/custom/
|
|
37
|
-
aiohomematic/model/custom/
|
|
38
|
-
aiohomematic/model/custom/
|
|
39
|
-
aiohomematic/model/custom/
|
|
40
|
-
aiohomematic/model/custom/
|
|
41
|
-
aiohomematic/model/custom/
|
|
42
|
-
aiohomematic/model/
|
|
43
|
-
aiohomematic/model/generic/__init__.py,sha256=-4yben7G-QKBWMWpusrLkGo65a4IXIPYoiGu49T_KMM,7653
|
|
32
|
+
aiohomematic/model/custom/climate.py,sha256=PTiFyd486bjop4Q-ZTjDcANJNA1HBMDGCvvVL86xWSc,57257
|
|
33
|
+
aiohomematic/model/custom/cover.py,sha256=28_TshEMiuusWsAMcNEvFWcqLNjAlxwMS1bLVmGTZjQ,28992
|
|
34
|
+
aiohomematic/model/custom/data_point.py,sha256=vaUcUjaHanWbTQlq1K-mhI2uM0vT-MzmkZibuerlDX8,14116
|
|
35
|
+
aiohomematic/model/custom/definition.py,sha256=N9ZcLT7uglBlsFU1ZQJcL94LFAZK23sm3kAxws3tNkM,35716
|
|
36
|
+
aiohomematic/model/custom/light.py,sha256=THyBdYRNzAMOH0VpCn3Ui9BJo-NtgLBWxXmTZrx_IY4,44383
|
|
37
|
+
aiohomematic/model/custom/lock.py,sha256=7GYRyLsGv6JkPKWFTfsTP8Xheb3TCo4LktqcZQXxJTQ,11931
|
|
38
|
+
aiohomematic/model/custom/siren.py,sha256=Qi1jd6kGskfgyQP7lrczN6KEaJ3V40Pf-DUNpTUwTPI,9720
|
|
39
|
+
aiohomematic/model/custom/support.py,sha256=t0HxBo-zXdW-ju6ROfY9SuB2uXKqV0jFej_4QTIsH7w,1388
|
|
40
|
+
aiohomematic/model/custom/switch.py,sha256=I1rWgQqljPtMtc7fYWfWPKDdoHDZHXxiCmu6Gxe_bw4,6898
|
|
41
|
+
aiohomematic/model/custom/valve.py,sha256=tAQ0V-eCJCAoEgO1LFzZD4_tvBVojM8VipmOGTyGqe0,4177
|
|
42
|
+
aiohomematic/model/generic/__init__.py,sha256=gx6ohi35PvIHsj8HK_fbftoT_JCmo6l10tzk-syMsZw,7721
|
|
44
43
|
aiohomematic/model/generic/action.py,sha256=VDFCAkX0TkXV4xh3ya0AUIKnjOKF_rEobI6qdW5mAOQ,975
|
|
45
44
|
aiohomematic/model/generic/binary_sensor.py,sha256=yABUafcBmPHLNAkdj_malYroBZc5UaunYLhmRtS2nGU,865
|
|
46
45
|
aiohomematic/model/generic/button.py,sha256=3ahmj1BJZfdh6h6YV-urC8UwcKRp94QPOQtsF0fBI3Y,718
|
|
47
|
-
aiohomematic/model/generic/data_point.py,sha256=
|
|
46
|
+
aiohomematic/model/generic/data_point.py,sha256=sU_vnTiiprbWacODSRo0-CT4b7650rAXy-21uQXZ1V0,6061
|
|
47
|
+
aiohomematic/model/generic/dummy.py,sha256=HjvR_citnjnN1A7YToKdCSdbgB1072TK40sOWVC2nBw,4742
|
|
48
48
|
aiohomematic/model/generic/number.py,sha256=WNu4EB_npDZ8f7RrCrab1g9KzRtG8dziUvNQApEKXYk,2656
|
|
49
49
|
aiohomematic/model/generic/select.py,sha256=-CXHdvzwWGp74t5UVdIWOFhlcW7bf0hcuGriBl7EWXk,1516
|
|
50
50
|
aiohomematic/model/generic/sensor.py,sha256=ueqXw9bkFFJeD_mer6idpMTGFg6rweDEUNOgqsF22NA,2240
|
|
@@ -67,11 +67,11 @@ aiohomematic/rega_scripts/set_program_state.fn,sha256=0bnv7lUj8FMjDZBz325tDVP61m
|
|
|
67
67
|
aiohomematic/rega_scripts/set_system_variable.fn,sha256=sTmr7vkPTPnPkor5cnLKlDvfsYRbGO1iq2z_2pMXq5E,383
|
|
68
68
|
aiohomematic/store/__init__.py,sha256=PHwF_tw_zL20ODwLywHgpOLWrghQo_BMZzeiQSXN1Fc,1081
|
|
69
69
|
aiohomematic/store/dynamic.py,sha256=3i8oajVhfTeckAuOhwTyIxrd-eb1fl5VxEdK3NPfisw,22323
|
|
70
|
-
aiohomematic/store/persistent.py,sha256=
|
|
70
|
+
aiohomematic/store/persistent.py,sha256=6ZcOxFJtl7cLCacuHMRVnTPxmrhT4uxTwzHiR_7Xm1g,40291
|
|
71
71
|
aiohomematic/store/visibility.py,sha256=ZaqxN_FIsvpYZvCZWu0YSlWLtrFmAfUYILBYIXxPJZs,31622
|
|
72
|
-
aiohomematic-2025.
|
|
73
|
-
aiohomematic-2025.
|
|
74
|
-
aiohomematic-2025.
|
|
75
|
-
aiohomematic-2025.
|
|
76
|
-
aiohomematic-2025.
|
|
77
|
-
aiohomematic-2025.
|
|
72
|
+
aiohomematic-2025.11.0.dist-info/licenses/LICENSE,sha256=q-B0xpREuZuvKsmk3_iyVZqvZ-vJcWmzMZpeAd0RqtQ,1083
|
|
73
|
+
aiohomematic-2025.11.0.dist-info/METADATA,sha256=XCRP6iXQHgEx3a_xrI4qz1VCZJDShuC43ApdyjtLuhw,7949
|
|
74
|
+
aiohomematic-2025.11.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
75
|
+
aiohomematic-2025.11.0.dist-info/entry_points.txt,sha256=tzk3wIE-hXNhLEiefCCDhIiRT7DYY9MePAwGw-kPmWI,57
|
|
76
|
+
aiohomematic-2025.11.0.dist-info/top_level.txt,sha256=iGUvt1N-E72vKRq7Anpp62HwkQngStrUK0JfL1zj1TE,13
|
|
77
|
+
aiohomematic-2025.11.0.dist-info/RECORD,,
|
|
@@ -1,148 +0,0 @@
|
|
|
1
|
-
# SPDX-License-Identifier: MIT
|
|
2
|
-
# Copyright (c) 2021-2025
|
|
3
|
-
"""Constants used by aiohomematic custom data points."""
|
|
4
|
-
|
|
5
|
-
from __future__ import annotations
|
|
6
|
-
|
|
7
|
-
from enum import Enum, StrEnum
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
class DeviceProfile(StrEnum):
|
|
11
|
-
"""Enum for device profiles."""
|
|
12
|
-
|
|
13
|
-
IP_BUTTON_LOCK = "IPButtonLock"
|
|
14
|
-
IP_COVER = "IPCover"
|
|
15
|
-
IP_DIMMER = "IPDimmer"
|
|
16
|
-
IP_DRG_DALI = "IPDRGDALI"
|
|
17
|
-
IP_FIXED_COLOR_LIGHT = "IPFixedColorLight"
|
|
18
|
-
IP_GARAGE = "IPGarage"
|
|
19
|
-
IP_HDM = "IPHdm"
|
|
20
|
-
IP_IRRIGATION_VALVE = "IPIrrigationValve"
|
|
21
|
-
IP_LOCK = "IPLock"
|
|
22
|
-
IP_RGBW_LIGHT = "IPRGBW"
|
|
23
|
-
IP_SIMPLE_FIXED_COLOR_LIGHT = "IPSimpleFixedColorLight"
|
|
24
|
-
IP_SIMPLE_FIXED_COLOR_LIGHT_WIRED = "IPSimpleFixedColorLightWired"
|
|
25
|
-
IP_SIREN = "IPSiren"
|
|
26
|
-
IP_SIREN_SMOKE = "IPSirenSmoke"
|
|
27
|
-
IP_SWITCH = "IPSwitch"
|
|
28
|
-
IP_THERMOSTAT = "IPThermostat"
|
|
29
|
-
IP_THERMOSTAT_GROUP = "IPThermostatGroup"
|
|
30
|
-
RF_BUTTON_LOCK = "RFButtonLock"
|
|
31
|
-
RF_COVER = "RfCover"
|
|
32
|
-
RF_DIMMER = "RfDimmer"
|
|
33
|
-
RF_DIMMER_COLOR = "RfDimmer_Color"
|
|
34
|
-
RF_DIMMER_COLOR_FIXED = "RfDimmer_Color_Fixed"
|
|
35
|
-
RF_DIMMER_COLOR_TEMP = "RfDimmer_Color_Temp"
|
|
36
|
-
RF_DIMMER_WITH_VIRT_CHANNEL = "RfDimmerWithVirtChannel"
|
|
37
|
-
RF_LOCK = "RfLock"
|
|
38
|
-
RF_SIREN = "RfSiren"
|
|
39
|
-
RF_SWITCH = "RfSwitch"
|
|
40
|
-
RF_THERMOSTAT = "RfThermostat"
|
|
41
|
-
RF_THERMOSTAT_GROUP = "RfThermostatGroup"
|
|
42
|
-
SIMPLE_RF_THERMOSTAT = "SimpleRfThermostat"
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
class CDPD(StrEnum):
|
|
46
|
-
"""Enum for custom data point definitions."""
|
|
47
|
-
|
|
48
|
-
ADDITIONAL_DPS = "additional_dps"
|
|
49
|
-
ALLOW_UNDEFINED_GENERIC_DPS = "allow_undefined_generic_dps"
|
|
50
|
-
DEFAULT_DPS = "default_dps"
|
|
51
|
-
DEVICE_DEFINITIONS = "device_definitions"
|
|
52
|
-
DEVICE_GROUP = "device_group"
|
|
53
|
-
FIELDS = "fields"
|
|
54
|
-
INCLUDE_DEFAULT_DPS = "include_default_dps"
|
|
55
|
-
PRIMARY_CHANNEL = "primary_channel"
|
|
56
|
-
REPEATABLE_FIELDS = "repeatable_fields"
|
|
57
|
-
SECONDARY_CHANNELS = "secondary_channels"
|
|
58
|
-
STATE_CHANNEL = "state_channel"
|
|
59
|
-
VISIBLE_FIELDS = "visible_fields"
|
|
60
|
-
VISIBLE_REPEATABLE_FIELDS = "visible_repeatable_fields"
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
class Field(Enum):
|
|
64
|
-
"""Enum for fields."""
|
|
65
|
-
|
|
66
|
-
ACOUSTIC_ALARM_ACTIVE = "acoustic_alarm_active"
|
|
67
|
-
ACOUSTIC_ALARM_SELECTION = "acoustic_alarm_selection"
|
|
68
|
-
ACTIVE_PROFILE = "active_profile"
|
|
69
|
-
AUTO_MODE = "auto_mode"
|
|
70
|
-
BOOST_MODE = "boost_mode"
|
|
71
|
-
BUTTON_LOCK = "button_lock"
|
|
72
|
-
CHANNEL_COLOR = "channel_color"
|
|
73
|
-
COLOR = "color"
|
|
74
|
-
COLOR_BEHAVIOUR = "color_behaviour"
|
|
75
|
-
COLOR_LEVEL = "color_temp"
|
|
76
|
-
COLOR_TEMPERATURE = "color_temperature"
|
|
77
|
-
COMBINED_PARAMETER = "combined_parameter"
|
|
78
|
-
COMFORT_MODE = "comfort_mode"
|
|
79
|
-
CONCENTRATION = "concentration"
|
|
80
|
-
CONTROL_MODE = "control_mode"
|
|
81
|
-
CURRENT = "current"
|
|
82
|
-
DEVICE_OPERATION_MODE = "device_operation_mode"
|
|
83
|
-
DIRECTION = "direction"
|
|
84
|
-
DOOR_COMMAND = "door_command"
|
|
85
|
-
DOOR_STATE = "door_state"
|
|
86
|
-
DURATION = "duration"
|
|
87
|
-
DURATION_UNIT = "duration_unit"
|
|
88
|
-
DUTYCYCLE = "dutycycle"
|
|
89
|
-
DUTY_CYCLE = "duty_cycle"
|
|
90
|
-
EFFECT = "effect"
|
|
91
|
-
ENERGY_COUNTER = "energy_counter"
|
|
92
|
-
ERROR = "error"
|
|
93
|
-
FREQUENCY = "frequency"
|
|
94
|
-
GROUP_LEVEL = "group_level"
|
|
95
|
-
GROUP_LEVEL_2 = "group_level_2"
|
|
96
|
-
GROUP_STATE = "group_state"
|
|
97
|
-
HEATING_COOLING = "heating_cooling"
|
|
98
|
-
HEATING_VALVE_TYPE = "heating_valve_type"
|
|
99
|
-
HUE = "hue"
|
|
100
|
-
HUMIDITY = "humidity"
|
|
101
|
-
INHIBIT = "inhibit"
|
|
102
|
-
LEVEL = "level"
|
|
103
|
-
LEVEL_2 = "level_2"
|
|
104
|
-
LEVEL_COMBINED = "level_combined"
|
|
105
|
-
LOCK_STATE = "lock_state"
|
|
106
|
-
LOCK_TARGET_LEVEL = "lock_target_level"
|
|
107
|
-
LOWBAT = "lowbat"
|
|
108
|
-
LOWERING_MODE = "lowering_mode"
|
|
109
|
-
LOW_BAT = "low_bat"
|
|
110
|
-
LOW_BAT_LIMIT = "low_bat_limit"
|
|
111
|
-
MANU_MODE = "manu_mode"
|
|
112
|
-
MIN_MAX_VALUE_NOT_RELEVANT_FOR_MANU_MODE = "min_max_value_not_relevant_for_manu_mode"
|
|
113
|
-
ON_TIME_UNIT = "on_time_unit"
|
|
114
|
-
ON_TIME_VALUE = "on_time_value"
|
|
115
|
-
OPEN = "open"
|
|
116
|
-
OPERATING_VOLTAGE = "operating_voltage"
|
|
117
|
-
OPERATION_MODE = "channel_operation_mode"
|
|
118
|
-
OPTICAL_ALARM_ACTIVE = "optical_alarm_active"
|
|
119
|
-
OPTICAL_ALARM_SELECTION = "optical_alarm_selection"
|
|
120
|
-
OPTIMUM_START_STOP = "optimum_start_stop"
|
|
121
|
-
PARTY_MODE = "party_mode"
|
|
122
|
-
POWER = "power"
|
|
123
|
-
PROGRAM = "program"
|
|
124
|
-
RAMP_TIME_TO_OFF_UNIT = "ramp_time_to_off_unit"
|
|
125
|
-
RAMP_TIME_TO_OFF_VALUE = "ramp_time_to_off_value"
|
|
126
|
-
RAMP_TIME_UNIT = "ramp_time_unit"
|
|
127
|
-
RAMP_TIME_VALUE = "ramp_time_value"
|
|
128
|
-
RSSI_DEVICE = "rssi_device"
|
|
129
|
-
RSSI_PEER = "rssi_peer"
|
|
130
|
-
SABOTAGE = "sabotage"
|
|
131
|
-
SATURATION = "saturation"
|
|
132
|
-
SECTION = "section"
|
|
133
|
-
SETPOINT = "setpoint"
|
|
134
|
-
SET_POINT_MODE = "set_point_mode"
|
|
135
|
-
SMOKE_DETECTOR_ALARM_STATUS = "smoke_detector_alarm_status"
|
|
136
|
-
SMOKE_DETECTOR_COMMAND = "smoke_detector_command"
|
|
137
|
-
STATE = "state"
|
|
138
|
-
STOP = "stop"
|
|
139
|
-
SWITCH_MAIN = "switch_main"
|
|
140
|
-
SWITCH_V1 = "vswitch_1"
|
|
141
|
-
SWITCH_V2 = "vswitch_2"
|
|
142
|
-
TEMPERATURE = "temperature"
|
|
143
|
-
TEMPERATURE_MAXIMUM = "temperature_maximum"
|
|
144
|
-
TEMPERATURE_MINIMUM = "temperature_minimum"
|
|
145
|
-
TEMPERATURE_OFFSET = "temperature_offset"
|
|
146
|
-
VALVE_STATE = "valve_state"
|
|
147
|
-
VOLTAGE = "voltage"
|
|
148
|
-
WEEK_PROGRAM_POINTER = "week_program_pointer"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|