conson-xp 1.11.0__tar.gz → 1.15.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.11.0 → conson_xp-1.15.0}/PKG-INFO +6 -1
- {conson_xp-1.11.0 → conson_xp-1.15.0}/README.md +5 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/pyproject.toml +1 -1
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/__init__.py +1 -1
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/cli/commands/__init__.py +8 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/cli/commands/conbus/conbus.py +13 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/cli/commands/conbus/conbus_linknumber_commands.py +1 -1
- conson_xp-1.15.0/src/xp/cli/commands/conbus/conbus_modulenumber_commands.py +104 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/models/homekit/homekit_config.py +4 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/models/protocol/conbus_protocol.py +4 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/services/conbus/write_config_service.py +1 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/services/homekit/homekit_conbus_service.py +5 -9
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/services/homekit/homekit_lightbulb_service.py +2 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/services/homekit/homekit_outlet_service.py +2 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/services/telegram/telegram_datapoint_service.py +12 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/utils/dependencies.py +2 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/integration/test_homekit_config_integration.py +12 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/unit/test_services/test_homekit_config_validator.py +36 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/unit/test_services/test_homekit_services.py +16 -4
- {conson_xp-1.11.0 → conson_xp-1.15.0}/LICENSE +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/cli/__init__.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/cli/__main__.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/cli/commands/conbus/__init__.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/cli/commands/conbus/conbus_actiontable_commands.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/cli/commands/conbus/conbus_autoreport_commands.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/cli/commands/conbus/conbus_blink_commands.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/cli/commands/conbus/conbus_config_commands.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/cli/commands/conbus/conbus_custom_commands.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/cli/commands/conbus/conbus_datapoint_commands.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/cli/commands/conbus/conbus_discover_commands.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/cli/commands/conbus/conbus_lightlevel_commands.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/cli/commands/conbus/conbus_msactiontable_commands.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/cli/commands/conbus/conbus_output_commands.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/cli/commands/conbus/conbus_raw_commands.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/cli/commands/conbus/conbus_receive_commands.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/cli/commands/conbus/conbus_scan_commands.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/cli/commands/file_commands.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/cli/commands/homekit/__init__.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/cli/commands/homekit/homekit.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/cli/commands/homekit/homekit_start_commands.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/cli/commands/module_commands.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/cli/commands/reverse_proxy_commands.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/cli/commands/server/__init__.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/cli/commands/server/server_commands.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/cli/commands/telegram/__init__.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/cli/commands/telegram/telegram.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/cli/commands/telegram/telegram_blink_commands.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/cli/commands/telegram/telegram_checksum_commands.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/cli/commands/telegram/telegram_discover_commands.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/cli/commands/telegram/telegram_linknumber_commands.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/cli/commands/telegram/telegram_parse_commands.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/cli/commands/telegram/telegram_version_commands.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/cli/main.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/cli/utils/__init__.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/cli/utils/click_tree.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/cli/utils/datapoint_type_choice.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/cli/utils/decorators.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/cli/utils/error_handlers.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/cli/utils/formatters.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/cli/utils/serial_number_type.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/cli/utils/system_function_choice.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/cli/utils/xp_module_type.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/connection/__init__.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/connection/exceptions.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/models/__init__.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/models/actiontable/__init__.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/models/actiontable/actiontable.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/models/actiontable/msactiontable_xp20.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/models/actiontable/msactiontable_xp24.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/models/actiontable/msactiontable_xp33.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/models/conbus/__init__.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/models/conbus/conbus.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/models/conbus/conbus_autoreport.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/models/conbus/conbus_blink.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/models/conbus/conbus_client_config.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/models/conbus/conbus_connection_status.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/models/conbus/conbus_custom.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/models/conbus/conbus_datapoint.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/models/conbus/conbus_discover.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/models/conbus/conbus_lightlevel.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/models/conbus/conbus_linknumber.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/models/conbus/conbus_output.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/models/conbus/conbus_raw.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/models/conbus/conbus_receive.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/models/conbus/conbus_writeconfig.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/models/homekit/__init__.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/models/homekit/homekit_accessory.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/models/homekit/homekit_conson_config.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/models/log_entry.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/models/protocol/__init__.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/models/response.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/models/telegram/__init__.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/models/telegram/action_type.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/models/telegram/datapoint_type.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/models/telegram/event_telegram.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/models/telegram/event_type.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/models/telegram/input_action_type.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/models/telegram/input_type.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/models/telegram/module_type.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/models/telegram/module_type_code.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/models/telegram/output_telegram.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/models/telegram/reply_telegram.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/models/telegram/system_function.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/models/telegram/system_telegram.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/models/telegram/telegram.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/models/telegram/telegram_type.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/models/telegram/timeparam_type.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/models/write_config_type.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/services/__init__.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/services/actiontable/__init__.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/services/actiontable/actiontable_serializer.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/services/actiontable/msactiontable_serializer.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/services/actiontable/msactiontable_xp20_serializer.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/services/actiontable/msactiontable_xp24_serializer.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/services/actiontable/msactiontable_xp33_serializer.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/services/conbus/__init__.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/services/conbus/actiontable/__init__.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/services/conbus/actiontable/actiontable_download_service.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/services/conbus/actiontable/actiontable_list_service.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/services/conbus/actiontable/actiontable_show_service.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/services/conbus/actiontable/actiontable_upload_service.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/services/conbus/actiontable/msactiontable_service.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/services/conbus/conbus_blink_all_service.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/services/conbus/conbus_blink_service.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/services/conbus/conbus_custom_service.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/services/conbus/conbus_datapoint_queryall_service.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/services/conbus/conbus_datapoint_service.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/services/conbus/conbus_discover_service.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/services/conbus/conbus_output_service.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/services/conbus/conbus_raw_service.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/services/conbus/conbus_receive_service.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/services/conbus/conbus_scan_service.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/services/homekit/__init__.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/services/homekit/homekit_cache_service.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/services/homekit/homekit_config_validator.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/services/homekit/homekit_conson_validator.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/services/homekit/homekit_dimminglight.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/services/homekit/homekit_dimminglight_service.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/services/homekit/homekit_hap_service.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/services/homekit/homekit_lightbulb.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/services/homekit/homekit_module_service.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/services/homekit/homekit_outlet.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/services/homekit/homekit_service.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/services/log_file_service.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/services/module_type_service.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/services/protocol/__init__.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/services/protocol/conbus_protocol.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/services/protocol/protocol_factory.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/services/protocol/telegram_protocol.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/services/reverse_proxy_service.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/services/server/__init__.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/services/server/base_server_service.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/services/server/cp20_server_service.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/services/server/device_service_factory.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/services/server/server_service.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/services/server/xp130_server_service.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/services/server/xp20_server_service.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/services/server/xp230_server_service.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/services/server/xp24_server_service.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/services/server/xp33_server_service.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/services/telegram/__init__.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/services/telegram/telegram_blink_service.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/services/telegram/telegram_checksum_service.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/services/telegram/telegram_discover_service.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/services/telegram/telegram_link_number_service.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/services/telegram/telegram_output_service.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/services/telegram/telegram_service.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/services/telegram/telegram_version_service.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/utils/__init__.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/utils/checksum.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/utils/event_helper.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/utils/serialization.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/utils/time_utils.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/.coverage +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/__init__.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/conftest.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/integration/.coverage +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/integration/__init__.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/integration/telegram_test_data.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/integration/test_actiontable_integration.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/integration/test_api/.coverage +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/integration/test_api/__init__.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/integration/test_blink_integration.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/integration/test_checksum_integration.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/integration/test_conbus_blink_integration.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/integration/test_conbus_datapoint_integration.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/integration/test_conbus_raw_integration.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/integration/test_conbus_receive_integration.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/integration/test_discovery_integration.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/integration/test_event_telegram_integration.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/integration/test_link_number_integration.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/integration/test_module_integration.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/integration/test_output_integration.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/integration/test_reverse_proxy_integration.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/integration/test_system_reply_telegram_integration.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/integration/test_version_integration.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/integration/test_xp20_action_table_integration.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/integration/test_xp24_action_table_integration.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/unit/__init__.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/unit/test_api/__init__.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/unit/test_cli/__init__.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/unit/test_cli/test_click_tree.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/unit/test_cli/test_conbus_actiontable_commands.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/unit/test_cli/test_conbus_blink_commands.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/unit/test_cli/test_datapoint_type_choice.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/unit/test_cli/test_decorators.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/unit/test_cli/test_error_handlers.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/unit/test_cli/test_formatters.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/unit/test_cli/test_serial_number_type.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/unit/test_cli/test_system_function_choice.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/unit/test_connection/__init__.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/unit/test_connection/test_connection_init.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/unit/test_connection/test_exceptions.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/unit/test_encoding/__init__.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/unit/test_encoding/test_latin1_edge_cases.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/unit/test_models/__init__.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/unit/test_models/test_conbus.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/unit/test_models/test_conbus_client_send.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/unit/test_models/test_conbus_discover.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/unit/test_models/test_conbus_linknumber.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/unit/test_models/test_event_telegram.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/unit/test_models/test_log_entry.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/unit/test_models/test_module_type.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/unit/test_models/test_reply_telegram.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/unit/test_models/test_system_telegram.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/unit/test_models/test_system_telegram_enhancements.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/unit/test_models/test_version_telegram.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/unit/test_models/test_write_config_type.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/unit/test_models/test_xp20_action_table.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/unit/test_models/test_xp24_action_table.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/unit/test_models/test_xp24_action_telegram.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/unit/test_services/__init__.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/unit/test_services/test_actiontable_serializer.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/unit/test_services/test_actiontable_service.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/unit/test_services/test_actiontable_upload_service.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/unit/test_services/test_base_server_service.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/unit/test_services/test_blink_service.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/unit/test_services/test_checksum_service.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/unit/test_services/test_conbus_blink_service.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/unit/test_services/test_conbus_raw_service.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/unit/test_services/test_conbus_reverse_proxy_service.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/unit/test_services/test_device_service_factory.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/unit/test_services/test_discovery_service.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/unit/test_services/test_homekit_cache_service.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/unit/test_services/test_homekit_conson_service.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/unit/test_services/test_log_file_service.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/unit/test_services/test_module_type_service.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/unit/test_services/test_protocol.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/unit/test_services/test_server_service.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/unit/test_services/test_telegram_input_service.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/unit/test_services/test_telegram_protocol.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/unit/test_services/test_telegram_service.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/unit/test_services/test_version_service.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/unit/test_services/test_xp20_action_table_serializer.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/unit/test_services/test_xp24_action_service.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/unit/test_services/test_xp24_action_table_serializer.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/unit/test_services/test_xp24_action_table_service.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/unit/test_services/test_xp33_action_table_serializer.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/unit/test_services/test_xp_server_services.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/unit/test_utils/__init__.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/unit/test_utils/test_checksum.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/unit/test_utils/test_event_helper.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/unit/test_utils/test_serialization.py +0 -0
- {conson_xp-1.11.0 → conson_xp-1.15.0}/tests/unit/test_utils/test_time_utils.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: conson-xp
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.15.0
|
|
4
4
|
Summary: XP Protocol Communication Tools
|
|
5
5
|
Author-Email: ldvchosal <ldvchosal@github.com>
|
|
6
6
|
License: MIT License
|
|
@@ -316,6 +316,11 @@ xp conbus linknumber get
|
|
|
316
316
|
xp conbus linknumber set
|
|
317
317
|
|
|
318
318
|
|
|
319
|
+
xp conbus modulenumber
|
|
320
|
+
xp conbus modulenumber get
|
|
321
|
+
xp conbus modulenumber set
|
|
322
|
+
|
|
323
|
+
|
|
319
324
|
xp conbus msactiontable
|
|
320
325
|
xp conbus msactiontable download
|
|
321
326
|
|
|
@@ -10,6 +10,7 @@ from xp.cli.commands.conbus.conbus import (
|
|
|
10
10
|
conbus_datapoint,
|
|
11
11
|
conbus_lightlevel,
|
|
12
12
|
conbus_linknumber,
|
|
13
|
+
conbus_modulenumber,
|
|
13
14
|
conbus_msactiontable,
|
|
14
15
|
conbus_output,
|
|
15
16
|
)
|
|
@@ -46,6 +47,10 @@ from xp.cli.commands.conbus.conbus_linknumber_commands import (
|
|
|
46
47
|
get_linknumber_command,
|
|
47
48
|
set_linknumber_command,
|
|
48
49
|
)
|
|
50
|
+
from xp.cli.commands.conbus.conbus_modulenumber_commands import (
|
|
51
|
+
get_modulenumber_command,
|
|
52
|
+
set_modulenumber_command,
|
|
53
|
+
)
|
|
49
54
|
from xp.cli.commands.conbus.conbus_msactiontable_commands import (
|
|
50
55
|
conbus_download_msactiontable,
|
|
51
56
|
)
|
|
@@ -87,6 +92,7 @@ __all__ = [
|
|
|
87
92
|
"conbus_output",
|
|
88
93
|
"conbus_datapoint",
|
|
89
94
|
"conbus_linknumber",
|
|
95
|
+
"conbus_modulenumber",
|
|
90
96
|
"conbus_autoreport",
|
|
91
97
|
"conbus_lightlevel",
|
|
92
98
|
"conbus_msactiontable",
|
|
@@ -123,6 +129,8 @@ __all__ = [
|
|
|
123
129
|
"receive_telegrams",
|
|
124
130
|
"set_linknumber_command",
|
|
125
131
|
"get_linknumber_command",
|
|
132
|
+
"set_modulenumber_command",
|
|
133
|
+
"get_modulenumber_command",
|
|
126
134
|
"get_autoreport_command",
|
|
127
135
|
"set_autoreport_command",
|
|
128
136
|
"xp_lightlevel_set",
|
|
@@ -57,6 +57,18 @@ def conbus_linknumber() -> None:
|
|
|
57
57
|
pass
|
|
58
58
|
|
|
59
59
|
|
|
60
|
+
@click.group(
|
|
61
|
+
"modulenumber",
|
|
62
|
+
cls=HelpColorsGroup,
|
|
63
|
+
help_headers_color="yellow",
|
|
64
|
+
help_options_color="green",
|
|
65
|
+
short_help="Module number operations",
|
|
66
|
+
)
|
|
67
|
+
def conbus_modulenumber() -> None:
|
|
68
|
+
"""Set or get the module number for specific modules."""
|
|
69
|
+
pass
|
|
70
|
+
|
|
71
|
+
|
|
60
72
|
@click.group(
|
|
61
73
|
"autoreport",
|
|
62
74
|
cls=HelpColorsGroup,
|
|
@@ -109,6 +121,7 @@ conbus.add_command(conbus_blink)
|
|
|
109
121
|
conbus.add_command(conbus_output)
|
|
110
122
|
conbus.add_command(conbus_datapoint)
|
|
111
123
|
conbus.add_command(conbus_linknumber)
|
|
124
|
+
conbus.add_command(conbus_modulenumber)
|
|
112
125
|
conbus.add_command(conbus_autoreport)
|
|
113
126
|
conbus.add_command(conbus_lightlevel)
|
|
114
127
|
conbus.add_command(conbus_msactiontable)
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"""Conbus module number CLI commands."""
|
|
2
|
+
|
|
3
|
+
import json
|
|
4
|
+
|
|
5
|
+
import click
|
|
6
|
+
|
|
7
|
+
from xp.cli.commands.conbus.conbus import conbus_modulenumber
|
|
8
|
+
from xp.cli.utils.decorators import (
|
|
9
|
+
connection_command,
|
|
10
|
+
)
|
|
11
|
+
from xp.cli.utils.serial_number_type import SERIAL
|
|
12
|
+
from xp.models import ConbusDatapointResponse
|
|
13
|
+
from xp.models.conbus.conbus_writeconfig import ConbusWriteConfigResponse
|
|
14
|
+
from xp.models.telegram.datapoint_type import DataPointType
|
|
15
|
+
from xp.services.conbus.conbus_datapoint_service import ConbusDatapointService
|
|
16
|
+
from xp.services.conbus.write_config_service import WriteConfigService
|
|
17
|
+
from xp.services.telegram.telegram_datapoint_service import TelegramDatapointService
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
@conbus_modulenumber.command("set", short_help="Set module number for a module")
|
|
21
|
+
@click.argument("serial_number", type=SERIAL)
|
|
22
|
+
@click.argument("module_number", type=click.IntRange(0, 99))
|
|
23
|
+
@click.pass_context
|
|
24
|
+
@connection_command()
|
|
25
|
+
def set_modulenumber_command(
|
|
26
|
+
ctx: click.Context, serial_number: str, module_number: int
|
|
27
|
+
) -> None:
|
|
28
|
+
r"""Set the module number for a specific module.
|
|
29
|
+
|
|
30
|
+
Args:
|
|
31
|
+
ctx: Click context object.
|
|
32
|
+
serial_number: 10-digit module serial number.
|
|
33
|
+
module_number: Module number to set (0-99).
|
|
34
|
+
|
|
35
|
+
Examples:
|
|
36
|
+
\b
|
|
37
|
+
xp conbus modulenumber set 0123450001 25
|
|
38
|
+
"""
|
|
39
|
+
|
|
40
|
+
def on_finish(response: "ConbusWriteConfigResponse") -> None:
|
|
41
|
+
"""Handle successful completion of light level on command.
|
|
42
|
+
|
|
43
|
+
Args:
|
|
44
|
+
response: Light level response object.
|
|
45
|
+
"""
|
|
46
|
+
click.echo(json.dumps(response.to_dict(), indent=2))
|
|
47
|
+
|
|
48
|
+
service: WriteConfigService = (
|
|
49
|
+
ctx.obj.get("container").get_container().resolve(WriteConfigService)
|
|
50
|
+
)
|
|
51
|
+
|
|
52
|
+
data_value = f"{module_number:02d}"
|
|
53
|
+
with service:
|
|
54
|
+
service.write_config(
|
|
55
|
+
serial_number=serial_number,
|
|
56
|
+
datapoint_type=DataPointType.MODULE_NUMBER,
|
|
57
|
+
data_value=data_value,
|
|
58
|
+
finish_callback=on_finish,
|
|
59
|
+
timeout_seconds=0.5,
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
@conbus_modulenumber.command("get", short_help="Get module number for a module")
|
|
64
|
+
@click.argument("serial_number", type=SERIAL)
|
|
65
|
+
@click.pass_context
|
|
66
|
+
@connection_command()
|
|
67
|
+
def get_modulenumber_command(ctx: click.Context, serial_number: str) -> None:
|
|
68
|
+
r"""Get the current module number for a specific module.
|
|
69
|
+
|
|
70
|
+
Args:
|
|
71
|
+
ctx: Click context object.
|
|
72
|
+
serial_number: 10-digit module serial number.
|
|
73
|
+
|
|
74
|
+
Examples:
|
|
75
|
+
\b
|
|
76
|
+
xp conbus modulenumber get 0123450001
|
|
77
|
+
"""
|
|
78
|
+
service: ConbusDatapointService = (
|
|
79
|
+
ctx.obj.get("container").get_container().resolve(ConbusDatapointService)
|
|
80
|
+
)
|
|
81
|
+
telegram_service: TelegramDatapointService = (
|
|
82
|
+
ctx.obj.get("container").get_container().resolve(TelegramDatapointService)
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
def on_finish(service_response: ConbusDatapointResponse) -> None:
|
|
86
|
+
"""Handle successful completion of module number get command.
|
|
87
|
+
|
|
88
|
+
Args:
|
|
89
|
+
service_response: Module number response object.
|
|
90
|
+
"""
|
|
91
|
+
modulenumber_value = telegram_service.get_modulenumber(
|
|
92
|
+
service_response.data_value
|
|
93
|
+
)
|
|
94
|
+
result = service_response.to_dict()
|
|
95
|
+
result["modulenumber_value"] = modulenumber_value
|
|
96
|
+
click.echo(json.dumps(result, indent=2))
|
|
97
|
+
|
|
98
|
+
with service:
|
|
99
|
+
service.query_datapoint(
|
|
100
|
+
serial_number=serial_number,
|
|
101
|
+
datapoint_type=DataPointType.MODULE_NUMBER,
|
|
102
|
+
finish_callback=on_finish,
|
|
103
|
+
timeout_seconds=0.5,
|
|
104
|
+
)
|
|
@@ -55,6 +55,8 @@ class HomekitAccessoryConfig(BaseModel):
|
|
|
55
55
|
output_number: Output number for the accessory.
|
|
56
56
|
description: Description of the accessory.
|
|
57
57
|
service: Service type for the accessory.
|
|
58
|
+
on_action: on code for the accessory.
|
|
59
|
+
off_action: off code for the accessory.
|
|
58
60
|
hap_accessory: Optional HAP accessory identifier.
|
|
59
61
|
"""
|
|
60
62
|
|
|
@@ -64,6 +66,8 @@ class HomekitAccessoryConfig(BaseModel):
|
|
|
64
66
|
output_number: int
|
|
65
67
|
description: str
|
|
66
68
|
service: str
|
|
69
|
+
on_action: str
|
|
70
|
+
off_action: str
|
|
67
71
|
hap_accessory: Optional[int] = None
|
|
68
72
|
|
|
69
73
|
|
|
@@ -61,11 +61,15 @@ class SendActionEvent(BaseEvent):
|
|
|
61
61
|
serial_number: Serial number of the light bulb set.
|
|
62
62
|
output_number: Output number of the light bulb set.
|
|
63
63
|
value: Set light bulb On or Off (True/False).
|
|
64
|
+
on_action: On action E00L00I00.
|
|
65
|
+
off_action: On action E00L00I04.
|
|
64
66
|
"""
|
|
65
67
|
|
|
66
68
|
serial_number: str = Field(description="Serial number of the light bulb set")
|
|
67
69
|
output_number: int = Field(description="Output number of the light bulb set")
|
|
68
70
|
value: bool = Field(description="Set light bulb On or Off (True/False)")
|
|
71
|
+
on_action: str = Field(description="on action")
|
|
72
|
+
off_action: str = Field(description="off action")
|
|
69
73
|
|
|
70
74
|
|
|
71
75
|
class DatapointEvent(BaseEvent):
|
|
@@ -165,6 +165,7 @@ class WriteConfigService(ConbusProtocol):
|
|
|
165
165
|
self.write_config_response.data_value = self.data_value
|
|
166
166
|
if self.write_config_finished_callback:
|
|
167
167
|
self.write_config_finished_callback(self.write_config_response)
|
|
168
|
+
self._stop_reactor()
|
|
168
169
|
|
|
169
170
|
def write_config(
|
|
170
171
|
self,
|
|
@@ -12,7 +12,6 @@ from xp.models.protocol.conbus_protocol import (
|
|
|
12
12
|
SendActionEvent,
|
|
13
13
|
SendWriteConfigEvent,
|
|
14
14
|
)
|
|
15
|
-
from xp.models.telegram.action_type import ActionType
|
|
16
15
|
from xp.models.telegram.datapoint_type import DataPointType
|
|
17
16
|
from xp.models.telegram.system_function import SystemFunction
|
|
18
17
|
from xp.services.protocol.telegram_protocol import TelegramProtocol
|
|
@@ -87,11 +86,8 @@ class HomeKitConbusService:
|
|
|
87
86
|
"""
|
|
88
87
|
self.logger.debug(f"send_action_event {event}")
|
|
89
88
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
f"S{event.serial_number}F{SystemFunction.ACTION.value}D{input_action}"
|
|
96
|
-
)
|
|
97
|
-
self.telegram_protocol.sendFrame(telegram.encode())
|
|
89
|
+
telegram = event.on_action if event.value else event.off_action
|
|
90
|
+
telegram_make = f"{telegram}M"
|
|
91
|
+
telegram_break = f"{telegram}B"
|
|
92
|
+
self.telegram_protocol.sendFrame(telegram_make.encode())
|
|
93
|
+
self.telegram_protocol.sendFrame(telegram_break.encode())
|
|
@@ -77,6 +77,8 @@ class HomeKitLightbulbService:
|
|
|
77
77
|
serial_number=event.serial_number,
|
|
78
78
|
output_number=event.output_number,
|
|
79
79
|
value=event.value,
|
|
80
|
+
on_action=event.accessory.on_action,
|
|
81
|
+
off_action=event.accessory.off_action,
|
|
80
82
|
)
|
|
81
83
|
|
|
82
84
|
self.logger.debug(f"Dispatching SendActionEvent for {event.serial_number}")
|
|
@@ -85,6 +85,8 @@ class HomeKitOutletService:
|
|
|
85
85
|
serial_number=event.serial_number,
|
|
86
86
|
output_number=event.output_number,
|
|
87
87
|
value=event.value,
|
|
88
|
+
on_action=event.accessory.on_action,
|
|
89
|
+
off_action=event.accessory.off_action,
|
|
88
90
|
)
|
|
89
91
|
|
|
90
92
|
self.logger.debug(f"Dispatching SendActionEvent for {event.serial_number}")
|
{conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/services/telegram/telegram_datapoint_service.py
RENAMED
|
@@ -68,3 +68,15 @@ class TelegramDatapointService:
|
|
|
68
68
|
"""
|
|
69
69
|
link_number_value = int(data_value)
|
|
70
70
|
return link_number_value
|
|
71
|
+
|
|
72
|
+
def get_modulenumber(self, data_value: str) -> int:
|
|
73
|
+
"""Parse and return the module number value.
|
|
74
|
+
|
|
75
|
+
Args:
|
|
76
|
+
data_value: The raw module number data value as a string.
|
|
77
|
+
|
|
78
|
+
Returns:
|
|
79
|
+
The module number as an integer.
|
|
80
|
+
"""
|
|
81
|
+
module_number_value = int(data_value)
|
|
82
|
+
return module_number_value
|
|
@@ -64,6 +64,7 @@ from xp.services.reverse_proxy_service import ReverseProxyService
|
|
|
64
64
|
from xp.services.server.device_service_factory import DeviceServiceFactory
|
|
65
65
|
from xp.services.server.server_service import ServerService
|
|
66
66
|
from xp.services.telegram.telegram_blink_service import TelegramBlinkService
|
|
67
|
+
from xp.services.telegram.telegram_datapoint_service import TelegramDatapointService
|
|
67
68
|
from xp.services.telegram.telegram_discover_service import TelegramDiscoverService
|
|
68
69
|
from xp.services.telegram.telegram_link_number_service import LinkNumberService
|
|
69
70
|
from xp.services.telegram.telegram_output_service import TelegramOutputService
|
|
@@ -128,6 +129,7 @@ class ServiceContainer:
|
|
|
128
129
|
)
|
|
129
130
|
self.container.register(TelegramDiscoverService, scope=punq.Scope.singleton)
|
|
130
131
|
self.container.register(TelegramBlinkService, scope=punq.Scope.singleton)
|
|
132
|
+
self.container.register(TelegramDatapointService, scope=punq.Scope.singleton)
|
|
131
133
|
self.container.register(LinkNumberService, scope=punq.Scope.singleton)
|
|
132
134
|
|
|
133
135
|
# Conbus services layer
|
|
@@ -102,6 +102,8 @@ class TestHomekitConfigIntegration:
|
|
|
102
102
|
"output_number": 1,
|
|
103
103
|
"description": "Main Living Room Light",
|
|
104
104
|
"service": "lightbulb",
|
|
105
|
+
"on_action": "E00L01I01",
|
|
106
|
+
"off_action": "E00L01I05",
|
|
105
107
|
},
|
|
106
108
|
{
|
|
107
109
|
"name": "side_lamp",
|
|
@@ -110,6 +112,8 @@ class TestHomekitConfigIntegration:
|
|
|
110
112
|
"output_number": 2,
|
|
111
113
|
"description": "Side Lamp",
|
|
112
114
|
"service": "lightbulb",
|
|
115
|
+
"on_action": "E00L01I02",
|
|
116
|
+
"off_action": "E00L01I06",
|
|
113
117
|
},
|
|
114
118
|
{
|
|
115
119
|
"name": "kitchen_light",
|
|
@@ -118,6 +122,8 @@ class TestHomekitConfigIntegration:
|
|
|
118
122
|
"output_number": 1,
|
|
119
123
|
"description": "Kitchen Light",
|
|
120
124
|
"service": "lightbulb",
|
|
125
|
+
"on_action": "E00L02I01",
|
|
126
|
+
"off_action": "E00L02I05",
|
|
121
127
|
},
|
|
122
128
|
],
|
|
123
129
|
}
|
|
@@ -194,6 +200,8 @@ class TestHomekitConfigIntegration:
|
|
|
194
200
|
"output_number": 0, # Invalid output
|
|
195
201
|
"description": "Main Light",
|
|
196
202
|
"service": "invalid_service", # Invalid service
|
|
203
|
+
"on_action": "E00L01I01",
|
|
204
|
+
"off_action": "E00L01I05",
|
|
197
205
|
},
|
|
198
206
|
{
|
|
199
207
|
"name": "main_light", # Duplicate accessory name
|
|
@@ -202,6 +210,8 @@ class TestHomekitConfigIntegration:
|
|
|
202
210
|
"output_number": 50, # Output exceeds module capability
|
|
203
211
|
"description": "Duplicate Light",
|
|
204
212
|
"service": "lightbulb",
|
|
213
|
+
"on_action": "E00L01I02",
|
|
214
|
+
"off_action": "E00L01I06",
|
|
205
215
|
},
|
|
206
216
|
{
|
|
207
217
|
"name": "orphaned_light", # Not assigned to any room
|
|
@@ -210,6 +220,8 @@ class TestHomekitConfigIntegration:
|
|
|
210
220
|
"output_number": 3,
|
|
211
221
|
"description": "Orphaned Light",
|
|
212
222
|
"service": "lightbulb",
|
|
223
|
+
"on_action": "E00L01I03",
|
|
224
|
+
"off_action": "E00L01I07",
|
|
213
225
|
},
|
|
214
226
|
],
|
|
215
227
|
}
|
{conson_xp-1.11.0 → conson_xp-1.15.0}/tests/unit/test_services/test_homekit_config_validator.py
RENAMED
|
@@ -41,6 +41,8 @@ class TestHomekitConfigValidator:
|
|
|
41
41
|
output_number=1,
|
|
42
42
|
description="Light 1",
|
|
43
43
|
service="lightbulb",
|
|
44
|
+
on_action="E00L01I01",
|
|
45
|
+
off_action="E00L01I05",
|
|
44
46
|
),
|
|
45
47
|
HomekitAccessoryConfig(
|
|
46
48
|
name="light2",
|
|
@@ -49,6 +51,8 @@ class TestHomekitConfigValidator:
|
|
|
49
51
|
output_number=2,
|
|
50
52
|
description="Light 2",
|
|
51
53
|
service="lightbulb",
|
|
54
|
+
on_action="E00L01I02",
|
|
55
|
+
off_action="E00L01I06",
|
|
52
56
|
),
|
|
53
57
|
]
|
|
54
58
|
|
|
@@ -82,6 +86,8 @@ class TestHomekitConfigValidator:
|
|
|
82
86
|
output_number=1,
|
|
83
87
|
description="Light 1",
|
|
84
88
|
service="lightbulb",
|
|
89
|
+
on_action="E00L01I01",
|
|
90
|
+
off_action="E00L01I05",
|
|
85
91
|
),
|
|
86
92
|
HomekitAccessoryConfig(
|
|
87
93
|
name="light1",
|
|
@@ -90,6 +96,8 @@ class TestHomekitConfigValidator:
|
|
|
90
96
|
output_number=2,
|
|
91
97
|
description="Light 2",
|
|
92
98
|
service="lightbulb",
|
|
99
|
+
on_action="E00L01I02",
|
|
100
|
+
off_action="E00L01I06",
|
|
93
101
|
),
|
|
94
102
|
]
|
|
95
103
|
config = self.create_test_homekit_config(accessories=accessories)
|
|
@@ -113,6 +121,8 @@ class TestHomekitConfigValidator:
|
|
|
113
121
|
output_number=1,
|
|
114
122
|
description="Light 1",
|
|
115
123
|
service="invalid_service",
|
|
124
|
+
on_action="E00L01I01",
|
|
125
|
+
off_action="E00L01I05",
|
|
116
126
|
)
|
|
117
127
|
]
|
|
118
128
|
config = self.create_test_homekit_config(accessories=accessories)
|
|
@@ -136,6 +146,8 @@ class TestHomekitConfigValidator:
|
|
|
136
146
|
output_number=0,
|
|
137
147
|
description="Light 1",
|
|
138
148
|
service="lightbulb",
|
|
149
|
+
on_action="E00L01I01",
|
|
150
|
+
off_action="E00L01I05",
|
|
139
151
|
),
|
|
140
152
|
HomekitAccessoryConfig(
|
|
141
153
|
name="light2",
|
|
@@ -144,6 +156,8 @@ class TestHomekitConfigValidator:
|
|
|
144
156
|
output_number=-1,
|
|
145
157
|
description="Light 2",
|
|
146
158
|
service="lightbulb",
|
|
159
|
+
on_action="E00L01I02",
|
|
160
|
+
off_action="E00L01I06",
|
|
147
161
|
),
|
|
148
162
|
]
|
|
149
163
|
config = self.create_test_homekit_config(accessories=accessories)
|
|
@@ -207,6 +221,8 @@ class TestHomekitConfigValidator:
|
|
|
207
221
|
output_number=1,
|
|
208
222
|
description="Light 1",
|
|
209
223
|
service="lightbulb",
|
|
224
|
+
on_action="E00L01I01",
|
|
225
|
+
off_action="E00L01I05",
|
|
210
226
|
),
|
|
211
227
|
HomekitAccessoryConfig(
|
|
212
228
|
name="orphaned_light",
|
|
@@ -215,6 +231,8 @@ class TestHomekitConfigValidator:
|
|
|
215
231
|
output_number=2,
|
|
216
232
|
description="Orphaned",
|
|
217
233
|
service="lightbulb",
|
|
234
|
+
on_action="E00L01I02",
|
|
235
|
+
off_action="E00L01I06",
|
|
218
236
|
),
|
|
219
237
|
]
|
|
220
238
|
rooms = [RoomConfig(name="Living Room", accessories=["light1"])]
|
|
@@ -233,6 +251,8 @@ class TestHomekitConfigValidator:
|
|
|
233
251
|
output_number=1,
|
|
234
252
|
description="Light 1",
|
|
235
253
|
service="lightbulb",
|
|
254
|
+
on_action="E00L01I01",
|
|
255
|
+
off_action="E00L01I05",
|
|
236
256
|
),
|
|
237
257
|
HomekitAccessoryConfig(
|
|
238
258
|
name="light2",
|
|
@@ -241,6 +261,8 @@ class TestHomekitConfigValidator:
|
|
|
241
261
|
output_number=2,
|
|
242
262
|
description="Light 2",
|
|
243
263
|
service="lightbulb",
|
|
264
|
+
on_action="E00L01I02",
|
|
265
|
+
off_action="E00L01I06",
|
|
244
266
|
),
|
|
245
267
|
]
|
|
246
268
|
rooms = [
|
|
@@ -263,6 +285,8 @@ class TestHomekitConfigValidator:
|
|
|
263
285
|
output_number=1,
|
|
264
286
|
description="Light 1",
|
|
265
287
|
service="lightbulb",
|
|
288
|
+
on_action="E00L01I01",
|
|
289
|
+
off_action="E00L01I05",
|
|
266
290
|
)
|
|
267
291
|
]
|
|
268
292
|
rooms = [
|
|
@@ -316,6 +340,8 @@ class TestCrossReferenceValidator:
|
|
|
316
340
|
output_number=1,
|
|
317
341
|
description="Light 1",
|
|
318
342
|
service="lightbulb",
|
|
343
|
+
on_action="E00L01I01",
|
|
344
|
+
off_action="E00L01I05",
|
|
319
345
|
),
|
|
320
346
|
HomekitAccessoryConfig(
|
|
321
347
|
name="light2",
|
|
@@ -324,6 +350,8 @@ class TestCrossReferenceValidator:
|
|
|
324
350
|
output_number=1,
|
|
325
351
|
description="Light 2",
|
|
326
352
|
service="lightbulb",
|
|
353
|
+
on_action="E00L02I01",
|
|
354
|
+
off_action="E00L02I05",
|
|
327
355
|
),
|
|
328
356
|
]
|
|
329
357
|
rooms = [RoomConfig(name="Living Room", accessories=["light1", "light2"])]
|
|
@@ -361,6 +389,8 @@ class TestCrossReferenceValidator:
|
|
|
361
389
|
output_number=1,
|
|
362
390
|
description="Invalid",
|
|
363
391
|
service="lightbulb",
|
|
392
|
+
on_action="E00L03I01",
|
|
393
|
+
off_action="E00L03I05",
|
|
364
394
|
)
|
|
365
395
|
homekit_validator.config.accessories.append(invalid_accessory)
|
|
366
396
|
|
|
@@ -394,6 +424,8 @@ class TestCrossReferenceValidator:
|
|
|
394
424
|
output_number=20,
|
|
395
425
|
description="High Output",
|
|
396
426
|
service="lightbulb",
|
|
427
|
+
on_action="E00L02I09",
|
|
428
|
+
off_action="E00L02I13",
|
|
397
429
|
)
|
|
398
430
|
homekit_validator.config.accessories.append(high_output_accessory)
|
|
399
431
|
|
|
@@ -425,6 +457,8 @@ class TestCrossReferenceValidator:
|
|
|
425
457
|
output_number=1,
|
|
426
458
|
description="Invalid Serial",
|
|
427
459
|
service="lightbulb",
|
|
460
|
+
on_action="E00L03I01",
|
|
461
|
+
off_action="E00L03I05",
|
|
428
462
|
),
|
|
429
463
|
HomekitAccessoryConfig(
|
|
430
464
|
name="invalid_output",
|
|
@@ -433,6 +467,8 @@ class TestCrossReferenceValidator:
|
|
|
433
467
|
output_number=20,
|
|
434
468
|
description="Invalid Output",
|
|
435
469
|
service="lightbulb",
|
|
470
|
+
on_action="E00L02I09",
|
|
471
|
+
off_action="E00L02I13",
|
|
436
472
|
),
|
|
437
473
|
]
|
|
438
474
|
homekit_validator.config.accessories.extend(invalid_accessories)
|
|
@@ -68,6 +68,8 @@ def mock_accessory():
|
|
|
68
68
|
output_number=2,
|
|
69
69
|
description="Test Description",
|
|
70
70
|
service="lightbulb",
|
|
71
|
+
on_action="E00L01I01",
|
|
72
|
+
off_action="E00L01I05",
|
|
71
73
|
)
|
|
72
74
|
|
|
73
75
|
|
|
@@ -357,23 +359,33 @@ class TestHomeKitConbusService:
|
|
|
357
359
|
|
|
358
360
|
def test_handle_send_action_event_on(self, mock_module, mock_accessory):
|
|
359
361
|
"""Test handle_send_action_event for turning on."""
|
|
360
|
-
event = SendActionEvent(
|
|
362
|
+
event = SendActionEvent(
|
|
363
|
+
serial_number="1234567890",
|
|
364
|
+
output_number=2,
|
|
365
|
+
value=True,
|
|
366
|
+
on_action="E00L04I02",
|
|
367
|
+
off_action="E00L04I06",
|
|
368
|
+
)
|
|
361
369
|
|
|
362
370
|
self.service.handle_send_action_event(event)
|
|
363
371
|
|
|
364
372
|
sent_data = self.telegram_protocol.sendFrame.call_args[0][0]
|
|
365
|
-
assert sent_data == b"
|
|
373
|
+
assert sent_data == b"E00L04I02B" # ON action code
|
|
366
374
|
|
|
367
375
|
def test_handle_send_action_event_off(self, mock_module, mock_accessory):
|
|
368
376
|
"""Test handle_send_action_event for turning off."""
|
|
369
377
|
event = SendActionEvent(
|
|
370
|
-
serial_number="1234567890",
|
|
378
|
+
serial_number="1234567890",
|
|
379
|
+
output_number=5,
|
|
380
|
+
value=False,
|
|
381
|
+
on_action="E00L05I05",
|
|
382
|
+
off_action="E00L05I09",
|
|
371
383
|
)
|
|
372
384
|
|
|
373
385
|
self.service.handle_send_action_event(event)
|
|
374
386
|
|
|
375
387
|
sent_data = self.telegram_protocol.sendFrame.call_args[0][0]
|
|
376
|
-
assert sent_data == b"
|
|
388
|
+
assert sent_data == b"E00L05I09B" # OFF action code
|
|
377
389
|
|
|
378
390
|
|
|
379
391
|
class TestHomeKitService:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/cli/commands/conbus/conbus_actiontable_commands.py
RENAMED
|
File without changes
|
{conson_xp-1.11.0 → conson_xp-1.15.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.11.0 → conson_xp-1.15.0}/src/xp/cli/commands/conbus/conbus_datapoint_commands.py
RENAMED
|
File without changes
|
{conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/cli/commands/conbus/conbus_discover_commands.py
RENAMED
|
File without changes
|
{conson_xp-1.11.0 → conson_xp-1.15.0}/src/xp/cli/commands/conbus/conbus_lightlevel_commands.py
RENAMED
|
File without changes
|
{conson_xp-1.11.0 → conson_xp-1.15.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
|