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
xp/utils/state_machine.py CHANGED
@@ -1,7 +1,8 @@
1
- """Lightweight state machine utilities.
1
+ """
2
+ Lightweight state machine utilities.
2
3
 
3
- Provides simple, zero-dependency state machine implementation for
4
- managing state transitions with validation.
4
+ Provides simple, zero-dependency state machine implementation for managing state
5
+ transitions with validation.
5
6
  """
6
7
 
7
8
  from enum import Enum
@@ -9,7 +10,8 @@ from typing import Set
9
10
 
10
11
 
11
12
  class StateMachine:
12
- """Lightweight state machine for managing state transitions.
13
+ """
14
+ Lightweight state machine for managing state transitions.
13
15
 
14
16
  Enforces valid state transitions and prevents invalid operations.
15
17
  Zero dependencies, suitable for any state-based logic.
@@ -28,7 +30,8 @@ class StateMachine:
28
30
  """
29
31
 
30
32
  def __init__(self, initial: Enum):
31
- """Initialize state machine.
33
+ """
34
+ Initialize state machine.
32
35
 
33
36
  Args:
34
37
  initial: Initial state (any Enum value).
@@ -37,7 +40,8 @@ class StateMachine:
37
40
  self._valid_transitions: dict[str, Set[Enum]] = {}
38
41
 
39
42
  def define_transition(self, action: str, valid_sources: Set[Enum]) -> None:
40
- """Define valid source states for an action.
43
+ """
44
+ Define valid source states for an action.
41
45
 
42
46
  Args:
43
47
  action: Action name (e.g., "connect", "disconnect").
@@ -46,7 +50,8 @@ class StateMachine:
46
50
  self._valid_transitions[action] = valid_sources
47
51
 
48
52
  def can_transition(self, action: str) -> bool:
49
- """Check if action is valid from current state.
53
+ """
54
+ Check if action is valid from current state.
50
55
 
51
56
  Args:
52
57
  action: Action to check (e.g., "connect", "disconnect").
@@ -58,7 +63,8 @@ class StateMachine:
58
63
  return self.state in valid_sources
59
64
 
60
65
  def transition(self, action: str, new_state: Enum) -> bool:
61
- """Attempt state transition.
66
+ """
67
+ Attempt state transition.
62
68
 
63
69
  Args:
64
70
  action: Action triggering the transition.
@@ -73,7 +79,8 @@ class StateMachine:
73
79
  return False
74
80
 
75
81
  def get_state(self) -> Enum:
76
- """Get current state.
82
+ """
83
+ Get current state.
77
84
 
78
85
  Returns:
79
86
  Current state as Enum value.
xp/utils/time_utils.py CHANGED
@@ -79,7 +79,8 @@ def format_log_timestamp(dt: datetime) -> str:
79
79
  def parse_time_range(
80
80
  time_range_str: str, base_date: Optional[datetime] = None
81
81
  ) -> tuple[datetime, datetime]:
82
- """Parse time range string like "22:44:20,352-22:44:25,500".
82
+ """
83
+ Parse time range string like "22:44:20,352-22:44:25,500".
83
84
 
84
85
  Args:
85
86
  time_range_str: Time range string
@@ -105,7 +106,8 @@ def parse_time_range(
105
106
 
106
107
 
107
108
  def calculate_duration_ms(start_time: datetime, end_time: datetime) -> int:
108
- """Calculate duration between two timestamps in milliseconds.
109
+ """
110
+ Calculate duration between two timestamps in milliseconds.
109
111
 
110
112
  Args:
111
113
  start_time: Start timestamp
@@ -119,7 +121,8 @@ def calculate_duration_ms(start_time: datetime, end_time: datetime) -> int:
119
121
 
120
122
 
121
123
  def is_valid_log_timestamp(timestamp_str: str) -> bool:
122
- """Check if timestamp string is valid console bus log format.
124
+ """
125
+ Check if timestamp string is valid console bus log format.
123
126
 
124
127
  Args:
125
128
  timestamp_str: Timestamp string to validate
@@ -1,210 +0,0 @@
1
- conson_xp-1.45.0.dist-info/METADATA,sha256=8Qep1pDdqK32SxNSde2KAPTqpcOrpelxhUfmuUNS528,11403
2
- conson_xp-1.45.0.dist-info/WHEEL,sha256=tsUv_t7BDeJeRHaSrczbGeuK-TtDpGsWi_JfpzD255I,90
3
- conson_xp-1.45.0.dist-info/entry_points.txt,sha256=1OcdIcDM1hz3ljCXgybaPUh1IOFEwkaTgLIW9u9zGeg,50
4
- conson_xp-1.45.0.dist-info/licenses/LICENSE,sha256=rxj6woMM-r3YCyGq_UHFtbh7kHTAJgrccH6O-33IDE4,1419
5
- xp/__init__.py,sha256=alg3gEKtOcsjsOHoDtvjZ8hDNHys0SvRE-z83fLJdfg,181
6
- xp/cli/__init__.py,sha256=QjnKB1KaI2aIyKlzrnvCwfbBuUj8HNgwNMvNJVQofbI,81
7
- xp/cli/__main__.py,sha256=l2iKwMdat5rTGd3JWs-uGksnYYDDffp_Npz05QdKEeU,117
8
- xp/cli/commands/__init__.py,sha256=G7A1KFRSV0CEeDTqr_khu-K9_sc01CTI2KSfkFcaBRM,4949
9
- xp/cli/commands/conbus/__init__.py,sha256=HYaX2__XxwD3Xaw4CzflvL8CwoUa4yR6wOyH8wwyofM,535
10
- xp/cli/commands/conbus/conbus.py,sha256=1j9-Nwnf6nqD4ztBZnZEbJOTlkYo4D-Ks2J7BGNF3MU,3575
11
- xp/cli/commands/conbus/conbus_actiontable_commands.py,sha256=a46O8XYm7c8Z6Ao7ff92MdvlSrWcYZvNpZi2N2Vca6c,7661
12
- xp/cli/commands/conbus/conbus_autoreport_commands.py,sha256=TgXFVpoyFNiEatL6r78IghzyF0R2S3cgTrGZaiJPjwA,3934
13
- xp/cli/commands/conbus/conbus_blink_commands.py,sha256=HRn4Lr_BO7_WynsaUnO_hKezOi3MVhkPYEOnh0rMMlg,5324
14
- xp/cli/commands/conbus/conbus_config_commands.py,sha256=BugIbgNX6_s4MySGvI6tWZkwguciajHUX2Xz8XBux7k,716
15
- xp/cli/commands/conbus/conbus_custom_commands.py,sha256=nQttCXzmuUVLy5u7mZaRqYXzy8MIHyHRJQBdkDLunYc,1735
16
- xp/cli/commands/conbus/conbus_datapoint_commands.py,sha256=UZ_wTO0cdxjed0fGGZYylfJN9gaXwqLg3cn80JqqWt0,3751
17
- xp/cli/commands/conbus/conbus_discover_commands.py,sha256=MnTCzvERO5xerfs0fuuIBoo1O9h_0IfoJ6snLGVl0lA,1899
18
- xp/cli/commands/conbus/conbus_event_commands.py,sha256=Ps1hM0buhVQbYPgaap8HOS50aSHAIK2rk1SqKzny8rs,3075
19
- xp/cli/commands/conbus/conbus_export_commands.py,sha256=KSeXZbD6tO0_BMgqmg20iVaEWOdTIHZr3heVy0GM6lQ,2986
20
- xp/cli/commands/conbus/conbus_lightlevel_commands.py,sha256=AQhVneN5_rH6wd7D4KW80XIMh9MGjJv85gN57S206j4,7036
21
- xp/cli/commands/conbus/conbus_linknumber_commands.py,sha256=hVr1g6nDTa4MezW8joHPjPuZcMp2ttd9PfZaT9sQED4,3528
22
- xp/cli/commands/conbus/conbus_modulenumber_commands.py,sha256=FjFWnLU_aUoAXQ2tKKLC-ichNiIb90_9OWpSdIUyHvc,3600
23
- xp/cli/commands/conbus/conbus_msactiontable_commands.py,sha256=2M4abf8i51HwLF3wmUAgoCN-veXKMA8Fd0nWThyNPdg,9706
24
- xp/cli/commands/conbus/conbus_output_commands.py,sha256=rJx8pfsl_ZeCNXhEelsY7mfYnaj_DHdz4TC-e8d5QGs,5286
25
- xp/cli/commands/conbus/conbus_raw_commands.py,sha256=892-S6wxp5xNPz6K86Le8KtQXNO4a0PQv20Hzx3vhiA,1996
26
- xp/cli/commands/conbus/conbus_receive_commands.py,sha256=_PsC-3xidmJBuOWUS60iDzhSHYYn5ZFmORXap-ljVGM,1902
27
- xp/cli/commands/conbus/conbus_scan_commands.py,sha256=L7YHNnDUWxT8UHkQoNgyKa6twoUrE126XBkT1G76xK0,1805
28
- xp/cli/commands/file_commands.py,sha256=GV102X7FRZDUNKLlzvSsIGcoXAaofOzmjCp3HUpE9lw,5532
29
- xp/cli/commands/homekit/__init__.py,sha256=qqwY8ulxTx1S74Mzpb6EKjBLT6fWTNdf9PQ3HKuERKY,50
30
- xp/cli/commands/homekit/homekit.py,sha256=fiPBlE_nSndyO1ftEyTjL6xmgTh44Q3uZJEIcsf6W9I,3594
31
- xp/cli/commands/homekit/homekit_start_commands.py,sha256=-9vuj7NgcPNc1l6aEdiq1jO94Wa4cYjemnNSa-lMtvE,1120
32
- xp/cli/commands/module_commands.py,sha256=xjRFsrNqzdSJT-YmRFqxDNJPH0kZgT-za_4vnk8ToXQ,5386
33
- xp/cli/commands/reverse_proxy_commands.py,sha256=dusGISfuSVW6zdrc1-UKxnMj29dCCcRCHJxe2PRwnP0,5457
34
- xp/cli/commands/server/__init__.py,sha256=iunDmcaax9U-SHymgGzUlPadGdZLFl9LlhXu2mnyb64,49
35
- xp/cli/commands/server/server_commands.py,sha256=I7A8qaHL01H4JKMbaw_WTHVUCIurpZJBMR9wVJwaKhM,3877
36
- xp/cli/commands/telegram/__init__.py,sha256=KPhwoU5uscHe3tFAxWXxgFV5OKi9bISBh_TSREnxBFQ,181
37
- xp/cli/commands/telegram/telegram.py,sha256=6bF0RGZhWaa9vlkor5vNGvsOlj7J3YpwMowZLauUGHw,960
38
- xp/cli/commands/telegram/telegram_blink_commands.py,sha256=_WGBRO9cHkuCYMiUbdwpRdvPl-EpOuKvE6LNY2u4fyY,2188
39
- xp/cli/commands/telegram/telegram_checksum_commands.py,sha256=6Z8EOqzQ49eG1UBJe9x3B5HkbT_d-F6xELnmuAupy7I,3353
40
- xp/cli/commands/telegram/telegram_discover_commands.py,sha256=0UArJinw1eWFbee5EGMNRILE-wmECMSaJjBcCuc35xc,1114
41
- xp/cli/commands/telegram/telegram_linknumber_commands.py,sha256=7j0-E5Moqqga4NrKDch82C6glaFDFMQn5_3hMwie7BQ,2511
42
- xp/cli/commands/telegram/telegram_parse_commands.py,sha256=_OYOso1hS4f_ox96qlkYL2SuFnmimpAvqqdYlLzX9yo,2232
43
- xp/cli/commands/telegram/telegram_version_commands.py,sha256=WQyx1-B9yJ8V9WrFyBpOvULJ-jq12GoZZDDoRbM7eyw,1553
44
- xp/cli/commands/term/__init__.py,sha256=1NNST_8YJfj5LCujQISwQflK6LyEn7mDmZpMpvI9d-o,116
45
- xp/cli/commands/term/term.py,sha256=gjvsv2OE-F_KNWQrWi04fXQ5cGo0l8P-Ortbb5KTA-A,309
46
- xp/cli/commands/term/term_commands.py,sha256=CwqnLPEi7LuC7bCo7kIGKMZoVICY0nu42k8C554A1TA,1206
47
- xp/cli/main.py,sha256=3bksBas1mI-PZQGVxDJ7aoAG09L-cMQMK9Uf7y6_aF8,1963
48
- xp/cli/utils/__init__.py,sha256=gTGIj60Uai0iE7sr9_TtEpl04fD7krtTzbbigXUsUVU,46
49
- xp/cli/utils/click_tree.py,sha256=ilmM2IMa_c-TqUMsv2alrZXuS0BNhvVlrBlSfyN8lzM,1670
50
- xp/cli/utils/datapoint_type_choice.py,sha256=HcydhlqxZ7YyorEeTjFGkypF2JnYNPvOzkl1rhZ93Fc,1666
51
- xp/cli/utils/decorators.py,sha256=iAWm75VK_opqjX2h7ATZXlMzPINhF1FeeACzukm7ldQ,10149
52
- xp/cli/utils/error_handlers.py,sha256=zL4f6996Is0lWl8uITNqiLyPNaeW6uUbkew7BRCFi8Y,6581
53
- xp/cli/utils/formatters.py,sha256=fl7UmX6yLypqc0_QWevgPO2L6XA2Kd_0d_GSLUV5U30,9776
54
- xp/cli/utils/module_type_choice.py,sha256=TPIEDsO0fNDu2HOQQ16WCJ-a7o2f58j3IKd8B0XsBDQ,1658
55
- xp/cli/utils/serial_number_type.py,sha256=GUs3jtVI6EVulvt6fCDN6H6vxhiJwdMmdIvLjDlGGZ4,1466
56
- xp/cli/utils/system_function_choice.py,sha256=0J02EMgAQcsrE-9rEkv6YHelBoBkZ73T8VLBSm6YO5k,1623
57
- xp/cli/utils/xp_module_type.py,sha256=qSFJBRceqPi_cUFPxAWtLUNq37-KwUEjo9ekYOj7kLQ,1471
58
- xp/models/__init__.py,sha256=lROqr559DGd8WpJJUtfPT95VERCwMZHpBDEc96QSxQ0,1312
59
- xp/models/actiontable/__init__.py,sha256=6kVq1rTOlpc24sZxGGVWkY48tqR42YWHLQHqakWqlPc,43
60
- xp/models/actiontable/actiontable.py,sha256=bIeluZhMsvukkSwy2neaewavU8YR6Pso3PIvJ8ENlGg,1251
61
- xp/models/actiontable/msactiontable_xp20.py,sha256=zc9akPpuaW-pBk1vD9xn0JDWm_c2fiJYDuuk-DbvbGQ,5006
62
- xp/models/actiontable/msactiontable_xp24.py,sha256=tpgYvlQwxhjo70Ucsg_rB9ox7-jlG2b-GBj-UXwP2Ic,9377
63
- xp/models/actiontable/msactiontable_xp33.py,sha256=p_0HrvUmnqEEUlle7n0vpspGXFPrO5pXZeVF7n9K19g,11781
64
- xp/models/conbus/__init__.py,sha256=VIusMWQdBtlwDgj7oSj06wQkklihTp4oWFShvP_JUgA,35
65
- xp/models/conbus/conbus.py,sha256=mZQzKPfrdttT-qUnYUSyrEYyc_eHs8z301E5ejeiyvk,2689
66
- xp/models/conbus/conbus_autoreport.py,sha256=lKotDfxRBb7h2Z1d4qI3KhhLJhFDwKqLbSdG5Makm8Y,2289
67
- xp/models/conbus/conbus_blink.py,sha256=XEAPtA-O76ulX6Zh1oYzsWF6L4css6xJBuUTwNcDQKc,2911
68
- xp/models/conbus/conbus_client_config.py,sha256=MliIffoP0Ku1FxpNznMJPBrpdz9OVKZcs9IJ4g1Z3dE,1485
69
- xp/models/conbus/conbus_connection_status.py,sha256=iGbmtBaAMwV6UD7XG3H3tnB0fl2MR8rJhpjrLH2KjsE,1097
70
- xp/models/conbus/conbus_custom.py,sha256=8H2sPR6_LIlksuOvL7-8bPkzAJLR0rpYiiwfYYFVjEo,1965
71
- xp/models/conbus/conbus_datapoint.py,sha256=4ncR-vB2lRzRBAA30rYn8eguyTxsZoOKrrXtjGmPpWg,3396
72
- xp/models/conbus/conbus_discover.py,sha256=nxxUEKfEsH1kd0BF8ovMs7zLujRhrq1oL9ZJtysPr5o,2238
73
- xp/models/conbus/conbus_event_list.py,sha256=M8aHRHVB5VDIjqMzjO86xlERt7AMdfjIjt1b70RF52Y,958
74
- xp/models/conbus/conbus_event_raw.py,sha256=i5gc7z-0yeunWOZ4rw3AiBt4MANezmhBQKjOOQk3oDc,1567
75
- xp/models/conbus/conbus_export.py,sha256=esxd7phNCRCunn5YqOL4g9xk3QyZiOJYHide_oLKi34,1278
76
- xp/models/conbus/conbus_lightlevel.py,sha256=GQGhzrCBEJROosNHInXIzBy6MD2AskEIMoFEGgZ60-0,1695
77
- xp/models/conbus/conbus_linknumber.py,sha256=uFzKzfB06oIzZEKCb5X2JEI80JjMPFuYglsT1W1k8j4,1815
78
- xp/models/conbus/conbus_logger_config.py,sha256=cFWjWn8tc_hPPI2kQAib_Akddar8O-3zkoj6wLBsdUo,3328
79
- xp/models/conbus/conbus_output.py,sha256=q7QKsD_CWT7YOk-V3otKWD1VM7qThrSLIUOunntMrMc,1953
80
- xp/models/conbus/conbus_raw.py,sha256=xqvYao6IE1SXum7JBgZpSuWXm9x_QZquS9N_3_r0Hjs,1460
81
- xp/models/conbus/conbus_receive.py,sha256=-1u1qK-texfKCNZV-GYf_9KyLtJdIrx7HuZsKzu26Ow,1322
82
- xp/models/conbus/conbus_writeconfig.py,sha256=z8fdJeFLyGJW7UMHcHxGrHIMS6gG1D3aXeYUkBuwnEg,2136
83
- xp/models/config/__init__.py,sha256=gEZnX9eE3DjFtLtF32riEjJQLypqQRbyPauBI4Cowbs,36
84
- xp/models/config/conson_module_config.py,sha256=2uM1M4oKgQ3pkuEAEHHFMwZVGpWImJEe91TWgfS1ikU,2981
85
- xp/models/homekit/__init__.py,sha256=5HDSOClCu0ArK3IICn3_LDMMLBAzLjBxUUSF73bxSSk,34
86
- xp/models/homekit/homekit_accessory.py,sha256=NsHFhskuxIdJpF9-MvXHtjkLYvNHmSGFOy0GmQv3PY4,1038
87
- xp/models/homekit/homekit_config.py,sha256=Y_k92PsKHFBnn3r1_RSZHJP5uLH27Gw8G7Bj5N8jvUE,2904
88
- xp/models/log_entry.py,sha256=kPcYuAirCXugfL3YkOK9cQVlkNWxG_8a4AVuhsykHL0,4355
89
- xp/models/protocol/__init__.py,sha256=TJ_CJKchA-xgQiv5vCo_ndBBZjrcaTmjT74bR0T-5Cw,38
90
- xp/models/protocol/conbus_protocol.py,sha256=m8DnewIw4JSLG21hdqpcAjZVHfjSCYIUQ2imwfveggU,9139
91
- xp/models/response.py,sha256=h6_B1k_v6IrWhgNWBohEGQGRCp5TcVhgQ3RJS8gTkhY,1230
92
- xp/models/telegram/__init__.py,sha256=-_exhjlRLbBNuPxHC4tLA2SAgf8M0yHJMeyEoQIk9PI,53
93
- xp/models/telegram/action_type.py,sha256=vkw_chTgmsadksGXvZ9D_qYGpjOwCw-OgbEi8Bml17g,783
94
- xp/models/telegram/datapoint_type.py,sha256=7aV-oUkqDiurT3b9mRF6M6yc5wu71AT3SXlgl6b9CDI,4067
95
- xp/models/telegram/event_telegram.py,sha256=FCCfyZXQEUPB6Uo1m7B9nvFCJ0Ipv2CApmImAZo_Xa4,4689
96
- xp/models/telegram/event_type.py,sha256=VZhaDpey7KYWnmwN-gstj-r4Vd5hiGdzQuRazUdixB8,333
97
- xp/models/telegram/input_action_type.py,sha256=EDYtE4uxByUyGsZTkXxwN9rQxCAejWk08_kv-7COurM,1852
98
- xp/models/telegram/input_type.py,sha256=X3AcKKMNHswNZs5xgT_AnxeKQpSx_U7ctGnr6AYqNoU,491
99
- xp/models/telegram/module_type.py,sha256=TdrcQC3UcdESzyUmS9PaVeJuF5VxH1WUtDWdf4QRA50,5223
100
- xp/models/telegram/module_type_code.py,sha256=bg8Zi58yKs5DDnEF0bGnZ9vvpqzmIZzd1k9Wu4ufB-Y,8177
101
- xp/models/telegram/output_telegram.py,sha256=vTSdeAGk7va89pZ8-oh0cna98N3T6if-6UcrstWsN6s,3473
102
- xp/models/telegram/reply_telegram.py,sha256=oqNwDvaOhFTPuXL0fP9Ca3rbcKepDhRz9kIneKCk6n0,10376
103
- xp/models/telegram/system_function.py,sha256=ZiY5preq_teO10R6489ZOaYjkJsYFpHZ5_tJpGM6E-Y,4794
104
- xp/models/telegram/system_telegram.py,sha256=9FNQ4Mf47mRK7wGrTg2GzziVsrEWCE5ZkZp5kA7K3w0,3218
105
- xp/models/telegram/telegram.py,sha256=IJUxHX6ftLcET9C1pjvLhUO5Db5JO6W7rUItzdEW30I,842
106
- xp/models/telegram/telegram_type.py,sha256=GhqKP63oNMyh2tIvCPcsC5RFp4s4JjhmEqCLCC-8XMk,423
107
- xp/models/telegram/timeparam_type.py,sha256=Ar8xvSfPmOAgR2g2Je0FgvP01SL7bPvZn5_HrVDpmJM,1137
108
- xp/models/term/__init__.py,sha256=aFvzGZHr_dI6USb8MJuYLSLMvxi_ZWMVtokHDt8428s,263
109
- xp/models/term/connection_state.py,sha256=floDRMeMcfgMrYIVsyoVHBXHtxd3hqm-xOdr3oXtaHY,1793
110
- xp/models/term/module_state.py,sha256=tg5V3HNicXhXE10WuDSCN8OleVrorXrOosXOEgEAVE0,934
111
- xp/models/term/protocol_keys_config.py,sha256=CTujcfI2_NOeltjvHy_cnsHzxLSVsGFXieMZlD-zj0Q,1204
112
- xp/models/term/status_message.py,sha256=DOmzL0dbig5mP1UEoXdgzGT4UG2RyAXa_yRVo5c4x8w,394
113
- xp/models/term/telegram_display.py,sha256=RJDrJh4tqRmT0i1-tfYy17paEmVb3HY3DMuFPsEhZyc,533
114
- xp/models/write_config_type.py,sha256=T2RaO52RpzoJ4782uMHE-fX7Ymx3CaIQAEwByydXq1M,881
115
- xp/services/__init__.py,sha256=W9YZyrkh7vm--ZHhAXNQiOYQs5yhhmUHXP5I0Lf1XBg,782
116
- xp/services/actiontable/__init__.py,sha256=z6js4EuJ6xKHaseTEhuEvKo1tr9K1XyQiruReJtBiPY,26
117
- xp/services/actiontable/actiontable_serializer.py,sha256=U7bhd8lYMUJAsFydCt_Y5uOJoUODhSjRlUQPD6jsqMo,8517
118
- xp/services/actiontable/msactiontable_serializer.py,sha256=RRL6TZ1gpSQw81kAiw2BV3jTqm4fCJC0pWIcO26Cmos,174
119
- xp/services/actiontable/msactiontable_xp20_serializer.py,sha256=5e9L-xlFUSu2RJnhr0BQIbhIPZVRiOhp8kKvbWsU5BQ,6438
120
- xp/services/actiontable/msactiontable_xp24_serializer.py,sha256=ku84HCCjYDM9XpRKIWx1HnW1_U0LyFDH57f9Gig-pgQ,4607
121
- xp/services/actiontable/msactiontable_xp33_serializer.py,sha256=MFjEwSsIa8l3RJt-ig828E6kyiFYYXMHFKe4Q0A3NvA,8781
122
- xp/services/conbus/__init__.py,sha256=Hi35sMKu9o6LpYoi2tQDaQoMb8M5sOt_-LUTxxaCU_0,28
123
- xp/services/conbus/actiontable/__init__.py,sha256=oD6vRk_Ye-eZ9s_hldAgtRJFu4mfAnODqpkJUGHHszk,40
124
- xp/services/conbus/actiontable/actiontable_download_service.py,sha256=RMGC3WxlMQDJkkXy3oKmqkORrXNwQyjDkyfEGWX3JJE,21294
125
- xp/services/conbus/actiontable/actiontable_list_service.py,sha256=BYNpxdhdVvn5Z3XXvUYyiGGZ3fOoKR1F0boYDfAQ80c,2894
126
- xp/services/conbus/actiontable/actiontable_show_service.py,sha256=Z11bVYstnIhahFKTL8WqgTmK8rMK6kvismdy7679ojY,3013
127
- xp/services/conbus/actiontable/actiontable_upload_service.py,sha256=HTWJqJTIDFsp5v0SBx1Wt5gUeso6w03N6bKbtsbHtJY,9705
128
- xp/services/conbus/conbus_blink_all_service.py,sha256=6XsqtgHUgPDPWG0Mx2W2gnG_1eiaHrt2DiPXGqGHS50,8472
129
- xp/services/conbus/conbus_blink_service.py,sha256=wFCUbHYInbzfE4Ks_qjkav0FhtHXsxM9IY6tD5r0oAk,7898
130
- xp/services/conbus/conbus_custom_service.py,sha256=uPsBkoVGr8I5JwpHiCM8Xf2DUYy6e34cQHmGSheY98Y,7766
131
- xp/services/conbus/conbus_datapoint_queryall_service.py,sha256=K8a_aO5rXuOx9ZHTrN1rpQ6KIOAkhYx-HsqDf0HIo-E,8399
132
- xp/services/conbus/conbus_datapoint_service.py,sha256=MFyYv2TkP355S5phKLtfj05b5AtfwgQyCvklkR7AKT8,8026
133
- xp/services/conbus/conbus_discover_service.py,sha256=ZwjYBlgP6FgpHBJk7pcKr4JHfH7WUHDxe4he4F_HblQ,12740
134
- xp/services/conbus/conbus_event_list_service.py,sha256=og3medmu69CnEgzhgqihIV1yLNOQ_YTHr4zUtidGmIE,3616
135
- xp/services/conbus/conbus_event_raw_service.py,sha256=FZFu-LNLInrTKTpiGLyootozvyIF5Si5FMrxNk2ALD0,7000
136
- xp/services/conbus/conbus_export_service.py,sha256=aQz2cRMhTiUQgEaxeFRuOW8LEsfSqJzaivsHgGKEJtU,17298
137
- xp/services/conbus/conbus_output_service.py,sha256=XHn_htcTt2TBSpuXr2DNsT8oOC2soctNFIojhYfd_v0,9297
138
- xp/services/conbus/conbus_raw_service.py,sha256=FmUaF9o2nFZVP8LpabKIwkg0P8coLCkeJC4yYgsA6U0,5780
139
- xp/services/conbus/conbus_receive_service.py,sha256=7wOaEDrdoXwZE9MeUM89eB3hobYpvtbYk_YLv3MVAtc,5352
140
- xp/services/conbus/conbus_scan_service.py,sha256=QN7_x8BtNbHnqG7akcooAAcjz9Ex2y3VNDdhShKHUX8,6824
141
- xp/services/conbus/msactiontable/__init__.py,sha256=rDYzumPSfcTjDADHxjE7bXQoeWtZTDGaYzFTYdVl_9g,42
142
- xp/services/conbus/msactiontable/msactiontable_download_service.py,sha256=YAQeUAO04VkRTEvWwXBD_b6tdVjDYk55K4pZd7lxfE8,10049
143
- xp/services/conbus/msactiontable/msactiontable_list_service.py,sha256=bTqUI2xs3Ie0MeZ_PYm-Bgx9A-Eewlpc8Tv6jhi1_kA,3127
144
- xp/services/conbus/msactiontable/msactiontable_show_service.py,sha256=pyoB5xN1bDh0E8kity4k0UnYpc7-YWhs8oIMvAeC9Xk,3023
145
- xp/services/conbus/msactiontable/msactiontable_upload_service.py,sha256=D_sWGFlABVCBxzqt-6y8eB--ZpywS5MjC6ER-JESq74,12336
146
- xp/services/conbus/write_config_service.py,sha256=PQsN7rtTKHpwtAG8moLksUfRVqqE_0sxdE37meR1ZQ0,8935
147
- xp/services/homekit/__init__.py,sha256=xAMKmln_AmEFdOOJGKWYi96seRlKDQpKx3-hm7XbdIo,36
148
- xp/services/homekit/homekit_cache_service.py,sha256=NdijyH5_iyhsTHBb-OyT8Y2xnNDj8F5MP8neoVQ26hY,11010
149
- xp/services/homekit/homekit_conbus_service.py,sha256=porvo4nZ4PE0R6bdaKwClDW2kevkW_8DOzw4NOO6DZQ,3348
150
- xp/services/homekit/homekit_config_validator.py,sha256=1m0FJddMyb5Yy73s6iMRZ7YTzLBu0wZwkLTACadmiL4,10730
151
- xp/services/homekit/homekit_conson_validator.py,sha256=zRyCb0CIye8DO14bztEhx1kYazYZaPEMCBBLn9FZj2Q,3785
152
- xp/services/homekit/homekit_dimminglight.py,sha256=3VP2vs_73yvPkr6trwKlvGMC_UHPj-iqgOhiqH2HQCE,5768
153
- xp/services/homekit/homekit_dimminglight_service.py,sha256=lxFE2k8a8V9YQwpWPAAmbUvYD3zDlVa337xzDQl6tjM,5231
154
- xp/services/homekit/homekit_hap_service.py,sha256=YrFe10XPBf6EC2SRnWmcCbjdVkrHjxSNPwYDPVvQiDQ,12527
155
- xp/services/homekit/homekit_lightbulb.py,sha256=3-pbCEcw44Vk_HwHI0LCJmTO4A6cNndoA1-Fv1glWvU,3659
156
- xp/services/homekit/homekit_lightbulb_service.py,sha256=G_ummBFiBurhQ2ZVwJ9l_aZ2MQgl5Uq-oi3KjIrdb-Y,2752
157
- xp/services/homekit/homekit_module_service.py,sha256=hxJwbP7tV1K_zotMMP-Kyt2SQQT3DjSt50ty2ITIe_Y,1524
158
- xp/services/homekit/homekit_outlet.py,sha256=ItWJMC-0xwX0k1JeMzPPmpE_ifKvYZ7n7_icBKLV5Lg,5207
159
- xp/services/homekit/homekit_outlet_service.py,sha256=y7DbWbbvihWwF1Gyl0l9Hup1JHin6PTlDEHdoIqTfEQ,3798
160
- xp/services/homekit/homekit_service.py,sha256=0lW-hg40ETco3gDBEYkR_sX-UIYsLSKCD4NWruLXUM8,14031
161
- xp/services/log_file_service.py,sha256=fvPcZQj8XOKUA-4ep5R8n0PelvwvRlTLlVxvIWM5KR4,10506
162
- xp/services/module_type_service.py,sha256=xWhr1EAZMykL5uNWHWdpa5T8yNruGKH43XRTOS8GwZg,7477
163
- xp/services/protocol/__init__.py,sha256=qRufBmqRKGzpuzZ5bxBbmwf510TT00Ke8s5HcWGnqRY,818
164
- xp/services/protocol/conbus_event_protocol.py,sha256=XjdVwy7P87Utu_UqK7upfugrA5fYG2iWBwC4go9KFLY,15498
165
- xp/services/protocol/conbus_protocol.py,sha256=JO7yLkD_ohPT0ETjnAIx4CGpZyobf4LdbuozM_43btE,10276
166
- xp/services/protocol/protocol_factory.py,sha256=PmjN9AtW9sxNo3voqUiNgQA-pTvX1RW4XXFlHKfFr5Q,2470
167
- xp/services/protocol/telegram_protocol.py,sha256=Ki5DrXsKxiaqLcdP9WWUuhUI7cPu2DfwyZkh-Gv9Lb8,9496
168
- xp/services/reverse_proxy_service.py,sha256=BUOlcLlTU-R5iuC_96rasug21xo19wK9_4fMQXxc0QM,15061
169
- xp/services/server/__init__.py,sha256=QEcCj-jK0goAukJCe15TKYFQfSAzWsduPT_wW0HxZU8,48
170
- xp/services/server/base_server_service.py,sha256=B-ntxp3swbwuri-9_2EuvBDi-4Uo9AH-AA4iAFGWIS4,12682
171
- xp/services/server/client_buffer_manager.py,sha256=1d_MqfzuUqBwaQUiC1n5K76WwSxrdngYAmNH7he6u3o,2235
172
- xp/services/server/cp20_server_service.py,sha256=SXdI6Jt400T9sLdw86ovEqKRGeV3nYVaHEA9Gcj6W2A,2041
173
- xp/services/server/device_service_factory.py,sha256=Y4TvSFALeq0zYzHfCwcbikSpmIyYbLcvm9756n5Jm7Q,3744
174
- xp/services/server/server_service.py,sha256=2jMrL-Azn7KaqpgSI1ztBh0UD3JWom5ns33IkqMCDac,16302
175
- xp/services/server/xp130_server_service.py,sha256=YnvetDp72-QzkyDGB4qfZZIwFs03HuibUOz2zb9XR0c,2191
176
- xp/services/server/xp20_server_service.py,sha256=1wJ7A-bRkN9O5Spu3q3LNDW31mNtNF2eNMQ5E6O2ltA,2928
177
- xp/services/server/xp230_server_service.py,sha256=k9ftCY5tjLFP31mKVCspq283RVaPkGx-Yq61Urk8JLs,1815
178
- xp/services/server/xp24_server_service.py,sha256=a-RZzmieoPd8-SrNX1qwdqzsizjjWwz6TAb0f4Ehz2k,8598
179
- xp/services/server/xp33_server_service.py,sha256=vvgQxnYXfHlzh3uFYxexHrrOr4l1qPI85n6ig17iWA0,19673
180
- xp/services/telegram/__init__.py,sha256=kv0JgMg13Fp18WgGQpalNRAWwiWbrz18X4kZAP9xpSQ,48
181
- xp/services/telegram/telegram_blink_service.py,sha256=Xctc9mCSZiiW1YTh8cA-4jlc8fTioS5OxT6ymhSqiYI,4487
182
- xp/services/telegram/telegram_checksum_service.py,sha256=rp_C5PlraOOIyqZDp9XjBBNZLUeBLdQNNHVpN6D-1v8,4729
183
- xp/services/telegram/telegram_datapoint_service.py,sha256=iZ-zp_EM_1ouyeTbd2erhIY2x-98nEHveWWN_a9NfFU,2750
184
- xp/services/telegram/telegram_discover_service.py,sha256=oTpiq-yzP_UmC0xVOMMFeHO-rIlK1pF3aG-Kq4SeiBI,9025
185
- xp/services/telegram/telegram_link_number_service.py,sha256=1_c-_QCRPTHYn3BmMElrBJqGG6vnoIst8CB-N42hazk,6862
186
- xp/services/telegram/telegram_output_service.py,sha256=LK9xHAc3eNeXz82Xs9Nm8WfrHNr7-u2vboDiB7mIFPQ,11950
187
- xp/services/telegram/telegram_service.py,sha256=XrP1CPi0ckxoKBaNwLA6lo-TogWxXgmXDOsU4Xl8BlY,13237
188
- xp/services/telegram/telegram_version_service.py,sha256=M5HdOTsLdcwo122FP-jW6R740ktLrtKf2TiMDVz23h8,10528
189
- xp/services/term/__init__.py,sha256=BIeOK042bMR-0l6MA80wdW5VuHlpWOXtRER9IG5ilQA,245
190
- xp/services/term/protocol_monitor_service.py,sha256=PhEzLNzWf1XieQw94ua-hJu9ccwrAzhdxSZGe4kHghs,9945
191
- xp/services/term/state_monitor_service.py,sha256=p6h5cv_3mjij4okp73chR7Z-kGVgHwMdEq8aW0JqIDE,16959
192
- xp/term/__init__.py,sha256=Xg2DhBeI3xQJLfc7_BPWI1por-rUXemyer5OtOt9Cus,51
193
- xp/term/protocol.py,sha256=oLJAExvIaOSpy75A5TaYB_7R9skTTtNtPx8hiJLdy_U,3425
194
- xp/term/protocol.tcss,sha256=r_KfxrbpycGHLVXqZc6INBBcUJME0hLrAZkF1oqnab4,2126
195
- xp/term/state.py,sha256=sR7I6t4gJSkO2YS3TwonAnGPR_f43coCk4xKdWETus0,3233
196
- xp/term/state.tcss,sha256=Njp7fc16cCunLq7hi5RvXjPi4jSCGi5aPDnusb9dq1Y,1401
197
- xp/term/widgets/__init__.py,sha256=ftWmN_fmjxy2E8Qfm-YSRmzKfgL0KTBCTpgvYWCPbUY,274
198
- xp/term/widgets/help_menu.py,sha256=w2NjwiC_s16St0rigZ9ef9S0V9Y4v0J5eCVCHAdRKF4,1789
199
- xp/term/widgets/modules_list.py,sha256=cZlrHhse9onSZGBeJe9tuByWCk-928bsmUBGNeXiF2I,7745
200
- xp/term/widgets/protocol_log.py,sha256=CJUpckWj7GC1kVqixDadteyGnI4aHyzd4kkH-pSbzno,2600
201
- xp/term/widgets/status_footer.py,sha256=bxrcqKzJ9V0aPSn_WwraVpJz7NxBUh3yIjA3fwv5nVA,3256
202
- xp/utils/__init__.py,sha256=_avMF_UOkfR3tNeDIPqQ5odmbq5raKkaq1rZ9Cn1CJs,332
203
- xp/utils/checksum.py,sha256=HDpiQxmdIedbCbZ4o_Box0i_Zig417BtCV_46ZyhiTk,1711
204
- xp/utils/dependencies.py,sha256=zrvWx28N0f28JwRDRyqaf5Q9eV_yLwh9xDw9mYBUXEQ,25379
205
- xp/utils/event_helper.py,sha256=W-A_xmoXlpWZBbJH6qdaN50o3-XrwFsDgvAGMJDiAgo,1001
206
- xp/utils/logging.py,sha256=rZDXwlBrYK8A6MPq5StsMNpgsRowzJXM6fvROPwJdGM,3750
207
- xp/utils/serialization.py,sha256=RWHHk86feaB4ZP7rjE4qOWK0900yg2joUBDkP76gfOY,4618
208
- xp/utils/state_machine.py,sha256=Oe2sLwCh9z_vr1tF6X0ZRGTeuckRQAGzmef7xc9CNdc,2413
209
- xp/utils/time_utils.py,sha256=dEyViDlAG9GWU-J3D_YVa-sGma6yiyyMTgN4h2x3PY4,3781
210
- conson_xp-1.45.0.dist-info/RECORD,,
@@ -1,275 +0,0 @@
1
- """Service for downloading XP24 action tables via Conbus protocol."""
2
-
3
- import logging
4
- from typing import Any, Optional, Union
5
-
6
- from psygnal import Signal
7
-
8
- from xp.models.actiontable.msactiontable_xp20 import Xp20MsActionTable
9
- from xp.models.actiontable.msactiontable_xp24 import Xp24MsActionTable
10
- from xp.models.actiontable.msactiontable_xp33 import Xp33MsActionTable
11
- from xp.models.protocol.conbus_protocol import TelegramReceivedEvent
12
- from xp.models.telegram.system_function import SystemFunction
13
- from xp.models.telegram.telegram_type import TelegramType
14
- from xp.services.actiontable.msactiontable_xp20_serializer import (
15
- Xp20MsActionTableSerializer,
16
- )
17
- from xp.services.actiontable.msactiontable_xp24_serializer import (
18
- Xp24MsActionTableSerializer,
19
- )
20
- from xp.services.actiontable.msactiontable_xp33_serializer import (
21
- Xp33MsActionTableSerializer,
22
- )
23
- from xp.services.protocol.conbus_event_protocol import ConbusEventProtocol
24
- from xp.services.telegram.telegram_service import TelegramService
25
-
26
-
27
- class MsActionTableError(Exception):
28
- """Raised when XP24 action table operations fail."""
29
-
30
- pass
31
-
32
-
33
- class MsActionTableDownloadService:
34
- """
35
- Service for downloading MS action tables via Conbus protocol.
36
-
37
- Uses ConbusEventProtocol to download action tables from XP20, XP24, or XP33 modules.
38
- Emits signals for progress updates, errors, and completion.
39
-
40
- Attributes:
41
- conbus_protocol: Protocol instance for Conbus communication.
42
- on_progress: Signal emitted for progress updates (str).
43
- on_error: Signal emitted for errors (str).
44
- on_finish: Signal emitted when XP download completes (Xp20MsActionTable, str).
45
- """
46
-
47
- on_progress: Signal = Signal(str)
48
- on_error: Signal = Signal(str)
49
- on_finish: Signal = Signal(object, list[str])
50
-
51
- def __init__(
52
- self,
53
- conbus_protocol: ConbusEventProtocol,
54
- xp20ms_serializer: Xp20MsActionTableSerializer,
55
- xp24ms_serializer: Xp24MsActionTableSerializer,
56
- xp33ms_serializer: Xp33MsActionTableSerializer,
57
- telegram_service: TelegramService,
58
- ) -> None:
59
- """Initialize the MS action table service.
60
-
61
- Args:
62
- conbus_protocol: ConbusEventProtocol instance.
63
- xp20ms_serializer: XP20 MS action table serializer.
64
- xp24ms_serializer: XP24 MS action table serializer.
65
- xp33ms_serializer: XP33 MS action table serializer.
66
- telegram_service: Telegram service for parsing.
67
- """
68
- self.conbus_protocol = conbus_protocol
69
- self.xp20ms_serializer = xp20ms_serializer
70
- self.xp24ms_serializer = xp24ms_serializer
71
- self.xp33ms_serializer = xp33ms_serializer
72
- self.serializer: Union[
73
- Xp20MsActionTableSerializer,
74
- Xp24MsActionTableSerializer,
75
- Xp33MsActionTableSerializer,
76
- ] = xp20ms_serializer
77
- self.telegram_service = telegram_service
78
- self.serial_number: str = ""
79
- self.xpmoduletype: str = ""
80
- self.msactiontable_data: list[str] = []
81
- # Set up logging
82
- self.logger = logging.getLogger(__name__)
83
-
84
- # Connect protocol signals
85
- self.conbus_protocol.on_connection_made.connect(self.connection_made)
86
- self.conbus_protocol.on_telegram_sent.connect(self.telegram_sent)
87
- self.conbus_protocol.on_telegram_received.connect(self.telegram_received)
88
- self.conbus_protocol.on_timeout.connect(self.timeout)
89
- self.conbus_protocol.on_failed.connect(self.failed)
90
-
91
- def connection_made(self) -> None:
92
- """Handle connection made event."""
93
- self.logger.debug(
94
- "Connection established, sending download msactiontable telegram"
95
- )
96
- self.conbus_protocol.send_telegram(
97
- telegram_type=TelegramType.SYSTEM,
98
- serial_number=self.serial_number,
99
- system_function=SystemFunction.DOWNLOAD_MSACTIONTABLE,
100
- data_value="00",
101
- )
102
-
103
- def telegram_sent(self, telegram_sent: str) -> None:
104
- """Handle telegram sent event.
105
-
106
- Args:
107
- telegram_sent: The telegram that was sent.
108
- """
109
- self.logger.debug(f"Telegram sent: {telegram_sent}")
110
-
111
- def telegram_received(self, telegram_received: TelegramReceivedEvent) -> None:
112
- """Handle telegram received event.
113
-
114
- Args:
115
- telegram_received: The telegram received event.
116
- """
117
- self.logger.debug(f"Telegram received: {telegram_received}")
118
- if (
119
- not telegram_received.checksum_valid
120
- or telegram_received.telegram_type != TelegramType.REPLY.value
121
- or telegram_received.serial_number != self.serial_number
122
- ):
123
- self.logger.debug("Not a reply response")
124
- return
125
-
126
- reply_telegram = self.telegram_service.parse_reply_telegram(
127
- telegram_received.frame
128
- )
129
- if reply_telegram.system_function not in (
130
- SystemFunction.MSACTIONTABLE,
131
- SystemFunction.ACK,
132
- SystemFunction.NAK,
133
- SystemFunction.EOF,
134
- ):
135
- self.logger.debug("Not a msactiontable response")
136
- return
137
-
138
- if reply_telegram.system_function == SystemFunction.ACK:
139
- self.logger.debug("Received ACK")
140
- return
141
-
142
- if reply_telegram.system_function == SystemFunction.NAK:
143
- self.logger.debug("Received NAK")
144
- self.failed("Received NAK")
145
- return
146
-
147
- if reply_telegram.system_function == SystemFunction.MSACTIONTABLE:
148
- self.logger.debug("Received MSACTIONTABLE")
149
- self.msactiontable_data.extend(
150
- (reply_telegram.data, reply_telegram.data_value)
151
- )
152
- self.on_progress.emit(".")
153
-
154
- self.conbus_protocol.send_telegram(
155
- telegram_type=TelegramType.SYSTEM,
156
- serial_number=self.serial_number,
157
- system_function=SystemFunction.ACK,
158
- data_value="00",
159
- )
160
- return
161
-
162
- if reply_telegram.system_function == SystemFunction.EOF:
163
- self.logger.debug("Received EOF")
164
- all_data = "".join(self.msactiontable_data)
165
- # Deserialize from received data
166
- msactiontable = self.serializer.from_data(all_data)
167
- msactiontable_short = self.serializer.format_decoded_output(msactiontable) # type: ignore[arg-type]
168
- self.succeed(msactiontable, msactiontable_short)
169
- return
170
-
171
- self.logger.debug("Invalid msactiontable response")
172
-
173
- def timeout(self) -> None:
174
- """Handle timeout event."""
175
- self.logger.debug("Timeout occurred")
176
- self.failed("Timeout")
177
-
178
- def failed(self, message: str) -> None:
179
- """Handle failed connection event.
180
-
181
- Args:
182
- message: Failure message.
183
- """
184
- self.logger.debug(f"Failed: {message}")
185
- self.on_error.emit(message)
186
-
187
- def succeed(
188
- self,
189
- msactiontable: Union[Xp20MsActionTable, Xp24MsActionTable, Xp33MsActionTable],
190
- msactiontable_short: list[str],
191
- ) -> None:
192
- """Handle succeed connection event.
193
-
194
- Args:
195
- msactiontable: result.
196
- msactiontable_short: result in short form.
197
- """
198
- # Emit to the appropriate signal based on module type
199
- self.on_finish.emit(msactiontable, msactiontable_short)
200
-
201
- def start(
202
- self,
203
- serial_number: str,
204
- xpmoduletype: str,
205
- timeout_seconds: Optional[float] = None,
206
- ) -> None:
207
- """Setup download parameters.
208
-
209
- Args:
210
- serial_number: Module serial number.
211
- xpmoduletype: XP module type (xp20, xp24, xp33).
212
- timeout_seconds: Optional timeout in seconds.
213
-
214
- Raises:
215
- MsActionTableError: If unsupported module type is provided.
216
- """
217
- self.logger.info("Starting msactiontable")
218
- self.serial_number = serial_number
219
- self.xpmoduletype = xpmoduletype
220
- if xpmoduletype == "xp20":
221
- self.serializer = self.xp20ms_serializer
222
- elif xpmoduletype == "xp24":
223
- self.serializer = self.xp24ms_serializer
224
- elif xpmoduletype == "xp33":
225
- self.serializer = self.xp33ms_serializer
226
- else:
227
- raise MsActionTableError(f"Unsupported module type: {xpmoduletype}")
228
-
229
- if timeout_seconds:
230
- self.conbus_protocol.timeout_seconds = timeout_seconds
231
-
232
- def set_timeout(self, timeout_seconds: float) -> None:
233
- """Set operation timeout.
234
-
235
- Args:
236
- timeout_seconds: Timeout in seconds.
237
- """
238
- self.conbus_protocol.timeout_seconds = timeout_seconds
239
-
240
- def start_reactor(self) -> None:
241
- """Start the reactor."""
242
- self.conbus_protocol.start_reactor()
243
-
244
- def stop_reactor(self) -> None:
245
- """Stop the reactor."""
246
- self.conbus_protocol.stop_reactor()
247
-
248
- def __enter__(self) -> "MsActionTableDownloadService":
249
- """Enter context manager.
250
-
251
- Returns:
252
- Self for context manager protocol.
253
- """
254
- # Reset state for singleton reuse
255
- self.msactiontable_data = []
256
- self.serial_number = ""
257
- self.xpmoduletype = ""
258
- return self
259
-
260
- def __exit__(
261
- self, _exc_type: Optional[type], _exc_val: Optional[Exception], _exc_tb: Any
262
- ) -> None:
263
- """Exit context manager and disconnect signals."""
264
- # Disconnect protocol signals
265
- self.conbus_protocol.on_connection_made.disconnect(self.connection_made)
266
- self.conbus_protocol.on_telegram_sent.disconnect(self.telegram_sent)
267
- self.conbus_protocol.on_telegram_received.disconnect(self.telegram_received)
268
- self.conbus_protocol.on_timeout.disconnect(self.timeout)
269
- self.conbus_protocol.on_failed.disconnect(self.failed)
270
- # Disconnect service signals
271
- self.on_progress.disconnect()
272
- self.on_error.disconnect()
273
- self.on_finish.disconnect()
274
- # Stop reactor
275
- self.stop_reactor()