conson-xp 1.35.0__tar.gz → 1.37.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.
- {conson_xp-1.35.0 → conson_xp-1.37.0}/PKG-INFO +1 -1
- {conson_xp-1.35.0 → conson_xp-1.37.0}/pyproject.toml +1 -1
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/__init__.py +1 -1
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/cli/commands/conbus/conbus_actiontable_commands.py +1 -1
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/cli/commands/conbus/conbus_autoreport_commands.py +5 -2
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/cli/commands/conbus/conbus_lightlevel_commands.py +2 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/cli/commands/conbus/conbus_linknumber_commands.py +2 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/cli/commands/conbus/conbus_modulenumber_commands.py +2 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/cli/commands/conbus/conbus_output_commands.py +4 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/models/telegram/datapoint_type.py +30 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/conbus/actiontable/msactiontable_service.py +0 -1
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/conbus/conbus_datapoint_service.py +1 -1
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/protocol/conbus_event_protocol.py +7 -3
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/term/state_monitor_service.py +35 -15
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/term/widgets/modules_list.py +4 -2
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_services/test_state_monitor_service.py +150 -1
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_services/test_xp24_action_table_service.py +0 -1
- {conson_xp-1.35.0 → conson_xp-1.37.0}/LICENSE +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/README.md +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/cli/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/cli/__main__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/cli/commands/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/cli/commands/conbus/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/cli/commands/conbus/conbus.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/cli/commands/conbus/conbus_blink_commands.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/cli/commands/conbus/conbus_config_commands.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/cli/commands/conbus/conbus_custom_commands.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/cli/commands/conbus/conbus_datapoint_commands.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/cli/commands/conbus/conbus_discover_commands.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/cli/commands/conbus/conbus_event_commands.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/cli/commands/conbus/conbus_export_commands.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/cli/commands/conbus/conbus_msactiontable_commands.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/cli/commands/conbus/conbus_raw_commands.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/cli/commands/conbus/conbus_receive_commands.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/cli/commands/conbus/conbus_scan_commands.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/cli/commands/file_commands.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/cli/commands/homekit/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/cli/commands/homekit/homekit.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/cli/commands/homekit/homekit_start_commands.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/cli/commands/module_commands.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/cli/commands/reverse_proxy_commands.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/cli/commands/server/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/cli/commands/server/server_commands.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/cli/commands/telegram/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/cli/commands/telegram/telegram.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/cli/commands/telegram/telegram_blink_commands.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/cli/commands/telegram/telegram_checksum_commands.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/cli/commands/telegram/telegram_discover_commands.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/cli/commands/telegram/telegram_linknumber_commands.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/cli/commands/telegram/telegram_parse_commands.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/cli/commands/telegram/telegram_version_commands.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/cli/commands/term/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/cli/commands/term/term.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/cli/commands/term/term_commands.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/cli/main.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/cli/utils/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/cli/utils/click_tree.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/cli/utils/datapoint_type_choice.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/cli/utils/decorators.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/cli/utils/error_handlers.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/cli/utils/formatters.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/cli/utils/module_type_choice.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/cli/utils/serial_number_type.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/cli/utils/system_function_choice.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/cli/utils/xp_module_type.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/connection/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/connection/exceptions.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/models/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/models/actiontable/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/models/actiontable/actiontable.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/models/actiontable/msactiontable_xp20.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/models/actiontable/msactiontable_xp24.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/models/actiontable/msactiontable_xp33.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/models/conbus/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/models/conbus/conbus.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/models/conbus/conbus_autoreport.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/models/conbus/conbus_blink.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/models/conbus/conbus_client_config.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/models/conbus/conbus_connection_status.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/models/conbus/conbus_custom.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/models/conbus/conbus_datapoint.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/models/conbus/conbus_discover.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/models/conbus/conbus_event_list.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/models/conbus/conbus_event_raw.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/models/conbus/conbus_export.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/models/conbus/conbus_lightlevel.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/models/conbus/conbus_linknumber.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/models/conbus/conbus_logger_config.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/models/conbus/conbus_output.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/models/conbus/conbus_raw.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/models/conbus/conbus_receive.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/models/conbus/conbus_writeconfig.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/models/homekit/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/models/homekit/homekit_accessory.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/models/homekit/homekit_config.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/models/homekit/homekit_conson_config.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/models/log_entry.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/models/protocol/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/models/protocol/conbus_protocol.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/models/response.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/models/telegram/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/models/telegram/action_type.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/models/telegram/event_telegram.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/models/telegram/event_type.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/models/telegram/input_action_type.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/models/telegram/input_type.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/models/telegram/module_type.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/models/telegram/module_type_code.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/models/telegram/output_telegram.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/models/telegram/reply_telegram.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/models/telegram/system_function.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/models/telegram/system_telegram.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/models/telegram/telegram.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/models/telegram/telegram_type.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/models/telegram/timeparam_type.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/models/term/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/models/term/connection_state.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/models/term/module_state.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/models/term/protocol_keys_config.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/models/term/status_message.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/models/term/telegram_display.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/models/write_config_type.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/actiontable/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/actiontable/actiontable_serializer.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/actiontable/msactiontable_serializer.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/actiontable/msactiontable_xp20_serializer.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/actiontable/msactiontable_xp24_serializer.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/actiontable/msactiontable_xp33_serializer.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/conbus/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/conbus/actiontable/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/conbus/actiontable/actiontable_download_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/conbus/actiontable/actiontable_list_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/conbus/actiontable/actiontable_show_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/conbus/actiontable/actiontable_upload_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/conbus/conbus_blink_all_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/conbus/conbus_blink_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/conbus/conbus_custom_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/conbus/conbus_datapoint_queryall_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/conbus/conbus_discover_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/conbus/conbus_event_list_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/conbus/conbus_event_raw_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/conbus/conbus_export_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/conbus/conbus_output_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/conbus/conbus_raw_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/conbus/conbus_receive_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/conbus/conbus_scan_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/conbus/write_config_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/homekit/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/homekit/homekit_cache_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/homekit/homekit_conbus_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/homekit/homekit_config_validator.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/homekit/homekit_conson_validator.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/homekit/homekit_dimminglight.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/homekit/homekit_dimminglight_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/homekit/homekit_hap_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/homekit/homekit_lightbulb.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/homekit/homekit_lightbulb_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/homekit/homekit_module_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/homekit/homekit_outlet.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/homekit/homekit_outlet_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/homekit/homekit_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/log_file_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/module_type_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/protocol/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/protocol/conbus_protocol.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/protocol/protocol_factory.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/protocol/telegram_protocol.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/reverse_proxy_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/server/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/server/base_server_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/server/client_buffer_manager.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/server/cp20_server_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/server/device_service_factory.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/server/server_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/server/xp130_server_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/server/xp20_server_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/server/xp230_server_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/server/xp24_server_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/server/xp33_server_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/telegram/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/telegram/telegram_blink_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/telegram/telegram_checksum_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/telegram/telegram_datapoint_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/telegram/telegram_discover_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/telegram/telegram_link_number_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/telegram/telegram_output_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/telegram/telegram_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/telegram/telegram_version_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/term/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/services/term/protocol_monitor_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/term/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/term/protocol.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/term/protocol.tcss +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/term/state.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/term/state.tcss +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/term/widgets/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/term/widgets/help_menu.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/term/widgets/protocol_log.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/term/widgets/status_footer.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/utils/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/utils/checksum.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/utils/dependencies.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/utils/event_helper.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/utils/logging.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/utils/serialization.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/utils/state_machine.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/utils/time_utils.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/.coverage +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/conftest.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/integration/.coverage +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/integration/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/integration/telegram_test_data.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/integration/test_actiontable_integration.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/integration/test_api/.coverage +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/integration/test_api/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/integration/test_blink_integration.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/integration/test_checksum_integration.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/integration/test_conbus_blink_integration.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/integration/test_conbus_datapoint_integration.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/integration/test_conbus_raw_integration.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/integration/test_conbus_receive_integration.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/integration/test_discovery_integration.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/integration/test_event_telegram_integration.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/integration/test_homekit_config_integration.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/integration/test_link_number_integration.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/integration/test_module_integration.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/integration/test_output_integration.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/integration/test_reverse_proxy_integration.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/integration/test_system_reply_telegram_integration.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/integration/test_term_logging_integration.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/integration/test_version_integration.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/integration/test_xp20_action_table_integration.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/integration/test_xp24_action_table_integration.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_api/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_cli/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_cli/test_click_tree.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_cli/test_conbus_actiontable_commands.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_cli/test_conbus_blink_commands.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_cli/test_datapoint_type_choice.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_cli/test_decorators.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_cli/test_error_handlers.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_cli/test_formatters.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_cli/test_serial_number_type.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_cli/test_system_function_choice.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_cli/test_term_commands.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_connection/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_connection/test_connection_init.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_connection/test_exceptions.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_encoding/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_encoding/test_latin1_edge_cases.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_models/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_models/test_conbus.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_models/test_conbus_client_send.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_models/test_conbus_discover.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_models/test_conbus_linknumber.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_models/test_event_telegram.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_models/test_log_entry.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_models/test_logger_config.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_models/test_module_type.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_models/test_reply_telegram.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_models/test_system_telegram.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_models/test_system_telegram_enhancements.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_models/test_version_telegram.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_models/test_write_config_type.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_models/test_xp20_action_table.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_models/test_xp24_action_table.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_models/test_xp24_action_telegram.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_services/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_services/test_actiontable_serializer.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_services/test_actiontable_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_services/test_actiontable_upload_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_services/test_base_server_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_services/test_blink_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_services/test_checksum_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_services/test_client_buffer_manager.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_services/test_conbus_blink_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_services/test_conbus_event_list_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_services/test_conbus_event_protocol.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_services/test_conbus_event_raw_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_services/test_conbus_output_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_services/test_conbus_raw_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_services/test_conbus_receive_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_services/test_conbus_reverse_proxy_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_services/test_conbus_scan_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_services/test_device_service_factory.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_services/test_discovery_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_services/test_homekit_cache_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_services/test_homekit_config_validator.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_services/test_homekit_conson_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_services/test_homekit_services.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_services/test_log_file_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_services/test_module_type_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_services/test_protocol.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_services/test_protocol_monitor_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_services/test_server_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_services/test_telegram_input_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_services/test_telegram_output_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_services/test_telegram_protocol.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_services/test_telegram_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_services/test_version_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_services/test_xp20_action_table_serializer.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_services/test_xp24_action_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_services/test_xp24_action_table_serializer.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_services/test_xp33_action_table_serializer.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_services/test_xp_server_services.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_tui/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_tui/test_protocol_log.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_utils/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_utils/test_checksum.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_utils/test_event_helper.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_utils/test_logging.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_utils/test_serialization.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_utils/test_time_utils.py +0 -0
{conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/cli/commands/conbus/conbus_actiontable_commands.py
RENAMED
|
@@ -57,7 +57,7 @@ def conbus_download_actiontable(ctx: Context, serial_number: str) -> None:
|
|
|
57
57
|
Args:
|
|
58
58
|
progress: Progress message string.
|
|
59
59
|
"""
|
|
60
|
-
click.echo(progress)
|
|
60
|
+
click.echo(progress, nl=False)
|
|
61
61
|
|
|
62
62
|
def on_finish(result: tuple) -> None:
|
|
63
63
|
"""Handle successful completion of action table download.
|
{conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/cli/commands/conbus/conbus_autoreport_commands.py
RENAMED
|
@@ -57,8 +57,11 @@ def get_autoreport_command(ctx: Context, serial_number: str) -> None:
|
|
|
57
57
|
with service:
|
|
58
58
|
service.on_finish.connect(on_finish)
|
|
59
59
|
service.query_datapoint(
|
|
60
|
-
serial_number=serial_number,
|
|
60
|
+
serial_number=serial_number,
|
|
61
|
+
datapoint_type=DataPointType.AUTO_REPORT_STATUS,
|
|
62
|
+
timeout_seconds=1.0,
|
|
61
63
|
)
|
|
64
|
+
service.start_reactor()
|
|
62
65
|
|
|
63
66
|
|
|
64
67
|
@conbus_autoreport.command("set", short_help="Set auto report status for a module")
|
|
@@ -104,6 +107,6 @@ def set_autoreport_command(ctx: Context, serial_number: str, status: str) -> Non
|
|
|
104
107
|
serial_number=serial_number,
|
|
105
108
|
datapoint_type=DataPointType.AUTO_REPORT_STATUS,
|
|
106
109
|
data_value=data_value,
|
|
107
|
-
timeout_seconds=0
|
|
110
|
+
timeout_seconds=1.0,
|
|
108
111
|
)
|
|
109
112
|
service.start_reactor()
|
{conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/cli/commands/conbus/conbus_lightlevel_commands.py
RENAMED
|
@@ -200,6 +200,7 @@ def xp_lightlevel_get(
|
|
|
200
200
|
result["output_number"] = output_number
|
|
201
201
|
result["lightlevel_level"] = lightlevel_level
|
|
202
202
|
click.echo(json.dumps(result, indent=2))
|
|
203
|
+
service.stop_reactor()
|
|
203
204
|
|
|
204
205
|
with service:
|
|
205
206
|
service.on_finish.connect(on_finish)
|
|
@@ -208,3 +209,4 @@ def xp_lightlevel_get(
|
|
|
208
209
|
datapoint_type=DataPointType.MODULE_LIGHT_LEVEL,
|
|
209
210
|
timeout_seconds=0.5,
|
|
210
211
|
)
|
|
212
|
+
service.start_reactor()
|
{conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/cli/commands/conbus/conbus_linknumber_commands.py
RENAMED
|
@@ -93,6 +93,7 @@ def get_linknumber_command(ctx: click.Context, serial_number: str) -> None:
|
|
|
93
93
|
result = service_response.to_dict()
|
|
94
94
|
result["linknumber_value"] = linknumber_value
|
|
95
95
|
click.echo(json.dumps(result, indent=2))
|
|
96
|
+
service.stop_reactor()
|
|
96
97
|
|
|
97
98
|
with service:
|
|
98
99
|
service.on_finish.connect(on_finish)
|
|
@@ -101,3 +102,4 @@ def get_linknumber_command(ctx: click.Context, serial_number: str) -> None:
|
|
|
101
102
|
datapoint_type=DataPointType.LINK_NUMBER,
|
|
102
103
|
timeout_seconds=0.5,
|
|
103
104
|
)
|
|
105
|
+
service.start_reactor()
|
{conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/cli/commands/conbus/conbus_modulenumber_commands.py
RENAMED
|
@@ -95,6 +95,7 @@ def get_modulenumber_command(ctx: click.Context, serial_number: str) -> None:
|
|
|
95
95
|
result = service_response.to_dict()
|
|
96
96
|
result["modulenumber_value"] = modulenumber_value
|
|
97
97
|
click.echo(json.dumps(result, indent=2))
|
|
98
|
+
service.stop_reactor()
|
|
98
99
|
|
|
99
100
|
with service:
|
|
100
101
|
service.on_finish.connect(on_finish)
|
|
@@ -103,3 +104,4 @@ def get_modulenumber_command(ctx: click.Context, serial_number: str) -> None:
|
|
|
103
104
|
datapoint_type=DataPointType.MODULE_NUMBER,
|
|
104
105
|
timeout_seconds=0.5,
|
|
105
106
|
)
|
|
107
|
+
service.start_reactor()
|
|
@@ -121,6 +121,7 @@ def xp_output_status(ctx: click.Context, serial_number: str) -> None:
|
|
|
121
121
|
response: Datapoint response object.
|
|
122
122
|
"""
|
|
123
123
|
click.echo(json.dumps(response.to_dict(), indent=2))
|
|
124
|
+
service.stop_reactor()
|
|
124
125
|
|
|
125
126
|
with service:
|
|
126
127
|
service.on_finish.connect(on_finish)
|
|
@@ -128,6 +129,7 @@ def xp_output_status(ctx: click.Context, serial_number: str) -> None:
|
|
|
128
129
|
serial_number=serial_number,
|
|
129
130
|
datapoint_type=DataPointType.MODULE_OUTPUT_STATE,
|
|
130
131
|
)
|
|
132
|
+
service.start_reactor()
|
|
131
133
|
|
|
132
134
|
|
|
133
135
|
@conbus_output.command("state")
|
|
@@ -156,6 +158,7 @@ def xp_module_state(ctx: click.Context, serial_number: str) -> None:
|
|
|
156
158
|
response: Datapoint response object.
|
|
157
159
|
"""
|
|
158
160
|
click.echo(json.dumps(response.to_dict(), indent=2))
|
|
161
|
+
service.stop_reactor()
|
|
159
162
|
|
|
160
163
|
with service:
|
|
161
164
|
service.on_finish.connect(on_finish)
|
|
@@ -163,3 +166,4 @@ def xp_module_state(ctx: click.Context, serial_number: str) -> None:
|
|
|
163
166
|
serial_number=serial_number,
|
|
164
167
|
datapoint_type=DataPointType.MODULE_STATE,
|
|
165
168
|
)
|
|
169
|
+
service.start_reactor()
|
|
@@ -30,6 +30,36 @@ class DataPointType(str, Enum):
|
|
|
30
30
|
SW_TOP_VERSION: Software top version.
|
|
31
31
|
VOLTAGE: Voltage data point.
|
|
32
32
|
AUTO_REPORT_STATUS: Auto report status.
|
|
33
|
+
|
|
34
|
+
Sample telegram datapoint request:
|
|
35
|
+
<S0020044966F02D30FL>
|
|
36
|
+
|
|
37
|
+
Sample telegram datapoint reply:
|
|
38
|
+
<R0020044966F02D00XP24FH>
|
|
39
|
+
<R0020044966F02D01XP24FG>
|
|
40
|
+
<R0020044966F02D02XP24_V0.34.03GI>
|
|
41
|
+
<R0020044966F02D030020044966FB>
|
|
42
|
+
<R0020044966F02D0406FL>
|
|
43
|
+
<R0020044966F02D050007FL>
|
|
44
|
+
<R0020044966F02D0601FO>
|
|
45
|
+
<R0020044966F02D0707FJ>
|
|
46
|
+
<R0020044966F02D08MIFF>
|
|
47
|
+
<R0020044966F02D09OFFBP>
|
|
48
|
+
<R0020044966F02D1000FI>
|
|
49
|
+
<R0020044966F02D11xxxx0000FJ>
|
|
50
|
+
<R0020044966F02D12xxxx0000FK>
|
|
51
|
+
<R0020044966F02D1500:000[%],01:000[%],02:000[%],03:000[%]HB>
|
|
52
|
+
<R0020044966F02D1600:000[H],01:000[H],02:000[H],03:000[H]HC>
|
|
53
|
+
<R0020044966F02D1700:00000[NA],01:00000[NA],02:00000[NA],03:00000[NA]HD>
|
|
54
|
+
<R0020044966F02D18+28,5§CIM>
|
|
55
|
+
<R0020044966F02D19??FB>
|
|
56
|
+
<R0020044966F02D20??FL>
|
|
57
|
+
<R0020044966F02D21PPFK>
|
|
58
|
+
<R0020044966F02D22PLLKMDINEM>
|
|
59
|
+
<R0020044966F02D23AAFI>
|
|
60
|
+
<R0020044966F02D24AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFP>
|
|
61
|
+
<R0020044966F02D25AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFO>
|
|
62
|
+
<R0020044966F02D26??FN>
|
|
33
63
|
"""
|
|
34
64
|
|
|
35
65
|
MODULE_TYPE = "00" # Module type (XP24, XP33, ..)
|
|
@@ -320,9 +320,13 @@ class ConbusEventProtocol(protocol.Protocol, protocol.ClientFactory):
|
|
|
320
320
|
|
|
321
321
|
def stop_reactor(self) -> None:
|
|
322
322
|
"""Stop the reactor if it's running."""
|
|
323
|
-
|
|
324
|
-
self.
|
|
325
|
-
|
|
323
|
+
try:
|
|
324
|
+
if self._reactor.running:
|
|
325
|
+
self.logger.info("Stopping reactor")
|
|
326
|
+
self._reactor.stop()
|
|
327
|
+
except Exception as e:
|
|
328
|
+
# Reactor might have already stopped or not been started via run()
|
|
329
|
+
self.logger.debug(f"Reactor stop failed (likely already stopped): {e}")
|
|
326
330
|
|
|
327
331
|
def connect(self) -> None:
|
|
328
332
|
"""Connect to TCP server.
|
|
@@ -321,7 +321,7 @@ class StateMonitorService:
|
|
|
321
321
|
|
|
322
322
|
Args:
|
|
323
323
|
module_state: Module state to update.
|
|
324
|
-
output_number: Output number (0-3 for XP24).
|
|
324
|
+
output_number: Output number (0-3 for XP24, 0-2 for XP33 modules).
|
|
325
325
|
output_state: True for ON, False for OFF.
|
|
326
326
|
"""
|
|
327
327
|
# Parse existing outputs string "0 1 0 0" → [0, 1, 0, 0]
|
|
@@ -340,8 +340,9 @@ class StateMonitorService:
|
|
|
340
340
|
def _handle_event_telegram(self, event: TelegramReceivedEvent) -> None:
|
|
341
341
|
"""Handle event telegram for output state changes.
|
|
342
342
|
|
|
343
|
-
Processes XP24 output event telegrams to update module state in real-time.
|
|
344
|
-
|
|
343
|
+
Processes XP24 and XP33 output event telegrams to update module state in real-time.
|
|
344
|
+
- XP24 output events use input_number 80-83 to represent outputs 0-3.
|
|
345
|
+
- XP33 output events use input_number 0-2 to represent channels 0-2.
|
|
345
346
|
|
|
346
347
|
Args:
|
|
347
348
|
event: Telegram received event containing event telegram.
|
|
@@ -352,17 +353,37 @@ class StateMonitorService:
|
|
|
352
353
|
self.logger.debug("Failed to parse event telegram")
|
|
353
354
|
return
|
|
354
355
|
|
|
355
|
-
#
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
356
|
+
# Determine output number based on module type
|
|
357
|
+
output_number = None
|
|
358
|
+
|
|
359
|
+
if event_telegram.module_type == ModuleTypeCode.XP24.value:
|
|
360
|
+
# XP24 uses input_number 80-83 for outputs 0-3
|
|
361
|
+
if 80 <= event_telegram.input_number <= 83:
|
|
362
|
+
output_number = event_telegram.input_number - 80
|
|
363
|
+
else:
|
|
364
|
+
self.logger.debug(
|
|
365
|
+
f"Ignoring XP24 input event I{event_telegram.input_number:02d}"
|
|
366
|
+
)
|
|
367
|
+
return
|
|
361
368
|
|
|
362
|
-
|
|
363
|
-
|
|
369
|
+
elif event_telegram.module_type in (
|
|
370
|
+
ModuleTypeCode.XP33.value,
|
|
371
|
+
ModuleTypeCode.XP33LR.value,
|
|
372
|
+
ModuleTypeCode.XP33LED.value,
|
|
373
|
+
):
|
|
374
|
+
# XP33 modules use input_number 0-2 for channels 0-2
|
|
375
|
+
if 80 <= event_telegram.input_number <= 82:
|
|
376
|
+
output_number = event_telegram.input_number - 80
|
|
377
|
+
else:
|
|
378
|
+
self.logger.debug(
|
|
379
|
+
f"Ignoring XP33 input event I{event_telegram.input_number:02d}"
|
|
380
|
+
)
|
|
381
|
+
return
|
|
382
|
+
|
|
383
|
+
else:
|
|
384
|
+
# Ignore events from other module types
|
|
364
385
|
self.logger.debug(
|
|
365
|
-
f"Ignoring
|
|
386
|
+
f"Ignoring event from module type {event_telegram.module_type}"
|
|
366
387
|
)
|
|
367
388
|
return
|
|
368
389
|
|
|
@@ -374,9 +395,8 @@ class StateMonitorService:
|
|
|
374
395
|
)
|
|
375
396
|
return
|
|
376
397
|
|
|
377
|
-
#
|
|
378
|
-
|
|
379
|
-
output_state = event_telegram.is_button_press # M=True, B=False
|
|
398
|
+
# Determine output state (M=True/ON, B=False/OFF)
|
|
399
|
+
output_state = event_telegram.is_button_press
|
|
380
400
|
|
|
381
401
|
# Update output state
|
|
382
402
|
self._update_output_bit(module_state, output_number, output_state)
|
|
@@ -111,7 +111,9 @@ class ModulesListWidget(Static):
|
|
|
111
111
|
# Update existing row
|
|
112
112
|
row_key = self._row_keys[serial_number]
|
|
113
113
|
self.table.update_cell(
|
|
114
|
-
row_key,
|
|
114
|
+
row_key,
|
|
115
|
+
"outputs",
|
|
116
|
+
Text(self._format_outputs(module_state.outputs), justify="right"),
|
|
115
117
|
)
|
|
116
118
|
self.table.update_cell(
|
|
117
119
|
row_key,
|
|
@@ -144,7 +146,7 @@ class ModulesListWidget(Static):
|
|
|
144
146
|
Text(str(module_state.link_number), justify="right"),
|
|
145
147
|
module_state.serial_number,
|
|
146
148
|
module_state.module_type,
|
|
147
|
-
self._format_outputs(module_state.outputs),
|
|
149
|
+
Text(self._format_outputs(module_state.outputs), justify="right"),
|
|
148
150
|
Text(self._format_report(module_state.auto_report), justify="center"),
|
|
149
151
|
module_state.error_status,
|
|
150
152
|
Text(self._format_last_update(module_state.last_update), justify="center"),
|
{conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_services/test_state_monitor_service.py
RENAMED
|
@@ -84,6 +84,22 @@ class TestStateMonitorService:
|
|
|
84
84
|
link_number=5,
|
|
85
85
|
auto_report_status="NN",
|
|
86
86
|
),
|
|
87
|
+
ConsonModuleConfig(
|
|
88
|
+
name="A03",
|
|
89
|
+
serial_number="1111111111",
|
|
90
|
+
module_type="XP33LR",
|
|
91
|
+
module_type_code=30,
|
|
92
|
+
link_number=3,
|
|
93
|
+
auto_report_status="PP",
|
|
94
|
+
),
|
|
95
|
+
ConsonModuleConfig(
|
|
96
|
+
name="A04",
|
|
97
|
+
serial_number="2222222222",
|
|
98
|
+
module_type="XP33LED",
|
|
99
|
+
module_type_code=35,
|
|
100
|
+
link_number=4,
|
|
101
|
+
auto_report_status="PP",
|
|
102
|
+
),
|
|
87
103
|
]
|
|
88
104
|
)
|
|
89
105
|
|
|
@@ -107,7 +123,7 @@ class TestStateMonitorService:
|
|
|
107
123
|
|
|
108
124
|
def test_initialization(self, service):
|
|
109
125
|
"""Test service initializes module states from config."""
|
|
110
|
-
assert len(service.module_states) ==
|
|
126
|
+
assert len(service.module_states) == 4
|
|
111
127
|
|
|
112
128
|
# Check first module (XP24)
|
|
113
129
|
xp24_state = next(m for m in service.module_states if m.name == "A01")
|
|
@@ -123,6 +139,20 @@ class TestStateMonitorService:
|
|
|
123
139
|
assert xp130_state.link_number == 5
|
|
124
140
|
assert xp130_state.auto_report is False
|
|
125
141
|
|
|
142
|
+
# Check third module (XP33LR)
|
|
143
|
+
xp33lr_state = next(m for m in service.module_states if m.name == "A03")
|
|
144
|
+
assert xp33lr_state.serial_number == "1111111111"
|
|
145
|
+
assert xp33lr_state.module_type == "XP33LR"
|
|
146
|
+
assert xp33lr_state.link_number == 3
|
|
147
|
+
assert xp33lr_state.auto_report is True
|
|
148
|
+
|
|
149
|
+
# Check fourth module (XP33LED)
|
|
150
|
+
xp33led_state = next(m for m in service.module_states if m.name == "A04")
|
|
151
|
+
assert xp33led_state.serial_number == "2222222222"
|
|
152
|
+
assert xp33led_state.module_type == "XP33LED"
|
|
153
|
+
assert xp33led_state.link_number == 4
|
|
154
|
+
assert xp33led_state.auto_report is True
|
|
155
|
+
|
|
126
156
|
def test_find_module_by_link_found(self, service):
|
|
127
157
|
"""Test _find_module_by_link returns module when found."""
|
|
128
158
|
module = service._find_module_by_link(9)
|
|
@@ -362,3 +392,122 @@ class TestStateMonitorService:
|
|
|
362
392
|
|
|
363
393
|
# Verify parse_reply_telegram was called
|
|
364
394
|
mock_telegram_service.parse_reply_telegram.assert_called_once()
|
|
395
|
+
|
|
396
|
+
def test_handle_event_telegram_xp33lr_channel_on(
|
|
397
|
+
self, service, mock_telegram_service, mock_protocol
|
|
398
|
+
):
|
|
399
|
+
"""Test _handle_event_telegram processes XP33LR channel ON event."""
|
|
400
|
+
# Mock event telegram for XP33LR L03 channel 0 ON
|
|
401
|
+
event_telegram = EventTelegram(
|
|
402
|
+
raw_telegram="<E30L03I80MAE>",
|
|
403
|
+
checksum="AE",
|
|
404
|
+
checksum_validated=True,
|
|
405
|
+
event_telegram_type="E",
|
|
406
|
+
module_type=30, # XP33LR
|
|
407
|
+
link_number=3,
|
|
408
|
+
input_number=80, # Channel 0 (I80)
|
|
409
|
+
event_type=EventType.BUTTON_PRESS,
|
|
410
|
+
)
|
|
411
|
+
mock_telegram_service.parse_event_telegram.return_value = event_telegram
|
|
412
|
+
|
|
413
|
+
# Setup module initial state
|
|
414
|
+
module = service._find_module_by_link(3)
|
|
415
|
+
module.outputs = "0 0 0"
|
|
416
|
+
|
|
417
|
+
# Mock signal to verify emission
|
|
418
|
+
signal_handler = Mock()
|
|
419
|
+
service.on_module_state_changed.connect(signal_handler)
|
|
420
|
+
|
|
421
|
+
# Create event
|
|
422
|
+
event = self._make_event(mock_protocol, "<E30L03I80MAE>", "E")
|
|
423
|
+
|
|
424
|
+
# Process event
|
|
425
|
+
service._handle_event_telegram(event)
|
|
426
|
+
|
|
427
|
+
# Verify output updated
|
|
428
|
+
assert module.outputs == "1 0 0"
|
|
429
|
+
assert module.last_update is not None
|
|
430
|
+
signal_handler.assert_called_once()
|
|
431
|
+
|
|
432
|
+
def test_handle_event_telegram_xp33lr_channel_off(
|
|
433
|
+
self, service, mock_telegram_service, mock_protocol
|
|
434
|
+
):
|
|
435
|
+
"""Test _handle_event_telegram processes XP33LR channel OFF event."""
|
|
436
|
+
# Mock event telegram for XP33LR L03 channel 1 OFF
|
|
437
|
+
event_telegram = EventTelegram(
|
|
438
|
+
raw_telegram="<E30L03I81BAE>",
|
|
439
|
+
checksum="AE",
|
|
440
|
+
checksum_validated=True,
|
|
441
|
+
event_telegram_type="E",
|
|
442
|
+
module_type=30, # XP33LR
|
|
443
|
+
link_number=3,
|
|
444
|
+
input_number=81, # Channel 1 (I81)
|
|
445
|
+
event_type=EventType.BUTTON_RELEASE,
|
|
446
|
+
)
|
|
447
|
+
mock_telegram_service.parse_event_telegram.return_value = event_telegram
|
|
448
|
+
|
|
449
|
+
module = service._find_module_by_link(3)
|
|
450
|
+
module.outputs = "1 1 1"
|
|
451
|
+
|
|
452
|
+
event = self._make_event(mock_protocol, "<E30L03I81BAE>", "E")
|
|
453
|
+
|
|
454
|
+
service._handle_event_telegram(event)
|
|
455
|
+
assert module.outputs == "1 0 1"
|
|
456
|
+
|
|
457
|
+
def test_handle_event_telegram_xp33led_channel_on(
|
|
458
|
+
self, service, mock_telegram_service, mock_protocol
|
|
459
|
+
):
|
|
460
|
+
"""Test _handle_event_telegram processes XP33LED channel ON event."""
|
|
461
|
+
# Mock event telegram for XP33LED L04 channel 2 ON
|
|
462
|
+
event_telegram = EventTelegram(
|
|
463
|
+
raw_telegram="<E35L04I82MAE>",
|
|
464
|
+
checksum="AE",
|
|
465
|
+
checksum_validated=True,
|
|
466
|
+
event_telegram_type="E",
|
|
467
|
+
module_type=35, # XP33LED
|
|
468
|
+
link_number=4,
|
|
469
|
+
input_number=82, # Channel 2 (I82)
|
|
470
|
+
event_type=EventType.BUTTON_PRESS,
|
|
471
|
+
)
|
|
472
|
+
mock_telegram_service.parse_event_telegram.return_value = event_telegram
|
|
473
|
+
|
|
474
|
+
# Setup module initial state
|
|
475
|
+
module = service._find_module_by_link(4)
|
|
476
|
+
module.outputs = "0 0 0"
|
|
477
|
+
|
|
478
|
+
# Create event
|
|
479
|
+
event = self._make_event(mock_protocol, "<E35L04I82MAE>", "E")
|
|
480
|
+
|
|
481
|
+
# Process event
|
|
482
|
+
service._handle_event_telegram(event)
|
|
483
|
+
|
|
484
|
+
# Verify output updated
|
|
485
|
+
assert module.outputs == "0 0 1"
|
|
486
|
+
assert module.last_update is not None
|
|
487
|
+
|
|
488
|
+
def test_handle_event_telegram_xp33_ignores_invalid_channel(
|
|
489
|
+
self, service, mock_telegram_service, mock_protocol
|
|
490
|
+
):
|
|
491
|
+
"""Test _handle_event_telegram ignores XP33 events for invalid channels."""
|
|
492
|
+
# Mock event telegram for XP33LR with invalid channel number
|
|
493
|
+
event_telegram = EventTelegram(
|
|
494
|
+
raw_telegram="<E30L03I05MAE>",
|
|
495
|
+
checksum="AE",
|
|
496
|
+
checksum_validated=True,
|
|
497
|
+
event_telegram_type="E",
|
|
498
|
+
module_type=30, # XP33LR
|
|
499
|
+
link_number=3,
|
|
500
|
+
input_number=5, # Invalid channel (only 0-2 valid)
|
|
501
|
+
event_type=EventType.BUTTON_PRESS,
|
|
502
|
+
)
|
|
503
|
+
mock_telegram_service.parse_event_telegram.return_value = event_telegram
|
|
504
|
+
|
|
505
|
+
module = service._find_module_by_link(3)
|
|
506
|
+
module.outputs = "0 0 0"
|
|
507
|
+
|
|
508
|
+
event = self._make_event(mock_protocol, "<E30L03I05MAE>", "E")
|
|
509
|
+
|
|
510
|
+
service._handle_event_telegram(event)
|
|
511
|
+
|
|
512
|
+
# Output should not change
|
|
513
|
+
assert module.outputs == "0 0 0"
|
{conson_xp-1.35.0 → conson_xp-1.37.0}/tests/unit/test_services/test_xp24_action_table_service.py
RENAMED
|
@@ -291,7 +291,6 @@ class TestMsActionTableService:
|
|
|
291
291
|
service.failed("Connection timeout")
|
|
292
292
|
|
|
293
293
|
mock_error.assert_called_once_with("Connection timeout")
|
|
294
|
-
mock_finish.assert_called_once_with(None)
|
|
295
294
|
|
|
296
295
|
def test_start_method_xp24(self, service):
|
|
297
296
|
"""Test start method with xp24 module type."""
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/cli/commands/conbus/conbus_datapoint_commands.py
RENAMED
|
File without changes
|
{conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/cli/commands/conbus/conbus_discover_commands.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/cli/commands/conbus/conbus_msactiontable_commands.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/cli/commands/telegram/telegram_blink_commands.py
RENAMED
|
File without changes
|
{conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/cli/commands/telegram/telegram_checksum_commands.py
RENAMED
|
File without changes
|
{conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/cli/commands/telegram/telegram_discover_commands.py
RENAMED
|
File without changes
|
{conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/cli/commands/telegram/telegram_linknumber_commands.py
RENAMED
|
File without changes
|
{conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/cli/commands/telegram/telegram_parse_commands.py
RENAMED
|
File without changes
|
{conson_xp-1.35.0 → conson_xp-1.37.0}/src/xp/cli/commands/telegram/telegram_version_commands.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|