conson-xp 1.45.0__py3-none-any.whl → 1.47.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.
Files changed (179) hide show
  1. {conson_xp-1.45.0.dist-info → conson_xp-1.47.0.dist-info}/METADATA +1 -1
  2. conson_xp-1.47.0.dist-info/RECORD +210 -0
  3. xp/__init__.py +3 -2
  4. xp/cli/commands/conbus/conbus.py +1 -1
  5. xp/cli/commands/conbus/conbus_actiontable_commands.py +33 -15
  6. xp/cli/commands/conbus/conbus_autoreport_commands.py +8 -4
  7. xp/cli/commands/conbus/conbus_blink_commands.py +20 -10
  8. xp/cli/commands/conbus/conbus_config_commands.py +2 -1
  9. xp/cli/commands/conbus/conbus_custom_commands.py +4 -2
  10. xp/cli/commands/conbus/conbus_datapoint_commands.py +10 -5
  11. xp/cli/commands/conbus/conbus_discover_commands.py +8 -4
  12. xp/cli/commands/conbus/conbus_event_commands.py +8 -4
  13. xp/cli/commands/conbus/conbus_export_commands.py +8 -4
  14. xp/cli/commands/conbus/conbus_lightlevel_commands.py +16 -8
  15. xp/cli/commands/conbus/conbus_linknumber_commands.py +8 -4
  16. xp/cli/commands/conbus/conbus_modulenumber_commands.py +8 -4
  17. xp/cli/commands/conbus/conbus_msactiontable_commands.py +78 -40
  18. xp/cli/commands/conbus/conbus_output_commands.py +16 -8
  19. xp/cli/commands/conbus/conbus_raw_commands.py +6 -3
  20. xp/cli/commands/conbus/conbus_receive_commands.py +6 -3
  21. xp/cli/commands/conbus/conbus_scan_commands.py +6 -3
  22. xp/cli/commands/file_commands.py +6 -3
  23. xp/cli/commands/homekit/homekit.py +4 -2
  24. xp/cli/commands/homekit/homekit_start_commands.py +2 -1
  25. xp/cli/commands/module_commands.py +8 -4
  26. xp/cli/commands/reverse_proxy_commands.py +8 -4
  27. xp/cli/commands/server/server_commands.py +6 -3
  28. xp/cli/commands/telegram/telegram_blink_commands.py +4 -2
  29. xp/cli/commands/telegram/telegram_checksum_commands.py +4 -2
  30. xp/cli/commands/telegram/telegram_discover_commands.py +2 -1
  31. xp/cli/commands/telegram/telegram_linknumber_commands.py +4 -2
  32. xp/cli/commands/telegram/telegram_parse_commands.py +4 -2
  33. xp/cli/commands/telegram/telegram_version_commands.py +2 -1
  34. xp/cli/commands/term/term_commands.py +4 -2
  35. xp/cli/main.py +2 -1
  36. xp/cli/utils/click_tree.py +6 -3
  37. xp/cli/utils/datapoint_type_choice.py +4 -2
  38. xp/cli/utils/decorators.py +42 -21
  39. xp/cli/utils/error_handlers.py +16 -8
  40. xp/cli/utils/formatters.py +22 -11
  41. xp/cli/utils/module_type_choice.py +4 -2
  42. xp/cli/utils/serial_number_type.py +4 -2
  43. xp/cli/utils/system_function_choice.py +4 -2
  44. xp/cli/utils/xp_module_type.py +4 -2
  45. xp/models/actiontable/actiontable.py +8 -8
  46. xp/models/actiontable/actiontable_type.py +20 -0
  47. xp/models/actiontable/msactiontable_xp20.py +8 -4
  48. xp/models/actiontable/msactiontable_xp24.py +12 -6
  49. xp/models/actiontable/msactiontable_xp33.py +20 -10
  50. xp/models/conbus/conbus.py +8 -4
  51. xp/models/conbus/conbus_autoreport.py +4 -2
  52. xp/models/conbus/conbus_blink.py +4 -2
  53. xp/models/conbus/conbus_client_config.py +6 -3
  54. xp/models/conbus/conbus_connection_status.py +4 -2
  55. xp/models/conbus/conbus_custom.py +4 -2
  56. xp/models/conbus/conbus_datapoint.py +4 -2
  57. xp/models/conbus/conbus_discover.py +6 -3
  58. xp/models/conbus/conbus_event_list.py +4 -2
  59. xp/models/conbus/conbus_event_raw.py +4 -2
  60. xp/models/conbus/conbus_export.py +2 -1
  61. xp/models/conbus/conbus_lightlevel.py +4 -2
  62. xp/models/conbus/conbus_linknumber.py +4 -2
  63. xp/models/conbus/conbus_logger_config.py +8 -4
  64. xp/models/conbus/conbus_output.py +4 -2
  65. xp/models/conbus/conbus_raw.py +4 -2
  66. xp/models/conbus/conbus_receive.py +4 -2
  67. xp/models/conbus/conbus_writeconfig.py +4 -2
  68. xp/models/config/conson_module_config.py +8 -4
  69. xp/models/homekit/homekit_accessory.py +4 -2
  70. xp/models/homekit/homekit_config.py +12 -6
  71. xp/models/log_entry.py +16 -8
  72. xp/models/protocol/conbus_protocol.py +36 -18
  73. xp/models/response.py +12 -8
  74. xp/models/telegram/action_type.py +4 -2
  75. xp/models/telegram/datapoint_type.py +4 -2
  76. xp/models/telegram/event_telegram.py +14 -7
  77. xp/models/telegram/event_type.py +2 -1
  78. xp/models/telegram/input_action_type.py +2 -1
  79. xp/models/telegram/input_type.py +2 -1
  80. xp/models/telegram/module_type.py +24 -12
  81. xp/models/telegram/module_type_code.py +2 -1
  82. xp/models/telegram/output_telegram.py +16 -10
  83. xp/models/telegram/reply_telegram.py +24 -13
  84. xp/models/telegram/system_function.py +6 -3
  85. xp/models/telegram/system_telegram.py +10 -6
  86. xp/models/telegram/telegram.py +2 -1
  87. xp/models/telegram/telegram_type.py +2 -1
  88. xp/models/telegram/timeparam_type.py +2 -1
  89. xp/models/term/connection_state.py +4 -2
  90. xp/models/term/module_state.py +2 -1
  91. xp/models/term/protocol_keys_config.py +6 -3
  92. xp/models/term/status_message.py +2 -1
  93. xp/models/term/telegram_display.py +2 -1
  94. xp/models/write_config_type.py +4 -2
  95. xp/services/actiontable/actiontable_serializer.py +34 -41
  96. xp/services/actiontable/download_state_machine.py +281 -0
  97. xp/services/actiontable/msactiontable_xp20_serializer.py +77 -49
  98. xp/services/actiontable/msactiontable_xp24_serializer.py +78 -53
  99. xp/services/actiontable/msactiontable_xp33_serializer.py +39 -9
  100. xp/services/actiontable/serializer_protocol.py +76 -0
  101. xp/services/conbus/actiontable/actiontable_download_service.py +134 -280
  102. xp/services/conbus/actiontable/actiontable_list_service.py +17 -4
  103. xp/services/conbus/actiontable/actiontable_show_service.py +10 -6
  104. xp/services/conbus/actiontable/actiontable_upload_service.py +17 -9
  105. xp/services/conbus/conbus_blink_all_service.py +16 -8
  106. xp/services/conbus/conbus_blink_service.py +14 -7
  107. xp/services/conbus/conbus_custom_service.py +16 -8
  108. xp/services/conbus/conbus_datapoint_queryall_service.py +18 -9
  109. xp/services/conbus/conbus_datapoint_service.py +18 -9
  110. xp/services/conbus/conbus_discover_service.py +24 -13
  111. xp/services/conbus/conbus_event_list_service.py +11 -7
  112. xp/services/conbus/conbus_event_raw_service.py +18 -10
  113. xp/services/conbus/conbus_export_service.py +28 -14
  114. xp/services/conbus/conbus_output_service.py +18 -10
  115. xp/services/conbus/conbus_raw_service.py +16 -8
  116. xp/services/conbus/conbus_receive_service.py +18 -10
  117. xp/services/conbus/conbus_scan_service.py +18 -10
  118. xp/services/conbus/msactiontable/msactiontable_upload_service.py +17 -9
  119. xp/services/conbus/write_config_service.py +18 -9
  120. xp/services/homekit/homekit_cache_service.py +12 -6
  121. xp/services/homekit/homekit_conbus_service.py +12 -6
  122. xp/services/homekit/homekit_config_validator.py +34 -17
  123. xp/services/homekit/homekit_conson_validator.py +18 -9
  124. xp/services/homekit/homekit_dimminglight.py +14 -7
  125. xp/services/homekit/homekit_dimminglight_service.py +14 -7
  126. xp/services/homekit/homekit_hap_service.py +18 -9
  127. xp/services/homekit/homekit_lightbulb.py +10 -5
  128. xp/services/homekit/homekit_lightbulb_service.py +10 -5
  129. xp/services/homekit/homekit_module_service.py +8 -4
  130. xp/services/homekit/homekit_outlet.py +14 -7
  131. xp/services/homekit/homekit_outlet_service.py +12 -6
  132. xp/services/homekit/homekit_service.py +24 -12
  133. xp/services/log_file_service.py +16 -8
  134. xp/services/module_type_service.py +10 -5
  135. xp/services/protocol/conbus_event_protocol.py +140 -21
  136. xp/services/protocol/conbus_protocol.py +36 -19
  137. xp/services/protocol/protocol_factory.py +12 -6
  138. xp/services/protocol/telegram_protocol.py +12 -6
  139. xp/services/reverse_proxy_service.py +26 -14
  140. xp/services/server/base_server_service.py +42 -23
  141. xp/services/server/client_buffer_manager.py +12 -7
  142. xp/services/server/cp20_server_service.py +10 -7
  143. xp/services/server/device_service_factory.py +12 -8
  144. xp/services/server/server_service.py +18 -11
  145. xp/services/server/xp130_server_service.py +11 -8
  146. xp/services/server/xp20_server_service.py +16 -10
  147. xp/services/server/xp230_server_service.py +10 -7
  148. xp/services/server/xp24_server_service.py +22 -13
  149. xp/services/server/xp33_server_service.py +44 -25
  150. xp/services/telegram/telegram_blink_service.py +14 -8
  151. xp/services/telegram/telegram_checksum_service.py +12 -7
  152. xp/services/telegram/telegram_datapoint_service.py +14 -9
  153. xp/services/telegram/telegram_discover_service.py +28 -15
  154. xp/services/telegram/telegram_link_number_service.py +18 -10
  155. xp/services/telegram/telegram_output_service.py +24 -12
  156. xp/services/telegram/telegram_service.py +22 -11
  157. xp/services/telegram/telegram_version_service.py +14 -8
  158. xp/services/term/protocol_monitor_service.py +30 -16
  159. xp/services/term/state_monitor_service.py +39 -21
  160. xp/term/protocol.py +12 -6
  161. xp/term/state.py +12 -7
  162. xp/term/widgets/help_menu.py +6 -3
  163. xp/term/widgets/modules_list.py +20 -10
  164. xp/term/widgets/protocol_log.py +12 -6
  165. xp/term/widgets/status_footer.py +10 -5
  166. xp/utils/checksum.py +6 -3
  167. xp/utils/dependencies.py +26 -31
  168. xp/utils/event_helper.py +6 -4
  169. xp/utils/logging.py +6 -3
  170. xp/utils/serialization.py +30 -16
  171. xp/utils/state_machine.py +16 -9
  172. xp/utils/time_utils.py +6 -3
  173. conson_xp-1.45.0.dist-info/RECORD +0 -210
  174. xp/services/conbus/msactiontable/msactiontable_download_service.py +0 -275
  175. xp/services/conbus/msactiontable/msactiontable_list_service.py +0 -100
  176. xp/services/conbus/msactiontable/msactiontable_show_service.py +0 -89
  177. {conson_xp-1.45.0.dist-info → conson_xp-1.47.0.dist-info}/WHEEL +0 -0
  178. {conson_xp-1.45.0.dist-info → conson_xp-1.47.0.dist-info}/entry_points.txt +0 -0
  179. {conson_xp-1.45.0.dist-info → conson_xp-1.47.0.dist-info}/licenses/LICENSE +0 -0
@@ -1,4 +1,5 @@
1
- """Conbus Link Number Service for setting module link numbers.
1
+ """
2
+ Conbus Link Number Service for setting module link numbers.
2
3
 
3
4
  This service handles setting link numbers for modules through Conbus telegrams.
4
5
  """
@@ -19,7 +20,8 @@ from xp.services.telegram.telegram_service import TelegramService
19
20
 
20
21
 
21
22
  class WriteConfigService:
22
- """Service for writing module settings via Conbus telegrams.
23
+ """
24
+ Service for writing module settings via Conbus telegrams.
23
25
 
24
26
  Handles setting assignment by sending F04DXX telegrams and processing
25
27
  ACK/NAK responses from modules.
@@ -37,7 +39,8 @@ class WriteConfigService:
37
39
  conbus_protocol: ConbusEventProtocol,
38
40
  telegram_service: TelegramService,
39
41
  ) -> None:
40
- """Initialize the Conbus link number set service.
42
+ """
43
+ Initialize the Conbus link number set service.
41
44
 
42
45
  Args:
43
46
  conbus_protocol: Protocol for Conbus communication.
@@ -94,7 +97,8 @@ class WriteConfigService:
94
97
  )
95
98
 
96
99
  def telegram_sent(self, telegram_sent: str) -> None:
97
- """Handle telegram sent event.
100
+ """
101
+ Handle telegram sent event.
98
102
 
99
103
  Args:
100
104
  telegram_sent: The telegram that was sent.
@@ -102,7 +106,8 @@ class WriteConfigService:
102
106
  self.write_config_response.sent_telegram = telegram_sent
103
107
 
104
108
  def telegram_received(self, telegram_received: TelegramReceivedEvent) -> None:
105
- """Handle telegram received event.
109
+ """
110
+ Handle telegram received event.
106
111
 
107
112
  Args:
108
113
  telegram_received: The telegram received event.
@@ -146,7 +151,8 @@ class WriteConfigService:
146
151
  self.finished(succeed_or_failed=False, message="Timeout")
147
152
 
148
153
  def failed(self, message: str) -> None:
149
- """Handle telegram failed event.
154
+ """
155
+ Handle telegram failed event.
150
156
 
151
157
  Args:
152
158
  message: The error message.
@@ -160,7 +166,8 @@ class WriteConfigService:
160
166
  message: Optional[str] = None,
161
167
  system_function: Optional[SystemFunction] = None,
162
168
  ) -> None:
163
- """Handle successful link number set operation.
169
+ """
170
+ Handle successful link number set operation.
164
171
 
165
172
  Args:
166
173
  succeed_or_failed: succeed true, failed false.
@@ -186,7 +193,8 @@ class WriteConfigService:
186
193
  data_value: str,
187
194
  timeout_seconds: Optional[float] = None,
188
195
  ) -> None:
189
- """Write config to a specific module.
196
+ """
197
+ Write config to a specific module.
190
198
 
191
199
  Args:
192
200
  serial_number: 10-digit module serial number.
@@ -202,7 +210,8 @@ class WriteConfigService:
202
210
  self.data_value = data_value
203
211
 
204
212
  def set_timeout(self, timeout_seconds: float) -> None:
205
- """Set operation timeout.
213
+ """
214
+ Set operation timeout.
206
215
 
207
216
  Args:
208
217
  timeout_seconds: Timeout in seconds.
@@ -22,7 +22,8 @@ CACHE_FILE = CACHE_DIR / "homekit_cache.json"
22
22
 
23
23
 
24
24
  class CacheEntry(TypedDict):
25
- """Cache entry type definition.
25
+ """
26
+ Cache entry type definition.
26
27
 
27
28
  Attributes:
28
29
  event: The cached event (OutputStateReceivedEvent or LightLevelReceivedEvent).
@@ -44,7 +45,8 @@ class HomeKitCacheService:
44
45
  """
45
46
 
46
47
  def __init__(self, event_bus: EventBus, enable_persistence: bool = True):
47
- """Initialize the HomeKit cache service.
48
+ """
49
+ Initialize the HomeKit cache service.
48
50
 
49
51
  Args:
50
52
  event_bus: Event bus for inter-service communication.
@@ -203,7 +205,8 @@ class HomeKitCacheService:
203
205
  return None
204
206
 
205
207
  def handle_read_datapoint_event(self, event: ReadDatapointEvent) -> None:
206
- """Handle ReadDatapointEvent by checking cache or refresh flag.
208
+ """
209
+ Handle ReadDatapointEvent by checking cache or refresh flag.
207
210
 
208
211
  On refresh_cache=True: invalidate cache and force protocol query
209
212
  On cache hit: dispatch cached response event
@@ -263,7 +266,8 @@ class HomeKitCacheService:
263
266
  def handle_output_state_received_event(
264
267
  self, event: OutputStateReceivedEvent
265
268
  ) -> None:
266
- """Cache OutputStateReceivedEvent for future queries.
269
+ """
270
+ Cache OutputStateReceivedEvent for future queries.
267
271
 
268
272
  Args:
269
273
  event: Output state received event to cache.
@@ -277,7 +281,8 @@ class HomeKitCacheService:
277
281
  self._cache_event(event)
278
282
 
279
283
  def handle_light_level_received_event(self, event: LightLevelReceivedEvent) -> None:
280
- """Cache LightLevelReceivedEvent for future queries.
284
+ """
285
+ Cache LightLevelReceivedEvent for future queries.
281
286
 
282
287
  Args:
283
288
  event: Light level received event to cache.
@@ -297,7 +302,8 @@ class HomeKitCacheService:
297
302
  self._save_cache()
298
303
 
299
304
  def get_cache_stats(self) -> dict[str, int]:
300
- """Get cache statistics.
305
+ """
306
+ Get cache statistics.
301
307
 
302
308
  Returns:
303
309
  Dictionary with cache statistics including total_entries.
@@ -1,4 +1,5 @@
1
- """HomeKit Conbus Service for protocol communication.
1
+ """
2
+ HomeKit Conbus Service for protocol communication.
2
3
 
3
4
  This module bridges HomeKit events with the Conbus protocol for device control.
4
5
  """
@@ -18,7 +19,8 @@ from xp.services.protocol.telegram_protocol import TelegramProtocol
18
19
 
19
20
 
20
21
  class HomeKitConbusService:
21
- """Service for bridging HomeKit events with Conbus protocol.
22
+ """
23
+ Service for bridging HomeKit events with Conbus protocol.
22
24
 
23
25
  Attributes:
24
26
  event_bus: Event bus for inter-service communication.
@@ -29,7 +31,8 @@ class HomeKitConbusService:
29
31
  event_bus: EventBus
30
32
 
31
33
  def __init__(self, event_bus: EventBus, telegram_protocol: TelegramProtocol):
32
- """Initialize the HomeKit Conbus service.
34
+ """
35
+ Initialize the HomeKit Conbus service.
33
36
 
34
37
  Args:
35
38
  event_bus: Event bus instance.
@@ -49,7 +52,8 @@ class HomeKitConbusService:
49
52
  def handle_read_datapoint_request(
50
53
  self, event: ReadDatapointFromProtocolEvent
51
54
  ) -> None:
52
- """Handle request to read datapoint from protocol.
55
+ """
56
+ Handle request to read datapoint from protocol.
53
57
 
54
58
  Args:
55
59
  event: Read datapoint event with serial number and datapoint type.
@@ -62,7 +66,8 @@ class HomeKitConbusService:
62
66
  self.telegram_protocol.sendFrame(telegram.encode())
63
67
 
64
68
  def handle_send_write_config_event(self, event: SendWriteConfigEvent) -> None:
65
- """Handle send write config event.
69
+ """
70
+ Handle send write config event.
66
71
 
67
72
  Args:
68
73
  event: Write config event with configuration data.
@@ -79,7 +84,8 @@ class HomeKitConbusService:
79
84
  self.telegram_protocol.sendFrame(telegram.encode())
80
85
 
81
86
  def handle_send_action_event(self, event: SendActionEvent) -> None:
82
- """Handle send action event.
87
+ """
88
+ Handle send action event.
83
89
 
84
90
  Args:
85
91
  event: Send action event with action data.
@@ -1,4 +1,5 @@
1
- """HomeKit Configuration Validator.
1
+ """
2
+ HomeKit Configuration Validator.
2
3
 
3
4
  This module validates HomeKit configuration files for correctness and consistency.
4
5
  """
@@ -14,7 +15,8 @@ class HomekitConfigValidator:
14
15
  """Validates homekit.yml configuration file for HomeKit integration."""
15
16
 
16
17
  def __init__(self, config: HomekitConfig):
17
- """Initialize the HomeKit config validator.
18
+ """
19
+ Initialize the HomeKit config validator.
18
20
 
19
21
  Args:
20
22
  config: HomeKit configuration to validate.
@@ -22,7 +24,8 @@ class HomekitConfigValidator:
22
24
  self.config = config
23
25
 
24
26
  def validate_unique_accessory_names(self) -> List[str]:
25
- """Validate that all accessory names are unique.
27
+ """
28
+ Validate that all accessory names are unique.
26
29
 
27
30
  Returns:
28
31
  List of validation error messages.
@@ -38,7 +41,8 @@ class HomekitConfigValidator:
38
41
  return errors
39
42
 
40
43
  def validate_service_types(self) -> List[str]:
41
- """Validate that service types are valid.
44
+ """
45
+ Validate that service types are valid.
42
46
 
43
47
  Returns:
44
48
  List of validation error messages.
@@ -58,7 +62,8 @@ class HomekitConfigValidator:
58
62
  return errors
59
63
 
60
64
  def validate_output_numbers(self) -> List[str]:
61
- """Validate that output numbers are positive integers.
65
+ """
66
+ Validate that output numbers are positive integers.
62
67
 
63
68
  Returns:
64
69
  List of validation error messages.
@@ -72,7 +77,8 @@ class HomekitConfigValidator:
72
77
  return errors
73
78
 
74
79
  def validate_unique_room_names(self) -> List[str]:
75
- """Validate that all room names are unique.
80
+ """
81
+ Validate that all room names are unique.
76
82
 
77
83
  Returns:
78
84
  List of validation error messages.
@@ -88,7 +94,8 @@ class HomekitConfigValidator:
88
94
  return errors
89
95
 
90
96
  def validate_room_accessory_references(self) -> List[str]:
91
- """Validate that all room accessories exist in accessories section.
97
+ """
98
+ Validate that all room accessories exist in accessories section.
92
99
 
93
100
  Returns:
94
101
  List of validation error messages.
@@ -106,7 +113,8 @@ class HomekitConfigValidator:
106
113
  return errors
107
114
 
108
115
  def validate_no_orphaned_accessories(self) -> List[str]:
109
- """Validate that all accessories are assigned to at least one room.
116
+ """
117
+ Validate that all accessories are assigned to at least one room.
110
118
 
111
119
  Returns:
112
120
  List of validation error messages.
@@ -124,7 +132,8 @@ class HomekitConfigValidator:
124
132
  return errors
125
133
 
126
134
  def validate_no_duplicate_accessory_assignments(self) -> List[str]:
127
- """Validate that accessories are not assigned to multiple rooms.
135
+ """
136
+ Validate that accessories are not assigned to multiple rooms.
128
137
 
129
138
  Returns:
130
139
  List of validation error messages.
@@ -143,7 +152,8 @@ class HomekitConfigValidator:
143
152
  return errors
144
153
 
145
154
  def validate_all(self) -> List[str]:
146
- """Run all validations and return combined errors.
155
+ """
156
+ Run all validations and return combined errors.
147
157
 
148
158
  Returns:
149
159
  List of all validation error messages.
@@ -167,7 +177,8 @@ class CrossReferenceValidator:
167
177
  conson_validator: ConsonConfigValidator,
168
178
  homekit_validator: HomekitConfigValidator,
169
179
  ):
170
- """Initialize the cross-reference validator.
180
+ """
181
+ Initialize the cross-reference validator.
171
182
 
172
183
  Args:
173
184
  conson_validator: Conson configuration validator.
@@ -177,7 +188,8 @@ class CrossReferenceValidator:
177
188
  self.homekit_validator = homekit_validator
178
189
 
179
190
  def validate_serial_number_references(self) -> List[str]:
180
- """Validate that all accessory serial numbers exist in conson configuration.
191
+ """
192
+ Validate that all accessory serial numbers exist in conson configuration.
181
193
 
182
194
  Returns:
183
195
  List of validation error messages.
@@ -192,7 +204,8 @@ class CrossReferenceValidator:
192
204
  return errors
193
205
 
194
206
  def validate_output_capabilities(self) -> List[str]:
195
- """Validate that output numbers are within module capabilities.
207
+ """
208
+ Validate that output numbers are within module capabilities.
196
209
 
197
210
  Returns:
198
211
  List of validation error messages.
@@ -232,7 +245,8 @@ class CrossReferenceValidator:
232
245
  return errors
233
246
 
234
247
  def validate_all(self) -> List[str]:
235
- """Run all cross-reference validations and return combined errors.
248
+ """
249
+ Run all cross-reference validations and return combined errors.
236
250
 
237
251
  Returns:
238
252
  List of all cross-reference validation error messages.
@@ -247,7 +261,8 @@ class ConfigValidationService:
247
261
  """Main service for validating HomeKit configuration coherence."""
248
262
 
249
263
  def __init__(self, conson_config_path: str, homekit_config_path: str):
250
- """Initialize the config validation service.
264
+ """
265
+ Initialize the config validation service.
251
266
 
252
267
  Args:
253
268
  conson_config_path: Path to conson.yml configuration file.
@@ -266,7 +281,8 @@ class ConfigValidationService:
266
281
  )
267
282
 
268
283
  def validate_all(self) -> dict:
269
- """Run all validations and return organized results.
284
+ """
285
+ Run all validations and return organized results.
270
286
 
271
287
  Returns:
272
288
  Dictionary containing validation results and error counts.
@@ -287,7 +303,8 @@ class ConfigValidationService:
287
303
  }
288
304
 
289
305
  def print_config_summary(self) -> str:
290
- """Generate a summary of the configuration.
306
+ """
307
+ Generate a summary of the configuration.
291
308
 
292
309
  Returns:
293
310
  String containing configuration summary.
@@ -1,4 +1,5 @@
1
- """Conson Configuration Validator for HomeKit.
1
+ """
2
+ Conson Configuration Validator for HomeKit.
2
3
 
3
4
  This module validates conson.yml configuration files for HomeKit integration.
4
5
  """
@@ -15,7 +16,8 @@ class ConsonConfigValidator:
15
16
  """Validates conson.yml configuration file for HomeKit integration."""
16
17
 
17
18
  def __init__(self, config: ConsonModuleListConfig):
18
- """Initialize the Conson config validator.
19
+ """
20
+ Initialize the Conson config validator.
19
21
 
20
22
  Args:
21
23
  config: Conson module list configuration to validate.
@@ -23,7 +25,8 @@ class ConsonConfigValidator:
23
25
  self.config = config
24
26
 
25
27
  def validate_unique_names(self) -> List[str]:
26
- """Validate that all module names are unique.
28
+ """
29
+ Validate that all module names are unique.
27
30
 
28
31
  Returns:
29
32
  List of validation error messages.
@@ -39,7 +42,8 @@ class ConsonConfigValidator:
39
42
  return errors
40
43
 
41
44
  def validate_unique_serial_numbers(self) -> List[str]:
42
- """Validate that all serial numbers are unique.
45
+ """
46
+ Validate that all serial numbers are unique.
43
47
 
44
48
  Returns:
45
49
  List of validation error messages.
@@ -55,7 +59,8 @@ class ConsonConfigValidator:
55
59
  return errors
56
60
 
57
61
  def validate_module_type_codes(self) -> List[str]:
58
- """Validate module type code ranges.
62
+ """
63
+ Validate module type code ranges.
59
64
 
60
65
  Returns:
61
66
  List of validation error messages.
@@ -69,7 +74,8 @@ class ConsonConfigValidator:
69
74
  return errors
70
75
 
71
76
  def validate_network_config(self) -> List[str]:
72
- """Validate IP/port configuration.
77
+ """
78
+ Validate IP/port configuration.
73
79
 
74
80
  Returns:
75
81
  List of validation error messages.
@@ -83,7 +89,8 @@ class ConsonConfigValidator:
83
89
  return errors
84
90
 
85
91
  def validate_all(self) -> List[str]:
86
- """Run all validations and return combined errors.
92
+ """
93
+ Run all validations and return combined errors.
87
94
 
88
95
  Returns:
89
96
  List of all validation error messages.
@@ -96,7 +103,8 @@ class ConsonConfigValidator:
96
103
  return all_errors
97
104
 
98
105
  def get_module_by_serial(self, serial_number: str) -> ConsonModuleConfig:
99
- """Get module configuration by serial number.
106
+ """
107
+ Get module configuration by serial number.
100
108
 
101
109
  Args:
102
110
  serial_number: Serial number of the module to find.
@@ -113,7 +121,8 @@ class ConsonConfigValidator:
113
121
  raise ValueError(f"Module with serial number {serial_number} not found")
114
122
 
115
123
  def get_all_serial_numbers(self) -> Set[str]:
116
- """Get all serial numbers from the configuration.
124
+ """
125
+ Get all serial numbers from the configuration.
117
126
 
118
127
  Returns:
119
128
  Set of all serial numbers in the configuration.
@@ -1,4 +1,5 @@
1
- """HomeKit Dimming Light Accessory.
1
+ """
2
+ HomeKit Dimming Light Accessory.
2
3
 
3
4
  This module provides a dimming light accessory for HomeKit integration.
4
5
  """
@@ -21,7 +22,8 @@ from xp.models.protocol.conbus_protocol import (
21
22
 
22
23
 
23
24
  class DimmingLight(Accessory):
24
- """HomeKit dimming light accessory.
25
+ """
26
+ HomeKit dimming light accessory.
25
27
 
26
28
  Attributes:
27
29
  category: HomeKit category (CATEGORY_LIGHTBULB).
@@ -46,7 +48,8 @@ class DimmingLight(Accessory):
46
48
  accessory: HomekitAccessoryConfig,
47
49
  event_bus: EventBus,
48
50
  ):
49
- """Initialize the dimming light accessory.
51
+ """
52
+ Initialize the dimming light accessory.
50
53
 
51
54
  Args:
52
55
  driver: HAP accessory driver.
@@ -102,7 +105,8 @@ class DimmingLight(Accessory):
102
105
  )
103
106
 
104
107
  def set_on(self, value: bool) -> None:
105
- """Set the on/off state of the dimming light.
108
+ """
109
+ Set the on/off state of the dimming light.
106
110
 
107
111
  Args:
108
112
  value: True to turn on, False to turn off.
@@ -124,7 +128,8 @@ class DimmingLight(Accessory):
124
128
  )
125
129
 
126
130
  def get_on(self) -> bool:
127
- """Get the on/off state of the dimming light.
131
+ """
132
+ Get the on/off state of the dimming light.
128
133
 
129
134
  Returns:
130
135
  True if on, False if off.
@@ -144,7 +149,8 @@ class DimmingLight(Accessory):
144
149
  return self.is_on
145
150
 
146
151
  def set_brightness(self, value: int) -> None:
147
- """Set the brightness level of the dimming light.
152
+ """
153
+ Set the brightness level of the dimming light.
148
154
 
149
155
  Args:
150
156
  value: Brightness level (0-100).
@@ -163,7 +169,8 @@ class DimmingLight(Accessory):
163
169
  )
164
170
 
165
171
  def get_brightness(self) -> int:
166
- """Get the brightness level of the dimming light.
172
+ """
173
+ Get the brightness level of the dimming light.
167
174
 
168
175
  Returns:
169
176
  Current brightness level (0-100).
@@ -1,4 +1,5 @@
1
- """HomeKit Dimming Light Service.
1
+ """
2
+ HomeKit Dimming Light Service.
2
3
 
3
4
  This module provides service implementation for dimming light accessories.
4
5
  """
@@ -19,7 +20,8 @@ from xp.models.telegram.datapoint_type import DataPointType
19
20
 
20
21
 
21
22
  class HomeKitDimmingLightService:
22
- """Dimming light service for HomeKit.
23
+ """
24
+ Dimming light service for HomeKit.
23
25
 
24
26
  Attributes:
25
27
  event_bus: Event bus for inter-service communication.
@@ -29,7 +31,8 @@ class HomeKitDimmingLightService:
29
31
  event_bus: EventBus
30
32
 
31
33
  def __init__(self, event_bus: EventBus) -> None:
32
- """Initialize the dimming light service.
34
+ """
35
+ Initialize the dimming light service.
33
36
 
34
37
  Args:
35
38
  event_bus: Event bus instance.
@@ -48,7 +51,8 @@ class HomeKitDimmingLightService:
48
51
  )
49
52
 
50
53
  def handle_dimminglight_get_on(self, event: DimmingLightGetOnEvent) -> None:
51
- """Handle dimming light get on event.
54
+ """
55
+ Handle dimming light get on event.
52
56
 
53
57
  Args:
54
58
  event: Dimming light get on event.
@@ -67,7 +71,8 @@ class HomeKitDimmingLightService:
67
71
  self.logger.debug(f"Dispatched ReadDatapointEvent for {event.serial_number}")
68
72
 
69
73
  def handle_dimminglight_set_on(self, event: DimmingLightSetOnEvent) -> None:
70
- """Handle dimming light set on event.
74
+ """
75
+ Handle dimming light set on event.
71
76
 
72
77
  Args:
73
78
  event: Dimming light set on event.
@@ -98,7 +103,8 @@ class HomeKitDimmingLightService:
98
103
  def handle_dimminglight_set_brightness(
99
104
  self, event: DimmingLightSetBrightnessEvent
100
105
  ) -> None:
101
- """Handle dimming light set brightness event.
106
+ """
107
+ Handle dimming light set brightness event.
102
108
 
103
109
  Args:
104
110
  event: Dimming light set brightness event.
@@ -126,7 +132,8 @@ class HomeKitDimmingLightService:
126
132
  def handle_dimminglight_get_brightness(
127
133
  self, event: DimmingLightGetBrightnessEvent
128
134
  ) -> None:
129
- """Handle dimming light get brightness event.
135
+ """
136
+ Handle dimming light get brightness event.
130
137
 
131
138
  Args:
132
139
  event: Dimming light get brightness event.
@@ -1,4 +1,5 @@
1
- """HomeKit HAP Service for Apple HomeKit integration.
1
+ """
2
+ HomeKit HAP Service for Apple HomeKit integration.
2
3
 
3
4
  This module provides the main HAP (HomeKit Accessory Protocol) service.
4
5
  """
@@ -35,7 +36,8 @@ from xp.services.homekit.homekit_outlet import Outlet
35
36
 
36
37
 
37
38
  class HomekitHapService:
38
- """HomeKit HAP service.
39
+ """
40
+ HomeKit HAP service.
39
41
 
40
42
  Manages HAP accessory protocol, handles bridge and accessory setup,
41
43
  and processes HomeKit events for device state synchronization.
@@ -59,7 +61,8 @@ class HomekitHapService:
59
61
  module_service: HomekitModuleService,
60
62
  event_bus: EventBus,
61
63
  ):
62
- """Initialize the HomeKit HAP service.
64
+ """
65
+ Initialize the HomeKit HAP service.
63
66
 
64
67
  Args:
65
68
  homekit_config: HomeKit configuration.
@@ -122,7 +125,8 @@ class HomekitHapService:
122
125
  self.logger.error(f"HAP-python driver error: {e}", exc_info=True)
123
126
 
124
127
  def handle_output_state_received(self, event: OutputStateReceivedEvent) -> str:
125
- """Handle output state received event.
128
+ """
129
+ Handle output state received event.
126
130
 
127
131
  Args:
128
132
  event: Output state received event.
@@ -152,7 +156,8 @@ class HomekitHapService:
152
156
  return event.data_value
153
157
 
154
158
  def handle_light_level_received(self, event: LightLevelReceivedEvent) -> str:
155
- """Handle light level received event.
159
+ """
160
+ Handle light level received event.
156
161
 
157
162
  Args:
158
163
  event: Light level received event.
@@ -206,7 +211,8 @@ class HomekitHapService:
206
211
  self.driver.add_accessory(accessory=bridge)
207
212
 
208
213
  def add_room(self, bridge: Bridge, room: RoomConfig) -> None:
209
- """Add a room with its accessories to the bridge.
214
+ """
215
+ Add a room with its accessories to the bridge.
210
216
 
211
217
  Args:
212
218
  bridge: HAP bridge instance.
@@ -239,7 +245,8 @@ class HomekitHapService:
239
245
  def get_accessory(
240
246
  self, homekit_accessory: HomekitAccessoryConfig
241
247
  ) -> Union[LightBulb, Outlet, DimmingLight, None]:
242
- """Get an accessory instance from configuration.
248
+ """
249
+ Get an accessory instance from configuration.
243
250
 
244
251
  Args:
245
252
  homekit_accessory: HomeKit accessory configuration.
@@ -282,7 +289,8 @@ class HomekitHapService:
282
289
  return None
283
290
 
284
291
  def get_accessory_by_name(self, name: str) -> Optional[HomekitAccessoryConfig]:
285
- """Get an accessory configuration by name.
292
+ """
293
+ Get an accessory configuration by name.
286
294
 
287
295
  Args:
288
296
  name: Name of the accessory to find.
@@ -295,7 +303,8 @@ class HomekitHapService:
295
303
  )
296
304
 
297
305
  def handle_module_state_changed(self, event: ModuleStateChangedEvent) -> None:
298
- """Handle module state change by refreshing affected accessories.
306
+ """
307
+ Handle module state change by refreshing affected accessories.
299
308
 
300
309
  Args:
301
310
  event: Module state changed event.