aiohomematic 2026.1.29__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.
Files changed (188) hide show
  1. aiohomematic/__init__.py +110 -0
  2. aiohomematic/_log_context_protocol.py +29 -0
  3. aiohomematic/api.py +410 -0
  4. aiohomematic/async_support.py +250 -0
  5. aiohomematic/backend_detection.py +462 -0
  6. aiohomematic/central/__init__.py +103 -0
  7. aiohomematic/central/async_rpc_server.py +760 -0
  8. aiohomematic/central/central_unit.py +1152 -0
  9. aiohomematic/central/config.py +463 -0
  10. aiohomematic/central/config_builder.py +772 -0
  11. aiohomematic/central/connection_state.py +160 -0
  12. aiohomematic/central/coordinators/__init__.py +38 -0
  13. aiohomematic/central/coordinators/cache.py +414 -0
  14. aiohomematic/central/coordinators/client.py +480 -0
  15. aiohomematic/central/coordinators/connection_recovery.py +1141 -0
  16. aiohomematic/central/coordinators/device.py +1166 -0
  17. aiohomematic/central/coordinators/event.py +514 -0
  18. aiohomematic/central/coordinators/hub.py +532 -0
  19. aiohomematic/central/decorators.py +184 -0
  20. aiohomematic/central/device_registry.py +229 -0
  21. aiohomematic/central/events/__init__.py +104 -0
  22. aiohomematic/central/events/bus.py +1392 -0
  23. aiohomematic/central/events/integration.py +424 -0
  24. aiohomematic/central/events/types.py +194 -0
  25. aiohomematic/central/health.py +762 -0
  26. aiohomematic/central/rpc_server.py +353 -0
  27. aiohomematic/central/scheduler.py +794 -0
  28. aiohomematic/central/state_machine.py +391 -0
  29. aiohomematic/client/__init__.py +203 -0
  30. aiohomematic/client/_rpc_errors.py +187 -0
  31. aiohomematic/client/backends/__init__.py +48 -0
  32. aiohomematic/client/backends/base.py +335 -0
  33. aiohomematic/client/backends/capabilities.py +138 -0
  34. aiohomematic/client/backends/ccu.py +487 -0
  35. aiohomematic/client/backends/factory.py +116 -0
  36. aiohomematic/client/backends/homegear.py +294 -0
  37. aiohomematic/client/backends/json_ccu.py +252 -0
  38. aiohomematic/client/backends/protocol.py +316 -0
  39. aiohomematic/client/ccu.py +1857 -0
  40. aiohomematic/client/circuit_breaker.py +459 -0
  41. aiohomematic/client/config.py +64 -0
  42. aiohomematic/client/handlers/__init__.py +40 -0
  43. aiohomematic/client/handlers/backup.py +157 -0
  44. aiohomematic/client/handlers/base.py +79 -0
  45. aiohomematic/client/handlers/device_ops.py +1085 -0
  46. aiohomematic/client/handlers/firmware.py +144 -0
  47. aiohomematic/client/handlers/link_mgmt.py +199 -0
  48. aiohomematic/client/handlers/metadata.py +436 -0
  49. aiohomematic/client/handlers/programs.py +144 -0
  50. aiohomematic/client/handlers/sysvars.py +100 -0
  51. aiohomematic/client/interface_client.py +1304 -0
  52. aiohomematic/client/json_rpc.py +2068 -0
  53. aiohomematic/client/request_coalescer.py +282 -0
  54. aiohomematic/client/rpc_proxy.py +629 -0
  55. aiohomematic/client/state_machine.py +324 -0
  56. aiohomematic/const.py +2207 -0
  57. aiohomematic/context.py +275 -0
  58. aiohomematic/converter.py +270 -0
  59. aiohomematic/decorators.py +390 -0
  60. aiohomematic/exceptions.py +185 -0
  61. aiohomematic/hmcli.py +997 -0
  62. aiohomematic/i18n.py +193 -0
  63. aiohomematic/interfaces/__init__.py +407 -0
  64. aiohomematic/interfaces/central.py +1067 -0
  65. aiohomematic/interfaces/client.py +1096 -0
  66. aiohomematic/interfaces/coordinators.py +63 -0
  67. aiohomematic/interfaces/model.py +1921 -0
  68. aiohomematic/interfaces/operations.py +217 -0
  69. aiohomematic/logging_context.py +134 -0
  70. aiohomematic/metrics/__init__.py +125 -0
  71. aiohomematic/metrics/_protocols.py +140 -0
  72. aiohomematic/metrics/aggregator.py +534 -0
  73. aiohomematic/metrics/dataclasses.py +489 -0
  74. aiohomematic/metrics/emitter.py +292 -0
  75. aiohomematic/metrics/events.py +183 -0
  76. aiohomematic/metrics/keys.py +300 -0
  77. aiohomematic/metrics/observer.py +563 -0
  78. aiohomematic/metrics/stats.py +172 -0
  79. aiohomematic/model/__init__.py +189 -0
  80. aiohomematic/model/availability.py +65 -0
  81. aiohomematic/model/calculated/__init__.py +89 -0
  82. aiohomematic/model/calculated/climate.py +276 -0
  83. aiohomematic/model/calculated/data_point.py +315 -0
  84. aiohomematic/model/calculated/field.py +147 -0
  85. aiohomematic/model/calculated/operating_voltage_level.py +286 -0
  86. aiohomematic/model/calculated/support.py +232 -0
  87. aiohomematic/model/custom/__init__.py +214 -0
  88. aiohomematic/model/custom/capabilities/__init__.py +67 -0
  89. aiohomematic/model/custom/capabilities/climate.py +41 -0
  90. aiohomematic/model/custom/capabilities/light.py +87 -0
  91. aiohomematic/model/custom/capabilities/lock.py +44 -0
  92. aiohomematic/model/custom/capabilities/siren.py +63 -0
  93. aiohomematic/model/custom/climate.py +1130 -0
  94. aiohomematic/model/custom/cover.py +722 -0
  95. aiohomematic/model/custom/data_point.py +360 -0
  96. aiohomematic/model/custom/definition.py +300 -0
  97. aiohomematic/model/custom/field.py +89 -0
  98. aiohomematic/model/custom/light.py +1174 -0
  99. aiohomematic/model/custom/lock.py +322 -0
  100. aiohomematic/model/custom/mixins.py +445 -0
  101. aiohomematic/model/custom/profile.py +945 -0
  102. aiohomematic/model/custom/registry.py +251 -0
  103. aiohomematic/model/custom/siren.py +462 -0
  104. aiohomematic/model/custom/switch.py +195 -0
  105. aiohomematic/model/custom/text_display.py +289 -0
  106. aiohomematic/model/custom/valve.py +78 -0
  107. aiohomematic/model/data_point.py +1416 -0
  108. aiohomematic/model/device.py +1840 -0
  109. aiohomematic/model/event.py +216 -0
  110. aiohomematic/model/generic/__init__.py +327 -0
  111. aiohomematic/model/generic/action.py +40 -0
  112. aiohomematic/model/generic/action_select.py +62 -0
  113. aiohomematic/model/generic/binary_sensor.py +30 -0
  114. aiohomematic/model/generic/button.py +31 -0
  115. aiohomematic/model/generic/data_point.py +177 -0
  116. aiohomematic/model/generic/dummy.py +150 -0
  117. aiohomematic/model/generic/number.py +76 -0
  118. aiohomematic/model/generic/select.py +56 -0
  119. aiohomematic/model/generic/sensor.py +76 -0
  120. aiohomematic/model/generic/switch.py +54 -0
  121. aiohomematic/model/generic/text.py +33 -0
  122. aiohomematic/model/hub/__init__.py +100 -0
  123. aiohomematic/model/hub/binary_sensor.py +24 -0
  124. aiohomematic/model/hub/button.py +28 -0
  125. aiohomematic/model/hub/connectivity.py +190 -0
  126. aiohomematic/model/hub/data_point.py +342 -0
  127. aiohomematic/model/hub/hub.py +864 -0
  128. aiohomematic/model/hub/inbox.py +135 -0
  129. aiohomematic/model/hub/install_mode.py +393 -0
  130. aiohomematic/model/hub/metrics.py +208 -0
  131. aiohomematic/model/hub/number.py +42 -0
  132. aiohomematic/model/hub/select.py +52 -0
  133. aiohomematic/model/hub/sensor.py +37 -0
  134. aiohomematic/model/hub/switch.py +43 -0
  135. aiohomematic/model/hub/text.py +30 -0
  136. aiohomematic/model/hub/update.py +221 -0
  137. aiohomematic/model/support.py +592 -0
  138. aiohomematic/model/update.py +140 -0
  139. aiohomematic/model/week_profile.py +1827 -0
  140. aiohomematic/property_decorators.py +719 -0
  141. aiohomematic/py.typed +0 -0
  142. aiohomematic/rega_scripts/accept_device_in_inbox.fn +51 -0
  143. aiohomematic/rega_scripts/create_backup_start.fn +28 -0
  144. aiohomematic/rega_scripts/create_backup_status.fn +89 -0
  145. aiohomematic/rega_scripts/fetch_all_device_data.fn +97 -0
  146. aiohomematic/rega_scripts/get_backend_info.fn +25 -0
  147. aiohomematic/rega_scripts/get_inbox_devices.fn +61 -0
  148. aiohomematic/rega_scripts/get_program_descriptions.fn +31 -0
  149. aiohomematic/rega_scripts/get_serial.fn +44 -0
  150. aiohomematic/rega_scripts/get_service_messages.fn +83 -0
  151. aiohomematic/rega_scripts/get_system_update_info.fn +39 -0
  152. aiohomematic/rega_scripts/get_system_variable_descriptions.fn +31 -0
  153. aiohomematic/rega_scripts/set_program_state.fn +17 -0
  154. aiohomematic/rega_scripts/set_system_variable.fn +19 -0
  155. aiohomematic/rega_scripts/trigger_firmware_update.fn +67 -0
  156. aiohomematic/schemas.py +256 -0
  157. aiohomematic/store/__init__.py +55 -0
  158. aiohomematic/store/dynamic/__init__.py +43 -0
  159. aiohomematic/store/dynamic/command.py +250 -0
  160. aiohomematic/store/dynamic/data.py +175 -0
  161. aiohomematic/store/dynamic/details.py +187 -0
  162. aiohomematic/store/dynamic/ping_pong.py +416 -0
  163. aiohomematic/store/persistent/__init__.py +71 -0
  164. aiohomematic/store/persistent/base.py +285 -0
  165. aiohomematic/store/persistent/device.py +233 -0
  166. aiohomematic/store/persistent/incident.py +380 -0
  167. aiohomematic/store/persistent/paramset.py +241 -0
  168. aiohomematic/store/persistent/session.py +556 -0
  169. aiohomematic/store/serialization.py +150 -0
  170. aiohomematic/store/storage.py +689 -0
  171. aiohomematic/store/types.py +526 -0
  172. aiohomematic/store/visibility/__init__.py +40 -0
  173. aiohomematic/store/visibility/parser.py +141 -0
  174. aiohomematic/store/visibility/registry.py +722 -0
  175. aiohomematic/store/visibility/rules.py +307 -0
  176. aiohomematic/strings.json +237 -0
  177. aiohomematic/support.py +706 -0
  178. aiohomematic/tracing.py +236 -0
  179. aiohomematic/translations/de.json +237 -0
  180. aiohomematic/translations/en.json +237 -0
  181. aiohomematic/type_aliases.py +51 -0
  182. aiohomematic/validator.py +128 -0
  183. aiohomematic-2026.1.29.dist-info/METADATA +296 -0
  184. aiohomematic-2026.1.29.dist-info/RECORD +188 -0
  185. aiohomematic-2026.1.29.dist-info/WHEEL +5 -0
  186. aiohomematic-2026.1.29.dist-info/entry_points.txt +2 -0
  187. aiohomematic-2026.1.29.dist-info/licenses/LICENSE +21 -0
  188. aiohomematic-2026.1.29.dist-info/top_level.txt +1 -0
@@ -0,0 +1,236 @@
1
+ # SPDX-License-Identifier: MIT
2
+ # Copyright (c) 2021-2026
3
+ """
4
+ Tracing support with context variable propagation.
5
+
6
+ This module provides tracing spans that automatically propagate through async
7
+ call chains, enabling performance monitoring and distributed tracing.
8
+
9
+ Key features:
10
+ - Span: Represents a unit of work with timing and attributes
11
+ - Automatic parent-child span relationships via context variables
12
+ - Context manager for scoped span creation
13
+
14
+ Example:
15
+ async with span(name="fetch_devices") as s:
16
+ s.set_attribute(key="count", value=len(devices))
17
+ for device in devices:
18
+ async with span(name="process_device") as child:
19
+ child.set_attribute(key="address", value=device.address)
20
+ await process(device)
21
+
22
+ Public API of this module is defined by __all__.
23
+
24
+ """
25
+
26
+ from __future__ import annotations
27
+
28
+ from contextvars import ContextVar, Token
29
+ from dataclasses import dataclass, field
30
+ from datetime import datetime
31
+ from typing import Any
32
+ import uuid
33
+
34
+
35
+ @dataclass(slots=True)
36
+ class Span:
37
+ """
38
+ Tracing span for performance monitoring.
39
+
40
+ Spans can be nested to form a trace tree. Each span tracks:
41
+ - Timing (start, end, duration)
42
+ - Attributes (key-value metadata)
43
+ - Events (timestamped occurrences within the span)
44
+
45
+ Attributes:
46
+ name: Human-readable name for this span.
47
+ trace_id: Unique identifier for the entire trace (shared by all spans).
48
+ span_id: Unique identifier for this specific span.
49
+ parent_span_id: ID of the parent span, or None for root spans.
50
+ started_at: Timestamp when the span started.
51
+ ended_at: Timestamp when the span ended, or None if still active.
52
+ attributes: Key-value metadata for this span.
53
+ events: List of (timestamp, name, attributes) events within this span.
54
+
55
+ """
56
+
57
+ name: str
58
+ trace_id: str
59
+ span_id: str
60
+ parent_span_id: str | None
61
+ started_at: datetime = field(default_factory=datetime.now)
62
+ ended_at: datetime | None = None
63
+ attributes: dict[str, Any] = field(default_factory=dict)
64
+ events: list[tuple[datetime, str, dict[str, Any]]] = field(default_factory=list)
65
+
66
+ @property
67
+ def duration_ms(self) -> float | None:
68
+ """
69
+ Return span duration in milliseconds.
70
+
71
+ Returns:
72
+ Duration in milliseconds, or None if span hasn't ended.
73
+
74
+ """
75
+ if self.ended_at is None:
76
+ return None
77
+ return (self.ended_at - self.started_at).total_seconds() * 1000
78
+
79
+ @property
80
+ def is_root(self) -> bool:
81
+ """Return True if this is a root span (no parent)."""
82
+ return self.parent_span_id is None
83
+
84
+ def add_event(self, *, name: str, **attributes: Any) -> None:
85
+ """
86
+ Add an event to this span.
87
+
88
+ Events are timestamped occurrences within a span, useful for
89
+ marking significant points during execution.
90
+
91
+ Args:
92
+ name: Name of the event.
93
+ **attributes: Key-value attributes for the event.
94
+
95
+ """
96
+ self.events.append((datetime.now(), name, attributes))
97
+
98
+ def end(self) -> None:
99
+ """Mark span as ended with current timestamp."""
100
+ self.ended_at = datetime.now()
101
+
102
+ def set_attribute(self, *, key: str, value: Any) -> None:
103
+ """
104
+ Set a span attribute.
105
+
106
+ Args:
107
+ key: Attribute key.
108
+ value: Attribute value.
109
+
110
+ """
111
+ self.attributes[key] = value
112
+
113
+
114
+ # Context variable for current span
115
+ _current_span: ContextVar[Span | None] = ContextVar("current_span", default=None)
116
+
117
+
118
+ def get_current_span() -> Span | None:
119
+ """
120
+ Get the current active span.
121
+
122
+ Returns:
123
+ The current Span, or None if no span is active.
124
+
125
+ """
126
+ return _current_span.get()
127
+
128
+
129
+ def get_current_trace_id() -> str | None:
130
+ """
131
+ Get the current trace ID.
132
+
133
+ Returns:
134
+ The current trace ID, or None if no span is active.
135
+
136
+ """
137
+ current = _current_span.get()
138
+ return current.trace_id if current else None
139
+
140
+
141
+ class span: # noqa: N801
142
+ """
143
+ Context manager for tracing spans.
144
+
145
+ Creates a span that is automatically linked to any parent span in
146
+ the current context. The span is ended when the context manager exits.
147
+
148
+ Example:
149
+ async with span(name="fetch_devices") as s:
150
+ s.set_attribute(key="count", value=len(devices))
151
+ for device in devices:
152
+ async with span(name="process_device") as child:
153
+ child.set_attribute(key="address", value=device.address)
154
+ await process(device)
155
+
156
+ """
157
+
158
+ __slots__ = ("_span", "_token")
159
+
160
+ def __init__(self, *, name: str, **attributes: Any) -> None:
161
+ """
162
+ Initialize a new span.
163
+
164
+ Args:
165
+ name: Human-readable name for this span.
166
+ **attributes: Initial attributes for the span.
167
+
168
+ """
169
+ parent = _current_span.get()
170
+
171
+ self._span = Span(
172
+ name=name,
173
+ trace_id=parent.trace_id if parent else str(uuid.uuid4()),
174
+ span_id=str(uuid.uuid4())[:8],
175
+ parent_span_id=parent.span_id if parent else None,
176
+ attributes=dict(attributes),
177
+ )
178
+ self._token: Token[Span | None] | None = None
179
+
180
+ async def __aenter__(self) -> Span:
181
+ """Async enter - delegates to sync enter."""
182
+ return self.__enter__()
183
+
184
+ async def __aexit__(self, *args: object) -> None:
185
+ """Async exit - delegates to sync exit."""
186
+ self.__exit__()
187
+
188
+ def __enter__(self) -> Span:
189
+ """Enter context and set the current span."""
190
+ self._token = _current_span.set(self._span)
191
+ return self._span
192
+
193
+ def __exit__(self, *args: object) -> None:
194
+ """Exit context, end span, and reset current span."""
195
+ self._span.end()
196
+ if self._token is not None:
197
+ _current_span.reset(self._token)
198
+
199
+
200
+ def set_current_span(*, s: Span) -> Token[Span | None]:
201
+ """
202
+ Manually set the current span.
203
+
204
+ Returns a token that must be used with reset_current_span().
205
+ Prefer using the span context manager instead.
206
+
207
+ Args:
208
+ s: The Span to set as current.
209
+
210
+ Returns:
211
+ Token for resetting the span.
212
+
213
+ """
214
+ return _current_span.set(s)
215
+
216
+
217
+ def reset_current_span(*, token: Token[Span | None]) -> None:
218
+ """
219
+ Reset the current span using a token from set_current_span().
220
+
221
+ Args:
222
+ token: Token returned from set_current_span().
223
+
224
+ """
225
+ _current_span.reset(token)
226
+
227
+
228
+ # Define public API for this module
229
+ __all__ = [
230
+ "Span",
231
+ "get_current_span",
232
+ "get_current_trace_id",
233
+ "reset_current_span",
234
+ "set_current_span",
235
+ "span",
236
+ ]
@@ -0,0 +1,237 @@
1
+ {
2
+ "exception.central.create_devices.no_clients": "CREATE_DEVICES fehlgeschlagen: Keine Clients initialisiert. Zentrale {name} wird nicht gestartet.",
3
+ "exception.central.decorators.backend_system_handler.args_exception": "args-exception backend_system_callback [{reason}]",
4
+ "exception.central.decorators.backend_system_handler.identify_central_failed": "EXEC_BACKEND_SYSTEM_CALLBACK fehlgeschlagen: Problem beim Ermitteln der Zentrale: {reason}",
5
+ "exception.central.decorators.event_handler.args_exception": "args-exception event_callback [{reason}]",
6
+ "exception.central.get_client.interface_missing": "GET_CLIENT fehlgeschlagen: Kein Client für {interface_id} in Zentrale {name}",
7
+ "exception.central.get_client.interface_type_missing": "GET_CLIENT fehlgeschlagen: Kein Client für Interface {interface} in Zentrale {name}",
8
+ "exception.central.get_client.no_parameter": "GET_CLIENT fehlgeschlagen: interface_id oder interface muss angegeben werden für Zentrale {name}",
9
+ "exception.central.rpc_server.invalid_xml": "Ungültiges XML: {error}",
10
+ "exception.central.rpc_server.parse_error": "Parsefehler: {error}",
11
+ "exception.central.start.failed": "Start der Zentrale {name} fehlgeschlagen: {reason}",
12
+ "exception.central.validate_config.no_clients": "VALIDATE_CONFIG: Keine Clients definiert.",
13
+ "exception.client.add_link.failed": "ADD_LINK fehlgeschlagen für {sender}/{receiver}/{name}/{description}: {reason}",
14
+ "exception.client.client_config.no_connection": "Keine Verbindung zu {interface_id}",
15
+ "exception.client.client_config.unable_to_connect": "Verbindung nicht möglich {reason}",
16
+ "exception.client.get_all_device_data.failed": "GET_ALL_DEVICE_DATA fehlgeschlagen: Gerätedaten für Schnittstelle {interface} konnten nicht abgerufen werden",
17
+ "exception.client.get_install_mode.failed": "GET_INSTALL_MODE fehlgeschlagen für {interface_id}: {reason}",
18
+ "exception.client.get_link_peers.failed": "GET_LINK_PEERS fehlgeschlagen für {address}: {reason}",
19
+ "exception.client.get_links.failed": "GET_LINKS fehlgeschlagen für {address}: {reason}",
20
+ "exception.client.get_metadata.failed": "GET_METADATA fehlgeschlagen für {address}/{data_id}: {reason}",
21
+ "exception.client.get_paramset.failed": "GET_PARAMSET fehlgeschlagen für {address}/{paramset_key}: {reason}",
22
+ "exception.client.get_value.failed": "GET_VALUE fehlgeschlagen für {channel_address}/{parameter}/{paramset_key}: {reason}",
23
+ "exception.client.interface_config.port_required": "VALIDATE Schnittstellenkonfiguration fehlgeschlagen: Port muss für Schnittstelle {interface} definiert sein",
24
+ "exception.client.json_ccu.get_paramset.failed": "GET_PARAMSET fehlgeschlagen für {address}/{paramset_key}: {reason}",
25
+ "exception.client.json_ccu.get_value.failed": "GET_VALUE fehlgeschlagen für: {channel_address}/{parameter}/{paramset_key}: {reason}",
26
+ "exception.client.json_ccu.set_value.unknown_type": "SET_VALUE fehlgeschlagen: Parametertyp {channel_address}/{paramset_key}/{parameter} konnte nicht ermittelt werden",
27
+ "exception.client.json_post.connector_certificate_error": "Zertifikatfehler des Connectors: {reason}",
28
+ "exception.client.json_post.connector_error": "Connector-Fehler: {reason}",
29
+ "exception.client.json_post.http_status": "HTTP-Status: {status}",
30
+ "exception.client.json_post.login_failed": "Fehler beim Anmelden",
31
+ "exception.client.json_post.method_unsupported": "POST: Methode '{method} wird vom Backend nicht unterstützt.",
32
+ "exception.client.json_post.no_credentials": "Keine Zugangsdaten gesetzt",
33
+ "exception.client.json_post.no_response": "POST-Methode ohne Antwort fehlgeschlagen",
34
+ "exception.client.json_post.no_session": "ClientSession nicht initialisiert",
35
+ "exception.client.json_rpc.circuit_open": "Circuit Breaker ist offen für {url} - Anfragen werden vorübergehend blockiert",
36
+ "exception.client.parameter.not_found": "Parameter {parameter} wurde nicht gefunden: {interface_id}/{channel_address}/{paramset_key}",
37
+ "exception.client.parameter.operation_unsupported": "Parameter {parameter} unterstützt die angeforderte Operation {operation} nicht",
38
+ "exception.client.parameter.value_above_max": "Wert {value} für Parameter {parameter} überschreitet Maximum {max_value}",
39
+ "exception.client.parameter.value_below_min": "Wert {value} für Parameter {parameter} liegt unter Minimum {min_value}",
40
+ "exception.client.paramset_key.invalid": "Parameter paramset_key ist weder ein gültiger ParamsetKey noch eine Kanaladresse.",
41
+ "exception.client.put_paramset.failed": "PUT_PARAMSET fehlgeschlagen für {channel_address}/{paramset_key}/{values}: {reason}",
42
+ "exception.client.remove_link.failed": "REMOVE_LINK fehlgeschlagen für {sender}/{receiver}: {reason}",
43
+ "exception.client.report_value_usage.failed": "REPORT_VALUE_USAGE fehlgeschlagen: {address}/{value_id}/{ref_counter}: {reason}",
44
+ "exception.client.rx_mode.unsupported": "Nicht unterstützter rx_mode: {rx_mode}",
45
+ "exception.client.script.missing": "Skriptdatei für {script} existiert nicht",
46
+ "exception.client.set_install_mode.failed": "SET_INSTALL_MODE fehlgeschlagen für {interface_id}: {reason}",
47
+ "exception.client.set_metadata.failed": "SET_METADATA fehlgeschlagen für {address}/{data_id}/{value}: {reason}",
48
+ "exception.client.set_value.failed": "SET_VALUE fehlgeschlagen für {channel_address}/{parameter}={value}: {reason}",
49
+ "exception.client.update_device_firmware.failed": "UPDATE_DEVICE_FIRMWARE fehlgeschlagen: {reason}",
50
+ "exception.client.xmlrpc.circuit_open": "Circuit Breaker ist offen für {interface_id} - Anfragen vorübergehend blockiert",
51
+ "exception.client.xmlrpc.http_connection_state_error": "HTTP-Verbindungszustandsfehler auf {interface_id}: {reason}",
52
+ "exception.client.xmlrpc.method_unsupported": "XmlRPC.__ASYNC_REQUEST: Methode '{method} wird vom Backend nicht unterstützt.",
53
+ "exception.client.xmlrpc.no_connection": "Keine Verbindung zu {interface_id}",
54
+ "exception.client.xmlrpc.no_connection_with_reason": "Keine Verbindung zu {context}: {reason}",
55
+ "exception.client.xmlrpc.null_proxy_unsupported": "XML-RPC wird auf {interface_id} nicht unterstützt - verwende JSON-RPC-Methoden stattdessen",
56
+ "exception.client.xmlrpc.os_error": "OSError auf {interface_id}: {reason}",
57
+ "exception.client.xmlrpc.ssl_error": "SSLError auf {interface_id}: {reason}",
58
+ "exception.config.check.callback_host.invalid": "Ungültiger Callback-Hostname oder IPv4-Adresse",
59
+ "exception.config.check.callback_port_xml_rpc.invalid": "Ungültiger XML-RPC-Callback-Port",
60
+ "exception.config.check.host.invalid": "Ungültiger Hostname oder IPv4-Adresse",
61
+ "exception.config.check.instance_name.separator": "Instanzname darf {sep} nicht enthalten",
62
+ "exception.config.check.json_port.invalid": "Ungültiger JSON-Port",
63
+ "exception.config.check.password.invalid": "Passwort ist nicht gültig",
64
+ "exception.config.check.password.required": "Passwort ist erforderlich",
65
+ "exception.config.check.primary_interface.missing": "Keine primäre Schnittstelle ({interfaces}) definiert",
66
+ "exception.config.check.username.empty": "Benutzername darf nicht leer sein",
67
+ "exception.config.invalid": "Ungültige Konfiguration: {failures}",
68
+ "exception.create_central.failed": "Zentrale konnte nicht erstellt werden: {reason}",
69
+ "exception.model.action_select.value_not_in_value_list": "ACTION_SELECT {name} (unique_id={unique_id}): Wert nicht in Werteliste",
70
+ "exception.model.custom.climate.set_temperature.invalid": "SET_TEMPERATURE fehlgeschlagen: Ungültige Temperatur: {temperature} (min: {min}, max: {max})",
71
+ "exception.model.custom.definition.create_custom_data_point.failed": "_CREATE_CUSTOM_DATA_POINT: benutzerdefinierter Datenpunkt konnte nicht erstellt werden: {reason}",
72
+ "exception.model.custom.light.invalid_brightness": "Ungültige Helligkeit für Datenpunkt {full_name}: {value}. Muss 0.0-1.0 sein.",
73
+ "exception.model.custom.light.invalid_color": "Ungültige Farbe für Datenpunkt {full_name}: {value}",
74
+ "exception.model.custom.light.invalid_duration_unit": "Ungültige Dauereinheit für Datenpunkt {full_name}: {value}",
75
+ "exception.model.custom.light.invalid_on_time": "Ungültige Einschaltzeit für Datenpunkt {full_name}: {value}",
76
+ "exception.model.custom.light.invalid_repetitions": "Ungültige Wiederholungen für Datenpunkt {full_name}: {value}",
77
+ "exception.model.custom.siren.invalid_duration_unit": "Ungültige Dauereinheit für Datenpunkt {full_name}: {value}",
78
+ "exception.model.custom.siren.invalid_light": "Ungültiges Licht für Datenpunkt {full_name}: {value}",
79
+ "exception.model.custom.siren.invalid_repetitions": "Ungültige Wiederholungen für Datenpunkt {full_name}: {value}",
80
+ "exception.model.custom.siren.invalid_soundfile": "Ungültige Sounddatei für Datenpunkt {full_name}: {value}",
81
+ "exception.model.custom.siren.invalid_soundfile_index": "Sounddatei-Index muss 1-189 sein, erhalten {index}",
82
+ "exception.model.custom.siren.invalid_tone": "Ungültiger Ton für Datenpunkt {full_name}: {value}",
83
+ "exception.model.custom.siren.invalid_volume": "Ungültige Lautstärke für Datenpunkt {full_name}: {value}. Muss 0.0-1.0 sein.",
84
+ "exception.model.custom.text_display.invalid_alignment": "Ungültige Ausrichtung für Datenpunkt {full_name}: {value}",
85
+ "exception.model.custom.text_display.invalid_background_color": "Ungültige Hintergrundfarbe für Datenpunkt {full_name}: {value}",
86
+ "exception.model.custom.text_display.invalid_display_id": "Ungültige Display-ID für Datenpunkt {full_name}: {value}. Muss 1-5 sein.",
87
+ "exception.model.custom.text_display.invalid_icon": "Ungültiges Symbol für Datenpunkt {full_name}: {value}",
88
+ "exception.model.custom.text_display.invalid_interval": "Ungültiges Intervall für Datenpunkt {full_name}: {value}. Muss 1-15 sein.",
89
+ "exception.model.custom.text_display.invalid_repeat": "Ungültige Wiederholungsanzahl für Datenpunkt {full_name}: {value}. Muss 0-15 sein.",
90
+ "exception.model.custom.text_display.invalid_sound": "Ungültiger Ton für Datenpunkt {full_name}: {value}",
91
+ "exception.model.custom.text_display.invalid_text_color": "Ungültige Textfarbe für Datenpunkt {full_name}: {value}",
92
+ "exception.model.data_point.subscribe_handler.already_registered": "REGISTER_DATA_POINT_UPDATED_CALLBACK fehlgeschlagen: hm_data_point: {full_name} ist bereits registriert von {custom_id}",
93
+ "exception.model.device.export_device_definition.failed": "EXPORT_DEVICE_DEFINITION fehlgeschlagen: {reason}",
94
+ "exception.model.event.create_event.failed": "CREATE_EVENT_AND_APPEND_TO_CHANNEL: Ereignis konnte nicht erstellt werden: {reason}",
95
+ "exception.model.generic.create_data_point.failed": "CREATE_DATA_POINT_AND_APPEND_TO_CHANNEL: Datenpunkt konnte nicht erstellt werden: {reason}",
96
+ "exception.model.hub.number.invalid_value": "SYSVAR.NUMBER fehlgeschlagen: Ungültiger Wert: {value} (min: {min}, max: {max})",
97
+ "exception.model.number.invalid_value": "NUMBER fehlgeschlagen: Ungültiger Wert: {value} (min: {min}, max: {max}, special:{special})",
98
+ "exception.model.select.value_not_in_value_list": "Wert nicht in value_list für {name}/{unique_id}",
99
+ "exception.model.week_profile.copy_schedule.profile_count_mismatch": "Kopieren des Zeitplans nicht möglich: Anzahl der Profil-Zeitpläne muss identisch sein",
100
+ "exception.model.week_profile.copy_schedule.same_device_invalid": "Kopieren des Zeitplans auf demselben Gerät nur mit definierten und unterschiedlichen Quell-/Zielprofilen möglich",
101
+ "exception.model.week_profile.schedule.unsupported": "Zeitplan wird vom Gerät {name} nicht unterstützt",
102
+ "exception.model.week_profile.source_profile.not_loaded": "Quellprofil {source_profile} konnte nicht geladen werden.",
103
+ "exception.model.week_profile.validate.base_temperature_out_of_range": "VALIDATE_PROFILE: Basistemperatur {base_temperature} liegt nicht im gültigen Bereich (min: {min}, max: {max})",
104
+ "exception.model.week_profile.validate.endtime_missing": "VALIDATE_PROFILE: ENDTIME fehlt.",
105
+ "exception.model.week_profile.validate.overlap": "VALIDATE_PROFILE: Zeitspannen überschneiden sich mit einem vorherigen Slot: Start {start} / Ende {end}",
106
+ "exception.model.week_profile.validate.profile_name_invalid": "Kein gültiger Profilname: {profile_name}",
107
+ "exception.model.week_profile.validate.sequence_rising": "VALIDATE_PROFILE: Zeitfolge muss aufsteigend sein. {time} ist kleiner als der vorherige Wert {previous} für Profil: {profile} / Wochentag: {weekday} / Slot-Nr.: {no}",
108
+ "exception.model.week_profile.validate.slot_missing": "VALIDATE_PROFILE: Slot-Nr. {no} fehlt im Profil: {profile} / Wochentag: {weekday}",
109
+ "exception.model.week_profile.validate.slot_type_missing": "VALIDATE_PROFILE: Slot-Typ {slot_type} fehlt im Profil: {profile} / Wochentag: {weekday} / Slot-Nr.: {no}",
110
+ "exception.model.week_profile.validate.start_before_end": "VALIDATE_PROFILE: Startzeit {start} muss kleiner als Endzeit {end} sein",
111
+ "exception.model.week_profile.validate.starttime_missing": "VALIDATE_PROFILE: STARTTIME fehlt.",
112
+ "exception.model.week_profile.validate.temperature_missing": "VALIDATE_PROFILE: TEMPERATURE fehlt.",
113
+ "exception.model.week_profile.validate.temperature_out_of_range_for_profile_slot": "VALIDATE_PROFILE: Temperatur {temperature} liegt nicht im gültigen Bereich (min: {min}, max: {max}) für Profil: {profile} / Wochentag: {weekday} / Slot-Nr.: {no}",
114
+ "exception.model.week_profile.validate.temperature_out_of_range_for_times": "VALIDATE_PROFILE: Temperatur {temperature} liegt nicht im gültigen Bereich (min: {min}, max: {max}) für Startzeit: {start} / Endzeit: {end}",
115
+ "exception.model.week_profile.validate.time_convert_failed": "Zeit {time} konnte nicht konvertiert werden. Format muss hh:mm sein.",
116
+ "exception.model.week_profile.validate.time_invalid_format": "Zeit {time} ist ungültig. Format muss hh:mm sein mit min: {min} und max: {max}",
117
+ "exception.model.week_profile.validate.time_out_of_bounds_profile_slot": "VALIDATE_PROFILE: Zeit {time} muss zwischen {min_time} und {max_time} liegen für Profil: {profile} / Wochentag: {weekday} / Slot-Nr.: {no}",
118
+ "exception.model.week_profile.validate.too_few_slots": "VALIDATE_PROFILE: Zu wenige Slots im Profil: {profile} / Wochentag: {weekday}",
119
+ "exception.model.week_profile.validate.too_many_slots": "VALIDATE_PROFILE: Zu viele Slots im Profil: {profile} / Wochentag: {weekday}",
120
+ "exception.startup.validation_failed": "AioHomematic-Startvalidierung fehlgeschlagen: {reason}",
121
+ "exception.store.device_description.not_found": "Beschreibung für {address} auf Schnittstelle {interface_id} nicht gefunden",
122
+ "exception.store.session_recorder.ttl_positive": "default_ttl_seconds muss positiv sein",
123
+ "exception.support.boolean.invalid_type": "Ungültiger Boolescher Wert. Keine Zeichenkette.",
124
+ "exception.support.check_or_create_directory.failed": "Verzeichnis {directory} konnte nicht erstellt werden: {reason}",
125
+ "exception.support.get_local_ip.resolve_failed": "Host kann nicht aufgelöst werden für {host}:{port}: {reason}",
126
+ "exception.support.host_empty": "Host darf nicht leer sein",
127
+ "exception.support.host_invalid": "Ungültiges Host-Format: {host}. Muss ein gültiger Hostname oder eine IP-Adresse sein",
128
+ "exception.validator.categories.not_exhaustive": "BLOCKED_CATEGORIES/CATEGORIES/HUB_CATEGORIES sind nicht vollständig. Fehlende Kategorien: {missing}",
129
+ "exception.validator.channel_address.invalid": "CHANNEL_ADDRESS ist ungültig",
130
+ "exception.validator.custom_definition.invalid": "Schema für benutzerdefinierte Datenpunkdefinition ist ungültig",
131
+ "exception.validator.device_address.invalid": "DEVICE_ADDRESS ist ungültig",
132
+ "exception.validator.hostname.invalid": "Hostname ist ungültig",
133
+ "exception.validator.ipv4_address.invalid": "IPv4_address ist ungültig",
134
+ "exception.validator.paramset_key.invalid": "PARAMSET_KEY ist ungültig",
135
+ "exception.validator.password.invalid": "Password ist ungültig",
136
+ "exception.validator.undefined_in_lists": "DataPointCategory.UNDEFINED darf nicht in BLOCKED_CATEGORIES/CATEGORIES/HUB_CATEGORIES enthalten sein",
137
+ "issue.fetch_data_failed": "Abrufen von Gerätedaten von Interface {interface_id} fehlgeschlagen",
138
+ "issue.ping_pong_mismatch": "Ping-Pong-Diskrepanz auf {interface_id} erkannt ({mismatch_type}: {mismatch_count} Abweichungen)",
139
+ "log.backend_detection.detect_backend.backend_type": "DETECT_BACKEND: Erkannter Backend-Typ: {backend}",
140
+ "log.backend_detection.detect_backend.found_interfaces": "DETECT_BACKEND: Interfaces via JSON-RPC gefunden: {interfaces}",
141
+ "log.backend_detection.detect_backend.found_version": "DETECT_BACKEND: Version '{version}' auf Port {port} gefunden",
142
+ "log.backend_detection.detect_backend.json_rpc_fallback": "DETECT_BACKEND: JSON-RPC-Abfrage fehlgeschlagen, verwende erkanntes Interface",
143
+ "log.backend_detection.detect_backend.no_backend_found": "DETECT_BACKEND: Kein Backend auf Host {host} gefunden",
144
+ "log.backend_detection.detect_backend.probing": "DETECT_BACKEND: Teste {host}:{port} (TLS={tls}, Interface={interface})",
145
+ "log.backend_detection.detect_backend.starting": "DETECT_BACKEND: Starte Erkennung für Host {host} (Timeout={total_timeout}s)",
146
+ "log.backend_detection.detect_backend.total_timeout": "DETECT_BACKEND: Erkennung nach {total_timeout}s abgebrochen für Host {host}",
147
+ "log.backend_detection.json_rpc.auth_failed": "DETECT_BACKEND: Authentifizierung fehlgeschlagen bei {url}",
148
+ "log.backend_detection.json_rpc.connection_failed": "DETECT_BACKEND: Verbindung fehlgeschlagen bei {url}",
149
+ "log.backend_detection.json_rpc.interface_not_present": "DETECT_BACKEND: Interface '{interface}' ist installiert aber nicht gestartet - wird übersprungen",
150
+ "log.backend_detection.json_rpc.interface_present": "DETECT_BACKEND: Interface '{interface}' ist verfügbar und läuft",
151
+ "log.backend_detection.json_rpc.is_present_failed": "DETECT_BACKEND: Prüfung ob Interface '{interface}' verfügbar ist fehlgeschlagen: {reason}",
152
+ "log.backend_detection.json_rpc.query_failed": "DETECT_BACKEND: JSON-RPC-Abfrage fehlgeschlagen bei {url} - {exc_type}: {reason}",
153
+ "log.backend_detection.json_rpc.querying": "DETECT_BACKEND: JSON-RPC-Abfrage an {url}",
154
+ "log.backend_detection.json_rpc.unknown_interface": "DETECT_BACKEND: Unbekanntes Interface '{interface}', wird übersprungen",
155
+ "log.backend_detection.xml_rpc.probe_error": "DETECT_BACKEND: XML-RPC-Testfehler für {host}:{port} - {exc_type}: {reason}",
156
+ "log.backend_detection.xml_rpc.probe_failed": "DETECT_BACKEND: XML-RPC-Test fehlgeschlagen für {host}:{port} - {exc_type}: {reason}",
157
+ "log.backend_detection.xml_rpc.probe_timeout": "DETECT_BACKEND: XML-RPC-Test Zeitüberschreitung für {host}:{port}",
158
+ "log.central.accept_device_in_inbox.no_client": "ACCEPT_DEVICE_IN_INBOX fehlgeschlagen: Kein primärer Client verfügbar für {device_address} auf {name}",
159
+ "log.central.create_client.no_connection": "CREATE_CLIENT fehlgeschlagen: Keine Verbindung zur Schnittstelle {interface_id} [{reason}]",
160
+ "log.central.create_clients.already_created": "CREATE_CLIENTS: Clients für {name} sind bereits erstellt",
161
+ "log.central.create_clients.created_count_failed": "CREATE_CLIENTS fehlgeschlagen: {created} von {total} Clients erstellt",
162
+ "log.central.create_clients.interface_not_available": "CREATE_CLIENTS fehlgeschlagen: Schnittstelle: {interface} ist für das Backend {name} nicht verfügbar",
163
+ "log.central.create_clients.no_interfaces": "CREATE_CLIENTS fehlgeschlagen: Keine Schnittstellen für {name} definiert",
164
+ "log.central.create_clients.no_primary_identified": "CREATE_CLIENTS fehlgeschlagen: Kein primärer Client für {name} identifiziert",
165
+ "log.central.rename_device.not_found": "RENAME_DEVICE fehlgeschlagen: Gerät {device_address} nicht gefunden auf {name}",
166
+ "log.central.restart_clients.restarted": "RESTART_CLIENTS: Zentrale {name} hat Clients neu gestartet",
167
+ "log.central.rpc_server.background_task_failed": "Hintergrundaufgabe {task_name} fehlgeschlagen: {error}",
168
+ "log.central.rpc_server.error": "ERROR fehlgeschlagen: interface_id = {interface_id}, error_code = {error_code}, message = {msg}",
169
+ "log.central.rpc_server.method_failed": "XML-RPC-Methode {method_name} fehlgeschlagen",
170
+ "log.central.rpc_server.protocol_error": "XML-RPC-Protokollfehler: {error}",
171
+ "log.central.rpc_server.unexpected_error": "Unerwarteter Fehler bei der Verarbeitung der XML-RPC-Anfrage",
172
+ "log.central.scheduler.check_connection.attempting_reconnect": "CHECK_CONNECTION: RPC stabil für {name} - versuche vollständige Wiederverbindung",
173
+ "log.central.scheduler.check_connection.connection_loss_detected": "CHECK_CONNECTION: Verbindungsverlust für {name} erkannt - starte stufenweise Wiederverbindung",
174
+ "log.central.scheduler.check_connection.failed": "CHECK_CONNECTION fehlgeschlagen: {exc_type} [{reason}]",
175
+ "log.central.scheduler.check_connection.no_clients": "CHECK_CONNECTION fehlgeschlagen: Es existieren keine Clients. Versuche, Clients für Server {name} zu erstellen",
176
+ "log.central.scheduler.check_connection.no_connection": "CHECK_CONNECTION fehlgeschlagen: keine Verbindung: {reason}",
177
+ "log.central.scheduler.check_connection.reconnect_failed": "CHECK_CONNECTION: Wiederverbindung für {name} fehlgeschlagen - wird erneut versucht",
178
+ "log.central.scheduler.check_connection.reconnect_success": "CHECK_CONNECTION: Wiederverbindung für {name} erfolgreich - Interfaces: {interfaces}",
179
+ "log.central.scheduler.check_connection.rpc_check_passed": "CHECK_CONNECTION: Erste RPC-Prüfung erfolgreich für {name} - starte Warmup",
180
+ "log.central.scheduler.check_connection.rpc_stable": "CHECK_CONNECTION: Zweite RPC-Prüfung erfolgreich für {name} - Dienste stabil",
181
+ "log.central.scheduler.check_connection.rpc_unstable": "CHECK_CONNECTION: RPC wurde während Warmup instabil für {name} - wiederhole",
182
+ "log.central.scheduler.check_connection.tcp_check_timeout": "CHECK_CONNECTION: TCP-Port-Prüfung Timeout ({timeout}s) für {name} - starte Prüfung neu",
183
+ "log.central.scheduler.check_connection.tcp_port_available": "CHECK_CONNECTION: TCP-Port {host}:{port} für {name} verfügbar",
184
+ "log.central.set_system_variable.not_found": "SET_SYSTEM_VARIABLE fehlgeschlagen: Variable {legacy_name} nicht gefunden auf {name}",
185
+ "log.central.validate_config_and_get_system_information.client_failed": "VALIDATE_CONFIG_AND_GET_SYSTEM_INFORMATION fehlgeschlagen für Client {interface}: {reason}",
186
+ "log.client.circuit_breaker.state_transition": "CIRCUIT_BREAKER: {old_state} → {new_state} für {interface_id} (Fehler={failure_count}, Erfolge={success_count})",
187
+ "log.client.create_backup_and_download.completed": "CREATE_BACKUP_AND_DOWNLOAD: Backup abgeschlossen: {filename} ({size} Bytes)",
188
+ "log.client.create_backup_and_download.failed": "CREATE_BACKUP_AND_DOWNLOAD: Backup-Erstellung fehlgeschlagen",
189
+ "log.client.create_backup_and_download.idle": "CREATE_BACKUP_AND_DOWNLOAD: Unerwarteter Idle-Status während Backup",
190
+ "log.client.create_backup_and_download.running": "CREATE_BACKUP_AND_DOWNLOAD: Backup läuft noch ({elapsed:.1f}s vergangen)",
191
+ "log.client.create_backup_and_download.timeout": "CREATE_BACKUP_AND_DOWNLOAD: Backup-Timeout nach {max_wait_time:.1f}s",
192
+ "log.client.is_callback_alive.no_events": "IS_CALLBACK_ALIVE: Callback für {interface_id} hat seit {seconds}s keine Ereignisse erhalten",
193
+ "log.client.json_rpc.accept_device_in_inbox.failed": "ACCEPT_DEVICE_IN_INBOX für {device_address} fehlgeschlagen: JSON konnte nicht dekodiert werden: {reason}",
194
+ "log.client.json_rpc.create_backup_start.failed": "CREATE_BACKUP_START fehlgeschlagen: JSON konnte nicht dekodiert werden: {reason}",
195
+ "log.client.json_rpc.create_backup_status.failed": "CREATE_BACKUP_STATUS fehlgeschlagen: JSON konnte nicht dekodiert werden: {reason}",
196
+ "log.client.json_rpc.do_login.max_attempts_reached": "DO_LOGIN fehlgeschlagen: Maximale Anzahl fehlgeschlagener Anmeldeversuche ({max_attempts}) erreicht. Bitte Zugangsdaten überprüfen.",
197
+ "log.client.json_rpc.do_login.no_credentials": "DO_LOGIN fehlgeschlagen: Keine Zugangsdaten gesetzt",
198
+ "log.client.json_rpc.do_login.rate_limited": "DO_LOGIN: Ratenlimitiert nach {attempts} fehlgeschlagenen Versuchen. Warte {wait_time:.1f} Sekunden.",
199
+ "log.client.json_rpc.download_backup.error": "DOWNLOAD_BACKUP fehlgeschlagen: {reason}",
200
+ "log.client.json_rpc.download_backup.failed": "DOWNLOAD_BACKUP fehlgeschlagen: HTTP-Status {status}",
201
+ "log.client.json_rpc.download_backup.no_session": "DOWNLOAD_BACKUP fehlgeschlagen: Keine Session-ID verfügbar",
202
+ "log.client.json_rpc.download_firmware.error": "DOWNLOAD_FIRMWARE fehlgeschlagen: {reason}",
203
+ "log.client.json_rpc.download_firmware.failed": "DOWNLOAD_FIRMWARE fehlgeschlagen: HTTP-Status {status}",
204
+ "log.client.json_rpc.download_firmware.no_session": "DOWNLOAD_FIRMWARE fehlgeschlagen: Keine Session-ID verfügbar",
205
+ "log.client.json_rpc.get_all_system_variables.parse_failed": "GET_ALL_SYSTEM_VARIABLES fehlgeschlagen: {exc_type} [{reason}] SysVar {legacy_name} konnte nicht geparst werden",
206
+ "log.client.json_rpc.get_backend_info.failed": "GET_BACKEND_INFO fehlgeschlagen: JSON konnte nicht dekodiert werden: {reason}",
207
+ "log.client.json_rpc.get_inbox_devices.decode_failed": "GET_INBOX_DEVICES fehlgeschlagen: JSON konnte nicht dekodiert werden: {reason}",
208
+ "log.client.json_rpc.get_program_descriptions.decode_failed": "GET_PROGRAM_DESCRIPTIONS fehlgeschlagen: JSON konnte nicht dekodiert werden: {reason}",
209
+ "log.client.json_rpc.get_service_messages.decode_failed": "GET_SERVICE_MESSAGES fehlgeschlagen: JSON konnte nicht dekodiert werden: {reason}",
210
+ "log.client.json_rpc.get_system_update_info.decode_failed": "GET_SYSTEM_UPDATE_INFO fehlgeschlagen: JSON konnte nicht dekodiert werden: {reason}",
211
+ "log.client.json_rpc.get_system_variable_descriptions.decode_failed": "GET_SYSTEM_VARIABLE_DESCRIPTIONS fehlgeschlagen: JSON konnte nicht dekodiert werden: {reason}",
212
+ "log.client.json_rpc.rename_channel.failed": "RENAME_CHANNEL für {channel_address} fehlgeschlagen: JSON konnte nicht dekodiert werden: {reason}",
213
+ "log.client.json_rpc.rename_device.failed": "RENAME_DEVICE für {device_address} fehlgeschlagen: JSON konnte nicht dekodiert werden: {reason}",
214
+ "log.client.json_rpc.set_system_variable.value_contains_html": "SET_SYSTEM_VARIABLE: Wert ({value}) enthält HTML-Tags. Diese werden beim Schreiben herausgefiltert.",
215
+ "log.client.json_rpc.trigger_firmware_update.failed": "TRIGGER_FIRMWARE_UPDATE fehlgeschlagen: JSON konnte nicht dekodiert werden: {reason}",
216
+ "log.client.json_rpc.trigger_firmware_update.not_triggered": "TRIGGER_FIRMWARE_UPDATE: {message}",
217
+ "log.client.json_rpc.trigger_firmware_update.success": "TRIGGER_FIRMWARE_UPDATE: {message}",
218
+ "log.client.reconnect.reconnected": "RECONNECT: Client {interface_id} wurde erneut verbunden",
219
+ "log.client.update_device_firmware.result": "UPDATE_DEVICE_FIRMWARE: Firmware-Update für {device_address} ausgeführt mit Ergebnis '{result}'",
220
+ "log.client.update_device_firmware.try": "UPDATE_DEVICE_FIRMWARE: Firmware-Update für {device_address} wird versucht",
221
+ "log.core.signal.shutdown": "Signal empfangen: {sig}. Zentrale wird heruntergefahren",
222
+ "log.metrics.observer.counter_key_limit": "METRICS OBSERVER: Zähler-Schlüsselgrenze erreicht, verworfen: {metric_key}",
223
+ "log.metrics.observer.gauge_key_limit": "METRICS OBSERVER: Messwert-Schlüsselgrenze erreicht, verworfen: {metric_key}",
224
+ "log.metrics.observer.latency_key_limit": "METRICS OBSERVER: Latenz-Schlüsselgrenze erreicht, verworfen: {metric_key}",
225
+ "log.model.custom.definition.validate_failed": "Die benutzerdefinierte Datenpunktdefinition konnte nicht validiert werden. {path}, {msg}",
226
+ "log.model.custom.text_display.send_text.burst_limit_warning": "SEND_TEXT: {full_name}: Burst-Limit-Warnung aktiv - Befehl könnte gedrosselt werden",
227
+ "log.model.device.channel_description_not_found": "INIT_DEVICE: Überspringe Kanal {address} - Beschreibung konnte nicht von der CCU abgerufen werden",
228
+ "log.model.generic_data_point.send_value.not_writable": "SEND_VALUE: Schreiben auf nicht beschreibbaren Datenpunkt {full_name} ist nicht möglich",
229
+ "log.model.hub.update.progress_completed": "Hub Firmware-Update abgeschlossen: {old_version} -> {new_version}",
230
+ "log.model.hub.update.progress_poll_error": "Fehler beim Abfragen des Update-Status (CCU wird möglicherweise neu gestartet): {error}",
231
+ "log.model.hub.update.progress_timeout": "Hub Firmware-Update Überwachung nach {timeout}s abgelaufen",
232
+ "log.store.dynamic.pending_pong_mismatch": "Ausstehende PONG-Abweichung: Es besteht eine Abweichung zwischen gesendeten Ping-Ereignissen und empfangenen Pong-Ereignissen für Instanz {interface_id}. Möglicher Grund 1: Es laufen mehrere Instanzen mit demselben Instanznamen für diese Integration. Fügen Sie eine Instanz erneut hinzu! Andernfalls erhält diese Instanz keine Update-Ereignisse von Ihrer CCU. Möglicher Grund 2: Auf der CCU hängt etwas oder wurde nicht bereinigt. Versuchen Sie daher einen Neustart der CCU. Möglicher Grund 3: Ihre Einrichtung ist falsch konfiguriert und diese Instanz kann keine Ereignisse von der CCU empfangen.",
233
+ "log.store.dynamic.unknown_pong_mismatch": "Unbekannte PONG-Abweichung: Ihre Instanz {interface_id} erhält PONG-Ereignisse, die sie nicht gesendet hat. Möglicher Grund 1: Es laufen mehrere Instanzen mit demselben Instanznamen für diese Integration. Fügen Sie eine Instanz erneut hinzu! Andernfalls erhält die andere Instanz keine Update-Ereignisse von Ihrer CCU. Möglicher Grund 2: Auf der CCU hängt etwas oder wurde nicht bereinigt. Versuchen Sie daher einen Neustart der CCU.",
234
+ "log.store.session_recorder.activate.already_running": "ACTIVATE: Aufzeichnungssitzung läuft bereits.",
235
+ "log.store.session_recorder.deactivate.already_running": "DEACTIVATE: Aufzeichnungssitzung läuft bereits.",
236
+ "log.support.check_password.invalid_chars": "CHECK_CONFIG: Passwort enthält nicht erlaubte Zeichen. Nur erlaubte Zeichen verwenden. Siehe Passwort-RegEx: {pattern}"
237
+ }