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
@@ -8,10 +8,11 @@ from xp.models.config.conson_module_config import ConsonModuleConfig
8
8
 
9
9
 
10
10
  class ActionTableShowService:
11
- """Service for showing action table configuration for a specific module.
11
+ """
12
+ Service for showing action table configuration for a specific module.
12
13
 
13
- Reads conson.yml and returns the action table configuration for the specified
14
- module serial number.
14
+ Reads conson.yml and returns the action table configuration for the specified module
15
+ serial number.
15
16
  """
16
17
 
17
18
  def __init__(self) -> None:
@@ -21,7 +22,8 @@ class ActionTableShowService:
21
22
  self.error_callback: Optional[Callable[[str], None]] = None
22
23
 
23
24
  def __enter__(self) -> "ActionTableShowService":
24
- """Context manager entry.
25
+ """
26
+ Context manager entry.
25
27
 
26
28
  Returns:
27
29
  Self for context manager use.
@@ -39,7 +41,8 @@ class ActionTableShowService:
39
41
  error_callback: Callable[[str], None],
40
42
  config_path: Optional[Path] = None,
41
43
  ) -> None:
42
- """Show action table configuration for a specific module.
44
+ """
45
+ Show action and msaction table configuration for a specific module.
43
46
 
44
47
  Args:
45
48
  serial_number: Module serial number.
@@ -80,7 +83,8 @@ class ActionTableShowService:
80
83
  self.finish_callback(module)
81
84
 
82
85
  def _handle_error(self, message: str) -> None:
83
- """Handle error and invoke error callback.
86
+ """
87
+ Handle error and invoke error callback.
84
88
 
85
89
  Args:
86
90
  message: Error message.
@@ -15,7 +15,8 @@ from xp.services.telegram.telegram_service import TelegramService
15
15
 
16
16
 
17
17
  class ActionTableUploadService:
18
- """TCP client service for uploading action tables to Conbus modules.
18
+ """
19
+ TCP client service for uploading action tables to Conbus modules.
19
20
 
20
21
  Manages TCP socket connections, handles telegram generation and transmission,
21
22
  and processes server responses for action table uploads.
@@ -37,7 +38,8 @@ class ActionTableUploadService:
37
38
  telegram_service: TelegramService,
38
39
  conson_config: ConsonModuleListConfig,
39
40
  ) -> None:
40
- """Initialize the action table upload service.
41
+ """
42
+ Initialize the action table upload service.
41
43
 
42
44
  Args:
43
45
  conbus_protocol: ConbusEventProtocol for communication.
@@ -76,7 +78,8 @@ class ActionTableUploadService:
76
78
  )
77
79
 
78
80
  def telegram_sent(self, telegram_sent: str) -> None:
79
- """Handle telegram sent event.
81
+ """
82
+ Handle telegram sent event.
80
83
 
81
84
  Args:
82
85
  telegram_sent: The telegram that was sent.
@@ -84,7 +87,8 @@ class ActionTableUploadService:
84
87
  self.logger.debug(f"Telegram sent: {telegram_sent}")
85
88
 
86
89
  def telegram_received(self, telegram_received: TelegramReceivedEvent) -> None:
87
- """Handle telegram received event.
90
+ """
91
+ Handle telegram received event.
88
92
 
89
93
  Args:
90
94
  telegram_received: The telegram received event.
@@ -105,7 +109,8 @@ class ActionTableUploadService:
105
109
  self._handle_upload_response(reply_telegram)
106
110
 
107
111
  def _handle_upload_response(self, reply_telegram: Any) -> None:
108
- """Handle telegram responses during upload.
112
+ """
113
+ Handle telegram responses during upload.
109
114
 
110
115
  Args:
111
116
  reply_telegram: Parsed reply telegram.
@@ -152,7 +157,8 @@ class ActionTableUploadService:
152
157
  self.failed("Upload timeout")
153
158
 
154
159
  def failed(self, message: str) -> None:
155
- """Handle failed connection event.
160
+ """
161
+ Handle failed connection event.
156
162
 
157
163
  Args:
158
164
  message: Failure message.
@@ -165,7 +171,8 @@ class ActionTableUploadService:
165
171
  serial_number: str,
166
172
  timeout_seconds: Optional[float] = None,
167
173
  ) -> None:
168
- """Upload action table to module.
174
+ """
175
+ Upload action table to module.
169
176
 
170
177
  Uploads the action table configuration to the specified module.
171
178
 
@@ -187,7 +194,7 @@ class ActionTableUploadService:
187
194
  # Parse action table strings to ActionTable object
188
195
  try:
189
196
  module_action_table = module.action_table or []
190
- action_table = self.serializer.parse_action_table(module_action_table)
197
+ action_table = self.serializer.from_short_string(module_action_table)
191
198
  except ValueError as e:
192
199
  self.logger.error(f"Invalid action table format: {e}")
193
200
  self.failed(f"Invalid action table format: {e}")
@@ -210,7 +217,8 @@ class ActionTableUploadService:
210
217
  )
211
218
 
212
219
  def set_timeout(self, timeout_seconds: float) -> None:
213
- """Set operation timeout.
220
+ """
221
+ Set operation timeout.
214
222
 
215
223
  Args:
216
224
  timeout_seconds: Timeout in seconds.
@@ -1,4 +1,5 @@
1
- """Conbus Blink All Service for TCP communication with Conbus servers.
1
+ """
2
+ Conbus Blink All Service for TCP communication with Conbus servers.
2
3
 
3
4
  This service implements a TCP client that connects to Conbus servers and sends
4
5
  blink/unblink telegrams to all discovered modules on the network.
@@ -38,7 +39,8 @@ class ConbusBlinkAllService:
38
39
  conbus_protocol: ConbusEventProtocol,
39
40
  telegram_service: TelegramService,
40
41
  ) -> None:
41
- """Initialize the Conbus blink all service.
42
+ """
43
+ Initialize the Conbus blink all service.
42
44
 
43
45
  Args:
44
46
  conbus_protocol: ConbusEventProtocol instance for communication.
@@ -77,7 +79,8 @@ class ConbusBlinkAllService:
77
79
  self.on_progress.emit(".")
78
80
 
79
81
  def send_blink(self, serial_number: str) -> None:
80
- """Send blink or unblink telegram to a discovered module.
82
+ """
83
+ Send blink or unblink telegram to a discovered module.
81
84
 
82
85
  Args:
83
86
  serial_number: 10-digit module serial number.
@@ -101,7 +104,8 @@ class ConbusBlinkAllService:
101
104
  self.on_progress.emit(".")
102
105
 
103
106
  def telegram_sent(self, telegram_sent: str) -> None:
104
- """Handle telegram sent event.
107
+ """
108
+ Handle telegram sent event.
105
109
 
106
110
  Args:
107
111
  telegram_sent: The telegram that was sent.
@@ -110,7 +114,8 @@ class ConbusBlinkAllService:
110
114
  self.service_response.sent_telegram = system_telegram
111
115
 
112
116
  def telegram_received(self, telegram_received: TelegramReceivedEvent) -> None:
113
- """Handle telegram received event.
117
+ """
118
+ Handle telegram received event.
114
119
 
115
120
  Args:
116
121
  telegram_received: The telegram received event.
@@ -157,7 +162,8 @@ class ConbusBlinkAllService:
157
162
  self.on_finish.emit(self.service_response)
158
163
 
159
164
  def failed(self, message: str) -> None:
160
- """Handle failed connection event.
165
+ """
166
+ Handle failed connection event.
161
167
 
162
168
  Args:
163
169
  message: Failure message.
@@ -173,7 +179,8 @@ class ConbusBlinkAllService:
173
179
  on_or_off: str,
174
180
  timeout_seconds: Optional[float] = None,
175
181
  ) -> None:
176
- """Send blink command to all discovered modules.
182
+ """
183
+ Send blink command to all discovered modules.
177
184
 
178
185
  Args:
179
186
  on_or_off: "on" to blink or "off" to unblink all devices.
@@ -186,7 +193,8 @@ class ConbusBlinkAllService:
186
193
  # Caller invokes start_reactor()
187
194
 
188
195
  def set_timeout(self, timeout_seconds: float) -> None:
189
- """Set operation timeout.
196
+ """
197
+ Set operation timeout.
190
198
 
191
199
  Args:
192
200
  timeout_seconds: Timeout in seconds.
@@ -1,4 +1,5 @@
1
- """Conbus Blink Service for TCP communication with Conbus servers.
1
+ """
2
+ Conbus Blink Service for TCP communication with Conbus servers.
2
3
 
3
4
  This service implements a TCP client that connects to Conbus servers and sends
4
5
  blink/unblink telegrams to control module LED indicators.
@@ -36,7 +37,8 @@ class ConbusBlinkService:
36
37
  conbus_protocol: ConbusEventProtocol,
37
38
  telegram_service: TelegramService,
38
39
  ) -> None:
39
- """Initialize the Conbus blink service.
40
+ """
41
+ Initialize the Conbus blink service.
40
42
 
41
43
  Args:
42
44
  conbus_protocol: ConbusEventProtocol instance for communication.
@@ -81,7 +83,8 @@ class ConbusBlinkService:
81
83
  self.service_response.operation = self.on_or_off
82
84
 
83
85
  def telegram_sent(self, telegram_sent: str) -> None:
84
- """Handle telegram sent event.
86
+ """
87
+ Handle telegram sent event.
85
88
 
86
89
  Args:
87
90
  telegram_sent: The telegram that was sent.
@@ -90,7 +93,8 @@ class ConbusBlinkService:
90
93
  self.service_response.sent_telegram = system_telegram
91
94
 
92
95
  def telegram_received(self, telegram_received: TelegramReceivedEvent) -> None:
93
- """Handle telegram received event.
96
+ """
97
+ Handle telegram received event.
94
98
 
95
99
  Args:
96
100
  telegram_received: The telegram received event.
@@ -131,7 +135,8 @@ class ConbusBlinkService:
131
135
  self.on_finish.emit(self.service_response)
132
136
 
133
137
  def failed(self, message: str) -> None:
134
- """Handle failed connection event.
138
+ """
139
+ Handle failed connection event.
135
140
 
136
141
  Args:
137
142
  message: Failure message.
@@ -148,7 +153,8 @@ class ConbusBlinkService:
148
153
  on_or_off: str,
149
154
  timeout_seconds: Optional[float] = None,
150
155
  ) -> None:
151
- r"""Send blink command to start blinking module LED.
156
+ r"""
157
+ Send blink command to start blinking module LED.
152
158
 
153
159
  Args:
154
160
  serial_number: 10-digit module serial number.
@@ -168,7 +174,8 @@ class ConbusBlinkService:
168
174
  # Caller invokes start_reactor()
169
175
 
170
176
  def set_timeout(self, timeout_seconds: float) -> None:
171
- """Set operation timeout.
177
+ """
178
+ Set operation timeout.
172
179
 
173
180
  Args:
174
181
  timeout_seconds: Timeout in seconds.
@@ -1,4 +1,5 @@
1
- """Conbus Custom Service for sending custom telegrams to modules.
1
+ """
2
+ Conbus Custom Service for sending custom telegrams to modules.
2
3
 
3
4
  This service handles custom telegram operations 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 ConbusCustomService:
22
- """Service for sending custom telegrams to Conbus modules.
23
+ """
24
+ Service for sending custom telegrams to Conbus modules.
23
25
 
24
26
  Uses ConbusEventProtocol to provide custom telegram functionality
25
27
  for sending arbitrary function codes and data to modules.
@@ -37,7 +39,8 @@ class ConbusCustomService:
37
39
  conbus_protocol: ConbusEventProtocol,
38
40
  telegram_service: TelegramService,
39
41
  ) -> None:
40
- """Initialize the Conbus custom service.
42
+ """
43
+ Initialize the Conbus custom service.
41
44
 
42
45
  Args:
43
46
  conbus_protocol: Protocol instance for Conbus communication.
@@ -82,7 +85,8 @@ class ConbusCustomService:
82
85
  )
83
86
 
84
87
  def telegram_sent(self, telegram_sent: str) -> None:
85
- """Handle telegram sent event.
88
+ """
89
+ Handle telegram sent event.
86
90
 
87
91
  Args:
88
92
  telegram_sent: The telegram that was sent.
@@ -90,7 +94,8 @@ class ConbusCustomService:
90
94
  self.service_response.sent_telegram = telegram_sent
91
95
 
92
96
  def telegram_received(self, telegram_received: TelegramReceivedEvent) -> None:
93
- """Handle telegram received event.
97
+ """
98
+ Handle telegram received event.
94
99
 
95
100
  Args:
96
101
  telegram_received: The telegram received event.
@@ -131,7 +136,8 @@ class ConbusCustomService:
131
136
  self.failed("Timeout")
132
137
 
133
138
  def failed(self, message: str) -> None:
134
- """Handle failed connection event.
139
+ """
140
+ Handle failed connection event.
135
141
 
136
142
  Args:
137
143
  message: Failure message.
@@ -151,7 +157,8 @@ class ConbusCustomService:
151
157
  data: str,
152
158
  timeout_seconds: Optional[float] = None,
153
159
  ) -> None:
154
- """Send a custom telegram to a module.
160
+ """
161
+ Send a custom telegram to a module.
155
162
 
156
163
  Args:
157
164
  serial_number: 10-digit module serial number.
@@ -167,7 +174,8 @@ class ConbusCustomService:
167
174
  self.set_timeout(timeout_seconds)
168
175
 
169
176
  def set_timeout(self, timeout_seconds: float) -> None:
170
- """Set operation timeout.
177
+ """
178
+ Set operation timeout.
171
179
 
172
180
  Args:
173
181
  timeout_seconds: Timeout in seconds.
@@ -1,4 +1,5 @@
1
- """Conbus DataPoint Query All Service.
1
+ """
2
+ Conbus DataPoint Query All Service.
2
3
 
3
4
  This module provides service for querying all datapoint types from a module.
4
5
  """
@@ -20,7 +21,8 @@ from xp.services.protocol.conbus_event_protocol import ConbusEventProtocol
20
21
 
21
22
 
22
23
  class ConbusDatapointQueryAllService:
23
- """Utility service for querying all datapoints from a module.
24
+ """
25
+ Utility service for querying all datapoints from a module.
24
26
 
25
27
  This service orchestrates multiple ConbusDatapointService calls to query
26
28
  all available datapoint types sequentially.
@@ -40,7 +42,8 @@ class ConbusDatapointQueryAllService:
40
42
  conbus_protocol: ConbusEventProtocol,
41
43
  telegram_service: TelegramService,
42
44
  ) -> None:
43
- """Initialize the query all service.
45
+ """
46
+ Initialize the query all service.
44
47
 
45
48
  Args:
46
49
  conbus_protocol: ConbusEventProtocol for protocol communication.
@@ -73,7 +76,8 @@ class ConbusDatapointQueryAllService:
73
76
  self.next_datapoint()
74
77
 
75
78
  def next_datapoint(self) -> bool:
76
- """Query the next datapoint type.
79
+ """
80
+ Query the next datapoint type.
77
81
 
78
82
  Returns:
79
83
  True if there are more datapoints to query, False otherwise.
@@ -111,7 +115,8 @@ class ConbusDatapointQueryAllService:
111
115
  self.on_finish.emit(self.service_response)
112
116
 
113
117
  def telegram_sent(self, telegram_sent: str) -> None:
114
- """Handle telegram sent event.
118
+ """
119
+ Handle telegram sent event.
115
120
 
116
121
  Args:
117
122
  telegram_sent: The telegram that was sent.
@@ -119,7 +124,8 @@ class ConbusDatapointQueryAllService:
119
124
  self.service_response.sent_telegram = telegram_sent
120
125
 
121
126
  def telegram_received(self, telegram_received: TelegramReceivedEvent) -> None:
122
- """Handle telegram received event.
127
+ """
128
+ Handle telegram received event.
123
129
 
124
130
  Args:
125
131
  telegram_received: The telegram received event.
@@ -152,7 +158,8 @@ class ConbusDatapointQueryAllService:
152
158
  self.on_progress.emit(datapoint_telegram)
153
159
 
154
160
  def failed(self, message: str) -> None:
155
- """Handle failed connection event.
161
+ """
162
+ Handle failed connection event.
156
163
 
157
164
  Args:
158
165
  message: Failure message.
@@ -170,7 +177,8 @@ class ConbusDatapointQueryAllService:
170
177
  serial_number: str,
171
178
  timeout_seconds: Optional[float] = None,
172
179
  ) -> None:
173
- """Query all datapoints from a module.
180
+ """
181
+ Query all datapoints from a module.
174
182
 
175
183
  Args:
176
184
  serial_number: 10-digit module serial number.
@@ -182,7 +190,8 @@ class ConbusDatapointQueryAllService:
182
190
  self.serial_number = serial_number
183
191
 
184
192
  def set_timeout(self, timeout_seconds: float) -> None:
185
- """Set operation timeout.
193
+ """
194
+ Set operation timeout.
186
195
 
187
196
  Args:
188
197
  timeout_seconds: Timeout in seconds.
@@ -1,4 +1,5 @@
1
- """Conbus Datapoint Service for querying module datapoints.
1
+ """
2
+ Conbus Datapoint Service for querying module datapoints.
2
3
 
3
4
  This service handles datapoint query operations for modules through Conbus telegrams.
4
5
  """
@@ -20,7 +21,8 @@ from xp.services.telegram.telegram_service import TelegramService
20
21
 
21
22
 
22
23
  class ConbusDatapointService:
23
- """Service for querying datapoints from Conbus modules.
24
+ """
25
+ Service for querying datapoints from Conbus modules.
24
26
 
25
27
  Uses ConbusEventProtocol to provide datapoint query functionality
26
28
  for reading sensor data and module information.
@@ -38,7 +40,8 @@ class ConbusDatapointService:
38
40
  conbus_protocol: ConbusEventProtocol,
39
41
  telegram_service: TelegramService,
40
42
  ) -> None:
41
- """Initialize the Conbus datapoint service.
43
+ """
44
+ Initialize the Conbus datapoint service.
42
45
 
43
46
  Args:
44
47
  conbus_protocol: Protocol instance for Conbus communication.
@@ -81,7 +84,8 @@ class ConbusDatapointService:
81
84
  )
82
85
 
83
86
  def telegram_sent(self, telegram_sent: str) -> None:
84
- """Handle telegram sent event.
87
+ """
88
+ Handle telegram sent event.
85
89
 
86
90
  Args:
87
91
  telegram_sent: The telegram that was sent.
@@ -89,7 +93,8 @@ class ConbusDatapointService:
89
93
  self.service_response.sent_telegram = telegram_sent
90
94
 
91
95
  def telegram_received(self, telegram_received: TelegramReceivedEvent) -> None:
92
- """Handle telegram received event.
96
+ """
97
+ Handle telegram received event.
93
98
 
94
99
  Args:
95
100
  telegram_received: The telegram received event.
@@ -124,7 +129,8 @@ class ConbusDatapointService:
124
129
  self.succeed(datapoint_telegram)
125
130
 
126
131
  def succeed(self, datapoint_telegram: ReplyTelegram) -> None:
127
- """Handle successful datapoint query.
132
+ """
133
+ Handle successful datapoint query.
128
134
 
129
135
  Args:
130
136
  datapoint_telegram: The parsed datapoint telegram.
@@ -147,7 +153,8 @@ class ConbusDatapointService:
147
153
  self.failed("Timeout")
148
154
 
149
155
  def failed(self, message: str) -> None:
150
- """Handle failed connection event.
156
+ """
157
+ Handle failed connection event.
151
158
 
152
159
  Args:
153
160
  message: Failure message.
@@ -167,7 +174,8 @@ class ConbusDatapointService:
167
174
  datapoint_type: DataPointType,
168
175
  timeout_seconds: float = 1.0,
169
176
  ) -> None:
170
- """Query a specific datapoint from a module.
177
+ """
178
+ Query a specific datapoint from a module.
171
179
 
172
180
  Args:
173
181
  serial_number: 10-digit module serial number.
@@ -181,7 +189,8 @@ class ConbusDatapointService:
181
189
  self.datapoint_type = datapoint_type
182
190
 
183
191
  def set_timeout(self, timeout_seconds: float) -> None:
184
- """Set operation timeout.
192
+ """
193
+ Set operation timeout.
185
194
 
186
195
  Args:
187
196
  timeout_seconds: Timeout in seconds.
@@ -1,7 +1,8 @@
1
- """Conbus Discover Service for TCP communication with Conbus servers.
1
+ """
2
+ Conbus Discover Service for TCP communication with Conbus servers.
2
3
 
3
- This service implements a TCP client that connects to Conbus servers and sends
4
- discover telegrams to find modules on the network.
4
+ This service implements a TCP client that connects to Conbus servers and sends discover
5
+ telegrams to find modules on the network.
5
6
  """
6
7
 
7
8
  import asyncio
@@ -40,7 +41,8 @@ class ConbusDiscoverService:
40
41
  on_device_discovered: Signal = Signal(ConbusDiscoverResponse)
41
42
 
42
43
  def __init__(self, conbus_protocol: ConbusEventProtocol) -> None:
43
- """Initialize the Conbus discover service.
44
+ """
45
+ Initialize the Conbus discover service.
44
46
 
45
47
  Args:
46
48
  conbus_protocol: ConbusProtocol.
@@ -68,7 +70,8 @@ class ConbusDiscoverService:
68
70
  )
69
71
 
70
72
  def telegram_sent(self, telegram_sent: str) -> None:
71
- """Handle telegram sent event.
73
+ """
74
+ Handle telegram sent event.
72
75
 
73
76
  Args:
74
77
  telegram_sent: The telegram that was sent.
@@ -77,7 +80,8 @@ class ConbusDiscoverService:
77
80
  self.discovered_device_result.sent_telegram = telegram_sent
78
81
 
79
82
  def telegram_received(self, telegram_received: TelegramReceivedEvent) -> None:
80
- """Handle telegram received event.
83
+ """
84
+ Handle telegram received event.
81
85
 
82
86
  Args:
83
87
  telegram_received: The telegram received event.
@@ -121,7 +125,8 @@ class ConbusDiscoverService:
121
125
  self.logger.debug("Not a discover or module type response")
122
126
 
123
127
  def handle_discovered_device(self, serial_number: str) -> None:
124
- """Handle discovered device event.
128
+ """
129
+ Handle discovered device event.
125
130
 
126
131
  Args:
127
132
  serial_number: Serial number of the discovered device.
@@ -153,7 +158,8 @@ class ConbusDiscoverService:
153
158
  def handle_module_type_code_response(
154
159
  self, serial_number: str, module_type_code: str
155
160
  ) -> None:
156
- """Handle module type code response and update discovered device.
161
+ """
162
+ Handle module type code response and update discovered device.
157
163
 
158
164
  Args:
159
165
  serial_number: Serial number of the device.
@@ -214,7 +220,8 @@ class ConbusDiscoverService:
214
220
  self.succeed()
215
221
 
216
222
  def handle_module_type_response(self, serial_number: str, module_type: str) -> None:
217
- """Handle module type response and update discovered device.
223
+ """
224
+ Handle module type response and update discovered device.
218
225
 
219
226
  Args:
220
227
  serial_number: Serial number of the device.
@@ -249,7 +256,8 @@ class ConbusDiscoverService:
249
256
  self.on_finish.emit(self.discovered_device_result)
250
257
 
251
258
  def failed(self, message: str) -> None:
252
- """Handle failed connection event.
259
+ """
260
+ Handle failed connection event.
253
261
 
254
262
  Args:
255
263
  message: Failure message.
@@ -267,7 +275,8 @@ class ConbusDiscoverService:
267
275
  self.on_finish.emit(self.discovered_device_result)
268
276
 
269
277
  def set_timeout(self, timeout_seconds: float) -> None:
270
- """Setup callbacks and timeout for receiving telegrams.
278
+ """
279
+ Setup callbacks and timeout for receiving telegrams.
271
280
 
272
281
  Args:
273
282
  timeout_seconds: Optional timeout in seconds.
@@ -279,7 +288,8 @@ class ConbusDiscoverService:
279
288
  self,
280
289
  event_loop: asyncio.AbstractEventLoop,
281
290
  ) -> None:
282
- """Setup callbacks and timeout for receiving telegrams.
291
+ """
292
+ Setup callbacks and timeout for receiving telegrams.
283
293
 
284
294
  Args:
285
295
  event_loop: Optional event loop to use for async operations.
@@ -296,7 +306,8 @@ class ConbusDiscoverService:
296
306
  self.conbus_protocol.stop_reactor()
297
307
 
298
308
  def __enter__(self) -> "ConbusDiscoverService":
299
- """Enter context manager.
309
+ """
310
+ Enter context manager.
300
311
 
301
312
  Returns:
302
313
  Self for context manager protocol.
@@ -1,7 +1,8 @@
1
- """Conbus Event List Service for listing configured event telegrams.
1
+ """
2
+ Conbus Event List Service for listing configured event telegrams.
2
3
 
3
- This service parses action tables from conson.yml and groups events
4
- by button configuration to show which modules are assigned to each event.
4
+ This service parses action tables from conson.yml and groups events by button
5
+ configuration to show which modules are assigned to each event.
5
6
  """
6
7
 
7
8
  import logging
@@ -14,7 +15,8 @@ from xp.services.actiontable.actiontable_serializer import ActionTableSerializer
14
15
 
15
16
 
16
17
  class ConbusEventListService:
17
- """Service for listing configured event telegrams from action tables.
18
+ """
19
+ Service for listing configured event telegrams from action tables.
18
20
 
19
21
  Parses action tables from conson.yml configuration and groups modules
20
22
  by their event keys to identify common button configurations.
@@ -25,7 +27,8 @@ class ConbusEventListService:
25
27
  """
26
28
 
27
29
  def __init__(self, conson_config: ConsonModuleListConfig) -> None:
28
- """Initialize the Conbus event list service.
30
+ """
31
+ Initialize the Conbus event list service.
29
32
 
30
33
  Args:
31
34
  conson_config: ConsonModuleListConfig instance with module action tables.
@@ -34,7 +37,8 @@ class ConbusEventListService:
34
37
  self.logger = logging.getLogger(__name__)
35
38
 
36
39
  def list_events(self) -> ConbusEventListResponse:
37
- """List all configured events from module action tables.
40
+ """
41
+ List all configured events from module action tables.
38
42
 
39
43
  Parses action tables, extracts event information (module_type, link, input),
40
44
  groups modules by event key, and sorts by usage count.
@@ -56,7 +60,7 @@ class ConbusEventListService:
56
60
  for action in module.action_table:
57
61
  try:
58
62
  # Use existing ActionTableSerializer to parse action
59
- entry = ActionTableSerializer.parse_action_string(action)
63
+ entry = ActionTableSerializer._parse_action_string(action)
60
64
 
61
65
  # Extract event data from parsed entry
62
66
  module_type_name = entry.module_type.name