conson-xp 1.46.0__tar.gz → 1.48.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 (326) hide show
  1. {conson_xp-1.46.0 → conson_xp-1.48.0}/PKG-INFO +1 -1
  2. {conson_xp-1.46.0 → conson_xp-1.48.0}/pyproject.toml +12 -1
  3. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/__init__.py +3 -2
  4. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/cli/commands/conbus/conbus.py +1 -1
  5. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/cli/commands/conbus/conbus_actiontable_commands.py +33 -19
  6. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/cli/commands/conbus/conbus_autoreport_commands.py +8 -4
  7. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/cli/commands/conbus/conbus_blink_commands.py +20 -10
  8. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/cli/commands/conbus/conbus_config_commands.py +2 -1
  9. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/cli/commands/conbus/conbus_custom_commands.py +4 -2
  10. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/cli/commands/conbus/conbus_datapoint_commands.py +10 -5
  11. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/cli/commands/conbus/conbus_discover_commands.py +8 -4
  12. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/cli/commands/conbus/conbus_event_commands.py +8 -4
  13. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/cli/commands/conbus/conbus_export_commands.py +8 -4
  14. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/cli/commands/conbus/conbus_lightlevel_commands.py +16 -8
  15. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/cli/commands/conbus/conbus_linknumber_commands.py +8 -4
  16. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/cli/commands/conbus/conbus_modulenumber_commands.py +8 -4
  17. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/cli/commands/conbus/conbus_msactiontable_commands.py +78 -40
  18. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/cli/commands/conbus/conbus_output_commands.py +16 -8
  19. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/cli/commands/conbus/conbus_raw_commands.py +6 -3
  20. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/cli/commands/conbus/conbus_receive_commands.py +6 -3
  21. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/cli/commands/conbus/conbus_scan_commands.py +6 -3
  22. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/cli/commands/file_commands.py +6 -3
  23. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/cli/commands/homekit/homekit.py +4 -2
  24. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/cli/commands/homekit/homekit_start_commands.py +2 -1
  25. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/cli/commands/module_commands.py +8 -4
  26. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/cli/commands/reverse_proxy_commands.py +8 -4
  27. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/cli/commands/server/server_commands.py +6 -3
  28. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/cli/commands/telegram/telegram_blink_commands.py +4 -2
  29. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/cli/commands/telegram/telegram_checksum_commands.py +4 -2
  30. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/cli/commands/telegram/telegram_discover_commands.py +2 -1
  31. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/cli/commands/telegram/telegram_linknumber_commands.py +4 -2
  32. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/cli/commands/telegram/telegram_parse_commands.py +4 -2
  33. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/cli/commands/telegram/telegram_version_commands.py +2 -1
  34. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/cli/commands/term/term_commands.py +4 -2
  35. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/cli/main.py +2 -1
  36. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/cli/utils/click_tree.py +6 -3
  37. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/cli/utils/datapoint_type_choice.py +4 -2
  38. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/cli/utils/decorators.py +42 -21
  39. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/cli/utils/error_handlers.py +16 -8
  40. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/cli/utils/formatters.py +22 -11
  41. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/cli/utils/module_type_choice.py +4 -2
  42. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/cli/utils/serial_number_type.py +4 -2
  43. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/cli/utils/system_function_choice.py +4 -2
  44. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/cli/utils/xp_module_type.py +4 -2
  45. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/models/actiontable/actiontable.py +8 -8
  46. conson_xp-1.48.0/src/xp/models/actiontable/actiontable_type.py +20 -0
  47. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/models/actiontable/msactiontable_xp20.py +8 -4
  48. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/models/actiontable/msactiontable_xp24.py +12 -6
  49. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/models/actiontable/msactiontable_xp33.py +20 -10
  50. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/models/conbus/conbus.py +8 -4
  51. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/models/conbus/conbus_autoreport.py +4 -2
  52. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/models/conbus/conbus_blink.py +4 -2
  53. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/models/conbus/conbus_client_config.py +6 -3
  54. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/models/conbus/conbus_connection_status.py +4 -2
  55. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/models/conbus/conbus_custom.py +4 -2
  56. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/models/conbus/conbus_datapoint.py +4 -2
  57. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/models/conbus/conbus_discover.py +6 -3
  58. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/models/conbus/conbus_event_list.py +4 -2
  59. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/models/conbus/conbus_event_raw.py +4 -2
  60. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/models/conbus/conbus_export.py +2 -1
  61. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/models/conbus/conbus_lightlevel.py +4 -2
  62. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/models/conbus/conbus_linknumber.py +4 -2
  63. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/models/conbus/conbus_logger_config.py +8 -4
  64. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/models/conbus/conbus_output.py +4 -2
  65. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/models/conbus/conbus_raw.py +4 -2
  66. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/models/conbus/conbus_receive.py +4 -2
  67. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/models/conbus/conbus_writeconfig.py +4 -2
  68. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/models/config/conson_module_config.py +8 -4
  69. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/models/homekit/homekit_accessory.py +4 -2
  70. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/models/homekit/homekit_config.py +12 -6
  71. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/models/log_entry.py +16 -8
  72. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/models/protocol/conbus_protocol.py +36 -18
  73. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/models/response.py +12 -8
  74. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/models/telegram/action_type.py +4 -2
  75. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/models/telegram/datapoint_type.py +4 -2
  76. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/models/telegram/event_telegram.py +14 -7
  77. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/models/telegram/event_type.py +2 -1
  78. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/models/telegram/input_action_type.py +2 -1
  79. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/models/telegram/input_type.py +2 -1
  80. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/models/telegram/module_type.py +24 -12
  81. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/models/telegram/module_type_code.py +2 -1
  82. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/models/telegram/output_telegram.py +16 -10
  83. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/models/telegram/reply_telegram.py +24 -13
  84. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/models/telegram/system_function.py +6 -3
  85. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/models/telegram/system_telegram.py +10 -6
  86. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/models/telegram/telegram.py +2 -1
  87. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/models/telegram/telegram_type.py +2 -1
  88. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/models/telegram/timeparam_type.py +2 -1
  89. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/models/term/connection_state.py +4 -2
  90. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/models/term/module_state.py +2 -1
  91. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/models/term/protocol_keys_config.py +6 -3
  92. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/models/term/status_message.py +2 -1
  93. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/models/term/telegram_display.py +2 -1
  94. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/models/write_config_type.py +4 -2
  95. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/actiontable/actiontable_serializer.py +34 -41
  96. conson_xp-1.46.0/src/xp/services/conbus/actiontable/actiontable_download_state_machine.py → conson_xp-1.48.0/src/xp/services/actiontable/download_state_machine.py +13 -8
  97. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/actiontable/msactiontable_xp20_serializer.py +73 -50
  98. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/actiontable/msactiontable_xp24_serializer.py +73 -54
  99. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/actiontable/msactiontable_xp33_serializer.py +44 -20
  100. conson_xp-1.48.0/src/xp/services/actiontable/serializer_protocol.py +76 -0
  101. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/conbus/actiontable/actiontable_download_service.py +68 -31
  102. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/conbus/actiontable/actiontable_list_service.py +17 -4
  103. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/conbus/actiontable/actiontable_show_service.py +10 -6
  104. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/conbus/actiontable/actiontable_upload_service.py +17 -9
  105. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/conbus/conbus_blink_all_service.py +16 -8
  106. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/conbus/conbus_blink_service.py +14 -7
  107. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/conbus/conbus_custom_service.py +16 -8
  108. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/conbus/conbus_datapoint_queryall_service.py +18 -9
  109. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/conbus/conbus_datapoint_service.py +18 -9
  110. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/conbus/conbus_discover_service.py +24 -13
  111. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/conbus/conbus_event_list_service.py +11 -7
  112. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/conbus/conbus_event_raw_service.py +18 -10
  113. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/conbus/conbus_export_service.py +28 -14
  114. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/conbus/conbus_output_service.py +18 -10
  115. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/conbus/conbus_raw_service.py +16 -8
  116. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/conbus/conbus_receive_service.py +18 -10
  117. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/conbus/conbus_scan_service.py +18 -10
  118. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/conbus/msactiontable/msactiontable_upload_service.py +18 -10
  119. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/conbus/write_config_service.py +18 -9
  120. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/homekit/homekit_cache_service.py +12 -6
  121. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/homekit/homekit_conbus_service.py +12 -6
  122. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/homekit/homekit_config_validator.py +34 -17
  123. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/homekit/homekit_conson_validator.py +18 -9
  124. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/homekit/homekit_dimminglight.py +14 -7
  125. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/homekit/homekit_dimminglight_service.py +14 -7
  126. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/homekit/homekit_hap_service.py +18 -9
  127. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/homekit/homekit_lightbulb.py +10 -5
  128. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/homekit/homekit_lightbulb_service.py +10 -5
  129. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/homekit/homekit_module_service.py +8 -4
  130. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/homekit/homekit_outlet.py +14 -7
  131. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/homekit/homekit_outlet_service.py +12 -6
  132. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/homekit/homekit_service.py +24 -12
  133. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/log_file_service.py +16 -8
  134. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/module_type_service.py +10 -5
  135. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/protocol/conbus_event_protocol.py +51 -26
  136. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/protocol/conbus_protocol.py +36 -19
  137. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/protocol/protocol_factory.py +12 -6
  138. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/protocol/telegram_protocol.py +12 -6
  139. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/reverse_proxy_service.py +26 -14
  140. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/server/base_server_service.py +42 -23
  141. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/server/client_buffer_manager.py +12 -7
  142. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/server/cp20_server_service.py +10 -7
  143. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/server/device_service_factory.py +12 -8
  144. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/server/server_service.py +18 -11
  145. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/server/xp130_server_service.py +11 -8
  146. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/server/xp20_server_service.py +16 -10
  147. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/server/xp230_server_service.py +10 -7
  148. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/server/xp24_server_service.py +22 -13
  149. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/server/xp33_server_service.py +44 -25
  150. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/telegram/telegram_blink_service.py +14 -8
  151. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/telegram/telegram_checksum_service.py +12 -7
  152. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/telegram/telegram_datapoint_service.py +14 -9
  153. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/telegram/telegram_discover_service.py +28 -15
  154. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/telegram/telegram_link_number_service.py +18 -10
  155. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/telegram/telegram_output_service.py +24 -12
  156. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/telegram/telegram_service.py +22 -11
  157. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/telegram/telegram_version_service.py +14 -8
  158. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/term/protocol_monitor_service.py +30 -16
  159. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/term/state_monitor_service.py +39 -21
  160. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/term/protocol.py +12 -6
  161. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/term/state.py +12 -7
  162. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/term/widgets/help_menu.py +6 -3
  163. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/term/widgets/modules_list.py +20 -10
  164. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/term/widgets/protocol_log.py +12 -6
  165. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/term/widgets/status_footer.py +10 -5
  166. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/utils/checksum.py +6 -3
  167. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/utils/dependencies.py +25 -30
  168. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/utils/event_helper.py +6 -4
  169. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/utils/logging.py +6 -3
  170. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/utils/serialization.py +30 -16
  171. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/utils/state_machine.py +16 -9
  172. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/utils/time_utils.py +6 -3
  173. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/integration/telegram_test_data.py +2 -1
  174. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/integration/test_actiontable_integration.py +35 -27
  175. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/integration/test_checksum_integration.py +4 -3
  176. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/integration/test_conbus_blink_integration.py +6 -3
  177. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/integration/test_conbus_datapoint_integration.py +18 -9
  178. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/integration/test_conbus_raw_integration.py +28 -15
  179. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/integration/test_conbus_receive_integration.py +4 -3
  180. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/integration/test_homekit_config_integration.py +6 -3
  181. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/integration/test_reverse_proxy_integration.py +4 -2
  182. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/integration/test_system_reply_telegram_integration.py +2 -1
  183. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/integration/test_xp20_action_table_integration.py +33 -30
  184. conson_xp-1.48.0/tests/integration/test_xp24_action_table_integration.py +215 -0
  185. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_cli/test_conbus_actiontable_commands.py +35 -25
  186. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_cli/test_conbus_blink_commands.py +1 -1
  187. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_cli/test_conbus_msactiontable_upload_commands.py +8 -4
  188. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_cli/test_formatters.py +2 -1
  189. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_encoding/test_latin1_edge_cases.py +2 -1
  190. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_models/test_reply_telegram.py +4 -3
  191. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_models/test_system_telegram.py +4 -3
  192. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_services/test_actiontable_download_service.py +39 -9
  193. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_services/test_actiontable_serializer.py +25 -20
  194. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_services/test_actiontable_service.py +16 -9
  195. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_services/test_actiontable_upload_service.py +5 -3
  196. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_services/test_base_server_service.py +2 -1
  197. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_services/test_checksum_service.py +4 -3
  198. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_services/test_client_buffer_manager.py +6 -3
  199. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_services/test_homekit_config_validator.py +13 -5
  200. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_services/test_homekit_services.py +15 -5
  201. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_services/test_log_file_service.py +4 -2
  202. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_services/test_msactiontable_upload_service.py +4 -36
  203. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_services/test_state_monitor_service.py +2 -1
  204. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_services/test_telegram_output_service.py +2 -1
  205. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_services/test_telegram_service.py +4 -3
  206. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_services/test_xp20_action_table_serializer.py +37 -32
  207. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_services/test_xp24_action_table_serializer.py +32 -14
  208. conson_xp-1.48.0/tests/unit/test_services/test_xp24_action_table_service.py +240 -0
  209. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_services/test_xp33_action_table_serializer.py +19 -17
  210. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_utils/test_checksum.py +3 -3
  211. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_utils/test_logging.py +2 -1
  212. conson_xp-1.46.0/src/xp/services/conbus/msactiontable/msactiontable_download_service.py +0 -275
  213. conson_xp-1.46.0/src/xp/services/conbus/msactiontable/msactiontable_list_service.py +0 -100
  214. conson_xp-1.46.0/src/xp/services/conbus/msactiontable/msactiontable_show_service.py +0 -89
  215. conson_xp-1.46.0/tests/integration/test_xp24_action_table_integration.py +0 -287
  216. conson_xp-1.46.0/tests/unit/test_services/test_xp24_action_table_service.py +0 -353
  217. {conson_xp-1.46.0 → conson_xp-1.48.0}/LICENSE +0 -0
  218. {conson_xp-1.46.0 → conson_xp-1.48.0}/README.md +0 -0
  219. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/cli/__init__.py +0 -0
  220. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/cli/__main__.py +0 -0
  221. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/cli/commands/__init__.py +0 -0
  222. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/cli/commands/conbus/__init__.py +0 -0
  223. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/cli/commands/homekit/__init__.py +0 -0
  224. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/cli/commands/server/__init__.py +0 -0
  225. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/cli/commands/telegram/__init__.py +0 -0
  226. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/cli/commands/telegram/telegram.py +0 -0
  227. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/cli/commands/term/__init__.py +0 -0
  228. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/cli/commands/term/term.py +0 -0
  229. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/cli/utils/__init__.py +0 -0
  230. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/models/__init__.py +0 -0
  231. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/models/actiontable/__init__.py +0 -0
  232. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/models/conbus/__init__.py +0 -0
  233. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/models/config/__init__.py +0 -0
  234. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/models/homekit/__init__.py +0 -0
  235. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/models/protocol/__init__.py +0 -0
  236. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/models/telegram/__init__.py +0 -0
  237. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/models/term/__init__.py +0 -0
  238. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/__init__.py +0 -0
  239. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/actiontable/__init__.py +0 -0
  240. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/actiontable/msactiontable_serializer.py +0 -0
  241. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/conbus/__init__.py +0 -0
  242. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/conbus/actiontable/__init__.py +0 -0
  243. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/conbus/msactiontable/__init__.py +0 -0
  244. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/homekit/__init__.py +0 -0
  245. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/protocol/__init__.py +0 -0
  246. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/server/__init__.py +0 -0
  247. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/telegram/__init__.py +0 -0
  248. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/services/term/__init__.py +0 -0
  249. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/term/__init__.py +0 -0
  250. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/term/protocol.tcss +0 -0
  251. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/term/state.tcss +0 -0
  252. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/term/widgets/__init__.py +0 -0
  253. {conson_xp-1.46.0 → conson_xp-1.48.0}/src/xp/utils/__init__.py +0 -0
  254. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/.coverage +0 -0
  255. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/__init__.py +0 -0
  256. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/conftest.py +0 -0
  257. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/integration/.coverage +0 -0
  258. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/integration/__init__.py +0 -0
  259. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/integration/test_api/.coverage +0 -0
  260. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/integration/test_api/__init__.py +0 -0
  261. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/integration/test_blink_integration.py +0 -0
  262. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/integration/test_discovery_integration.py +0 -0
  263. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/integration/test_event_telegram_integration.py +0 -0
  264. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/integration/test_link_number_integration.py +0 -0
  265. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/integration/test_module_integration.py +0 -0
  266. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/integration/test_output_integration.py +0 -0
  267. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/integration/test_term_logging_integration.py +0 -0
  268. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/integration/test_version_integration.py +0 -0
  269. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/__init__.py +0 -0
  270. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_api/__init__.py +0 -0
  271. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_cli/__init__.py +0 -0
  272. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_cli/test_click_tree.py +0 -0
  273. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_cli/test_datapoint_type_choice.py +0 -0
  274. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_cli/test_decorators.py +0 -0
  275. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_cli/test_error_handlers.py +0 -0
  276. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_cli/test_serial_number_type.py +0 -0
  277. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_cli/test_system_function_choice.py +0 -0
  278. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_cli/test_term_commands.py +0 -0
  279. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_encoding/__init__.py +0 -0
  280. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_models/__init__.py +0 -0
  281. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_models/test_conbus.py +0 -0
  282. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_models/test_conbus_client_send.py +0 -0
  283. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_models/test_conbus_discover.py +0 -0
  284. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_models/test_conbus_linknumber.py +0 -0
  285. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_models/test_event_telegram.py +0 -0
  286. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_models/test_log_entry.py +0 -0
  287. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_models/test_logger_config.py +0 -0
  288. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_models/test_module_type.py +0 -0
  289. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_models/test_system_telegram_enhancements.py +0 -0
  290. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_models/test_version_telegram.py +0 -0
  291. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_models/test_write_config_type.py +0 -0
  292. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_models/test_xp20_action_table.py +0 -0
  293. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_models/test_xp24_action_table.py +0 -0
  294. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_models/test_xp24_action_table_short_format.py +0 -0
  295. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_models/test_xp24_action_telegram.py +0 -0
  296. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_services/__init__.py +0 -0
  297. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_services/test_blink_service.py +0 -0
  298. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_services/test_conbus_blink_service.py +0 -0
  299. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_services/test_conbus_event_list_service.py +0 -0
  300. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_services/test_conbus_event_protocol.py +0 -0
  301. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_services/test_conbus_event_raw_service.py +0 -0
  302. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_services/test_conbus_output_service.py +0 -0
  303. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_services/test_conbus_raw_service.py +0 -0
  304. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_services/test_conbus_receive_service.py +0 -0
  305. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_services/test_conbus_reverse_proxy_service.py +0 -0
  306. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_services/test_conbus_scan_service.py +0 -0
  307. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_services/test_device_service_factory.py +0 -0
  308. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_services/test_discovery_service.py +0 -0
  309. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_services/test_homekit_cache_service.py +0 -0
  310. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_services/test_homekit_conson_service.py +0 -0
  311. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_services/test_module_type_service.py +0 -0
  312. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_services/test_protocol.py +0 -0
  313. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_services/test_protocol_monitor_service.py +0 -0
  314. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_services/test_server_service.py +0 -0
  315. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_services/test_telegram_input_service.py +0 -0
  316. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_services/test_telegram_protocol.py +0 -0
  317. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_services/test_version_service.py +0 -0
  318. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_services/test_xp24_action_service.py +0 -0
  319. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_services/test_xp33_short_format.py +0 -0
  320. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_services/test_xp_server_services.py +0 -0
  321. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_tui/__init__.py +0 -0
  322. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_tui/test_protocol_log.py +0 -0
  323. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_utils/__init__.py +0 -0
  324. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_utils/test_event_helper.py +0 -0
  325. {conson_xp-1.46.0 → conson_xp-1.48.0}/tests/unit/test_utils/test_serialization.py +0 -0
  326. {conson_xp-1.46.0 → conson_xp-1.48.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.46.0
3
+ Version: 1.48.0
4
4
  Summary: XP Protocol Communication Tools
5
5
  Author-Email: ldvchosal <ldvchosal@github.com>
6
6
  License: MIT License
@@ -23,7 +23,7 @@ dependencies = [
23
23
  ]
24
24
  requires-python = ">=3.11"
25
25
  readme = "README.md"
26
- version = "1.46.0"
26
+ version = "1.48.0"
27
27
 
28
28
  [project.license]
29
29
  file = "LICENSE"
@@ -59,6 +59,7 @@ dev = [
59
59
  "absolufy-imports>=0.3.1",
60
60
  "pytest-asyncio>=1.2.0",
61
61
  "types-docutils>=0.22.2.20251006",
62
+ "docformatter>=1.7.7",
62
63
  ]
63
64
 
64
65
  [tool.pytest.ini_options]
@@ -177,6 +178,7 @@ interrogate = "interrogate -vv src/"
177
178
  vulture = "vulture src/ tests/"
178
179
  refurb = "refurb src/ tests/"
179
180
  isort = "isort src/ tests/"
181
+ docformatter = "docformatter src/ tests/"
180
182
  bump-version = "pdm bump -v minor"
181
183
  env = "echo ${PATH}"
182
184
  install = "pdm install"
@@ -197,6 +199,7 @@ composite = [
197
199
  "clean",
198
200
  "lint",
199
201
  "format",
202
+ "docformatter",
200
203
  "typecheck",
201
204
  "flake8",
202
205
  "interrogate",
@@ -250,6 +253,14 @@ color = true
250
253
  generate-badge = "."
251
254
  badge-format = "svg"
252
255
 
256
+ [tool.docformatter]
257
+ recursive = true
258
+ wrap-summaries = 88
259
+ wrap-descriptions = 88
260
+ close-quotes-on-newline = true
261
+ pre-summary-newline = true
262
+ in-place = true
263
+
253
264
  [build-system]
254
265
  requires = [
255
266
  "pdm-backend",
@@ -1,9 +1,10 @@
1
- """XP CLI tool for remote console bus operations.
1
+ """
2
+ XP CLI tool for remote console bus operations.
2
3
 
3
4
  conson-xp package.
4
5
  """
5
6
 
6
- __version__ = "1.46.0"
7
+ __version__ = "1.48.0"
7
8
  __manufacturer__ = "salchichon"
8
9
  __model__ = "xp.cli"
9
10
  __serial__ = "2025.09.23.000"
@@ -19,7 +19,7 @@ def conbus() -> None:
19
19
  help_options_color="green",
20
20
  )
21
21
  def conbus_blink() -> None:
22
- """Perform Conbus client operations for sending blink telegrams to remote servers."""
22
+ """Sending blink telegrams to remote servers."""
23
23
  pass
24
24
 
25
25
 
@@ -3,7 +3,6 @@
3
3
  import json
4
4
  from contextlib import suppress
5
5
  from pathlib import Path
6
- from typing import Any, Dict
7
6
 
8
7
  import click
9
8
  from click import Context
@@ -14,6 +13,7 @@ from xp.cli.utils.decorators import (
14
13
  )
15
14
  from xp.cli.utils.serial_number_type import SERIAL
16
15
  from xp.models.actiontable.actiontable import ActionTable
16
+ from xp.models.actiontable.actiontable_type import ActionTableType
17
17
  from xp.models.config.conson_module_config import (
18
18
  ConsonModuleConfig,
19
19
  ConsonModuleListConfig,
@@ -43,7 +43,8 @@ class ActionTableError(Exception):
43
43
  @click.pass_context
44
44
  @connection_command()
45
45
  def conbus_download_actiontable(ctx: Context, serial_number: str) -> None:
46
- """Download action table from XP module.
46
+ """
47
+ Download action table from XP module.
47
48
 
48
49
  Args:
49
50
  ctx: Click context object.
@@ -54,7 +55,8 @@ def conbus_download_actiontable(ctx: Context, serial_number: str) -> None:
54
55
  )
55
56
 
56
57
  def on_progress(progress: str) -> None:
57
- """Handle progress updates during action table download.
58
+ """
59
+ Handle progress updates during action table download.
58
60
 
59
61
  Args:
60
62
  progress: Progress message string.
@@ -63,20 +65,18 @@ def conbus_download_actiontable(ctx: Context, serial_number: str) -> None:
63
65
 
64
66
  def on_actiontable_received(
65
67
  _actiontable: ActionTable,
66
- actiontable_dict: Dict[str, Any],
67
68
  actiontable_short: list[str],
68
69
  ) -> None:
69
- """Handle successful completion of action table download.
70
+ """
71
+ Handle successful completion of action table download.
70
72
 
71
73
  Args:
72
74
  _actiontable: a list of ActionTableEntries.
73
- actiontable_dict: action table in a dictionary.
74
75
  actiontable_short: short representation of action table.
75
76
  """
76
77
  output = {
77
78
  "serial_number": serial_number,
78
79
  "actiontable_short": actiontable_short,
79
- "actiontable": actiontable_dict,
80
80
  }
81
81
  click.echo(json.dumps(output, indent=2, default=str))
82
82
 
@@ -85,7 +85,8 @@ def conbus_download_actiontable(ctx: Context, serial_number: str) -> None:
85
85
  service.stop_reactor()
86
86
 
87
87
  def on_error(error: str) -> None:
88
- """Handle errors during action table download.
88
+ """
89
+ Handle errors during action table download.
89
90
 
90
91
  Args:
91
92
  error: Error message string.
@@ -98,7 +99,10 @@ def conbus_download_actiontable(ctx: Context, serial_number: str) -> None:
98
99
  service.on_finish.connect(on_finish)
99
100
  service.on_actiontable_received.connect(on_actiontable_received)
100
101
  service.on_error.connect(on_error)
101
- service.configure(serial_number=serial_number)
102
+ service.configure(
103
+ serial_number=serial_number,
104
+ actiontable_type=ActionTableType.ACTIONTABLE,
105
+ )
102
106
  service.start_reactor()
103
107
 
104
108
 
@@ -107,7 +111,8 @@ def conbus_download_actiontable(ctx: Context, serial_number: str) -> None:
107
111
  @click.pass_context
108
112
  @connection_command()
109
113
  def conbus_upload_actiontable(ctx: Context, serial_number: str) -> None:
110
- """Upload action table from conson.yml to XP module.
114
+ """
115
+ Upload action table from conson.yml to XP module.
111
116
 
112
117
  Args:
113
118
  ctx: Click context object.
@@ -123,7 +128,8 @@ def conbus_upload_actiontable(ctx: Context, serial_number: str) -> None:
123
128
  entries_count = 0
124
129
 
125
130
  def progress_callback(progress: str) -> None:
126
- """Handle progress updates during action table upload.
131
+ """
132
+ Handle progress updates during action table upload.
127
133
 
128
134
  Args:
129
135
  progress: Progress message string.
@@ -131,7 +137,8 @@ def conbus_upload_actiontable(ctx: Context, serial_number: str) -> None:
131
137
  click.echo(progress, nl=False)
132
138
 
133
139
  def on_finish(success: bool) -> None:
134
- """Handle completion of action table upload.
140
+ """
141
+ Handle completion of action table upload.
135
142
 
136
143
  Args:
137
144
  success: True if upload succeeded.
@@ -143,7 +150,8 @@ def conbus_upload_actiontable(ctx: Context, serial_number: str) -> None:
143
150
  service.stop_reactor()
144
151
 
145
152
  def on_error(error: str) -> None:
146
- """Handle errors during action table upload.
153
+ """
154
+ Handle errors during action table upload.
147
155
 
148
156
  Args:
149
157
  error: Error message string.
@@ -174,7 +182,8 @@ def conbus_upload_actiontable(ctx: Context, serial_number: str) -> None:
174
182
  @conbus_actiontable.command("list", short_help="List modules with ActionTable")
175
183
  @click.pass_context
176
184
  def conbus_list_actiontable(ctx: Context) -> None:
177
- """List all modules with action table configurations from conson.yml.
185
+ """
186
+ List all modules with action table configurations from conson.yml.
178
187
 
179
188
  Args:
180
189
  ctx: Click context object.
@@ -184,7 +193,8 @@ def conbus_list_actiontable(ctx: Context) -> None:
184
193
  )
185
194
 
186
195
  def on_finish(module_list: dict) -> None:
187
- """Handle successful completion of action table list.
196
+ """
197
+ Handle successful completion of action table list.
188
198
 
189
199
  Args:
190
200
  module_list: Dictionary containing modules and total count.
@@ -192,7 +202,8 @@ def conbus_list_actiontable(ctx: Context) -> None:
192
202
  click.echo(json.dumps(module_list, indent=2, default=str))
193
203
 
194
204
  def on_error(error: str) -> None:
195
- """Handle errors during action table list.
205
+ """
206
+ Handle errors during action table list.
196
207
 
197
208
  Args:
198
209
  error: Error message string.
@@ -209,7 +220,8 @@ def conbus_list_actiontable(ctx: Context) -> None:
209
220
  @click.argument("serial_number", type=SERIAL)
210
221
  @click.pass_context
211
222
  def conbus_show_actiontable(ctx: Context, serial_number: str) -> None:
212
- """Show action table configuration for a specific module from conson.yml.
223
+ """
224
+ Show action table configuration for a specific module from conson.yml.
213
225
 
214
226
  Args:
215
227
  ctx: Click context object.
@@ -220,7 +232,8 @@ def conbus_show_actiontable(ctx: Context, serial_number: str) -> None:
220
232
  )
221
233
 
222
234
  def on_finish(module: ConsonModuleConfig) -> None:
223
- """Handle successful completion of action table show.
235
+ """
236
+ Handle successful completion of action table show.
224
237
 
225
238
  Args:
226
239
  module: Dictionary containing module configuration.
@@ -230,7 +243,8 @@ def conbus_show_actiontable(ctx: Context, serial_number: str) -> None:
230
243
  click.echo(json.dumps(module_data, indent=2, default=str))
231
244
 
232
245
  def error_callback(error: str) -> None:
233
- """Handle errors during action table show.
246
+ """
247
+ Handle errors during action table show.
234
248
 
235
249
  Args:
236
250
  error: Error message string.
@@ -23,7 +23,8 @@ from xp.services.telegram.telegram_datapoint_service import TelegramDatapointSer
23
23
  @connection_command()
24
24
  @click.pass_context
25
25
  def get_autoreport_command(ctx: Context, serial_number: str) -> None:
26
- r"""Get the current auto report status for a specific module.
26
+ r"""
27
+ Get the current auto report status for a specific module.
27
28
 
28
29
  Args:
29
30
  ctx: Click context object.
@@ -42,7 +43,8 @@ def get_autoreport_command(ctx: Context, serial_number: str) -> None:
42
43
  )
43
44
 
44
45
  def on_finish(service_response: ConbusDatapointResponse) -> None:
45
- """Handle successful completion of auto report status retrieval.
46
+ """
47
+ Handle successful completion of auto report status retrieval.
46
48
 
47
49
  Args:
48
50
  service_response: Auto report response object.
@@ -70,7 +72,8 @@ def get_autoreport_command(ctx: Context, serial_number: str) -> None:
70
72
  @connection_command()
71
73
  @click.pass_context
72
74
  def set_autoreport_command(ctx: Context, serial_number: str, status: str) -> None:
73
- r"""Set the auto report status for a specific module.
75
+ r"""
76
+ Set the auto report status for a specific module.
74
77
 
75
78
  Args:
76
79
  ctx: Click context object.
@@ -90,7 +93,8 @@ def set_autoreport_command(ctx: Context, serial_number: str, status: str) -> Non
90
93
  )
91
94
 
92
95
  def on_finish(response: "ConbusWriteConfigResponse") -> None:
93
- """Handle successful completion of light level on command.
96
+ """
97
+ Handle successful completion of light level on command.
94
98
 
95
99
  Args:
96
100
  response: Light level response object.
@@ -23,7 +23,8 @@ from xp.services.telegram.telegram_blink_service import BlinkError
23
23
  @connection_command()
24
24
  @handle_service_errors(BlinkError)
25
25
  def send_blink_on_telegram(ctx: Context, serial_number: str) -> None:
26
- r"""Send blink command to start blinking module LED.
26
+ r"""
27
+ Send blink command to start blinking module LED.
27
28
 
28
29
  Args:
29
30
  ctx: Click context object.
@@ -35,7 +36,8 @@ def send_blink_on_telegram(ctx: Context, serial_number: str) -> None:
35
36
  """
36
37
 
37
38
  def on_finish(service_response: ConbusBlinkResponse) -> None:
38
- """Handle successful completion of blink on command.
39
+ """
40
+ Handle successful completion of blink on command.
39
41
 
40
42
  Args:
41
43
  service_response: Blink response object.
@@ -58,7 +60,8 @@ def send_blink_on_telegram(ctx: Context, serial_number: str) -> None:
58
60
  @connection_command()
59
61
  @handle_service_errors(BlinkError)
60
62
  def send_blink_off_telegram(ctx: Context, serial_number: str) -> None:
61
- r"""Send blink command to stop blinking module LED.
63
+ r"""
64
+ Send blink command to stop blinking module LED.
62
65
 
63
66
  Args:
64
67
  ctx: Click context object.
@@ -70,7 +73,8 @@ def send_blink_off_telegram(ctx: Context, serial_number: str) -> None:
70
73
  """
71
74
 
72
75
  def on_finish(service_response: ConbusBlinkResponse) -> None:
73
- """Handle successful completion of blink off command.
76
+ """
77
+ Handle successful completion of blink off command.
74
78
 
75
79
  Args:
76
80
  service_response: Blink response object.
@@ -98,7 +102,8 @@ def conbus_blink_all() -> None:
98
102
  @connection_command()
99
103
  @handle_service_errors(BlinkError)
100
104
  def blink_all_off(ctx: Context) -> None:
101
- r"""Turn off blinking for all discovered devices.
105
+ r"""
106
+ Turn off blinking for all discovered devices.
102
107
 
103
108
  Args:
104
109
  ctx: Click context object.
@@ -109,7 +114,8 @@ def blink_all_off(ctx: Context) -> None:
109
114
  """
110
115
 
111
116
  def on_finish(discovered_devices: ConbusBlinkResponse) -> None:
112
- """Handle successful completion of blink all off command.
117
+ """
118
+ Handle successful completion of blink all off command.
113
119
 
114
120
  Args:
115
121
  discovered_devices: Blink response with all devices.
@@ -118,7 +124,8 @@ def blink_all_off(ctx: Context) -> None:
118
124
  service.stop_reactor()
119
125
 
120
126
  def progress(message: str) -> None:
121
- """Handle progress updates during blink all off operation.
127
+ """
128
+ Handle progress updates during blink all off operation.
122
129
 
123
130
  Args:
124
131
  message: Progress message string.
@@ -140,7 +147,8 @@ def blink_all_off(ctx: Context) -> None:
140
147
  @connection_command()
141
148
  @handle_service_errors(BlinkError)
142
149
  def blink_all_on(ctx: Context) -> None:
143
- r"""Turn on blinking for all discovered devices.
150
+ r"""
151
+ Turn on blinking for all discovered devices.
144
152
 
145
153
  Args:
146
154
  ctx: Click context object.
@@ -151,7 +159,8 @@ def blink_all_on(ctx: Context) -> None:
151
159
  """
152
160
 
153
161
  def on_finish(discovered_devices: ConbusBlinkResponse) -> None:
154
- """Handle successful completion of blink all on command.
162
+ """
163
+ Handle successful completion of blink all on command.
155
164
 
156
165
  Args:
157
166
  discovered_devices: Blink response with all devices.
@@ -160,7 +169,8 @@ def blink_all_on(ctx: Context) -> None:
160
169
  service.stop_reactor()
161
170
 
162
171
  def progress(message: str) -> None:
163
- """Handle progress updates during blink all on operation.
172
+ """
173
+ Handle progress updates during blink all on operation.
164
174
 
165
175
  Args:
166
176
  message: Progress message string.
@@ -14,7 +14,8 @@ from xp.models import ConbusClientConfig
14
14
  @click.pass_context
15
15
  @handle_service_errors(Exception)
16
16
  def show_config(ctx: Context) -> None:
17
- r"""Display current Conbus client configuration.
17
+ r"""
18
+ Display current Conbus client configuration.
18
19
 
19
20
  Args:
20
21
  ctx: Click context object.
@@ -23,7 +23,8 @@ from xp.services.conbus.conbus_custom_service import ConbusCustomService
23
23
  def send_custom_telegram(
24
24
  ctx: Context, serial_number: str, function_code: str, datapoint_code: str
25
25
  ) -> None:
26
- r"""Send custom telegram with specified function and data point codes.
26
+ r"""
27
+ Send custom telegram with specified function and data point codes.
27
28
 
28
29
  Args:
29
30
  ctx: Click context object.
@@ -41,7 +42,8 @@ def send_custom_telegram(
41
42
  )
42
43
 
43
44
  def on_finish(response: ConbusCustomResponse) -> None:
44
- """Handle successful completion of custom telegram.
45
+ """
46
+ Handle successful completion of custom telegram.
45
47
 
46
48
  Args:
47
49
  response: Custom response object.
@@ -30,7 +30,8 @@ from xp.services.conbus.conbus_datapoint_service import (
30
30
  @click.pass_context
31
31
  @connection_command()
32
32
  def query_datapoint(ctx: Context, serial_number: str, datapoint: DataPointType) -> None:
33
- r"""Query a specific datapoint from Conbus server.
33
+ r"""
34
+ Query a specific datapoint from Conbus server.
34
35
 
35
36
  Args:
36
37
  ctx: Click context object.
@@ -50,7 +51,8 @@ def query_datapoint(ctx: Context, serial_number: str, datapoint: DataPointType)
50
51
  )
51
52
 
52
53
  def on_finish(service_response: ConbusDatapointResponse) -> None:
53
- """Handle successful completion of datapoint query.
54
+ """
55
+ Handle successful completion of datapoint query.
54
56
 
55
57
  Args:
56
58
  service_response: Datapoint response object.
@@ -77,7 +79,8 @@ conbus_datapoint.add_command(query_datapoint)
77
79
  @click.pass_context
78
80
  @connection_command()
79
81
  def query_all_datapoints(ctx: Context, serial_number: str) -> None:
80
- r"""Query all datapoints from a specific module.
82
+ r"""
83
+ Query all datapoints from a specific module.
81
84
 
82
85
  Args:
83
86
  ctx: Click context object.
@@ -92,7 +95,8 @@ def query_all_datapoints(ctx: Context, serial_number: str) -> None:
92
95
  )
93
96
 
94
97
  def on_finish(service_response: ConbusDatapointResponse) -> None:
95
- """Handle successful completion of all datapoints query.
98
+ """
99
+ Handle successful completion of all datapoints query.
96
100
 
97
101
  Args:
98
102
  service_response: Datapoint response object with all datapoints.
@@ -101,7 +105,8 @@ def query_all_datapoints(ctx: Context, serial_number: str) -> None:
101
105
  service.stop_reactor()
102
106
 
103
107
  def on_progress(reply_telegram: ReplyTelegram) -> None:
104
- """Handle progress updates during all datapoints query.
108
+ """
109
+ Handle progress updates during all datapoints query.
105
110
 
106
111
  Args:
107
112
  reply_telegram: Reply telegram object with progress data.
@@ -19,7 +19,8 @@ from xp.services.conbus.conbus_discover_service import (
19
19
  @click.pass_context
20
20
  @connection_command()
21
21
  def send_discover_telegram(ctx: click.Context) -> None:
22
- r"""Send discover telegram to Conbus server.
22
+ r"""
23
+ Send discover telegram to Conbus server.
23
24
 
24
25
  Args:
25
26
  ctx: Click context object.
@@ -30,7 +31,8 @@ def send_discover_telegram(ctx: click.Context) -> None:
30
31
  """
31
32
 
32
33
  def on_finish(discovered_devices: ConbusDiscoverResponse) -> None:
33
- """Handle successful completion of device discovery.
34
+ """
35
+ Handle successful completion of device discovery.
34
36
 
35
37
  Args:
36
38
  discovered_devices: Discover response with all found devices.
@@ -39,7 +41,8 @@ def send_discover_telegram(ctx: click.Context) -> None:
39
41
  service.stop_reactor()
40
42
 
41
43
  def on_device_discovered(discovered_device: DiscoveredDevice) -> None:
42
- """Handle discovery of sa single module.
44
+ """
45
+ Handle discovery of sa single module.
43
46
 
44
47
  Args:
45
48
  discovered_device: Discover device.
@@ -47,7 +50,8 @@ def send_discover_telegram(ctx: click.Context) -> None:
47
50
  click.echo(json.dumps(discovered_device, indent=2))
48
51
 
49
52
  def progress(_serial_number: str) -> None:
50
- """Handle progress updates during device discovery.
53
+ """
54
+ Handle progress updates during device discovery.
51
55
 
52
56
  Args:
53
57
  _serial_number: Serial number of discovered device (unused).
@@ -15,7 +15,8 @@ from xp.services.conbus.conbus_event_raw_service import ConbusEventRawService
15
15
  @conbus_event.command("list")
16
16
  @click.pass_context
17
17
  def list_events(ctx: click.Context) -> None:
18
- r"""List configured event telegrams from module action tables.
18
+ r"""
19
+ List configured event telegrams from module action tables.
19
20
 
20
21
  Reads conson.yml configuration, parses action tables, and groups
21
22
  modules by their event keys to show which modules are assigned to
@@ -50,7 +51,8 @@ def send_event_raw(
50
51
  input_number: int,
51
52
  time_ms: int,
52
53
  ) -> None:
53
- r"""Send raw event telegrams to simulate button presses.
54
+ r"""
55
+ Send raw event telegrams to simulate button presses.
54
56
 
55
57
  Args:
56
58
  ctx: Click context object.
@@ -66,7 +68,8 @@ def send_event_raw(
66
68
  """
67
69
 
68
70
  def on_finish(response: ConbusEventRawResponse) -> None:
69
- """Handle successful completion of event raw operation.
71
+ """
72
+ Handle successful completion of event raw operation.
70
73
 
71
74
  Args:
72
75
  response: Event raw response with sent and received telegrams.
@@ -74,7 +77,8 @@ def send_event_raw(
74
77
  click.echo(json.dumps(response.to_dict(), indent=2))
75
78
 
76
79
  def on_progress(telegram: str) -> None:
77
- """Handle progress updates during event operation.
80
+ """
81
+ Handle progress updates during event operation.
78
82
 
79
83
  Args:
80
84
  telegram: Received telegram.
@@ -15,7 +15,8 @@ from xp.services.conbus.conbus_export_service import ConbusExportService
15
15
  @click.pass_context
16
16
  @connection_command()
17
17
  def export_conbus_config(ctx: click.Context) -> None:
18
- r"""Export Conbus device metadata to YAML file.
18
+ r"""
19
+ Export Conbus device metadata to YAML file.
19
20
 
20
21
  Discovers all devices on the Conbus network and queries their configuration
21
22
  datapoints to generate a complete export.yml file in conson.yml format.
@@ -31,7 +32,8 @@ def export_conbus_config(ctx: click.Context) -> None:
31
32
  """
32
33
 
33
34
  def on_progress(serial_number: str, current: int, total: int) -> None:
34
- """Handle progress updates during export.
35
+ """
36
+ Handle progress updates during export.
35
37
 
36
38
  Args:
37
39
  serial_number: Serial number of discovered device.
@@ -41,7 +43,8 @@ def export_conbus_config(ctx: click.Context) -> None:
41
43
  click.echo(f"Querying device {current}/{total}: {serial_number}...")
42
44
 
43
45
  def on_device_exported(module: ConsonModuleConfig) -> None:
44
- """Handle device export completion.
46
+ """
47
+ Handle device export completion.
45
48
 
46
49
  Args:
47
50
  module: Exported module configuration.
@@ -58,7 +61,8 @@ def export_conbus_config(ctx: click.Context) -> None:
58
61
  click.echo(f" ✓ Software version: {module.sw_version}")
59
62
 
60
63
  def on_finish(result: ConbusExportResponse) -> None:
61
- """Handle export completion.
64
+ """
65
+ Handle export completion.
62
66
 
63
67
  Args:
64
68
  result: Export result.
@@ -26,7 +26,8 @@ from xp.services.telegram.telegram_datapoint_service import TelegramDatapointSer
26
26
  def xp_lightlevel_set(
27
27
  ctx: click.Context, serial_number: str, output_number: int, level: int
28
28
  ) -> None:
29
- r"""Set light level for output_number on XP module serial_number.
29
+ r"""
30
+ Set light level for output_number on XP module serial_number.
30
31
 
31
32
  Args:
32
33
  ctx: Click context object.
@@ -44,7 +45,8 @@ def xp_lightlevel_set(
44
45
  )
45
46
 
46
47
  def on_finish(response: "ConbusWriteConfigResponse") -> None:
47
- """Handle successful completion of light level on command.
48
+ """
49
+ Handle successful completion of light level on command.
48
50
 
49
51
  Args:
50
52
  response: Light level response object.
@@ -73,7 +75,8 @@ def xp_lightlevel_set(
73
75
  def xp_lightlevel_off(
74
76
  ctx: click.Context, serial_number: str, output_number: int
75
77
  ) -> None:
76
- r"""Turn off light for output_number on XP module serial_number (set level to 0).
78
+ r"""
79
+ Turn off light for output_number on XP module serial_number (set level to 0).
77
80
 
78
81
  Args:
79
82
  ctx: Click context object.
@@ -90,7 +93,8 @@ def xp_lightlevel_off(
90
93
  )
91
94
 
92
95
  def on_finish(response: "ConbusWriteConfigResponse") -> None:
93
- """Handle successful completion of light level on command.
96
+ """
97
+ Handle successful completion of light level on command.
94
98
 
95
99
  Args:
96
100
  response: Light level response object.
@@ -120,7 +124,8 @@ def xp_lightlevel_off(
120
124
  def xp_lightlevel_on(
121
125
  ctx: click.Context, serial_number: str, output_number: int
122
126
  ) -> None:
123
- r"""Turn on light for output_number on XP module serial_number (set level to 80%).
127
+ r"""
128
+ Turn on light for output_number on XP module serial_number (set level to 80%).
124
129
 
125
130
  Args:
126
131
  ctx: Click context object.
@@ -137,7 +142,8 @@ def xp_lightlevel_on(
137
142
  )
138
143
 
139
144
  def on_finish(response: "ConbusWriteConfigResponse") -> None:
140
- """Handle successful completion of light level on command.
145
+ """
146
+ Handle successful completion of light level on command.
141
147
 
142
148
  Args:
143
149
  response: Light level response object.
@@ -167,7 +173,8 @@ def xp_lightlevel_on(
167
173
  def xp_lightlevel_get(
168
174
  ctx: click.Context, serial_number: str, output_number: int
169
175
  ) -> None:
170
- r"""Get current light level for output_number on XP module serial_number.
176
+ r"""
177
+ Get current light level for output_number on XP module serial_number.
171
178
 
172
179
  Args:
173
180
  ctx: Click context object.
@@ -188,7 +195,8 @@ def xp_lightlevel_get(
188
195
  )
189
196
 
190
197
  def on_finish(service_response: "ConbusDatapointResponse") -> None:
191
- """Handle successful completion of light level get command.
198
+ """
199
+ Handle successful completion of light level get command.
192
200
 
193
201
  Args:
194
202
  service_response: Light level response object.