conson-xp 1.37.0__tar.gz → 1.39.0__tar.gz

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 (325) hide show
  1. {conson_xp-1.37.0 → conson_xp-1.39.0}/PKG-INFO +6 -1
  2. {conson_xp-1.37.0 → conson_xp-1.39.0}/README.md +5 -0
  3. {conson_xp-1.37.0 → conson_xp-1.39.0}/pyproject.toml +1 -1
  4. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/__init__.py +1 -1
  5. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/cli/commands/__init__.py +2 -0
  6. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/cli/commands/conbus/__init__.py +2 -0
  7. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/cli/commands/conbus/conbus.py +26 -0
  8. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/cli/commands/conbus/conbus_actiontable_commands.py +17 -8
  9. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/cli/commands/conbus/conbus_event_commands.py +1 -7
  10. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/cli/commands/conbus/conbus_export_commands.py +7 -6
  11. conson_xp-1.39.0/src/xp/cli/commands/conbus/conbus_msactiontable_commands.py +175 -0
  12. conson_xp-1.39.0/src/xp/models/actiontable/msactiontable.py +9 -0
  13. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/models/actiontable/msactiontable_xp20.py +14 -14
  14. conson_xp-1.39.0/src/xp/models/actiontable/msactiontable_xp24.py +270 -0
  15. conson_xp-1.39.0/src/xp/models/actiontable/msactiontable_xp33.py +93 -0
  16. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/models/conbus/conbus_export.py +6 -2
  17. conson_xp-1.39.0/src/xp/models/config/__init__.py +1 -0
  18. conson_xp-1.37.0/src/xp/models/homekit/homekit_conson_config.py → conson_xp-1.39.0/src/xp/models/config/conson_module_config.py +3 -1
  19. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/models/protocol/conbus_protocol.py +1 -1
  20. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/services/actiontable/msactiontable_xp20_serializer.py +12 -0
  21. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/services/actiontable/msactiontable_xp24_serializer.py +13 -1
  22. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/services/actiontable/msactiontable_xp33_serializer.py +12 -0
  23. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/services/conbus/actiontable/actiontable_download_service.py +8 -5
  24. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/services/conbus/actiontable/actiontable_list_service.py +2 -1
  25. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/services/conbus/actiontable/actiontable_show_service.py +2 -2
  26. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/services/conbus/actiontable/actiontable_upload_service.py +1 -1
  27. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/services/conbus/conbus_event_list_service.py +1 -1
  28. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/services/conbus/conbus_export_service.py +1 -1
  29. conson_xp-1.39.0/src/xp/services/conbus/msactiontable/__init__.py +1 -0
  30. conson_xp-1.37.0/src/xp/services/conbus/actiontable/msactiontable_service.py → conson_xp-1.39.0/src/xp/services/conbus/msactiontable/msactiontable_download_service.py +9 -5
  31. conson_xp-1.39.0/src/xp/services/conbus/msactiontable/msactiontable_list_service.py +92 -0
  32. conson_xp-1.39.0/src/xp/services/conbus/msactiontable/msactiontable_show_service.py +89 -0
  33. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/services/homekit/homekit_config_validator.py +1 -1
  34. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/services/homekit/homekit_conson_validator.py +1 -1
  35. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/services/homekit/homekit_dimminglight.py +1 -1
  36. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/services/homekit/homekit_lightbulb.py +1 -1
  37. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/services/homekit/homekit_module_service.py +1 -1
  38. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/services/homekit/homekit_outlet.py +1 -1
  39. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/services/server/server_service.py +1 -1
  40. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/services/term/state_monitor_service.py +1 -1
  41. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/utils/dependencies.py +36 -14
  42. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/integration/test_actiontable_integration.py +1 -1
  43. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/integration/test_homekit_config_integration.py +1 -1
  44. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/integration/test_xp20_action_table_integration.py +3 -3
  45. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/integration/test_xp24_action_table_integration.py +23 -13
  46. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_cli/test_conbus_actiontable_commands.py +2 -2
  47. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_models/test_xp24_action_table.py +10 -10
  48. conson_xp-1.39.0/tests/unit/test_models/test_xp24_action_table_short_format.py +258 -0
  49. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_services/test_actiontable_service.py +4 -4
  50. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_services/test_conbus_event_list_service.py +1 -1
  51. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_services/test_homekit_config_validator.py +4 -4
  52. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_services/test_homekit_conson_service.py +1 -1
  53. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_services/test_homekit_services.py +1 -1
  54. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_services/test_state_monitor_service.py +1 -1
  55. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_services/test_xp24_action_table_serializer.py +10 -4
  56. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_services/test_xp24_action_table_service.py +26 -10
  57. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_services/test_xp33_action_table_serializer.py +1 -1
  58. conson_xp-1.37.0/src/xp/cli/commands/conbus/conbus_msactiontable_commands.py +0 -92
  59. conson_xp-1.37.0/src/xp/connection/__init__.py +0 -13
  60. conson_xp-1.37.0/src/xp/connection/exceptions.py +0 -22
  61. conson_xp-1.37.0/src/xp/models/actiontable/msactiontable_xp24.py +0 -58
  62. conson_xp-1.37.0/src/xp/models/actiontable/msactiontable_xp33.py +0 -65
  63. conson_xp-1.37.0/tests/unit/test_connection/__init__.py +0 -1
  64. conson_xp-1.37.0/tests/unit/test_connection/test_connection_init.py +0 -33
  65. conson_xp-1.37.0/tests/unit/test_connection/test_exceptions.py +0 -88
  66. {conson_xp-1.37.0 → conson_xp-1.39.0}/LICENSE +0 -0
  67. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/cli/__init__.py +0 -0
  68. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/cli/__main__.py +0 -0
  69. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/cli/commands/conbus/conbus_autoreport_commands.py +0 -0
  70. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/cli/commands/conbus/conbus_blink_commands.py +0 -0
  71. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/cli/commands/conbus/conbus_config_commands.py +0 -0
  72. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/cli/commands/conbus/conbus_custom_commands.py +0 -0
  73. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/cli/commands/conbus/conbus_datapoint_commands.py +0 -0
  74. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/cli/commands/conbus/conbus_discover_commands.py +0 -0
  75. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/cli/commands/conbus/conbus_lightlevel_commands.py +0 -0
  76. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/cli/commands/conbus/conbus_linknumber_commands.py +0 -0
  77. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/cli/commands/conbus/conbus_modulenumber_commands.py +0 -0
  78. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/cli/commands/conbus/conbus_output_commands.py +0 -0
  79. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/cli/commands/conbus/conbus_raw_commands.py +0 -0
  80. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/cli/commands/conbus/conbus_receive_commands.py +0 -0
  81. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/cli/commands/conbus/conbus_scan_commands.py +0 -0
  82. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/cli/commands/file_commands.py +0 -0
  83. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/cli/commands/homekit/__init__.py +0 -0
  84. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/cli/commands/homekit/homekit.py +0 -0
  85. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/cli/commands/homekit/homekit_start_commands.py +0 -0
  86. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/cli/commands/module_commands.py +0 -0
  87. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/cli/commands/reverse_proxy_commands.py +0 -0
  88. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/cli/commands/server/__init__.py +0 -0
  89. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/cli/commands/server/server_commands.py +0 -0
  90. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/cli/commands/telegram/__init__.py +0 -0
  91. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/cli/commands/telegram/telegram.py +0 -0
  92. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/cli/commands/telegram/telegram_blink_commands.py +0 -0
  93. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/cli/commands/telegram/telegram_checksum_commands.py +0 -0
  94. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/cli/commands/telegram/telegram_discover_commands.py +0 -0
  95. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/cli/commands/telegram/telegram_linknumber_commands.py +0 -0
  96. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/cli/commands/telegram/telegram_parse_commands.py +0 -0
  97. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/cli/commands/telegram/telegram_version_commands.py +0 -0
  98. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/cli/commands/term/__init__.py +0 -0
  99. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/cli/commands/term/term.py +0 -0
  100. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/cli/commands/term/term_commands.py +0 -0
  101. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/cli/main.py +0 -0
  102. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/cli/utils/__init__.py +0 -0
  103. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/cli/utils/click_tree.py +0 -0
  104. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/cli/utils/datapoint_type_choice.py +0 -0
  105. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/cli/utils/decorators.py +0 -0
  106. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/cli/utils/error_handlers.py +0 -0
  107. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/cli/utils/formatters.py +0 -0
  108. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/cli/utils/module_type_choice.py +0 -0
  109. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/cli/utils/serial_number_type.py +0 -0
  110. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/cli/utils/system_function_choice.py +0 -0
  111. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/cli/utils/xp_module_type.py +0 -0
  112. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/models/__init__.py +0 -0
  113. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/models/actiontable/__init__.py +0 -0
  114. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/models/actiontable/actiontable.py +0 -0
  115. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/models/conbus/__init__.py +0 -0
  116. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/models/conbus/conbus.py +0 -0
  117. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/models/conbus/conbus_autoreport.py +0 -0
  118. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/models/conbus/conbus_blink.py +0 -0
  119. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/models/conbus/conbus_client_config.py +0 -0
  120. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/models/conbus/conbus_connection_status.py +0 -0
  121. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/models/conbus/conbus_custom.py +0 -0
  122. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/models/conbus/conbus_datapoint.py +0 -0
  123. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/models/conbus/conbus_discover.py +0 -0
  124. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/models/conbus/conbus_event_list.py +0 -0
  125. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/models/conbus/conbus_event_raw.py +0 -0
  126. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/models/conbus/conbus_lightlevel.py +0 -0
  127. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/models/conbus/conbus_linknumber.py +0 -0
  128. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/models/conbus/conbus_logger_config.py +0 -0
  129. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/models/conbus/conbus_output.py +0 -0
  130. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/models/conbus/conbus_raw.py +0 -0
  131. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/models/conbus/conbus_receive.py +0 -0
  132. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/models/conbus/conbus_writeconfig.py +0 -0
  133. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/models/homekit/__init__.py +0 -0
  134. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/models/homekit/homekit_accessory.py +0 -0
  135. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/models/homekit/homekit_config.py +0 -0
  136. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/models/log_entry.py +0 -0
  137. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/models/protocol/__init__.py +0 -0
  138. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/models/response.py +0 -0
  139. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/models/telegram/__init__.py +0 -0
  140. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/models/telegram/action_type.py +0 -0
  141. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/models/telegram/datapoint_type.py +0 -0
  142. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/models/telegram/event_telegram.py +0 -0
  143. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/models/telegram/event_type.py +0 -0
  144. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/models/telegram/input_action_type.py +0 -0
  145. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/models/telegram/input_type.py +0 -0
  146. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/models/telegram/module_type.py +0 -0
  147. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/models/telegram/module_type_code.py +0 -0
  148. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/models/telegram/output_telegram.py +0 -0
  149. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/models/telegram/reply_telegram.py +0 -0
  150. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/models/telegram/system_function.py +0 -0
  151. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/models/telegram/system_telegram.py +0 -0
  152. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/models/telegram/telegram.py +0 -0
  153. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/models/telegram/telegram_type.py +0 -0
  154. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/models/telegram/timeparam_type.py +0 -0
  155. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/models/term/__init__.py +0 -0
  156. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/models/term/connection_state.py +0 -0
  157. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/models/term/module_state.py +0 -0
  158. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/models/term/protocol_keys_config.py +0 -0
  159. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/models/term/status_message.py +0 -0
  160. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/models/term/telegram_display.py +0 -0
  161. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/models/write_config_type.py +0 -0
  162. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/services/__init__.py +0 -0
  163. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/services/actiontable/__init__.py +0 -0
  164. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/services/actiontable/actiontable_serializer.py +0 -0
  165. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/services/actiontable/msactiontable_serializer.py +0 -0
  166. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/services/conbus/__init__.py +0 -0
  167. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/services/conbus/actiontable/__init__.py +0 -0
  168. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/services/conbus/conbus_blink_all_service.py +0 -0
  169. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/services/conbus/conbus_blink_service.py +0 -0
  170. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/services/conbus/conbus_custom_service.py +0 -0
  171. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/services/conbus/conbus_datapoint_queryall_service.py +0 -0
  172. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/services/conbus/conbus_datapoint_service.py +0 -0
  173. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/services/conbus/conbus_discover_service.py +0 -0
  174. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/services/conbus/conbus_event_raw_service.py +0 -0
  175. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/services/conbus/conbus_output_service.py +0 -0
  176. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/services/conbus/conbus_raw_service.py +0 -0
  177. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/services/conbus/conbus_receive_service.py +0 -0
  178. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/services/conbus/conbus_scan_service.py +0 -0
  179. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/services/conbus/write_config_service.py +0 -0
  180. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/services/homekit/__init__.py +0 -0
  181. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/services/homekit/homekit_cache_service.py +0 -0
  182. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/services/homekit/homekit_conbus_service.py +0 -0
  183. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/services/homekit/homekit_dimminglight_service.py +0 -0
  184. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/services/homekit/homekit_hap_service.py +0 -0
  185. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/services/homekit/homekit_lightbulb_service.py +0 -0
  186. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/services/homekit/homekit_outlet_service.py +0 -0
  187. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/services/homekit/homekit_service.py +0 -0
  188. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/services/log_file_service.py +0 -0
  189. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/services/module_type_service.py +0 -0
  190. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/services/protocol/__init__.py +0 -0
  191. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/services/protocol/conbus_event_protocol.py +0 -0
  192. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/services/protocol/conbus_protocol.py +0 -0
  193. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/services/protocol/protocol_factory.py +0 -0
  194. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/services/protocol/telegram_protocol.py +0 -0
  195. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/services/reverse_proxy_service.py +0 -0
  196. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/services/server/__init__.py +0 -0
  197. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/services/server/base_server_service.py +0 -0
  198. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/services/server/client_buffer_manager.py +0 -0
  199. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/services/server/cp20_server_service.py +0 -0
  200. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/services/server/device_service_factory.py +0 -0
  201. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/services/server/xp130_server_service.py +0 -0
  202. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/services/server/xp20_server_service.py +0 -0
  203. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/services/server/xp230_server_service.py +0 -0
  204. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/services/server/xp24_server_service.py +0 -0
  205. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/services/server/xp33_server_service.py +0 -0
  206. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/services/telegram/__init__.py +0 -0
  207. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/services/telegram/telegram_blink_service.py +0 -0
  208. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/services/telegram/telegram_checksum_service.py +0 -0
  209. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/services/telegram/telegram_datapoint_service.py +0 -0
  210. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/services/telegram/telegram_discover_service.py +0 -0
  211. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/services/telegram/telegram_link_number_service.py +0 -0
  212. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/services/telegram/telegram_output_service.py +0 -0
  213. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/services/telegram/telegram_service.py +0 -0
  214. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/services/telegram/telegram_version_service.py +0 -0
  215. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/services/term/__init__.py +0 -0
  216. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/services/term/protocol_monitor_service.py +0 -0
  217. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/term/__init__.py +0 -0
  218. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/term/protocol.py +0 -0
  219. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/term/protocol.tcss +0 -0
  220. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/term/state.py +0 -0
  221. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/term/state.tcss +0 -0
  222. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/term/widgets/__init__.py +0 -0
  223. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/term/widgets/help_menu.py +0 -0
  224. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/term/widgets/modules_list.py +0 -0
  225. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/term/widgets/protocol_log.py +0 -0
  226. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/term/widgets/status_footer.py +0 -0
  227. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/utils/__init__.py +0 -0
  228. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/utils/checksum.py +0 -0
  229. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/utils/event_helper.py +0 -0
  230. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/utils/logging.py +0 -0
  231. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/utils/serialization.py +0 -0
  232. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/utils/state_machine.py +0 -0
  233. {conson_xp-1.37.0 → conson_xp-1.39.0}/src/xp/utils/time_utils.py +0 -0
  234. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/.coverage +0 -0
  235. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/__init__.py +0 -0
  236. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/conftest.py +0 -0
  237. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/integration/.coverage +0 -0
  238. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/integration/__init__.py +0 -0
  239. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/integration/telegram_test_data.py +0 -0
  240. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/integration/test_api/.coverage +0 -0
  241. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/integration/test_api/__init__.py +0 -0
  242. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/integration/test_blink_integration.py +0 -0
  243. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/integration/test_checksum_integration.py +0 -0
  244. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/integration/test_conbus_blink_integration.py +0 -0
  245. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/integration/test_conbus_datapoint_integration.py +0 -0
  246. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/integration/test_conbus_raw_integration.py +0 -0
  247. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/integration/test_conbus_receive_integration.py +0 -0
  248. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/integration/test_discovery_integration.py +0 -0
  249. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/integration/test_event_telegram_integration.py +0 -0
  250. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/integration/test_link_number_integration.py +0 -0
  251. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/integration/test_module_integration.py +0 -0
  252. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/integration/test_output_integration.py +0 -0
  253. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/integration/test_reverse_proxy_integration.py +0 -0
  254. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/integration/test_system_reply_telegram_integration.py +0 -0
  255. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/integration/test_term_logging_integration.py +0 -0
  256. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/integration/test_version_integration.py +0 -0
  257. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/__init__.py +0 -0
  258. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_api/__init__.py +0 -0
  259. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_cli/__init__.py +0 -0
  260. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_cli/test_click_tree.py +0 -0
  261. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_cli/test_conbus_blink_commands.py +0 -0
  262. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_cli/test_datapoint_type_choice.py +0 -0
  263. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_cli/test_decorators.py +0 -0
  264. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_cli/test_error_handlers.py +0 -0
  265. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_cli/test_formatters.py +0 -0
  266. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_cli/test_serial_number_type.py +0 -0
  267. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_cli/test_system_function_choice.py +0 -0
  268. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_cli/test_term_commands.py +0 -0
  269. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_encoding/__init__.py +0 -0
  270. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_encoding/test_latin1_edge_cases.py +0 -0
  271. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_models/__init__.py +0 -0
  272. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_models/test_conbus.py +0 -0
  273. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_models/test_conbus_client_send.py +0 -0
  274. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_models/test_conbus_discover.py +0 -0
  275. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_models/test_conbus_linknumber.py +0 -0
  276. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_models/test_event_telegram.py +0 -0
  277. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_models/test_log_entry.py +0 -0
  278. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_models/test_logger_config.py +0 -0
  279. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_models/test_module_type.py +0 -0
  280. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_models/test_reply_telegram.py +0 -0
  281. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_models/test_system_telegram.py +0 -0
  282. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_models/test_system_telegram_enhancements.py +0 -0
  283. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_models/test_version_telegram.py +0 -0
  284. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_models/test_write_config_type.py +0 -0
  285. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_models/test_xp20_action_table.py +0 -0
  286. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_models/test_xp24_action_telegram.py +0 -0
  287. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_services/__init__.py +0 -0
  288. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_services/test_actiontable_serializer.py +0 -0
  289. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_services/test_actiontable_upload_service.py +0 -0
  290. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_services/test_base_server_service.py +0 -0
  291. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_services/test_blink_service.py +0 -0
  292. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_services/test_checksum_service.py +0 -0
  293. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_services/test_client_buffer_manager.py +0 -0
  294. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_services/test_conbus_blink_service.py +0 -0
  295. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_services/test_conbus_event_protocol.py +0 -0
  296. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_services/test_conbus_event_raw_service.py +0 -0
  297. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_services/test_conbus_output_service.py +0 -0
  298. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_services/test_conbus_raw_service.py +0 -0
  299. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_services/test_conbus_receive_service.py +0 -0
  300. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_services/test_conbus_reverse_proxy_service.py +0 -0
  301. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_services/test_conbus_scan_service.py +0 -0
  302. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_services/test_device_service_factory.py +0 -0
  303. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_services/test_discovery_service.py +0 -0
  304. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_services/test_homekit_cache_service.py +0 -0
  305. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_services/test_log_file_service.py +0 -0
  306. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_services/test_module_type_service.py +0 -0
  307. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_services/test_protocol.py +0 -0
  308. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_services/test_protocol_monitor_service.py +0 -0
  309. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_services/test_server_service.py +0 -0
  310. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_services/test_telegram_input_service.py +0 -0
  311. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_services/test_telegram_output_service.py +0 -0
  312. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_services/test_telegram_protocol.py +0 -0
  313. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_services/test_telegram_service.py +0 -0
  314. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_services/test_version_service.py +0 -0
  315. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_services/test_xp20_action_table_serializer.py +0 -0
  316. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_services/test_xp24_action_service.py +0 -0
  317. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_services/test_xp_server_services.py +0 -0
  318. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_tui/__init__.py +0 -0
  319. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_tui/test_protocol_log.py +0 -0
  320. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_utils/__init__.py +0 -0
  321. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_utils/test_checksum.py +0 -0
  322. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_utils/test_event_helper.py +0 -0
  323. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_utils/test_logging.py +0 -0
  324. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_utils/test_serialization.py +0 -0
  325. {conson_xp-1.37.0 → conson_xp-1.39.0}/tests/unit/test_utils/test_time_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: conson-xp
3
- Version: 1.37.0
3
+ Version: 1.39.0
4
4
  Summary: XP Protocol Communication Tools
5
5
  Author-Email: ldvchosal <ldvchosal@github.com>
6
6
  License: MIT License
@@ -350,7 +350,10 @@ xp conbus event
350
350
  xp conbus event list
351
351
  xp conbus event raw
352
352
 
353
+
353
354
  xp conbus export
355
+ xp conbus export config
356
+
354
357
 
355
358
  xp conbus lightlevel
356
359
  xp conbus lightlevel get
@@ -371,6 +374,8 @@ xp conbus modulenumber set
371
374
 
372
375
  xp conbus msactiontable
373
376
  xp conbus msactiontable download
377
+ xp conbus msactiontable list
378
+ xp conbus msactiontable show
374
379
 
375
380
 
376
381
  xp conbus output
@@ -297,7 +297,10 @@ xp conbus event
297
297
  xp conbus event list
298
298
  xp conbus event raw
299
299
 
300
+
300
301
  xp conbus export
302
+ xp conbus export config
303
+
301
304
 
302
305
  xp conbus lightlevel
303
306
  xp conbus lightlevel get
@@ -318,6 +321,8 @@ xp conbus modulenumber set
318
321
 
319
322
  xp conbus msactiontable
320
323
  xp conbus msactiontable download
324
+ xp conbus msactiontable list
325
+ xp conbus msactiontable show
321
326
 
322
327
 
323
328
  xp conbus output
@@ -22,7 +22,7 @@ dependencies = [
22
22
  ]
23
23
  requires-python = ">=3.11"
24
24
  readme = "README.md"
25
- version = "1.37.0"
25
+ version = "1.39.0"
26
26
 
27
27
  [project.license]
28
28
  file = "LICENSE"
@@ -3,7 +3,7 @@
3
3
  conson-xp package.
4
4
  """
5
5
 
6
- __version__ = "1.37.0"
6
+ __version__ = "1.39.0"
7
7
  __manufacturer__ = "salchichon"
8
8
  __model__ = "xp.cli"
9
9
  __serial__ = "2025.09.23.000"
@@ -8,6 +8,7 @@ from xp.cli.commands.conbus.conbus import (
8
8
  conbus_autoreport,
9
9
  conbus_blink,
10
10
  conbus_datapoint,
11
+ conbus_export,
11
12
  conbus_lightlevel,
12
13
  conbus_linknumber,
13
14
  conbus_modulenumber,
@@ -101,6 +102,7 @@ __all__ = [
101
102
  "conbus_msactiontable",
102
103
  "conbus_actiontable",
103
104
  "conbus_event",
105
+ "conbus_export",
104
106
  "file",
105
107
  "module",
106
108
  "reverse_proxy",
@@ -6,6 +6,7 @@ from xp.cli.commands.conbus.conbus import (
6
6
  conbus_autoreport,
7
7
  conbus_blink,
8
8
  conbus_datapoint,
9
+ conbus_export,
9
10
  conbus_lightlevel,
10
11
  conbus_linknumber,
11
12
  conbus_msactiontable,
@@ -22,4 +23,5 @@ __all__ = [
22
23
  "conbus_lightlevel",
23
24
  "conbus_msactiontable",
24
25
  "conbus_actiontable",
26
+ "conbus_export",
25
27
  ]
@@ -117,6 +117,30 @@ def conbus_actiontable() -> None:
117
117
  pass
118
118
 
119
119
 
120
+ @click.group(
121
+ "event",
122
+ cls=HelpColorsGroup,
123
+ help_headers_color="yellow",
124
+ help_options_color="green",
125
+ short_help="Export operations",
126
+ )
127
+ def conbus_event() -> None:
128
+ """Event telegrams to Conbus modules."""
129
+ pass
130
+
131
+
132
+ @click.group(
133
+ "export",
134
+ cls=HelpColorsGroup,
135
+ help_headers_color="yellow",
136
+ help_options_color="green",
137
+ short_help="Export operations",
138
+ )
139
+ def conbus_export() -> None:
140
+ """Download ActionTable from Conbus modules."""
141
+ pass
142
+
143
+
120
144
  conbus.add_command(conbus_blink)
121
145
  conbus.add_command(conbus_output)
122
146
  conbus.add_command(conbus_datapoint)
@@ -126,3 +150,5 @@ conbus.add_command(conbus_autoreport)
126
150
  conbus.add_command(conbus_lightlevel)
127
151
  conbus.add_command(conbus_msactiontable)
128
152
  conbus.add_command(conbus_actiontable)
153
+ conbus.add_command(conbus_event)
154
+ conbus.add_command(conbus_export)
@@ -3,6 +3,7 @@
3
3
  import json
4
4
  from contextlib import suppress
5
5
  from pathlib import Path
6
+ from typing import Any, Dict
6
7
 
7
8
  import click
8
9
  from click import Context
@@ -12,12 +13,13 @@ from xp.cli.utils.decorators import (
12
13
  connection_command,
13
14
  )
14
15
  from xp.cli.utils.serial_number_type import SERIAL
15
- from xp.models.homekit.homekit_conson_config import (
16
+ from xp.models.actiontable.actiontable import ActionTable
17
+ from xp.models.config.conson_module_config import (
16
18
  ConsonModuleConfig,
17
19
  ConsonModuleListConfig,
18
20
  )
19
21
  from xp.services.conbus.actiontable.actiontable_download_service import (
20
- ActionTableService,
22
+ ActionTableDownloadService,
21
23
  )
22
24
  from xp.services.conbus.actiontable.actiontable_list_service import (
23
25
  ActionTableListService,
@@ -47,8 +49,8 @@ def conbus_download_actiontable(ctx: Context, serial_number: str) -> None:
47
49
  ctx: Click context object.
48
50
  serial_number: 10-digit module serial number.
49
51
  """
50
- service: ActionTableService = (
51
- ctx.obj.get("container").get_container().resolve(ActionTableService)
52
+ service: ActionTableDownloadService = (
53
+ ctx.obj.get("container").get_container().resolve(ActionTableDownloadService)
52
54
  )
53
55
 
54
56
  def on_progress(progress: str) -> None:
@@ -59,13 +61,18 @@ def conbus_download_actiontable(ctx: Context, serial_number: str) -> None:
59
61
  """
60
62
  click.echo(progress, nl=False)
61
63
 
62
- def on_finish(result: tuple) -> None:
64
+ def on_finish(
65
+ _actiontable: ActionTable,
66
+ actiontable_dict: Dict[str, Any],
67
+ actiontable_short: list[str],
68
+ ) -> None:
63
69
  """Handle successful completion of action table download.
64
70
 
65
71
  Args:
66
- result: Tuple of (_actiontable, actiontable_dict, actiontable_short).
72
+ _actiontable: a list of ActionTableEntries.
73
+ actiontable_dict: action table in a dictionary.
74
+ actiontable_short: short representation of action table.
67
75
  """
68
- _actiontable, actiontable_dict, actiontable_short = result
69
76
  output = {
70
77
  "serial_number": serial_number,
71
78
  "actiontable_short": actiontable_short,
@@ -214,7 +221,9 @@ def conbus_show_actiontable(ctx: Context, serial_number: str) -> None:
214
221
  Args:
215
222
  module: Dictionary containing module configuration.
216
223
  """
217
- click.echo(json.dumps(module.model_dump(), indent=2, default=str))
224
+ module_data = module.model_dump()
225
+ module_data.pop("msactiontable", None)
226
+ click.echo(json.dumps(module_data, indent=2, default=str))
218
227
 
219
228
  def error_callback(error: str) -> None:
220
229
  """Handle errors during action table show.
@@ -4,7 +4,7 @@ import json
4
4
 
5
5
  import click
6
6
 
7
- from xp.cli.commands.conbus.conbus import conbus
7
+ from xp.cli.commands.conbus.conbus import conbus, conbus_event
8
8
  from xp.cli.utils.decorators import connection_command
9
9
  from xp.cli.utils.module_type_choice import MODULE_TYPE
10
10
  from xp.models import ConbusEventRawResponse
@@ -12,12 +12,6 @@ from xp.services.conbus.conbus_event_list_service import ConbusEventListService
12
12
  from xp.services.conbus.conbus_event_raw_service import ConbusEventRawService
13
13
 
14
14
 
15
- @click.group(name="event")
16
- def conbus_event() -> None:
17
- """Send event telegrams to Conbus modules."""
18
- pass
19
-
20
-
21
15
  @conbus_event.command("list")
22
16
  @click.pass_context
23
17
  def list_events(ctx: click.Context) -> None:
@@ -1,21 +1,21 @@
1
- """Conbus export CLI command."""
1
+ """Conbus export CLI commands."""
2
2
 
3
3
  from contextlib import suppress
4
4
 
5
5
  import click
6
6
 
7
- from xp.cli.commands.conbus.conbus import conbus
7
+ from xp.cli.commands.conbus.conbus import conbus_export
8
8
  from xp.cli.utils.decorators import connection_command
9
9
  from xp.models.conbus.conbus_export import ConbusExportResponse
10
- from xp.models.homekit.homekit_conson_config import ConsonModuleConfig
10
+ from xp.models.config.conson_module_config import ConsonModuleConfig
11
11
  from xp.services.conbus.conbus_export_service import ConbusExportService
12
12
 
13
13
 
14
- @conbus.command("export")
14
+ @conbus_export.command("config")
15
15
  @click.pass_context
16
16
  @connection_command()
17
17
  def export_conbus_config(ctx: click.Context) -> None:
18
- r"""Export Conbus device configuration to YAML file.
18
+ r"""Export Conbus device metadata to YAML file.
19
19
 
20
20
  Discovers all devices on the Conbus network and queries their configuration
21
21
  datapoints to generate a complete export.yml file in conson.yml format.
@@ -25,8 +25,9 @@ def export_conbus_config(ctx: click.Context) -> None:
25
25
 
26
26
  Examples:
27
27
  \b
28
- # Export to export.yml in current directory
28
+ # Export device metadata to export.yml
29
29
  xp conbus export
30
+ xp conbus export config
30
31
  """
31
32
 
32
33
  def on_progress(serial_number: str, current: int, total: int) -> None:
@@ -0,0 +1,175 @@
1
+ """XP24 Action Table CLI commands."""
2
+
3
+ import json
4
+ from typing import Union
5
+
6
+ import click
7
+ from click import Context
8
+
9
+ from xp.cli.commands.conbus.conbus import conbus_msactiontable
10
+ from xp.cli.utils.decorators import (
11
+ connection_command,
12
+ )
13
+ from xp.cli.utils.serial_number_type import SERIAL
14
+ from xp.cli.utils.xp_module_type import XP_MODULE_TYPE
15
+ from xp.models.actiontable.msactiontable_xp20 import Xp20MsActionTable
16
+ from xp.models.actiontable.msactiontable_xp24 import Xp24MsActionTable
17
+ from xp.models.actiontable.msactiontable_xp33 import Xp33MsActionTable
18
+ from xp.models.config.conson_module_config import ConsonModuleConfig
19
+ from xp.services.conbus.msactiontable.msactiontable_download_service import (
20
+ MsActionTableDownloadService,
21
+ )
22
+ from xp.services.conbus.msactiontable.msactiontable_list_service import (
23
+ MsActionTableListService,
24
+ )
25
+ from xp.services.conbus.msactiontable.msactiontable_show_service import (
26
+ MsActionTableShowService,
27
+ )
28
+
29
+
30
+ @conbus_msactiontable.command("download", short_help="Download MSActionTable")
31
+ @click.argument("serial_number", type=SERIAL)
32
+ @click.argument("xpmoduletype", type=XP_MODULE_TYPE)
33
+ @click.pass_context
34
+ @connection_command()
35
+ def conbus_download_msactiontable(
36
+ ctx: Context, serial_number: str, xpmoduletype: str
37
+ ) -> None:
38
+ """Download MS action table from XP24 module.
39
+
40
+ Args:
41
+ ctx: Click context object.
42
+ serial_number: 10-digit module serial number.
43
+ xpmoduletype: XP module type.
44
+ """
45
+ service: MsActionTableDownloadService = (
46
+ ctx.obj.get("container").get_container().resolve(MsActionTableDownloadService)
47
+ )
48
+
49
+ def on_progress(progress: str) -> None:
50
+ """Handle progress updates during MS action table download.
51
+
52
+ Args:
53
+ progress: Progress message string.
54
+ """
55
+ click.echo(progress, nl=False)
56
+
57
+ def on_finish(
58
+ msaction_table: Union[
59
+ Xp20MsActionTable, Xp24MsActionTable, Xp33MsActionTable, None
60
+ ],
61
+ msaction_table_short: str,
62
+ ) -> None:
63
+ """Handle successful completion of MS action table download.
64
+
65
+ Args:
66
+ msaction_table: Downloaded MS action table object or None if failed.
67
+ msaction_table_short: Short version of MS action table object or None if failed.
68
+
69
+ Raises:
70
+ Abort: If action table download failed.
71
+ """
72
+ service.stop_reactor()
73
+ if msaction_table is None:
74
+ click.echo("Error: Failed to download MS action table")
75
+ raise click.Abort()
76
+
77
+ output = {
78
+ "serial_number": serial_number,
79
+ "xpmoduletype": xpmoduletype,
80
+ "msaction_table_short": msaction_table_short,
81
+ "msaction_table": msaction_table.model_dump(),
82
+ }
83
+ click.echo(json.dumps(output, indent=2, default=str))
84
+
85
+ def on_error(error: str) -> None:
86
+ """Handle errors during MS action table download.
87
+
88
+ Args:
89
+ error: Error message string.
90
+ """
91
+ click.echo(f"Error: {error}")
92
+
93
+ with service:
94
+ service.on_progress.connect(on_progress)
95
+ service.on_error.connect(on_error)
96
+ service.on_finish.connect(on_finish)
97
+ service.start(
98
+ serial_number=serial_number,
99
+ xpmoduletype=xpmoduletype,
100
+ )
101
+ service.start_reactor()
102
+
103
+
104
+ @conbus_msactiontable.command("list", short_help="List modules with MsActionTable")
105
+ @click.pass_context
106
+ def conbus_list_msactiontable(ctx: Context) -> None:
107
+ """List all modules with action table configurations from conson.yml.
108
+
109
+ Args:
110
+ ctx: Click context object.
111
+ """
112
+ service: MsActionTableListService = (
113
+ ctx.obj.get("container").get_container().resolve(MsActionTableListService)
114
+ )
115
+
116
+ def on_finish(module_list: dict) -> None:
117
+ """Handle successful completion of action table list.
118
+
119
+ Args:
120
+ module_list: Dictionary containing modules and total count.
121
+ """
122
+ click.echo(json.dumps(module_list, indent=2, default=str))
123
+
124
+ def on_error(error: str) -> None:
125
+ """Handle errors during action table list.
126
+
127
+ Args:
128
+ error: Error message string.
129
+ """
130
+ click.echo(error)
131
+
132
+ with service:
133
+ service.on_finish.connect(on_finish)
134
+ service.on_error.connect(on_error)
135
+ service.start()
136
+
137
+
138
+ @conbus_msactiontable.command("show", short_help="Show MsActionTable configuration")
139
+ @click.argument("serial_number", type=SERIAL)
140
+ @click.pass_context
141
+ def conbus_show_msactiontable(ctx: Context, serial_number: str) -> None:
142
+ """Show ms action table configuration for a specific module from conson.yml.
143
+
144
+ Args:
145
+ ctx: Click context object.
146
+ serial_number: 10-digit module serial number.
147
+ """
148
+ service: MsActionTableShowService = (
149
+ ctx.obj.get("container").get_container().resolve(MsActionTableShowService)
150
+ )
151
+
152
+ def on_finish(module: ConsonModuleConfig) -> None:
153
+ """Handle successful completion of action table show.
154
+
155
+ Args:
156
+ module: Dictionary containing module configuration.
157
+ """
158
+ module_data = module.model_dump()
159
+ module_data.pop("action_table", None)
160
+ click.echo(json.dumps(module_data, indent=2, default=str))
161
+
162
+ def error_callback(error: str) -> None:
163
+ """Handle errors during action table show.
164
+
165
+ Args:
166
+ error: Error message string.
167
+ """
168
+ click.echo(error)
169
+
170
+ with service:
171
+ service.start(
172
+ serial_number=serial_number,
173
+ finish_callback=on_finish,
174
+ error_callback=error_callback,
175
+ )
@@ -0,0 +1,9 @@
1
+ """Base class for MS Action Table models."""
2
+
3
+ from pydantic import BaseModel
4
+
5
+
6
+ class MsActionTable(BaseModel):
7
+ """Base class for all MS Action Table types (XP20, XP24, XP33)."""
8
+
9
+ pass
@@ -1,10 +1,11 @@
1
1
  """XP20 Action Table models for input actions and settings."""
2
2
 
3
- from dataclasses import dataclass, field
3
+ from pydantic import BaseModel, Field
4
4
 
5
+ from xp.models.actiontable.msactiontable import MsActionTable
5
6
 
6
- @dataclass
7
- class InputChannel:
7
+
8
+ class InputChannel(BaseModel):
8
9
  """Configuration for a single input channel in XP20 action table.
9
10
 
10
11
  Attributes:
@@ -19,13 +20,12 @@ class InputChannel:
19
20
  invert: bool = False
20
21
  short_long: bool = False
21
22
  group_on_off: bool = False
22
- and_functions: list[bool] = field(default_factory=lambda: [False] * 8)
23
+ and_functions: list[bool] = Field(default_factory=lambda: [False] * 8)
23
24
  sa_function: bool = False
24
25
  ta_function: bool = False
25
26
 
26
27
 
27
- @dataclass
28
- class Xp20MsActionTable:
28
+ class Xp20MsActionTable(MsActionTable):
29
29
  """XP20 Action Table for managing 8 input channels.
30
30
 
31
31
  Contains configuration for 8 input channels (input1 through input8),
@@ -43,11 +43,11 @@ class Xp20MsActionTable:
43
43
  input8: Configuration for input channel 8.
44
44
  """
45
45
 
46
- input1: InputChannel = field(default_factory=InputChannel)
47
- input2: InputChannel = field(default_factory=InputChannel)
48
- input3: InputChannel = field(default_factory=InputChannel)
49
- input4: InputChannel = field(default_factory=InputChannel)
50
- input5: InputChannel = field(default_factory=InputChannel)
51
- input6: InputChannel = field(default_factory=InputChannel)
52
- input7: InputChannel = field(default_factory=InputChannel)
53
- input8: InputChannel = field(default_factory=InputChannel)
46
+ input1: InputChannel = Field(default_factory=InputChannel)
47
+ input2: InputChannel = Field(default_factory=InputChannel)
48
+ input3: InputChannel = Field(default_factory=InputChannel)
49
+ input4: InputChannel = Field(default_factory=InputChannel)
50
+ input5: InputChannel = Field(default_factory=InputChannel)
51
+ input6: InputChannel = Field(default_factory=InputChannel)
52
+ input7: InputChannel = Field(default_factory=InputChannel)
53
+ input8: InputChannel = Field(default_factory=InputChannel)