conson-xp 1.35.0__tar.gz → 1.36.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.36.0}/PKG-INFO +1 -1
- {conson_xp-1.35.0 → conson_xp-1.36.0}/pyproject.toml +1 -1
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/__init__.py +1 -1
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/term/state_monitor_service.py +35 -15
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/term/widgets/modules_list.py +4 -2
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_services/test_state_monitor_service.py +150 -1
- {conson_xp-1.35.0 → conson_xp-1.36.0}/LICENSE +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/README.md +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/cli/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/cli/__main__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/cli/commands/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/cli/commands/conbus/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/cli/commands/conbus/conbus.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/cli/commands/conbus/conbus_actiontable_commands.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/cli/commands/conbus/conbus_autoreport_commands.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/cli/commands/conbus/conbus_blink_commands.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/cli/commands/conbus/conbus_config_commands.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/cli/commands/conbus/conbus_custom_commands.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/cli/commands/conbus/conbus_datapoint_commands.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/cli/commands/conbus/conbus_discover_commands.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/cli/commands/conbus/conbus_event_commands.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/cli/commands/conbus/conbus_export_commands.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/cli/commands/conbus/conbus_lightlevel_commands.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/cli/commands/conbus/conbus_linknumber_commands.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/cli/commands/conbus/conbus_modulenumber_commands.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/cli/commands/conbus/conbus_msactiontable_commands.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/cli/commands/conbus/conbus_output_commands.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/cli/commands/conbus/conbus_raw_commands.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/cli/commands/conbus/conbus_receive_commands.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/cli/commands/conbus/conbus_scan_commands.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/cli/commands/file_commands.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/cli/commands/homekit/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/cli/commands/homekit/homekit.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/cli/commands/homekit/homekit_start_commands.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/cli/commands/module_commands.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/cli/commands/reverse_proxy_commands.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/cli/commands/server/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/cli/commands/server/server_commands.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/cli/commands/telegram/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/cli/commands/telegram/telegram.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/cli/commands/telegram/telegram_blink_commands.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/cli/commands/telegram/telegram_checksum_commands.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/cli/commands/telegram/telegram_discover_commands.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/cli/commands/telegram/telegram_linknumber_commands.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/cli/commands/telegram/telegram_parse_commands.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/cli/commands/telegram/telegram_version_commands.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/cli/commands/term/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/cli/commands/term/term.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/cli/commands/term/term_commands.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/cli/main.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/cli/utils/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/cli/utils/click_tree.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/cli/utils/datapoint_type_choice.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/cli/utils/decorators.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/cli/utils/error_handlers.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/cli/utils/formatters.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/cli/utils/module_type_choice.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/cli/utils/serial_number_type.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/cli/utils/system_function_choice.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/cli/utils/xp_module_type.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/connection/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/connection/exceptions.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/models/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/models/actiontable/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/models/actiontable/actiontable.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/models/actiontable/msactiontable_xp20.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/models/actiontable/msactiontable_xp24.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/models/actiontable/msactiontable_xp33.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/models/conbus/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/models/conbus/conbus.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/models/conbus/conbus_autoreport.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/models/conbus/conbus_blink.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/models/conbus/conbus_client_config.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/models/conbus/conbus_connection_status.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/models/conbus/conbus_custom.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/models/conbus/conbus_datapoint.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/models/conbus/conbus_discover.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/models/conbus/conbus_event_list.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/models/conbus/conbus_event_raw.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/models/conbus/conbus_export.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/models/conbus/conbus_lightlevel.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/models/conbus/conbus_linknumber.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/models/conbus/conbus_logger_config.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/models/conbus/conbus_output.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/models/conbus/conbus_raw.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/models/conbus/conbus_receive.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/models/conbus/conbus_writeconfig.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/models/homekit/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/models/homekit/homekit_accessory.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/models/homekit/homekit_config.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/models/homekit/homekit_conson_config.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/models/log_entry.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/models/protocol/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/models/protocol/conbus_protocol.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/models/response.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/models/telegram/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/models/telegram/action_type.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/models/telegram/datapoint_type.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/models/telegram/event_telegram.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/models/telegram/event_type.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/models/telegram/input_action_type.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/models/telegram/input_type.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/models/telegram/module_type.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/models/telegram/module_type_code.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/models/telegram/output_telegram.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/models/telegram/reply_telegram.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/models/telegram/system_function.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/models/telegram/system_telegram.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/models/telegram/telegram.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/models/telegram/telegram_type.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/models/telegram/timeparam_type.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/models/term/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/models/term/connection_state.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/models/term/module_state.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/models/term/protocol_keys_config.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/models/term/status_message.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/models/term/telegram_display.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/models/write_config_type.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/actiontable/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/actiontable/actiontable_serializer.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/actiontable/msactiontable_serializer.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/actiontable/msactiontable_xp20_serializer.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/actiontable/msactiontable_xp24_serializer.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/actiontable/msactiontable_xp33_serializer.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/conbus/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/conbus/actiontable/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/conbus/actiontable/actiontable_download_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/conbus/actiontable/actiontable_list_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/conbus/actiontable/actiontable_show_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/conbus/actiontable/actiontable_upload_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/conbus/actiontable/msactiontable_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/conbus/conbus_blink_all_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/conbus/conbus_blink_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/conbus/conbus_custom_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/conbus/conbus_datapoint_queryall_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/conbus/conbus_datapoint_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/conbus/conbus_discover_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/conbus/conbus_event_list_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/conbus/conbus_event_raw_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/conbus/conbus_export_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/conbus/conbus_output_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/conbus/conbus_raw_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/conbus/conbus_receive_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/conbus/conbus_scan_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/conbus/write_config_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/homekit/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/homekit/homekit_cache_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/homekit/homekit_conbus_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/homekit/homekit_config_validator.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/homekit/homekit_conson_validator.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/homekit/homekit_dimminglight.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/homekit/homekit_dimminglight_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/homekit/homekit_hap_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/homekit/homekit_lightbulb.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/homekit/homekit_lightbulb_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/homekit/homekit_module_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/homekit/homekit_outlet.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/homekit/homekit_outlet_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/homekit/homekit_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/log_file_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/module_type_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/protocol/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/protocol/conbus_event_protocol.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/protocol/conbus_protocol.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/protocol/protocol_factory.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/protocol/telegram_protocol.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/reverse_proxy_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/server/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/server/base_server_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/server/client_buffer_manager.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/server/cp20_server_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/server/device_service_factory.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/server/server_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/server/xp130_server_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/server/xp20_server_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/server/xp230_server_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/server/xp24_server_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/server/xp33_server_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/telegram/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/telegram/telegram_blink_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/telegram/telegram_checksum_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/telegram/telegram_datapoint_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/telegram/telegram_discover_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/telegram/telegram_link_number_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/telegram/telegram_output_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/telegram/telegram_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/telegram/telegram_version_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/term/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/term/protocol_monitor_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/term/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/term/protocol.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/term/protocol.tcss +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/term/state.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/term/state.tcss +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/term/widgets/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/term/widgets/help_menu.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/term/widgets/protocol_log.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/term/widgets/status_footer.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/utils/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/utils/checksum.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/utils/dependencies.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/utils/event_helper.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/utils/logging.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/utils/serialization.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/utils/state_machine.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/utils/time_utils.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/.coverage +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/conftest.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/integration/.coverage +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/integration/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/integration/telegram_test_data.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/integration/test_actiontable_integration.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/integration/test_api/.coverage +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/integration/test_api/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/integration/test_blink_integration.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/integration/test_checksum_integration.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/integration/test_conbus_blink_integration.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/integration/test_conbus_datapoint_integration.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/integration/test_conbus_raw_integration.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/integration/test_conbus_receive_integration.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/integration/test_discovery_integration.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/integration/test_event_telegram_integration.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/integration/test_homekit_config_integration.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/integration/test_link_number_integration.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/integration/test_module_integration.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/integration/test_output_integration.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/integration/test_reverse_proxy_integration.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/integration/test_system_reply_telegram_integration.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/integration/test_term_logging_integration.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/integration/test_version_integration.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/integration/test_xp20_action_table_integration.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/integration/test_xp24_action_table_integration.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_api/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_cli/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_cli/test_click_tree.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_cli/test_conbus_actiontable_commands.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_cli/test_conbus_blink_commands.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_cli/test_datapoint_type_choice.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_cli/test_decorators.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_cli/test_error_handlers.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_cli/test_formatters.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_cli/test_serial_number_type.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_cli/test_system_function_choice.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_cli/test_term_commands.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_connection/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_connection/test_connection_init.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_connection/test_exceptions.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_encoding/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_encoding/test_latin1_edge_cases.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_models/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_models/test_conbus.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_models/test_conbus_client_send.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_models/test_conbus_discover.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_models/test_conbus_linknumber.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_models/test_event_telegram.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_models/test_log_entry.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_models/test_logger_config.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_models/test_module_type.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_models/test_reply_telegram.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_models/test_system_telegram.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_models/test_system_telegram_enhancements.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_models/test_version_telegram.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_models/test_write_config_type.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_models/test_xp20_action_table.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_models/test_xp24_action_table.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_models/test_xp24_action_telegram.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_services/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_services/test_actiontable_serializer.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_services/test_actiontable_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_services/test_actiontable_upload_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_services/test_base_server_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_services/test_blink_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_services/test_checksum_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_services/test_client_buffer_manager.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_services/test_conbus_blink_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_services/test_conbus_event_list_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_services/test_conbus_event_protocol.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_services/test_conbus_event_raw_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_services/test_conbus_output_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_services/test_conbus_raw_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_services/test_conbus_receive_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_services/test_conbus_reverse_proxy_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_services/test_conbus_scan_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_services/test_device_service_factory.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_services/test_discovery_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_services/test_homekit_cache_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_services/test_homekit_config_validator.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_services/test_homekit_conson_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_services/test_homekit_services.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_services/test_log_file_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_services/test_module_type_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_services/test_protocol.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_services/test_protocol_monitor_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_services/test_server_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_services/test_telegram_input_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_services/test_telegram_output_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_services/test_telegram_protocol.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_services/test_telegram_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_services/test_version_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_services/test_xp20_action_table_serializer.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_services/test_xp24_action_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_services/test_xp24_action_table_serializer.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_services/test_xp24_action_table_service.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_services/test_xp33_action_table_serializer.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_services/test_xp_server_services.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_tui/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_tui/test_protocol_log.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_utils/__init__.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_utils/test_checksum.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_utils/test_event_helper.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_utils/test_logging.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_utils/test_serialization.py +0 -0
- {conson_xp-1.35.0 → conson_xp-1.36.0}/tests/unit/test_utils/test_time_utils.py +0 -0
|
@@ -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.36.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"
|
|
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.36.0}/src/xp/cli/commands/conbus/conbus_actiontable_commands.py
RENAMED
|
File without changes
|
{conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/cli/commands/conbus/conbus_autoreport_commands.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/cli/commands/conbus/conbus_datapoint_commands.py
RENAMED
|
File without changes
|
{conson_xp-1.35.0 → conson_xp-1.36.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.36.0}/src/xp/cli/commands/conbus/conbus_lightlevel_commands.py
RENAMED
|
File without changes
|
{conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/cli/commands/conbus/conbus_linknumber_commands.py
RENAMED
|
File without changes
|
{conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/cli/commands/conbus/conbus_modulenumber_commands.py
RENAMED
|
File without changes
|
{conson_xp-1.35.0 → conson_xp-1.36.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
|
|
File without changes
|
{conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/cli/commands/telegram/telegram_blink_commands.py
RENAMED
|
File without changes
|
{conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/cli/commands/telegram/telegram_checksum_commands.py
RENAMED
|
File without changes
|
{conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/cli/commands/telegram/telegram_discover_commands.py
RENAMED
|
File without changes
|
{conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/cli/commands/telegram/telegram_linknumber_commands.py
RENAMED
|
File without changes
|
{conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/cli/commands/telegram/telegram_parse_commands.py
RENAMED
|
File without changes
|
{conson_xp-1.35.0 → conson_xp-1.36.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
|
|
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
|
|
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
|
{conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/actiontable/msactiontable_serializer.py
RENAMED
|
File without changes
|
{conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/actiontable/msactiontable_xp20_serializer.py
RENAMED
|
File without changes
|
{conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/actiontable/msactiontable_xp24_serializer.py
RENAMED
|
File without changes
|
{conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/actiontable/msactiontable_xp33_serializer.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{conson_xp-1.35.0 → conson_xp-1.36.0}/src/xp/services/conbus/actiontable/actiontable_list_service.py
RENAMED
|
File without changes
|